BadScript 2
Loading...
Searching...
No Matches
BadPostIncrementExpression.cs
Go to the documentation of this file.
6
8
13{
17 public readonly BadExpression Left;
18
25 left.IsConstant,
26 position
27 )
28 {
29 Left = left;
30 }
31
33 public override IEnumerable<BadExpression> GetDescendants()
34 {
36 }
37
45 public static BadObject Increment(BadObjectReference reference, BadSourcePosition position)
46 {
47 BadObject value = reference.Dereference();
48
49 if (value is not IBadNumber leftNumber)
50 {
51 throw new BadRuntimeException("Left side of ++ must be a number", position);
52 }
53
54 reference.Set(leftNumber.Value + 1);
55
56 return value;
57 }
58
60 protected override IEnumerable<BadObject> InnerExecute(BadExecutionContext context)
61 {
63
64 foreach (BadObject o in Left.Execute(context))
65 {
66 left = o;
67
68 yield return o;
69 }
70
71 if (left is not BadObjectReference leftRef)
72 {
73 throw new BadRuntimeException("Left side of ++ must be a reference", Position);
74 }
75
76 foreach (BadObject o in IncrementWithOverride(context, leftRef, Position))
77 {
78 yield return o;
79 }
80 }
81
90 public static IEnumerable<BadObject> IncrementWithOverride(
91 BadExecutionContext? context,
92 BadObjectReference leftRef,
93 BadSourcePosition position)
94 {
95 BadObject left = leftRef.Dereference();
96
98 {
100 left,
101 context!,
103 position
104 ))
105 {
106 yield return o;
107 }
108 }
109 else
110 {
111 yield return Increment(leftRef, position);
112 }
113 }
114}
Describes a specific position inside a source file.
Contains Static Data for the BadScript Language.
Base Implementation for all Expressions used inside the Script.
static IEnumerable< BadObject > ExecuteOperatorOverride(BadObject left, BadObject right, BadExecutionContext context, string name, BadSourcePosition position)
Helper function that executes an operator override function if implemented.
IEnumerable< BadExpression > GetDescendantsAndSelf()
Returns all Descendants of the Expression and the Expression itself.
BadSourcePosition Position
The source Position of the Expression.
IEnumerable< BadObject > Execute(BadExecutionContext context)
Evaluates the Expression within the current Execution Context.
bool IsConstant
Indicates if the expression stays constant at all times.
Implements the Post Increment Expression.
override IEnumerable< BadObject > InnerExecute(BadExecutionContext context)
static IEnumerable< BadObject > IncrementWithOverride(BadExecutionContext? context, BadObjectReference leftRef, BadSourcePosition position)
Executes the Operator.
override IEnumerable< BadExpression > GetDescendants()
static BadObject Increment(BadObjectReference reference, BadSourcePosition position)
Executes the Operator.
readonly BadExpression Left
Left side of the expression.
BadPostIncrementExpression(BadExpression left, BadSourcePosition position)
Constructor of the Post Increment Expression.
The Execution Context. Every execution of a script needs a context the script is running in....
BadScope Scope
The Root Scope of the Context.
The Base Class for all BadScript Objects.
Definition BadObject.cs:14
virtual bool HasProperty(string propName, BadScope? caller=null)
Returns true if the object contains a given property or there exists an extension for the current Ins...
Definition BadObject.cs:118
static readonly BadObject Null
The Null Value for the BadScript Language.
Definition BadObject.cs:28
Implements the base functionality for a BadScript Reference.
void Set(BadObject obj, BadPropertyInfo? info=null, bool noChangeEvent=false)
Sets the Referenced Object to a new Value.
Implements the Interface for Native Numbers.
Definition IBadNumber.cs:7
Contains Shared Data Structures and Functionality.
Contains the Atomic Math Expressions for the BadScript2 Language.
Contains the Error Objects for the BadScript2 Language.
Contains the Native Runtime Objects.
Definition BadBoolean.cs:6
Contains the Runtime Objects.
Definition BadArray.cs:10
Contains the Runtime Implementation.