summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler/core/codegen.c
diff options
context:
space:
mode:
authorUkrainskiy Sergey <[email protected]>2019-08-31 19:42:02 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2019-12-09 20:50:41 +0900
commit72d57ad094b8e1c529e2e8b41d895fc6f212e31e (patch)
tree489cb928ecdcf49632c8a66505c491cbac351e00 /mrbgems/mruby-compiler/core/codegen.c
parent8267993988971a7797cdc8a5c6d161f3355f1af2 (diff)
downloadmruby-72d57ad094b8e1c529e2e8b41d895fc6f212e31e.tar.gz
mruby-72d57ad094b8e1c529e2e8b41d895fc6f212e31e.zip
Implement numbered parameters
Diffstat (limited to 'mrbgems/mruby-compiler/core/codegen.c')
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index 8379dfd97..89343f16d 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -1122,6 +1122,10 @@ gen_assignment(codegen_scope *s, node *tree, int sp, int val)
}
}
break;
+ case NODE_NVAR:
+ idx = nint(tree);
+ codegen_error(s, "Can't assign to numbered parameter");
+ break;
case NODE_IVAR:
idx = new_sym(s, nsym(tree));
genop_2(s, OP_SETIV, sp, idx);
@@ -2340,6 +2344,17 @@ codegen(codegen_scope *s, node *tree, int val)
}
break;
+ case NODE_NVAR:
+ if (val) {
+ int idx = nint(tree);
+
+ gen_move(s, cursp(), idx, val);
+ if (val && on_eval(s)) genop_0(s, OP_NOP);
+
+ push();
+ }
+ break;
+
case NODE_GVAR:
{
int sym = new_sym(s, nsym(tree));