summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler/core
diff options
context:
space:
mode:
authortake-cheeze <[email protected]>2018-10-29 19:40:33 +0900
committertake-cheeze <[email protected]>2018-10-29 19:40:33 +0900
commit6a6586ca84c6a9a691c9968320eed5e60e824b3c (patch)
tree83bf397cdeb46f971ef69185b07444f001bae075 /mrbgems/mruby-compiler/core
parent486c9d902dfc525f5843dbd3d166e5ccf58e1c81 (diff)
downloadmruby-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.c10
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());
}