BadScript 2
Loading...
Searching...
No Matches
BadPostDecrementExpression.cs
Go to the documentation of this file.
6
11
16{
20 public readonly BadExpression Left;
21
28 left.IsConstant,
29 position
30 )
31 {
32 Left = left;
33 }
34
35
37 public override IEnumerable<BadExpression> GetDescendants()
38 {
40 }
41
42
50 public static BadObject Decrement(BadObjectReference reference, BadSourcePosition position)
51 {
52 BadObject value = reference.Dereference();
53
54 if (value is not IBadNumber leftNumber)
55 {
56 throw new BadRuntimeException("Left side of -- must be a number", position);
57 }
58
59 reference.Set(leftNumber.Value - 1);
60
61 return value;
62 }
63
72 public static IEnumerable<BadObject> DecrementWithOverride(
73 BadExecutionContext? context,
74 BadObjectReference leftRef,
75 BadSourcePosition position)
76 {
77 BadObject left = leftRef.Dereference();
78
80 {
82 left,
83 context!,
85 position
86 ))
87 {
88 yield return o;
89 }
90 }
91 else
92 {
93 yield return Decrement(leftRef, position);
94 }
95 }
96
98 protected override IEnumerable<BadObject> InnerExecute(BadExecutionContext context)
99 {
100 BadObject left = BadObject.Null;
101
102 foreach (BadObject o in Left.Execute(context))
103 {
104 left = o;
105
106 yield return o;
107 }
108
109 if (left is not BadObjectReference leftRef)
110 {
111 throw new BadRuntimeException("Left side of -- must be a reference", Position);
112 }
113
114
115 foreach (BadObject o in DecrementWithOverride(context, leftRef, Position))
116 {
117 yield return o;
118 }
119 }
120}
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 Decrement Expression.
override IEnumerable< BadExpression > GetDescendants()
static BadObject Decrement(BadObjectReference reference, BadSourcePosition position)
Executes the Operator.
BadPostDecrementExpression(BadExpression left, BadSourcePosition position)
Constructor of the Post Decrement Expression.
override IEnumerable< BadObject > InnerExecute(BadExecutionContext context)
static IEnumerable< BadObject > DecrementWithOverride(BadExecutionContext? context, BadObjectReference leftRef, BadSourcePosition position)
Executes the Operator.
readonly BadExpression Left
Left side of the 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.