diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-06-05 21:00:36 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-06-09 22:42:38 +0900 |
| commit | 7f593893e8b868026a61adfe64f602b6a5644511 (patch) | |
| tree | 83f21a1dc378f0f37828bc98fe76d1a66bdf2b10 | |
| parent | 5d5b1d1f3c9a72c2154a9416cd95500a1c17dd79 (diff) | |
| download | mruby-7f593893e8b868026a61adfe64f602b6a5644511.tar.gz mruby-7f593893e8b868026a61adfe64f602b6a5644511.zip | |
Update `OP_HASH` generation to support big hash creation.
| -rw-r--r-- | include/mruby/ops.h | 4 | ||||
| -rw-r--r-- | mrbgems/mruby-compiler/core/codegen.c | 2 |
2 files changed, 3 insertions, 3 deletions
diff --git a/include/mruby/ops.h b/include/mruby/ops.h index c8990ae43..e85ee3133 100644 --- a/include/mruby/ops.h +++ b/include/mruby/ops.h @@ -92,8 +92,8 @@ OPCODE(APOST, BBB) /* *R(a),R(a+1)..R(a+c) = R(a)[b..] */ OPCODE(INTERN, B) /* R(a) = intern(R(a)) */ OPCODE(STRING, BB) /* R(a) = str_dup(Lit(b)) */ OPCODE(STRCAT, B) /* str_cat(R(a),R(a+1)) */ -OPCODE(HASH, BB) /* R(a) = hash_new(R(a),R(a+1)..R(a+b)) */ -OPCODE(HASHADD, BB) /* R(a) = hash_push(R(a),R(a+1)..R(a+b)) */ +OPCODE(HASH, BB) /* R(a) = hash_new(R(a),R(a+1)..R(a+b*2-1)) */ +OPCODE(HASHADD, BB) /* R(a) = hash_push(R(a),R(a+1)..R(a+b*2)) */ OPCODE(HASHCAT, B) /* R(a) = hash_cat(R(a),R(a+1)) */ OPCODE(LAMBDA, BB) /* R(a) = lambda(SEQ[b],L_LAMBDA) */ OPCODE(BLOCK, BB) /* R(a) = lambda(SEQ[b],L_BLOCK) */ diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index da598adaf..c64ffc473 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -1889,7 +1889,7 @@ codegen(codegen_scope *s, node *tree, int val) len++; } tree = tree->cdr; - if (val && len == 255) { + if (val && cursp() > 127) { pop_n(len*2); if (!update) { genop_2(s, OP_HASH, cursp(), len); |
