diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-08-29 13:29:54 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-08-29 13:29:54 +0900 |
| commit | 441ff45a51813ac10f528a5f701769632259835f (patch) | |
| tree | 3bc61e596492c9d7eb869337cbfa6beca23b02c1 /mrbgems/mruby-compiler/core/codegen.c | |
| parent | 98c759e86a73c2e2220c7b9d36a9d78177891273 (diff) | |
| parent | fbe876b87169c9d5c55e79cc932790297f98a1be (diff) | |
| download | mruby-441ff45a51813ac10f528a5f701769632259835f.tar.gz mruby-441ff45a51813ac10f528a5f701769632259835f.zip | |
Merge branch 'node_negate_fix' of https://github.com/ukrainskiysergey/mruby into ukrainskiysergey-node_negate_fix
Diffstat (limited to 'mrbgems/mruby-compiler/core/codegen.c')
| -rw-r--r-- | mrbgems/mruby-compiler/core/codegen.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 13f5aa053..0d47b236d 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -2406,12 +2406,11 @@ codegen(codegen_scope *s, node *tree, int val) case NODE_NEGATE: { nt = nint(tree->car); - tree = tree->cdr; switch (nt) { #ifndef MRB_WITHOUT_FLOAT case NODE_FLOAT: if (val) { - char *p = (char*)tree; + char *p = (char*)tree->cdr; mrb_float f = mrb_float_read(p, NULL); int off = new_lit(s, mrb_float_value(s->mrb, -f)); @@ -2423,8 +2422,8 @@ codegen(codegen_scope *s, node *tree, int val) case NODE_INT: if (val) { - char *p = (char*)tree->car; - int base = nint(tree->cdr->car); + char *p = (char*)tree->cdr->car; + int base = nint(tree->cdr->cdr->car); mrb_int i; mrb_bool overflow; @@ -2455,13 +2454,11 @@ codegen(codegen_scope *s, node *tree, int val) default: if (val) { - int sym = new_sym(s, mrb_intern_lit(s->mrb, "-")); - - genop_1(s, OP_LOADI_0, cursp()); - push(); + int sym = new_sym(s, mrb_intern_lit(s->mrb, "-@")); codegen(s, tree, VAL); - pop(); pop(); - genop_2(s, OP_SUB, cursp(), sym); + pop(); + genop_3(s, OP_SEND, cursp(), sym, 0); + push(); } else { codegen(s, tree, NOVAL); |
