BadScript 2
Loading...
Searching...
No Matches
BadForExpressionCompiler.cs
Go to the documentation of this file.
1
using
BadScript2.Parser.Expressions.Block.Loop
;
2
using
BadScript2.Runtime.Objects
;
3
4
namespace
BadScript2.Runtime.VirtualMachine.Compiler.ExpressionCompilers.Block
;
5
9
public
class
BadForExpressionCompiler
:
BadExpressionCompiler
<BadForExpression>
10
{
12
public
override
void
Compile
(
BadExpressionCompileContext
context,
BadForExpression
expression)
13
{
14
context.
Emit
(
BadOpCode
.CreateScope, expression.
Position
,
"ForLoop"
,
BadObject
.
Null
);
15
context.
Compile
(expression.
VarDef
);
16
int
conditionJump = context.
InstructionCount
;
17
context.
Compile
(expression.
Condition
);
18
int
endJump = context.
EmitEmpty
();
19
int
loopScopeStart = context.
InstructionCount
;
20
context.
Emit
(
21
BadOpCode
.CreateScope,
22
expression.
Position
,
23
"ForLoopBody"
,
24
BadObject
.
Null
,
25
BadScopeFlags
.Breakable |
BadScopeFlags
.Continuable
26
);
27
int
setBreakInstruction = context.
EmitEmpty
();
28
int
setContinueInstruction = context.
EmitEmpty
();
29
context.
Compile
(expression.
Body
);
30
context.
Emit
(
BadOpCode
.DestroyScope, expression.
Position
);
31
int
continueJump = context.
InstructionCount
;
32
context.
Compile
(expression.
VarIncrement
);
33
context.
Emit
(
BadOpCode
.JumpRelative, expression.
Position
, conditionJump - context.
InstructionCount
- 1);
34
int
endJumpPos = context.InstructionCount - endJump - 1;
35
context.
ResolveEmpty
(endJump,
BadOpCode
.JumpRelativeIfFalse, expression.
Position
, endJumpPos);
36
context.
Emit
(
BadOpCode
.DestroyScope, expression.
Position
);
37
context.
ResolveEmpty
(setBreakInstruction,
BadOpCode
.SetBreakPointer, expression.
Position
, context.
InstructionCount
- loopScopeStart);
38
context.
ResolveEmpty
(setContinueInstruction,
BadOpCode
.SetContinuePointer, expression.
Position
, continueJump - loopScopeStart - 1);
39
}
40
}
BadScript2.Parser.Expressions.BadExpression.Position
BadSourcePosition Position
The source Position of the Expression.
Definition
BadExpression.cs:165
BadScript2.Parser.Expressions.Block.Loop.BadForExpression
Implements the For Loop Expression.
Definition
BadForExpression.cs:14
BadScript2.Parser.Expressions.Block.Loop.BadForExpression.Body
IEnumerable< BadExpression > Body
Loop Body.
Definition
BadForExpression.cs:44
BadScript2.Parser.Expressions.Block.Loop.BadForExpression.VarDef
BadExpression VarDef
The Variable Definition part of the for loop.
Definition
BadForExpression.cs:54
BadScript2.Parser.Expressions.Block.Loop.BadForExpression.Condition
BadExpression Condition
The Exit Condition of the For Loop.
Definition
BadForExpression.cs:49
BadScript2.Parser.Expressions.Block.Loop.BadForExpression.VarIncrement
BadExpression VarIncrement
The Variable Modifier Expression of the For Loop.
Definition
BadForExpression.cs:59
BadScript2.Runtime.Objects.BadObject
The Base Class for all BadScript Objects.
Definition
BadObject.cs:14
BadScript2.Runtime.Objects.BadObject.Null
static readonly BadObject Null
The Null Value for the BadScript Language.
Definition
BadObject.cs:28
BadScript2.Runtime.VirtualMachine.Compiler.ExpressionCompilers.BadExpressionCompiler
Compiles a BadScript Expression of type T.
Definition
BadExpressionCompiler.cs:11
BadScript2.Runtime.VirtualMachine.Compiler.ExpressionCompilers.Block.BadForExpressionCompiler
Compiles the BadForExpression.
Definition
BadForExpressionCompiler.cs:10
BadScript2.Runtime.VirtualMachine.Compiler.ExpressionCompilers.Block.BadForExpressionCompiler.Compile
override void Compile(BadExpressionCompileContext context, BadForExpression expression)
Definition
BadForExpressionCompiler.cs:12
BadScript2.Parser.Expressions.Block.Loop
Contains the Loop Expressions for the BadScript2 Language.
Definition
BadForEachExpression.cs:13
BadScript2.Runtime.Objects
Contains the Runtime Objects.
Definition
BadArray.cs:10
BadScript2.Runtime.VirtualMachine.Compiler.ExpressionCompilers.Block
Contains Block Expression Compilers.
Definition
BadForEachExpressionCompiler.cs:12
BadScript2.Runtime.VirtualMachine.BadOpCode
BadOpCode
Defines the Operations that the BadVirtualMachine can execute.
Definition
BadOpCode.cs:7
BadScript2.Runtime.BadScopeFlags
BadScopeFlags
Defines Different Behaviours for the Current Scope.
Definition
BadScopeFlags.cs:8
BadScript2.Runtime.VirtualMachine.Compiler.ExpressionCompilers.BadExpressionCompileContext
Definition
IBadExpressionCompiler.cs:7
BadScript2.Runtime.VirtualMachine.Compiler.ExpressionCompilers.BadExpressionCompileContext.ResolveEmpty
void ResolveEmpty(int index, BadOpCode code, BadSourcePosition position, params object[] args)
Definition
IBadExpressionCompiler.cs:43
BadScript2.Runtime.VirtualMachine.Compiler.ExpressionCompilers.BadExpressionCompileContext.Emit
void Emit(BadInstruction instruction)
Definition
IBadExpressionCompiler.cs:31
BadScript2.Runtime.VirtualMachine.Compiler.ExpressionCompilers.BadExpressionCompileContext.EmitEmpty
int EmitEmpty()
Definition
IBadExpressionCompiler.cs:35
BadScript2.Runtime.VirtualMachine.Compiler.ExpressionCompilers.BadExpressionCompileContext.Compile
void Compile(BadExpression expr)
BadScript2.Runtime.VirtualMachine.Compiler.ExpressionCompilers.BadExpressionCompileContext.InstructionCount
int InstructionCount
Definition
IBadExpressionCompiler.cs:12
src
BadScript2
Runtime
VirtualMachine
Compiler
ExpressionCompilers
Block
BadForExpressionCompiler.cs
Generated by
1.9.8