Commit 540066c9 authored by Yukihiro Matsumoto's avatar Yukihiro Matsumoto

mrb_sym can be short integer; reduced 10KB

parent 3a49dfd1
...@@ -62,11 +62,10 @@ typedef double mrb_float; ...@@ -62,11 +62,10 @@ typedef double mrb_float;
#ifdef MRB_NAN_BOXING #ifdef MRB_NAN_BOXING
typedef int32_t mrb_int; typedef int32_t mrb_int;
typedef int32_t mrb_sym;
#else #else
typedef int mrb_int; typedef int mrb_int;
typedef intptr_t mrb_sym;
#endif #endif
typedef short mrb_sym;
/* define ENABLE_XXXX from DISABLE_XXX */ /* define ENABLE_XXXX from DISABLE_XXX */
#ifndef DISABLE_REGEXP #ifndef DISABLE_REGEXP
......
...@@ -466,7 +466,8 @@ node_len(node *tree) ...@@ -466,7 +466,8 @@ node_len(node *tree)
return n; return n;
} }
#define lv_name(lv) ((mrb_sym)(lv)->car) #define sym(x) ((mrb_sym)(intptr_t)(x))
#define lv_name(lv) sym((lv)->car)
static int static int
lv_idx(codegen_scope *s, mrb_sym id) lv_idx(codegen_scope *s, mrb_sym id)
{ {
...@@ -582,7 +583,7 @@ lambda_body(codegen_scope *s, node *tree, int blk) ...@@ -582,7 +583,7 @@ lambda_body(codegen_scope *s, node *tree, int blk)
dispatch(s, pos+i); dispatch(s, pos+i);
codegen(s, opt->car->cdr, VAL); codegen(s, opt->car->cdr, VAL);
idx = lv_idx(s, (mrb_sym)opt->car->car); idx = lv_idx(s, (mrb_sym)(intptr_t)opt->car->car);
pop(); pop();
genop_peep(s, MKOP_AB(OP_MOVE, idx, cursp()), NOVAL); genop_peep(s, MKOP_AB(OP_MOVE, idx, cursp()), NOVAL);
i++; i++;
...@@ -706,7 +707,7 @@ gen_values(codegen_scope *s, node *t) ...@@ -706,7 +707,7 @@ gen_values(codegen_scope *s, node *t)
static void static void
gen_call(codegen_scope *s, node *tree, mrb_sym name, int sp, int val) gen_call(codegen_scope *s, node *tree, mrb_sym name, int sp, int val)
{ {
mrb_sym sym = name ? name : (mrb_sym)tree->cdr->car; mrb_sym sym = name ? name : sym(tree->cdr->car);
int idx; int idx;
int n = 0, noop = 0, sendv = 0, blk = 0; int n = 0, noop = 0, sendv = 0, blk = 0;
...@@ -796,11 +797,11 @@ gen_assignment(codegen_scope *s, node *node, int sp, int val) ...@@ -796,11 +797,11 @@ gen_assignment(codegen_scope *s, node *node, int sp, int val)
node = node->cdr; node = node->cdr;
switch ((intptr_t)type) { switch ((intptr_t)type) {
case NODE_GVAR: case NODE_GVAR:
idx = new_sym(s, (mrb_sym)node); idx = new_sym(s, sym(node));
genop_peep(s, MKOP_ABx(OP_SETGLOBAL, sp, idx), val); genop_peep(s, MKOP_ABx(OP_SETGLOBAL, sp, idx), val);
break; break;
case NODE_LVAR: case NODE_LVAR:
idx = lv_idx(s, (mrb_sym)node); idx = lv_idx(s, sym(node));
if (idx > 0) { if (idx > 0) {
if (idx != sp) { if (idx != sp) {
genop_peep(s, MKOP_AB(OP_MOVE, idx, sp), val); genop_peep(s, MKOP_AB(OP_MOVE, idx, sp), val);
...@@ -812,7 +813,7 @@ gen_assignment(codegen_scope *s, node *node, int sp, int val) ...@@ -812,7 +813,7 @@ gen_assignment(codegen_scope *s, node *node, int sp, int val)
codegen_scope *up = s->prev; codegen_scope *up = s->prev;
while (up) { while (up) {
idx = lv_idx(up, (mrb_sym)node); idx = lv_idx(up, sym(node));
if (idx > 0) { if (idx > 0) {
genop_peep(s, MKOP_ABC(OP_SETUPVAR, sp, idx, lv), val); genop_peep(s, MKOP_ABC(OP_SETUPVAR, sp, idx, lv), val);
break; break;
...@@ -824,19 +825,19 @@ gen_assignment(codegen_scope *s, node *node, int sp, int val) ...@@ -824,19 +825,19 @@ gen_assignment(codegen_scope *s, node *node, int sp, int val)
} }
break; break;
case NODE_IVAR: case NODE_IVAR:
idx = new_sym(s, (mrb_sym)node); idx = new_sym(s, sym(node));
genop_peep(s, MKOP_ABx(OP_SETIV, sp, idx), val); genop_peep(s, MKOP_ABx(OP_SETIV, sp, idx), val);
break; break;
case NODE_CVAR: case NODE_CVAR:
idx = new_sym(s, (mrb_sym)node); idx = new_sym(s, sym(node));
genop_peep(s, MKOP_ABx(OP_SETCV, sp, idx), val); genop_peep(s, MKOP_ABx(OP_SETCV, sp, idx), val);
break; break;
case NODE_CONST: case NODE_CONST:
idx = new_sym(s, (mrb_sym)node); idx = new_sym(s, sym(node));
genop_peep(s, MKOP_ABx(OP_SETCONST, sp, idx), val); genop_peep(s, MKOP_ABx(OP_SETCONST, sp, idx), val);
break; break;
case NODE_COLON2: case NODE_COLON2:
idx = new_sym(s, (mrb_sym)node->cdr); idx = new_sym(s, sym(node->cdr));
genop_peep(s, MKOP_AB(OP_MOVE, cursp(), sp), NOVAL); genop_peep(s, MKOP_AB(OP_MOVE, cursp(), sp), NOVAL);
push(); push();
codegen(s, node->car, VAL); codegen(s, node->car, VAL);
...@@ -846,7 +847,7 @@ gen_assignment(codegen_scope *s, node *node, int sp, int val) ...@@ -846,7 +847,7 @@ gen_assignment(codegen_scope *s, node *node, int sp, int val)
case NODE_CALL: case NODE_CALL:
push(); push();
gen_call(s, node, attrsym(s, (mrb_sym)node->cdr->car), sp, val); gen_call(s, node, attrsym(s, sym(node->cdr->car)), sp, val);
val = NOVAL; /* push should have done in gen_call() */ val = NOVAL; /* push should have done in gen_call() */
break; break;
...@@ -1247,7 +1248,7 @@ codegen(codegen_scope *s, node *tree, int val) ...@@ -1247,7 +1248,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_COLON2: case NODE_COLON2:
{ {
int sym = new_sym(s, (mrb_sym)tree->cdr); int sym = new_sym(s, sym(tree->cdr));
codegen(s, tree->car, VAL); codegen(s, tree->car, VAL);
pop(); pop();
...@@ -1258,7 +1259,7 @@ codegen(codegen_scope *s, node *tree, int val) ...@@ -1258,7 +1259,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_COLON3: case NODE_COLON3:
{ {
int sym = new_sym(s, (mrb_sym)tree); int sym = new_sym(s, sym(tree));
genop(s, MKOP_A(OP_OCLASS, cursp())); genop(s, MKOP_A(OP_OCLASS, cursp()));
genop(s, MKOP_ABx(OP_GETMCNST, cursp(), sym)); genop(s, MKOP_ABx(OP_GETMCNST, cursp(), sym));
...@@ -1378,7 +1379,7 @@ codegen(codegen_scope *s, node *tree, int val) ...@@ -1378,7 +1379,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_OP_ASGN: case NODE_OP_ASGN:
{ {
mrb_sym sym = (mrb_sym)tree->cdr->car; mrb_sym sym = sym(tree->cdr->car);
int len; int len;
const char *name = mrb_sym2name_len(s->mrb, sym, &len); const char *name = mrb_sym2name_len(s->mrb, sym, &len);
int idx; int idx;
...@@ -1592,7 +1593,7 @@ codegen(codegen_scope *s, node *tree, int val) ...@@ -1592,7 +1593,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_LVAR: case NODE_LVAR:
if (val) { if (val) {
int idx = lv_idx(s, (mrb_sym)tree); int idx = lv_idx(s, sym(tree));
if (idx > 0) { if (idx > 0) {
genop(s, MKOP_AB(OP_MOVE, cursp(), idx)); genop(s, MKOP_AB(OP_MOVE, cursp(), idx));
...@@ -1602,7 +1603,7 @@ codegen(codegen_scope *s, node *tree, int val) ...@@ -1602,7 +1603,7 @@ codegen(codegen_scope *s, node *tree, int val)
codegen_scope *up = s->prev; codegen_scope *up = s->prev;
while (up) { while (up) {
idx = lv_idx(up, (mrb_sym)tree); idx = lv_idx(up, sym(tree));
if (idx > 0) { if (idx > 0) {
genop(s, MKOP_ABC(OP_GETUPVAR, cursp(), idx, lv)); genop(s, MKOP_ABC(OP_GETUPVAR, cursp(), idx, lv));
break; break;
...@@ -1617,7 +1618,7 @@ codegen(codegen_scope *s, node *tree, int val) ...@@ -1617,7 +1618,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_GVAR: case NODE_GVAR:
{ {
int sym = new_sym(s, (mrb_sym)tree); int sym = new_sym(s, sym(tree));
genop(s, MKOP_ABx(OP_GETGLOBAL, cursp(), sym)); genop(s, MKOP_ABx(OP_GETGLOBAL, cursp(), sym));
push(); push();
...@@ -1626,7 +1627,7 @@ codegen(codegen_scope *s, node *tree, int val) ...@@ -1626,7 +1627,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_IVAR: case NODE_IVAR:
{ {
int sym = new_sym(s, (mrb_sym)tree); int sym = new_sym(s, sym(tree));
genop(s, MKOP_ABx(OP_GETIV, cursp(), sym)); genop(s, MKOP_ABx(OP_GETIV, cursp(), sym));
push(); push();
...@@ -1635,7 +1636,7 @@ codegen(codegen_scope *s, node *tree, int val) ...@@ -1635,7 +1636,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_CVAR: case NODE_CVAR:
{ {
int sym = new_sym(s, (mrb_sym)tree); int sym = new_sym(s, sym(tree));
genop(s, MKOP_ABx(OP_GETCV, cursp(), sym)); genop(s, MKOP_ABx(OP_GETCV, cursp(), sym));
push(); push();
...@@ -1644,7 +1645,7 @@ codegen(codegen_scope *s, node *tree, int val) ...@@ -1644,7 +1645,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_CONST: case NODE_CONST:
{ {
int sym = new_sym(s, (mrb_sym)tree); int sym = new_sym(s, sym(tree));
genop(s, MKOP_ABx(OP_GETCONST, cursp(), sym)); genop(s, MKOP_ABx(OP_GETCONST, cursp(), sym));
push(); push();
...@@ -1828,7 +1829,7 @@ codegen(codegen_scope *s, node *tree, int val) ...@@ -1828,7 +1829,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_SYM: case NODE_SYM:
if (val) { if (val) {
int sym = new_sym(s, (mrb_sym)tree); int sym = new_sym(s, sym(tree));
genop(s, MKOP_ABx(OP_LOADSYM, cursp(), sym)); genop(s, MKOP_ABx(OP_LOADSYM, cursp(), sym));
push(); push();
...@@ -1874,8 +1875,8 @@ codegen(codegen_scope *s, node *tree, int val) ...@@ -1874,8 +1875,8 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_ALIAS: case NODE_ALIAS:
{ {
int a = new_msym(s, (mrb_sym)tree->car); int a = new_msym(s, sym(tree->car));
int b = new_msym(s, (mrb_sym)tree->cdr); int b = new_msym(s, sym(tree->cdr));
int c = new_msym(s, mrb_intern(s->mrb, "alias_method")); int c = new_msym(s, mrb_intern(s->mrb, "alias_method"));
genop(s, MKOP_A(OP_TCLASS, cursp())); genop(s, MKOP_A(OP_TCLASS, cursp()));
...@@ -1895,7 +1896,7 @@ codegen(codegen_scope *s, node *tree, int val) ...@@ -1895,7 +1896,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_UNDEF: case NODE_UNDEF:
{ {
int sym = new_msym(s, (mrb_sym)tree); int sym = new_msym(s, sym(tree));
int undef = new_msym(s, mrb_intern(s->mrb, "undef_method")); int undef = new_msym(s, mrb_intern(s->mrb, "undef_method"));
genop(s, MKOP_A(OP_TCLASS, cursp())); genop(s, MKOP_A(OP_TCLASS, cursp()));
...@@ -1934,7 +1935,7 @@ codegen(codegen_scope *s, node *tree, int val) ...@@ -1934,7 +1935,7 @@ codegen(codegen_scope *s, node *tree, int val)
push(); push();
} }
pop(); pop(); pop(); pop();
idx = new_msym(s, (mrb_sym)tree->car->cdr); idx = new_msym(s, sym(tree->car->cdr));
genop(s, MKOP_AB(OP_CLASS, cursp(), idx)); genop(s, MKOP_AB(OP_CLASS, cursp(), idx));
idx = scope_body(s, tree->cdr->cdr->car); idx = scope_body(s, tree->cdr->cdr->car);
genop(s, MKOP_ABx(OP_EXEC, cursp(), idx)); genop(s, MKOP_ABx(OP_EXEC, cursp(), idx));
...@@ -1960,7 +1961,7 @@ codegen(codegen_scope *s, node *tree, int val) ...@@ -1960,7 +1961,7 @@ codegen(codegen_scope *s, node *tree, int val)
codegen(s, tree->car->car, VAL); codegen(s, tree->car->car, VAL);
} }
pop(); pop();
idx = new_msym(s, (mrb_sym)tree->car->cdr); idx = new_msym(s, sym(tree->car->cdr));
genop(s, MKOP_AB(OP_MODULE, cursp(), idx)); genop(s, MKOP_AB(OP_MODULE, cursp(), idx));
idx = scope_body(s, tree->cdr->car); idx = scope_body(s, tree->cdr->car);
genop(s, MKOP_ABx(OP_EXEC, cursp(), idx)); genop(s, MKOP_ABx(OP_EXEC, cursp(), idx));
...@@ -1987,7 +1988,7 @@ codegen(codegen_scope *s, node *tree, int val) ...@@ -1987,7 +1988,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_DEF: case NODE_DEF:
{ {
int sym = new_msym(s, (mrb_sym)tree->car); int sym = new_msym(s, sym(tree->car));
int idx = lambda_body(s, tree->cdr, 0); int idx = lambda_body(s, tree->cdr, 0);
genop(s, MKOP_A(OP_TCLASS, cursp())); genop(s, MKOP_A(OP_TCLASS, cursp()));
...@@ -2004,7 +2005,7 @@ codegen(codegen_scope *s, node *tree, int val) ...@@ -2004,7 +2005,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_SDEF: case NODE_SDEF:
{ {
node *recv = tree->car; node *recv = tree->car;
int sym = new_msym(s, (mrb_sym)tree->cdr->car); int sym = new_msym(s, sym(tree->cdr->car));
int idx = lambda_body(s, tree->cdr->cdr, 0); int idx = lambda_body(s, tree->cdr->cdr, 0);
codegen(s, recv, VAL); codegen(s, recv, VAL);
......
...@@ -58,6 +58,9 @@ typedef unsigned int stack_type; ...@@ -58,6 +58,9 @@ typedef unsigned int stack_type;
#define CMDARG_LEXPOP() BITSTACK_LEXPOP(p->cmdarg_stack) #define CMDARG_LEXPOP() BITSTACK_LEXPOP(p->cmdarg_stack)
#define CMDARG_P() BITSTACK_SET_P(p->cmdarg_stack) #define CMDARG_P() BITSTACK_SET_P(p->cmdarg_stack)
#define sym(x) ((mrb_sym)(intptr_t)(x))
#define nsym(x) ((node*)(intptr_t)(x))
static mrb_sym static mrb_sym
intern_gen(parser_state *p, const char *s) intern_gen(parser_state *p, const char *s)
{ {
...@@ -219,7 +222,7 @@ local_var_p(parser_state *p, mrb_sym sym) ...@@ -219,7 +222,7 @@ local_var_p(parser_state *p, mrb_sym sym)
while (l) { while (l) {
node *n = l->car; node *n = l->car;
while (n) { while (n) {
if ((mrb_sym)n->car == sym) return 1; if (sym(n->car) == sym) return 1;
n = n->cdr; n = n->cdr;
} }
l = l->cdr; l = l->cdr;
...@@ -230,7 +233,7 @@ local_var_p(parser_state *p, mrb_sym sym) ...@@ -230,7 +233,7 @@ local_var_p(parser_state *p, mrb_sym sym)
static void static void
local_add_f(parser_state *p, mrb_sym sym) local_add_f(parser_state *p, mrb_sym sym)
{ {
p->locals->car = push(p->locals->car, (node*)sym); p->locals->car = push(p->locals->car, nsym(sym));
} }
static void static void
...@@ -298,7 +301,7 @@ new_false(parser_state *p) ...@@ -298,7 +301,7 @@ new_false(parser_state *p)
static node* static node*
new_alias(parser_state *p, mrb_sym a, mrb_sym b) new_alias(parser_state *p, mrb_sym a, mrb_sym b)
{ {
return cons((node*)NODE_ALIAS, cons((node*)a, (node*)b)); return cons((node*)NODE_ALIAS, cons(nsym(a), nsym(b)));
} }
// (:if cond then else) // (:if cond then else)
...@@ -368,14 +371,14 @@ new_self(parser_state *p) ...@@ -368,14 +371,14 @@ new_self(parser_state *p)
static node* static node*
new_call(parser_state *p, node *a, mrb_sym b, node *c) new_call(parser_state *p, node *a, mrb_sym b, node *c)
{ {
return list4((node*)NODE_CALL, a, (node*)b, c); return list4((node*)NODE_CALL, a, nsym(b), c);
} }
// (:fcall self mid args) // (:fcall self mid args)
static node* static node*
new_fcall(parser_state *p, mrb_sym b, node *c) new_fcall(parser_state *p, mrb_sym b, node *c)
{ {
return list4((node*)NODE_FCALL, new_self(p), (node*)b, c); return list4((node*)NODE_FCALL, new_self(p), nsym(b), c);
} }
#if 0 #if 0
...@@ -467,14 +470,14 @@ new_dot3(parser_state *p, node *a, node *b) ...@@ -467,14 +470,14 @@ new_dot3(parser_state *p, node *a, node *b)
static node* static node*
new_colon2(parser_state *p, node *b, mrb_sym c) new_colon2(parser_state *p, node *b, mrb_sym c)
{ {
return cons((node*)NODE_COLON2, cons(b, (node*)c)); return cons((node*)NODE_COLON2, cons(b, nsym(c)));
} }
// (:colon3 . c) // (:colon3 . c)
static node* static node*
new_colon3(parser_state *p, mrb_sym c) new_colon3(parser_state *p, mrb_sym c)
{ {
return cons((node*)NODE_COLON3, (node*)c); return cons((node*)NODE_COLON3, nsym(c));
} }
// (:and a b) // (:and a b)
...@@ -516,7 +519,7 @@ new_hash(parser_state *p, node *a) ...@@ -516,7 +519,7 @@ new_hash(parser_state *p, node *a)
static node* static node*
new_sym(parser_state *p, mrb_sym sym) new_sym(parser_state *p, mrb_sym sym)
{ {
return cons((node*)NODE_SYM, (node*)sym); return cons((node*)NODE_SYM, nsym(sym));
} }
static mrb_sym static mrb_sym
...@@ -532,42 +535,42 @@ new_strsym(parser_state *p, node* str) ...@@ -532,42 +535,42 @@ new_strsym(parser_state *p, node* str)
static node* static node*
new_lvar(parser_state *p, mrb_sym sym) new_lvar(parser_state *p, mrb_sym sym)
{ {
return cons((node*)NODE_LVAR, (node*)sym); return cons((node*)NODE_LVAR, nsym(sym));
} }
// (:gvar . a) // (:gvar . a)
static node* static node*
new_gvar(parser_state *p, mrb_sym sym) new_gvar(parser_state *p, mrb_sym sym)
{ {
return cons((node*)NODE_GVAR, (node*)sym); return cons((node*)NODE_GVAR, nsym(sym));
} }
// (:ivar . a) // (:ivar . a)
static node* static node*
new_ivar(parser_state *p, mrb_sym sym) new_ivar(parser_state *p, mrb_sym sym)
{ {
return cons((node*)NODE_IVAR, (node*)sym); return cons((node*)NODE_IVAR, nsym(sym));
} }
// (:cvar . a) // (:cvar . a)
static node* static node*
new_cvar(parser_state *p, mrb_sym sym) new_cvar(parser_state *p, mrb_sym sym)
{ {
return cons((node*)NODE_CVAR, (node*)sym); return cons((node*)NODE_CVAR, nsym(sym));
} }
// (:const . a) // (:const . a)
static node* static node*
new_const(parser_state *p, mrb_sym sym) new_const(parser_state *p, mrb_sym sym)
{ {
return cons((node*)NODE_CONST, (node*)sym); return cons((node*)NODE_CONST, nsym(sym));
} }
// (:undef a...) // (:undef a...)
static node* static node*
new_undef(parser_state *p, mrb_sym sym) new_undef(parser_state *p, mrb_sym sym)
{ {
return cons((node*)NODE_UNDEF, (node*)sym); return cons((node*)NODE_UNDEF, nsym(sym));
} }
// (:class class super body) // (:class class super body)
...@@ -595,21 +598,21 @@ new_module(parser_state *p, node *m, node *b) ...@@ -595,21 +598,21 @@ new_module(parser_state *p, node *m, node *b)
static node* static node*
new_def(parser_state *p, mrb_sym m, node *a, node *b) new_def(parser_state *p, mrb_sym m, node *a, node *b)
{ {
return list5((node*)NODE_DEF, (node*)m, p->locals->car, a, b); return list5((node*)NODE_DEF, nsym(m), p->locals->car, a, b);
} }
// (:sdef obj m lv (arg . body)) // (:sdef obj m lv (arg . body))
static node* static node*
new_sdef(parser_state *p, node *o, mrb_sym m, node *a, node *b) new_sdef(parser_state *p, node *o, mrb_sym m, node *a, node *b)
{ {
return list6((node*)NODE_SDEF, o, (node*)m, p->locals->car, a, b); return list6((node*)NODE_SDEF, o, nsym(m), p->locals->car, a, b);
} }
// (:arg . sym) // (:arg . sym)
static node* static node*
new_arg(parser_state *p, mrb_sym sym) new_arg(parser_state *p, mrb_sym sym)
{ {
return cons((node*)NODE_ARG, (node*)sym); return cons((node*)NODE_ARG, nsym(sym));
} }
// (m o r m2 b) // (m o r m2 b)
...@@ -623,8 +626,8 @@ new_args(parser_state *p, node *m, node *opt, mrb_sym rest, node *m2, mrb_sym bl ...@@ -623,8 +626,8 @@ new_args(parser_state *p, node *m, node *opt, mrb_sym rest, node *m2, mrb_sym bl
{ {
node *n; node *n;
n = cons(m2, (node*)blk); n = cons(m2, nsym(blk));
n = cons((node*)rest, n); n = cons(nsym(rest), n);
n = cons(opt, n); n = cons(opt, n);
return cons(m, n); return cons(m, n);
} }
...@@ -668,7 +671,7 @@ new_masgn(parser_state *p, node *a, node *b) ...@@ -668,7 +671,7 @@ new_masgn(parser_state *p, node *a, node *b)
static node* static node*
new_op_asgn(parser_state *p, node *a, mrb_sym op, node *b) new_op_asgn(parser_state *p, node *a, mrb_sym op, node *b)
{ {
return list4((node*)NODE_OP_ASGN, a, (node*)op, b); return list4((node*)NODE_OP_ASGN, a, nsym(op), b);
} }
// (:int . i) // (:int . i)
...@@ -807,7 +810,7 @@ static void ...@@ -807,7 +810,7 @@ static void
assignable(parser_state *p, node *lhs) assignable(parser_state *p, node *lhs)
{ {
if ((int)(intptr_t)lhs->car == NODE_LVAR) { if ((int)(intptr_t)lhs->car == NODE_LVAR) {
local_add(p, (mrb_sym)lhs->cdr); local_add(p, sym(lhs->cdr));
} }
} }
...@@ -817,8 +820,8 @@ var_reference(parser_state *p, node *lhs) ...@@ -817,8 +820,8 @@ var_reference(parser_state *p, node *lhs)
node *n; node *n;
if ((int)(intptr_t)lhs->car == NODE_LVAR) { if ((int)(intptr_t)lhs->car == NODE_LVAR) {
if (!local_var_p(p, (mrb_sym)lhs->cdr)) { if (!local_var_p(p, sym(lhs->cdr))) {
n = new_fcall(p, (mrb_sym)lhs->cdr, 0); n = new_fcall(p, sym(lhs->cdr), 0);
cons_free(lhs); cons_free(lhs);
return n; return n;
} }
...@@ -1451,15 +1454,15 @@ cname : tIDENTIFIER ...@@ -1451,15 +1454,15 @@ cname : tIDENTIFIER
cpath : tCOLON3 cname cpath : tCOLON3 cname
{ {
$$ = cons((node*)1, (node*)$2); $$ = cons((node*)1, nsym($2));
} }
| cname | cname
{ {
$$ = cons((node*)0, (node*)$1); $$ = cons((node*)0, nsym($1));
} }
| primary_value tCOLON2 cname | primary_value tCOLON2 cname
{ {
$$ = cons($1, (node*)$3); $$ = cons($1, nsym($3));
} }
; ;
...@@ -2768,14 +2771,14 @@ f_arg : f_arg_item ...@@ -2768,14 +2771,14 @@ f_arg : f_arg_item
f_opt : tIDENTIFIER '=' arg_value f_opt : tIDENTIFIER '=' arg_value
{ {
local_add_f(p, $1); local_add_f(p, $1);
$$ = cons((node*)$1, $3); $$ = cons(nsym($1), $3);
} }
; ;
f_block_opt : tIDENTIFIER '=' primary_value f_block_opt : tIDENTIFIER '=' primary_value
{ {
local_add_f(p, $1); local_add_f(p, $1);
$$ = cons((node*)$1, $3); $$ = cons(nsym($1), $3);
} }
; ;
...@@ -4706,7 +4709,7 @@ parser_update_cxt(parser_state *p, mrbc_context *cxt) ...@@ -4706,7 +4709,7 @@ parser_update_cxt(parser_state *p, mrbc_context *cxt)
cxt->syms = (mrb_sym *)mrb_realloc(p->mrb, cxt->syms, i*sizeof(mrb_sym)); cxt->syms = (mrb_sym *)mrb_realloc(p->mrb, cxt->syms, i*sizeof(mrb_sym));
cxt->slen = i; cxt->slen = i;
for (i=0, n=n0; n; i++,n=n->cdr) { for (i=0, n=n0; n; i++,n=n->cdr) {
cxt->syms[i] = (mrb_sym)n->car; cxt->syms[i] = sym(n->car);
} }
} }
...@@ -5034,7 +5037,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5034,7 +5037,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
while (n2) { while (n2) {
dump_prefix(offset+2); dump_prefix(offset+2);
printf("%s=", mrb_sym2name(mrb, (mrb_sym)n2->car->car)); printf("%s=", mrb_sym2name(mrb, sym(n2->car->car)));
parser_dump(mrb, n2->car->cdr, 0); parser_dump(mrb, n2->car->cdr, 0);
n2 = n2->cdr; n2 = n2->cdr;
} }
...@@ -5043,7 +5046,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5043,7 +5046,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
n = n->cdr; n = n->cdr;
if (n->car) { if (n->car) {
dump_prefix(offset+1); dump_prefix(offset+1);
printf("rest=*%s\n", mrb_sym2name(mrb, (mrb_sym)n->car)); printf("rest=*%s\n", mrb_sym2name(mrb, sym(n->car)));
} }
n = n->cdr; n = n->cdr;
if (n->car) { if (n->car) {
...@@ -5054,7 +5057,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5054,7 +5057,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
n = n->cdr; n = n->cdr;
if (n) { if (n) {
dump_prefix(offset+1); dump_prefix(offset+1);
printf("blk=&%s\n", mrb_sym2name(mrb, (mrb_sym)n)); printf("blk=&%s\n", mrb_sym2name(mrb, sym(n)));
} }
} }
dump_prefix(offset+1); dump_prefix(offset+1);
...@@ -5177,7 +5180,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5177,7 +5180,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
while (n2) { while (n2) {
if (n2->car) { if (n2->car) {
if (n2 != tree->car) printf(", "); if (n2 != tree->car) printf(", ");
printf("%s", mrb_sym2name(mrb, (mrb_sym)n2->car)); printf("%s", mrb_sym2name(mrb, sym(n2->car)));
} }
n2 = n2->cdr; n2 = n2->cdr;
} }
...@@ -5194,7 +5197,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5194,7 +5197,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
parser_dump(mrb, tree->car, offset+1); parser_dump(mrb, tree->car, offset+1);
dump_prefix(offset+1); dump_prefix(offset+1);
printf("method='%s' (%d)\n", printf("method='%s' (%d)\n",
mrb_sym2name(mrb, (mrb_sym)tree->cdr->car), mrb_sym2name(mrb, sym(tree->cdr->car)),
(int)(intptr_t)tree->cdr->car); (int)(intptr_t)tree->cdr->car);
tree = tree->cdr->cdr->car; tree = tree->cdr->cdr->car;
if (tree) { if (tree) {
...@@ -5225,13 +5228,13 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5225,13 +5228,13 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
printf("NODE_COLON2:\n"); printf("NODE_COLON2:\n");
parser_dump(mrb, tree->car, offset+1); parser_dump(mrb, tree->car, offset+1);
dump_prefix(offset+1); dump_prefix(offset+1);
printf("::%s\n", mrb_sym2name(mrb, (mrb_sym)tree->cdr)); printf("::%s\n", mrb_sym2name(mrb, sym(tree->cdr)));
break; break;
case NODE_COLON3: case NODE_COLON3:
printf("NODE_COLON3:\n"); printf("NODE_COLON3:\n");
dump_prefix(offset+1); dump_prefix(offset+1);
printf("::%s\n", mrb_sym2name(mrb, (mrb_sym)tree)); printf("::%s\n", mrb_sym2name(mrb, sym(tree)));
break; break;
case NODE_ARRAY: case NODE_ARRAY:
...@@ -5314,7 +5317,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5314,7 +5317,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
parser_dump(mrb, tree->car, offset+2); parser_dump(mrb, tree->car, offset+2);
tree = tree->cdr; tree = tree->cdr;
dump_prefix(offset+1); dump_prefix(offset+1);
printf("op='%s' (%d)\n", mrb_sym2name(mrb, (mrb_sym)tree->car), (int)(intptr_t)tree->car); printf("op='%s' (%d)\n", mrb_sym2name(mrb, sym(tree->car)), (int)(intptr_t)tree->car);
tree = tree->cdr; tree = tree->cdr;
parser_dump(mrb, tree->car, offset+1); parser_dump(mrb, tree->car, offset+1);
break; break;
...@@ -5366,23 +5369,23 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5366,23 +5369,23 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
break; break;
case NODE_LVAR: case NODE_LVAR:
printf("NODE_LVAR %s\n", mrb_sym2name(mrb, (mrb_sym)tree)); printf("NODE_LVAR %s\n", mrb_sym2name(mrb, sym(tree)));
break; break;
case NODE_GVAR: case NODE_GVAR:
printf("NODE_GVAR %s\n", mrb_sym2name(mrb, (mrb_sym)tree)); printf("NODE_GVAR %s\n", mrb_sym2name(mrb, sym(tree)));
break; break;
case NODE_IVAR: case NODE_IVAR:
printf("NODE_IVAR %s\n", mrb_sym2name(mrb, (mrb_sym)tree)); printf("NODE_IVAR %s\n", mrb_sym2name(mrb, sym(tree)));
break; break;
case NODE_CVAR: case NODE_CVAR:
printf("NODE_CVAR %s\n", mrb_sym2name(mrb, (mrb_sym)tree)); printf("NODE_CVAR %s\n", mrb_sym2name(mrb, sym(tree)));
break; break;
case NODE_CONST: case NODE_CONST:
printf("NODE_CONST %s\n", mrb_sym2name(mrb, (mrb_sym)tree)); printf("NODE_CONST %s\n", mrb_sym2name(mrb, sym(tree)));
break; break;
case NODE_BACK_REF: case NODE_BACK_REF:
...@@ -5394,7 +5397,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5394,7 +5397,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
break; break;
case NODE_ARG: case NODE_ARG:
printf("NODE_ARG %s\n", mrb_sym2name(mrb, (mrb_sym)tree)); printf("NODE_ARG %s\n", mrb_sym2name(mrb, sym(tree)));
break; break;
case NODE_BLOCK_ARG: case NODE_BLOCK_ARG:
...@@ -5425,7 +5428,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5425,7 +5428,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
break; break;
case NODE_SYM: case NODE_SYM:
printf("NODE_SYM :%s\n", mrb_sym2name(mrb, (mrb_sym)tree)); printf("NODE_SYM :%s\n", mrb_sym2name(mrb, sym(tree)));
break; break;
case NODE_SELF: case NODE_SELF:
...@@ -5446,29 +5449,29 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5446,29 +5449,29 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
case NODE_ALIAS: case NODE_ALIAS:
printf("NODE_ALIAS %s %s:\n", printf("NODE_ALIAS %s %s:\n",
mrb_sym2name(mrb, (mrb_sym)tree->car), mrb_sym2name(mrb, sym(tree->car)),
mrb_sym2name(mrb, (mrb_sym)tree->cdr)); mrb_sym2name(mrb, sym(tree->cdr)));
break; break;
case NODE_UNDEF: case NODE_UNDEF:
printf("NODE_UNDEF %s:\n", printf("NODE_UNDEF %s:\n",
mrb_sym2name(mrb, (mrb_sym)tree)); mrb_sym2name(mrb, sym(tree)));
break; break;
case NODE_CLASS: case NODE_CLASS:
printf("NODE_CLASS:\n"); printf("NODE_CLASS:\n");
if (tree->car->car == (node*)0) { if (tree->car->car == (node*)0) {
dump_prefix(offset+1); dump_prefix(offset+1);
printf(":%s\n", mrb_sym2name(mrb, (mrb_sym)tree->car->cdr)); printf(":%s\n", mrb_sym2name(mrb, sym(tree->car->cdr)));
} }
else if (tree->car->car == (node*)1) { else if (tree->car->car == (node*)1) {
dump_prefix(offset+1); dump_prefix(offset+1);
printf("::%s\n", mrb_sym2name(mrb, (mrb_sym)tree->car->cdr)); printf("::%s\n", mrb_sym2name(mrb, sym(tree->car->cdr)));
} }
else { else {
parser_dump(mrb, tree->car->car, offset+1); parser_dump(mrb, tree->car->car, offset+1);
dump_prefix(offset+1); dump_prefix(offset+1);
printf("::%s\n", mrb_sym2name(mrb, (mrb_sym)tree->car->cdr)); printf("::%s\n", mrb_sym2name(mrb, sym(tree->car->cdr)));
} }
if (tree->cdr->car) { if (tree->cdr->car) {
dump_prefix(offset+1); dump_prefix(offset+1);
...@@ -5484,16 +5487,16 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5484,16 +5487,16 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
printf("NODE_MODULE:\n"); printf("NODE_MODULE:\n");
if (tree->car->car == (node*)0) { if (tree->car->car == (node*)0) {
dump_prefix(offset+1); dump_prefix(offset+1);
printf(":%s\n", mrb_sym2name(mrb, (mrb_sym)tree->car->cdr)); printf(":%s\n", mrb_sym2name(mrb, sym(tree->car->cdr)));
} }
else if (tree->car->car == (node*)1) { else if (tree->car->car == (node*)1) {
dump_prefix(offset+1); dump_prefix(offset+1);
printf("::%s\n", mrb_sym2name(mrb, (mrb_sym)tree->car->cdr)); printf("::%s\n", mrb_sym2name(mrb, sym(tree->car->cdr)));
} }
else { else {
parser_dump(mrb, tree->car->car, offset+1); parser_dump(mrb, tree->car->car, offset+1);
dump_prefix(offset+1); dump_prefix(offset+1);
printf("::%s\n", mrb_sym2name(mrb, (mrb_sym)tree->car->cdr)); printf("::%s\n", mrb_sym2name(mrb, sym(tree->car->cdr)));
} }
dump_prefix(offset+1); dump_prefix(offset+1);
printf("body:\n"); printf("body:\n");
...@@ -5511,7 +5514,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5511,7 +5514,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
case NODE_DEF: case NODE_DEF:
printf("NODE_DEF:\n"); printf("NODE_DEF:\n");
dump_prefix(offset+1); dump_prefix(offset+1);
printf("%s\n", mrb_sym2name(mrb, (mrb_sym)tree->car)); printf("%s\n", mrb_sym2name(mrb, sym(tree->car)));
tree = tree->cdr; tree = tree->cdr;
{ {
node *n2 = tree->car; node *n2 = tree->car;
...@@ -5523,7 +5526,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5523,7 +5526,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
while (n2) { while (n2) {
if (n2->car) { if (n2->car) {
if (n2 != tree->car) printf(", "); if (n2 != tree->car) printf(", ");
printf("%s", mrb_sym2name(mrb, (mrb_sym)n2->car)); printf("%s", mrb_sym2name(mrb, sym(n2->car)));
} }
n2 = n2->cdr; n2 = n2->cdr;
} }
...@@ -5548,7 +5551,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5548,7 +5551,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
while (n2) { while (n2) {
dump_prefix(offset+2); dump_prefix(offset+2);
printf("%s=", mrb_sym2name(mrb, (mrb_sym)n2->car->car)); printf("%s=", mrb_sym2name(mrb, sym(n2->car->car)));
parser_dump(mrb, n2->car->cdr, 0); parser_dump(mrb, n2->car->cdr, 0);
n2 = n2->cdr; n2 = n2->cdr;
} }
...@@ -5557,7 +5560,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5557,7 +5560,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
n = n->cdr; n = n->cdr;
if (n->car) { if (n->car) {
dump_prefix(offset+1); dump_prefix(offset+1);
printf("rest=*%s\n", mrb_sym2name(mrb, (mrb_sym)n->car)); printf("rest=*%s\n", mrb_sym2name(mrb, sym(n->car)));
} }
n = n->cdr; n = n->cdr;
if (n->car) { if (n->car) {
...@@ -5568,7 +5571,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5568,7 +5571,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
n = n->cdr; n = n->cdr;
if (n) { if (n) {
dump_prefix(offset+1); dump_prefix(offset+1);
printf("blk=&%s\n", mrb_sym2name(mrb, (mrb_sym)n)); printf("blk=&%s\n", mrb_sym2name(mrb, sym(n)));
} }
} }
parser_dump(mrb, tree->cdr->car, offset+1); parser_dump(mrb, tree->cdr->car, offset+1);
...@@ -5579,7 +5582,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5579,7 +5582,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
parser_dump(mrb, tree->car, offset+1); parser_dump(mrb, tree->car, offset+1);
tree = tree->cdr; tree = tree->cdr;
dump_prefix(offset+1); dump_prefix(offset+1);
printf(":%s\n", mrb_sym2name(mrb, (mrb_sym)tree->car)); printf(":%s\n", mrb_sym2name(mrb, sym(tree->car)));
tree = tree->cdr->cdr; tree = tree->cdr->cdr;
if (tree->car) { if (tree->car) {
node *n = tree->car; node *n = tree->car;
...@@ -5598,7 +5601,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5598,7 +5601,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
while (n2) { while (n2) {
dump_prefix(offset+2); dump_prefix(offset+2);
printf("%s=", mrb_sym2name(mrb, (mrb_sym)n2->car->car)); printf("%s=", mrb_sym2name(mrb, sym(n2->car->car)));
parser_dump(mrb, n2->car->cdr, 0); parser_dump(mrb, n2->car->cdr, 0);
n2 = n2->cdr; n2 = n2->cdr;
} }
...@@ -5607,7 +5610,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5607,7 +5610,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
n = n->cdr; n = n->cdr;
if (n->car) { if (n->car) {
dump_prefix(offset+1); dump_prefix(offset+1);
printf("rest=*%s\n", mrb_sym2name(mrb, (mrb_sym)n->car)); printf("rest=*%s\n", mrb_sym2name(mrb, sym(n->car)));
} }
n = n->cdr; n = n->cdr;
if (n->car) { if (n->car) {
...@@ -5618,7 +5621,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset) ...@@ -5618,7 +5621,7 @@ parser_dump(mrb_state *mrb, node *tree, int offset)
n = n->cdr; n = n->cdr;
if (n) { if (n) {
dump_prefix(offset+1); dump_prefix(offset+1);
printf("blk=&%s\n", mrb_sym2name(mrb, (mrb_sym)n)); printf("blk=&%s\n", mrb_sym2name(mrb, sym(n)));
} }
} }
tree = tree->cdr; tree = tree->cdr;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment