diff options
| author | take-cheeze <[email protected]> | 2018-10-29 19:40:33 +0900 |
|---|---|---|
| committer | take-cheeze <[email protected]> | 2018-10-29 19:40:33 +0900 |
| commit | 6a6586ca84c6a9a691c9968320eed5e60e824b3c (patch) | |
| tree | 83bf397cdeb46f971ef69185b07444f001bae075 /mrbgems/mruby-compiler/core | |
| parent | 486c9d902dfc525f5843dbd3d166e5ccf58e1c81 (diff) | |
| download | mruby-6a6586ca84c6a9a691c9968320eed5e60e824b3c.tar.gz mruby-6a6586ca84c6a9a691c9968320eed5e60e824b3c.zip | |
Reduce unnecessary symbol table entry
Diffstat (limited to 'mrbgems/mruby-compiler/core')
| -rw-r--r-- | mrbgems/mruby-compiler/core/codegen.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c index 759e7267e..22ac51239 100644 --- a/mrbgems/mruby-compiler/core/codegen.c +++ b/mrbgems/mruby-compiler/core/codegen.c @@ -18,6 +18,7 @@ #include <mruby/opcode.h> #include <mruby/re.h> #include <mruby/throw.h> +#include <mruby/symbol.h> #ifndef MRB_CODEGEN_LEVEL_MAX #define MRB_CODEGEN_LEVEL_MAX 1024 @@ -982,8 +983,9 @@ gen_call(codegen_scope *s, node *tree, mrb_sym name, int sp, int val, int safe) gen_move(s, cursp(), recv, 1); skip = genjmp2(s, OP_JMPNIL, cursp(), 0, val); } - // TODO: don't new when unused - idx = new_sym(s, sym); + if (!mrb_symbol_constsym_send_p(sym)) { + idx = new_sym(s, sym); + } tree = tree->cdr->cdr->car; if (tree) { n = gen_values(s, tree->car, VAL, sp?1:0); @@ -2024,7 +2026,9 @@ codegen(codegen_scope *s, node *tree, int val) push(); pop(); pop(); pop(); - idx = new_sym(s, sym); + if (!mrb_symbol_constsym_send_p(sym)) { + idx = new_sym(s, sym); + } if (len == 1 && name[0] == '+') { gen_addsub(s, OP_ADD, cursp()); } |
