BadScript 2
Loading...
Searching...
No Matches
BadDivideExpression.cs
Go to the documentation of this file.
6
8
13{
20 public BadDivideExpression(BadExpression left, BadExpression right, BadSourcePosition position) : base(left,
21 right,
22 position
23 ) { }
24
26 protected override string GetSymbol()
27 {
28 return "/";
29 }
30
39 public static BadObject Div(BadObject left, BadObject right, BadSourcePosition pos)
40 {
41 if (left is not IBadNumber lNum)
42 {
43 throw new BadRuntimeException($"Can not apply operator '/' to {left} and {right}", pos);
44 }
45
46 if (right is IBadNumber rNum)
47 {
48 return BadObject.Wrap(lNum.Value / rNum.Value);
49 }
50
51 throw new BadRuntimeException($"Can not apply operator '/' to {left} and {right}", pos);
52 }
53
63 public static IEnumerable<BadObject> DivWithOverride(BadExecutionContext? context,
64 BadObject left,
65 BadObject right,
66 BadSourcePosition position)
67 {
69 {
70 foreach (BadObject o in ExecuteOperatorOverride(left,
71 right,
72 context!,
74 position
75 ))
76 {
77 yield return o;
78 }
79 }
80 else
81 {
82 yield return Div(left, right, position);
83 }
84 }
85
87 protected override IEnumerable<BadObject> InnerExecute(BadExecutionContext context)
88 {
90
91 foreach (BadObject o in Left.Execute(context))
92 {
93 left = o;
94
95 yield return o;
96 }
97
98 left = left.Dereference(Position);
99 BadObject right = BadObject.Null;
100
101 foreach (BadObject o in Right.Execute(context))
102 {
103 right = o;
104
105 yield return o;
106 }
107
108 right = right.Dereference(Position);
109
110 foreach (BadObject? o in DivWithOverride(context, left, right, Position))
111 {
112 yield return o;
113 }
114 }
115}
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.
BadSourcePosition Position
The source Position of the Expression.
IEnumerable< BadObject > Execute(BadExecutionContext context)
Evaluates the Expression within the current Execution Context.
Base Implementation of all Binary Expressions.
BadExpression Right
Right side of the Expression.
static IEnumerable< BadObject > DivWithOverride(BadExecutionContext? context, BadObject left, BadObject right, BadSourcePosition position)
Executes the Operator with operator overrides.
static BadObject Div(BadObject left, BadObject right, BadSourcePosition pos)
Divides left by right.
override IEnumerable< BadObject > InnerExecute(BadExecutionContext context)
BadDivideExpression(BadExpression left, BadExpression right, BadSourcePosition position)
Constructor of the Divide 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:130
static readonly BadObject Null
The Null Value for the BadScript Language.
Definition BadObject.cs:28
Implements the Interface for Native Numbers.
Definition IBadNumber.cs:7
Contains Shared Data Structures and Functionality.
Contains the 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.