diff options
Diffstat (limited to 'pkg/lang/compiler/compiler.go')
| -rw-r--r-- | pkg/lang/compiler/compiler.go | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/pkg/lang/compiler/compiler.go b/pkg/lang/compiler/compiler.go index 3a5efd9..c51728f 100644 --- a/pkg/lang/compiler/compiler.go +++ b/pkg/lang/compiler/compiler.go @@ -204,6 +204,11 @@ func (comp *Compiler) compileForInStmt(t *code.Builder, forInStmt ast.StmtForIn) // get_local 1 // index // set_local 2 + + // get_local 1 + // push_int 1 + // add + // set_local 1 // 3. Do block // ... // 4. Repeat jump: @@ -259,6 +264,17 @@ func (comp *Compiler) compileForInStmt(t *code.Builder, forInStmt ast.StmtForIn) doPreparationTarget.AppendOp(code.OpSetLocal) doPreparationTarget.AppendInt(int64(nameLocal)) + doPreparationTarget.AppendOp(code.OpGetLocal) + doPreparationTarget.AppendInt(int64(iLocal)) + + doPreparationTarget.AppendOp(code.OpPushInt) + doPreparationTarget.AppendInt(1) + + doPreparationTarget.AppendOp(code.OpAdd) + + doPreparationTarget.AppendOp(code.OpSetLocal) + doPreparationTarget.AppendInt(int64(iLocal)) + // Do block doTarget := code.NewBuilder() if err := comp.compileBlockNode(&doTarget, forInStmt.Do); err != nil { |
