summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler/core/codegen.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2019-02-07 22:44:36 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2019-02-07 22:44:36 +0900
commitbdc9de875f5545d4dbf8136dbfb576a0caacf7e3 (patch)
tree89226f61f7009d4f3e07fe1160e1220318fbe37d /mrbgems/mruby-compiler/core/codegen.c
parent156641515cade4018c2551d5da70054d10dabf39 (diff)
downloadmruby-bdc9de875f5545d4dbf8136dbfb576a0caacf7e3.tar.gz
mruby-bdc9de875f5545d4dbf8136dbfb576a0caacf7e3.zip
Add `OP_ENTER` to blocks without parameters; fix #4175
So that `lambda{}.call(1)` raises `ArgumentError` as CRuby does. Also, fixed junk assignment for `lambda{|;a|p a}.call{}`.
Diffstat (limited to 'mrbgems/mruby-compiler/core/codegen.c')
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index cc46f835f..48bf06461 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -734,7 +734,10 @@ lambda_body(codegen_scope *s, node *tree, int blk)
lp->pc0 = new_label(s);
}
tree = tree->cdr;
- if (tree->car) {
+ if (tree->car == NULL) {
+ genop_W(s, OP_ENTER, 0);
+ }
+ else {
mrb_aspec a;
int ma, oa, ra, pa, ka, kd, ba;
int pos, i;