about summary refs log tree commit diff
path: root/pkg/lang/compiler/compiler.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/lang/compiler/compiler.go')
-rw-r--r--pkg/lang/compiler/compiler.go16
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 {