summaryrefslogtreecommitdiffhomepage
path: root/src/codegen.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-09-04 08:31:33 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-09-04 08:31:33 +0900
commit27ac09be9dfb20c35c91e5bda112797bdb3d2cfa (patch)
treecc2dca1de150a542ae62e4194dd45d80e18c1786 /src/codegen.c
parent1fdf47d71aff39b780384969c6883a9a04f9ac90 (diff)
parent26bbc81e122d7f14616dc799e41ef438398669ee (diff)
downloadmruby-27ac09be9dfb20c35c91e5bda112797bdb3d2cfa.tar.gz
mruby-27ac09be9dfb20c35c91e5bda112797bdb3d2cfa.zip
Merge pull request #2583 from cremno/get-rid-of-shadowing-variables
get rid of shadowing variables
Diffstat (limited to 'src/codegen.c')
-rw-r--r--src/codegen.c54
1 files changed, 26 insertions, 28 deletions
diff --git a/src/codegen.c b/src/codegen.c
index bccc30cea..e6f277b1b 100644
--- a/src/codegen.c
+++ b/src/codegen.c
@@ -81,7 +81,7 @@ static struct loopinfo *loop_push(codegen_scope *s, enum looptype t);
static void loop_break(codegen_scope *s, node *tree);
static void loop_pop(codegen_scope *s, int val);
-static void gen_assignment(codegen_scope *s, node *node, int sp, int val);
+static void gen_assignment(codegen_scope *s, node *tree, int sp, int val);
static void gen_vmassignment(codegen_scope *s, node *tree, int rhs, int val);
static void codegen(codegen_scope *s, node *tree, int val);
@@ -327,10 +327,9 @@ genop_peep(codegen_scope *s, mrb_code i, int val)
}
case OP_STRCAT:
if (c0 == OP_STRING) {
- int i = GETARG_Bx(i0);
+ mrb_value v = s->irep->pool[GETARG_Bx(i0)];
- if (mrb_type(s->irep->pool[i]) == MRB_TT_STRING &&
- RSTRING_LEN(s->irep->pool[i]) == 0) {
+ if (mrb_string_p(v) && RSTRING_LEN(v) == 0) {
s->pc--;
return 0;
}
@@ -845,34 +844,34 @@ gen_call(codegen_scope *s, node *tree, mrb_sym name, int sp, int val)
push();pop();
pop_n(n+1);
{
- mrb_int len;
- const char *name = mrb_sym2name_len(s->mrb, sym, &len);
+ mrb_int symlen;
+ const char *symname = mrb_sym2name_len(s->mrb, sym, &symlen);
- if (!noop && len == 1 && name[0] == '+') {
+ if (!noop && symlen == 1 && symname[0] == '+') {
genop_peep(s, MKOP_ABC(OP_ADD, cursp(), idx, n), val);
}
- else if (!noop && len == 1 && name[0] == '-') {
+ else if (!noop && symlen == 1 && symname[0] == '-') {
genop_peep(s, MKOP_ABC(OP_SUB, cursp(), idx, n), val);
}
- else if (!noop && len == 1 && name[0] == '*') {
+ else if (!noop && symlen == 1 && symname[0] == '*') {
genop(s, MKOP_ABC(OP_MUL, cursp(), idx, n));
}
- else if (!noop && len == 1 && name[0] == '/') {
+ else if (!noop && symlen == 1 && symname[0] == '/') {
genop(s, MKOP_ABC(OP_DIV, cursp(), idx, n));
}
- else if (!noop && len == 1 && name[0] == '<') {
+ else if (!noop && symlen == 1 && symname[0] == '<') {
genop(s, MKOP_ABC(OP_LT, cursp(), idx, n));
}
- else if (!noop && len == 2 && name[0] == '<' && name[1] == '=') {
+ else if (!noop && symlen == 2 && symname[0] == '<' && symname[1] == '=') {
genop(s, MKOP_ABC(OP_LE, cursp(), idx, n));
}
- else if (!noop && len == 1 && name[0] == '>') {
+ else if (!noop && symlen == 1 && symname[0] == '>') {
genop(s, MKOP_ABC(OP_GT, cursp(), idx, n));
}
- else if (!noop && len == 2 && name[0] == '>' && name[1] == '=') {
+ else if (!noop && symlen == 2 && symname[0] == '>' && symname[1] == '=') {
genop(s, MKOP_ABC(OP_GE, cursp(), idx, n));
}
- else if (!noop && len == 2 && name[0] == '=' && name[1] == '=') {
+ else if (!noop && symlen == 2 && symname[0] == '=' && symname[1] == '=') {
genop(s, MKOP_ABC(OP_EQ, cursp(), idx, n));
}
else {
@@ -891,19 +890,19 @@ gen_call(codegen_scope *s, node *tree, mrb_sym name, int sp, int val)
}
static void
-gen_assignment(codegen_scope *s, node *node, int sp, int val)
+gen_assignment(codegen_scope *s, node *tree, int sp, int val)
{
int idx;
- int type = (intptr_t)node->car;
+ int type = (intptr_t)tree->car;
- node = node->cdr;
+ tree = tree->cdr;
switch ((intptr_t)type) {
case NODE_GVAR:
- idx = new_sym(s, sym(node));
+ idx = new_sym(s, sym(tree));
genop_peep(s, MKOP_ABx(OP_SETGLOBAL, sp, idx), val);
break;
case NODE_LVAR:
- idx = lv_idx(s, sym(node));
+ idx = lv_idx(s, sym(tree));
if (idx > 0) {
if (idx != sp) {
genop_peep(s, MKOP_AB(OP_MOVE, idx, sp), val);
@@ -915,7 +914,7 @@ gen_assignment(codegen_scope *s, node *node, int sp, int val)
codegen_scope *up = s->prev;
while (up) {
- idx = lv_idx(up, sym(node));
+ idx = lv_idx(up, sym(tree));
if (idx > 0) {
genop_peep(s, MKOP_ABC(OP_SETUPVAR, sp, idx, lv), val);
break;
@@ -926,29 +925,29 @@ gen_assignment(codegen_scope *s, node *node, int sp, int val)
}
break;
case NODE_IVAR:
- idx = new_sym(s, sym(node));
+ idx = new_sym(s, sym(tree));
genop_peep(s, MKOP_ABx(OP_SETIV, sp, idx), val);
break;
case NODE_CVAR:
- idx = new_sym(s, sym(node));
+ idx = new_sym(s, sym(tree));
genop_peep(s, MKOP_ABx(OP_SETCV, sp, idx), val);
break;
case NODE_CONST:
- idx = new_sym(s, sym(node));
+ idx = new_sym(s, sym(tree));
genop_peep(s, MKOP_ABx(OP_SETCONST, sp, idx), val);
break;
case NODE_COLON2:
- idx = new_sym(s, sym(node->cdr));
+ idx = new_sym(s, sym(tree->cdr));
genop_peep(s, MKOP_AB(OP_MOVE, cursp(), sp), NOVAL);
push();
- codegen(s, node->car, VAL);
+ codegen(s, tree->car, VAL);
pop_n(2);
genop_peep(s, MKOP_ABx(OP_SETMCNST, cursp(), idx), val);
break;
case NODE_CALL:
push();
- gen_call(s, node, attrsym(s, sym(node->cdr->car)), sp, NOVAL);
+ gen_call(s, tree, attrsym(s, sym(tree->cdr->car)), sp, NOVAL);
pop();
if (val) {
genop_peep(s, MKOP_AB(OP_MOVE, cursp(), sp), val);
@@ -2233,7 +2232,6 @@ codegen(codegen_scope *s, node *tree, int val)
}
if (n->cdr) {
char *p2 = (char*)n->cdr;
- int off;
push();
off = new_lit(s, mrb_str_new_cstr(s->mrb, p2));