summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler/core/codegen.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-08-12 09:35:35 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-08-12 09:35:35 +0900
commit8bf492f12707777c321dcf40494f757947649f62 (patch)
treed03211047847039b1f3387a00d2a76c53e46c98e /mrbgems/mruby-compiler/core/codegen.c
parentbaa5d2e3f72cb036c8c4e4f434b584998caaaa2c (diff)
downloadmruby-8bf492f12707777c321dcf40494f757947649f62.tar.gz
mruby-8bf492f12707777c321dcf40494f757947649f62.zip
Reduce integer type mismatch warnings in VC.
Diffstat (limited to 'mrbgems/mruby-compiler/core/codegen.c')
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c135
1 files changed, 68 insertions, 67 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index fd49aa177..92ea95257 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -66,9 +66,7 @@ typedef struct scope {
int icapa;
mrb_irep *irep;
- size_t pcapa;
- size_t scapa;
- size_t rcapa;
+ int pcapa, scapa, rcapa;
uint16_t nlocals;
uint16_t nregs;
@@ -428,7 +426,7 @@ push_(codegen_scope *s)
}
static void
-push_n_(codegen_scope *s, size_t n)
+push_n_(codegen_scope *s, int n)
{
if (s->sp+n > 511) {
codegen_error(s, "too complex expression");
@@ -447,7 +445,7 @@ push_n_(codegen_scope *s, size_t n)
static inline int
new_lit(codegen_scope *s, mrb_value val)
{
- size_t i;
+ int i;
mrb_value *pv;
switch (mrb_type(val)) {
@@ -518,7 +516,7 @@ new_lit(codegen_scope *s, mrb_value val)
static int
new_msym(codegen_scope *s, mrb_sym sym)
{
- size_t i, len;
+ int i, len;
mrb_assert(s->irep);
@@ -539,7 +537,7 @@ new_msym(codegen_scope *s, mrb_sym sym)
static int
new_sym(codegen_scope *s, mrb_sym sym)
{
- size_t i;
+ int i;
for (i=0; i<s->irep->slen; i++) {
if (s->irep->syms[i] == sym) return i;
@@ -573,8 +571,8 @@ node_len(node *tree)
return n;
}
-#define sym(x) ((mrb_sym)(intptr_t)(x))
-#define lv_name(lv) sym((lv)->car)
+#define nsym(x) ((mrb_sym)(intptr_t)(x))
+#define lv_name(lv) nsym((lv)->car)
static int
lv_idx(codegen_scope *s, mrb_sym id)
{
@@ -701,7 +699,7 @@ lambda_body(codegen_scope *s, node *tree, int blk)
dispatch(s, pos+i);
codegen(s, opt->car->cdr, VAL);
- idx = lv_idx(s, (mrb_sym)(intptr_t)opt->car->car);
+ idx = lv_idx(s, nsym(opt->car->car));
pop();
genop_peep(s, MKOP_AB(OP_MOVE, idx, cursp()), NOVAL);
i++;
@@ -764,11 +762,14 @@ scope_body(codegen_scope *s, node *tree, int val)
return s->irep->rlen - 1;
}
+#define nint(x) ((int)(intptr_t)(x))
+#define nchar(x) ((char)(intptr_t)(x))
+
static mrb_bool
nosplat(node *t)
{
while (t) {
- if ((intptr_t)t->car->car == NODE_SPLAT) return FALSE;
+ if (nint(t->car->car) == NODE_SPLAT) return FALSE;
t = t->cdr;
}
return TRUE;
@@ -804,12 +805,12 @@ gen_values(codegen_scope *s, node *t, int val, int extra)
int is_splat;
while (t) {
- is_splat = (intptr_t)t->car->car == NODE_SPLAT; /* splat mode */
+ is_splat = nint(t->car->car) == NODE_SPLAT; /* splat mode */
if (
n+extra >= CALL_MAXARGS - 1 /* need to subtract one because vm.c expects an array if n == CALL_MAXARGS */
|| is_splat) {
if (val) {
- if (is_splat && n == 0 && (intptr_t)t->car->cdr->car == NODE_ARRAY) {
+ if (is_splat && n == 0 && nint(t->car->cdr->car) == NODE_ARRAY) {
codegen(s, t->car->cdr, VAL);
pop();
}
@@ -831,7 +832,7 @@ gen_values(codegen_scope *s, node *t, int val, int extra)
push();
codegen(s, t->car, VAL);
pop(); pop();
- if ((intptr_t)t->car->car == NODE_SPLAT) {
+ if (nint(t->car->car) == NODE_SPLAT) {
genop(s, MKOP_AB(OP_ARYCAT, cursp(), cursp()+1));
}
else {
@@ -859,7 +860,7 @@ gen_values(codegen_scope *s, node *t, int val, int extra)
static void
gen_call(codegen_scope *s, node *tree, mrb_sym name, int sp, int val, int safe)
{
- mrb_sym sym = name ? name : sym(tree->cdr->car);
+ mrb_sym sym = name ? name : nsym(tree->cdr->car);
int idx, skip = 0;
int n = 0, noop = 0, sendv = 0, blk = 0;
@@ -959,16 +960,16 @@ static void
gen_assignment(codegen_scope *s, node *tree, int sp, int val)
{
int idx;
- int type = (intptr_t)tree->car;
+ int type = nint(tree->car);
tree = tree->cdr;
switch (type) {
case NODE_GVAR:
- idx = new_sym(s, sym(tree));
+ idx = new_sym(s, nsym(tree));
genop_peep(s, MKOP_ABx(OP_SETGLOBAL, sp, idx), val);
break;
case NODE_LVAR:
- idx = lv_idx(s, sym(tree));
+ idx = lv_idx(s, nsym(tree));
if (idx > 0) {
if (idx != sp) {
genop_peep(s, MKOP_AB(OP_MOVE, idx, sp), val);
@@ -980,7 +981,7 @@ gen_assignment(codegen_scope *s, node *tree, int sp, int val)
codegen_scope *up = s->prev;
while (up) {
- idx = lv_idx(up, sym(tree));
+ idx = lv_idx(up, nsym(tree));
if (idx > 0) {
genop_peep(s, MKOP_ABC(OP_SETUPVAR, sp, idx, lv), val);
break;
@@ -991,19 +992,19 @@ gen_assignment(codegen_scope *s, node *tree, int sp, int val)
}
break;
case NODE_IVAR:
- idx = new_sym(s, sym(tree));
+ idx = new_sym(s, nsym(tree));
genop_peep(s, MKOP_ABx(OP_SETIV, sp, idx), val);
break;
case NODE_CVAR:
- idx = new_sym(s, sym(tree));
+ idx = new_sym(s, nsym(tree));
genop_peep(s, MKOP_ABx(OP_SETCV, sp, idx), val);
break;
case NODE_CONST:
- idx = new_sym(s, sym(tree));
+ idx = new_sym(s, nsym(tree));
genop_peep(s, MKOP_ABx(OP_SETCONST, sp, idx), val);
break;
case NODE_COLON2:
- idx = new_sym(s, sym(tree->cdr));
+ idx = new_sym(s, nsym(tree->cdr));
genop_peep(s, MKOP_AB(OP_MOVE, cursp(), sp), NOVAL);
push();
codegen(s, tree->car, VAL);
@@ -1014,7 +1015,7 @@ gen_assignment(codegen_scope *s, node *tree, int sp, int val)
case NODE_CALL:
case NODE_SCALL:
push();
- gen_call(s, tree, attrsym(s, sym(tree->cdr->car)), sp, NOVAL,
+ gen_call(s, tree, attrsym(s, nsym(tree->cdr->car)), sp, NOVAL,
type == NODE_SCALL);
pop();
if (val) {
@@ -1105,9 +1106,9 @@ gen_literal_array(codegen_scope *s, node *tree, mrb_bool sym, int val)
int i = 0, j = 0;
while (tree) {
- switch ((intptr_t)tree->car->car) {
+ switch (nint(tree->car->car)) {
case NODE_STR:
- if ((tree->cdr == NULL) && ((intptr_t)tree->car->cdr->cdr == 0))
+ if ((tree->cdr == NULL) && (nint(tree->car->cdr->cdr) == 0))
break;
/* fall through */
case NODE_BEGIN:
@@ -1143,7 +1144,7 @@ gen_literal_array(codegen_scope *s, node *tree, mrb_bool sym, int val)
}
else {
while (tree) {
- switch ((intptr_t)tree->car->car) {
+ switch (nint(tree->car->car)) {
case NODE_BEGIN: case NODE_BLOCK:
codegen(s, tree->car, NOVAL);
}
@@ -1232,7 +1233,7 @@ readint_mrb_int(codegen_scope *s, const char *p, int base, mrb_bool neg, mrb_boo
static void
gen_retval(codegen_scope *s, node *tree)
{
- if ((intptr_t)tree->car == NODE_SPLAT) {
+ if (nint(tree->car) == NODE_SPLAT) {
genop(s, MKOP_ABC(OP_ARRAY, cursp(), cursp(), 0));
push();
codegen(s, tree, VAL);
@@ -1271,7 +1272,7 @@ codegen(codegen_scope *s, node *tree, int val)
s->filename = mrb_parser_get_filename(s->parser, tree->filename_index);
}
- nt = (intptr_t)tree->car;
+ nt = nint(tree->car);
s->lineno = tree->lineno;
tree = tree->cdr;
switch (nt) {
@@ -1316,7 +1317,7 @@ codegen(codegen_scope *s, node *tree, int val)
if (pos1) dispatch(s, pos1);
pos2 = 0;
do {
- if (n4 && n4->car && (intptr_t)n4->car->car == NODE_SPLAT) {
+ if (n4 && n4->car && nint(n4->car->car) == NODE_SPLAT) {
codegen(s, n4->car, VAL);
genop(s, MKOP_AB(OP_MOVE, cursp(), exc));
pop();
@@ -1377,7 +1378,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_ENSURE:
if (!tree->cdr || !tree->cdr->cdr ||
- ((intptr_t)tree->cdr->cdr->car == NODE_BEGIN &&
+ (nint(tree->cdr->cdr->car) == NODE_BEGIN &&
tree->cdr->cdr->cdr)) {
int idx;
int epush = s->pc;
@@ -1422,7 +1423,7 @@ codegen(codegen_scope *s, node *tree, int val)
codegen(s, e, val);
goto exit;
}
- switch ((intptr_t)tree->car->car) {
+ switch (nint(tree->car->car)) {
case NODE_TRUE:
case NODE_INT:
case NODE_STR:
@@ -1542,7 +1543,7 @@ codegen(codegen_scope *s, node *tree, int val)
if (head) {
genop(s, MKOP_AB(OP_MOVE, cursp(), head));
pop();
- if ((intptr_t)n->car->car == NODE_SPLAT) {
+ if (nint(n->car->car) == NODE_SPLAT) {
genop(s, MKOP_ABC(OP_SEND, cursp(), new_msym(s, mrb_intern_lit(s->mrb, "__case_eqq")), 1));
}
else {
@@ -1622,7 +1623,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_COLON2:
{
- int sym = new_sym(s, sym(tree->cdr));
+ int sym = new_sym(s, nsym(tree->cdr));
codegen(s, tree->car, VAL);
pop();
@@ -1633,7 +1634,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_COLON3:
{
- int sym = new_sym(s, sym(tree));
+ int sym = new_sym(s, nsym(tree));
genop(s, MKOP_A(OP_OCLASS, cursp()));
genop(s, MKOP_ABx(OP_GETMCNST, cursp(), sym));
@@ -1709,7 +1710,7 @@ codegen(codegen_scope *s, node *tree, int val)
node *t = tree->cdr, *p;
int rhs = cursp();
- if ((intptr_t)t->car == NODE_ARRAY && t->cdr && nosplat(t->cdr)) {
+ if (nint(t->car) == NODE_ARRAY && t->cdr && nosplat(t->cdr)) {
/* fixed rhs */
t = t->cdr;
while (t) {
@@ -1783,14 +1784,14 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_OP_ASGN:
{
- mrb_sym sym = sym(tree->cdr->car);
+ mrb_sym sym = nsym(tree->cdr->car);
mrb_int len;
const char *name = mrb_sym2name_len(s->mrb, sym, &len);
int idx, callargs = -1, vsp = -1;
if ((len == 2 && name[0] == '|' && name[1] == '|') &&
- ((intptr_t)tree->car->car == NODE_CONST ||
- (intptr_t)tree->car->car == NODE_CVAR)) {
+ (nint(tree->car->car) == NODE_CONST ||
+ nint(tree->car->car) == NODE_CVAR)) {
int onerr, noexc, exc;
struct loopinfo *lp;
@@ -1808,7 +1809,7 @@ codegen(codegen_scope *s, node *tree, int val)
dispatch(s, noexc);
loop_pop(s, NOVAL);
}
- else if ((intptr_t)tree->car->car == NODE_CALL) {
+ else if (nint(tree->car->car) == NODE_CALL) {
node *n = tree->car->cdr;
if (val) {
@@ -1816,7 +1817,7 @@ codegen(codegen_scope *s, node *tree, int val)
push();
}
codegen(s, n->car, VAL); /* receiver */
- idx = new_msym(s, sym(n->cdr->car));
+ idx = new_msym(s, nsym(n->cdr->car));
if (n->cdr->cdr->car) {
int base = cursp()-1;
int nargs = gen_values(s, n->cdr->cdr->car->car, VAL, 1);
@@ -1872,8 +1873,8 @@ codegen(codegen_scope *s, node *tree, int val)
if (val && vsp >= 0) {
genop(s, MKOP_AB(OP_MOVE, vsp, cursp()));
}
- if ((intptr_t)tree->car->car == NODE_CALL) {
- mrb_sym m = sym(tree->car->cdr->cdr->car);
+ if (nint(tree->car->car) == NODE_CALL) {
+ mrb_sym m = nsym(tree->car->cdr->cdr->car);
mrb_sym m2 = attrsym(s, m);
idx = new_msym(s, m2);
@@ -1942,7 +1943,7 @@ codegen(codegen_scope *s, node *tree, int val)
callargs++;
}
pop();
- idx = new_msym(s, attrsym(s,sym(tree->car->cdr->cdr->car)));
+ idx = new_msym(s, attrsym(s,nsym(tree->car->cdr->cdr->car)));
genop(s, MKOP_ABC(OP_SEND, cursp(), idx, callargs));
}
}
@@ -2134,7 +2135,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_LVAR:
if (val) {
- int idx = lv_idx(s, sym(tree));
+ int idx = lv_idx(s, nsym(tree));
if (idx > 0) {
genop_peep(s, MKOP_AB(OP_MOVE, cursp(), idx), NOVAL);
@@ -2144,7 +2145,7 @@ codegen(codegen_scope *s, node *tree, int val)
codegen_scope *up = s->prev;
while (up) {
- idx = lv_idx(up, sym(tree));
+ idx = lv_idx(up, nsym(tree));
if (idx > 0) {
genop(s, MKOP_ABC(OP_GETUPVAR, cursp(), idx, lv));
break;
@@ -2159,7 +2160,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_GVAR:
if (val) {
- int sym = new_sym(s, sym(tree));
+ int sym = new_sym(s, nsym(tree));
genop(s, MKOP_ABx(OP_GETGLOBAL, cursp(), sym));
push();
@@ -2168,7 +2169,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_IVAR:
if (val) {
- int sym = new_sym(s, sym(tree));
+ int sym = new_sym(s, nsym(tree));
genop(s, MKOP_ABx(OP_GETIV, cursp(), sym));
push();
@@ -2177,7 +2178,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_CVAR:
if (val) {
- int sym = new_sym(s, sym(tree));
+ int sym = new_sym(s, nsym(tree));
genop(s, MKOP_ABx(OP_GETCV, cursp(), sym));
push();
@@ -2186,7 +2187,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_CONST:
{
- int sym = new_sym(s, sym(tree));
+ int sym = new_sym(s, nsym(tree));
genop(s, MKOP_ABx(OP_GETCONST, cursp(), sym));
if (val) {
@@ -2205,7 +2206,7 @@ codegen(codegen_scope *s, node *tree, int val)
int sym;
buf[0] = '$';
- buf[1] = (char)(intptr_t)tree;
+ buf[1] = nchar(tree);
buf[2] = 0;
sym = new_sym(s, mrb_intern_cstr(s->mrb, buf));
genop(s, MKOP_ABx(OP_GETGLOBAL, cursp(), sym));
@@ -2219,7 +2220,7 @@ codegen(codegen_scope *s, node *tree, int val)
mrb_value str;
int sym;
- str = mrb_format(mrb, "$%S", mrb_fixnum_value((mrb_int)(intptr_t)tree));
+ str = mrb_format(mrb, "$%S", mrb_fixnum_value(nint(tree)));
sym = new_sym(s, mrb_intern_str(mrb, str));
genop(s, MKOP_ABx(OP_GETGLOBAL, cursp(), sym));
push();
@@ -2237,7 +2238,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_INT:
if (val) {
char *p = (char*)tree->car;
- int base = (intptr_t)tree->cdr->car;
+ int base = nint(tree->cdr->car);
mrb_int i;
mrb_code co;
mrb_bool overflow;
@@ -2276,7 +2277,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_NEGATE:
{
- nt = (intptr_t)tree->car;
+ nt = nint(tree->car);
tree = tree->cdr;
switch (nt) {
case NODE_FLOAT:
@@ -2293,7 +2294,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_INT:
if (val) {
char *p = (char*)tree->car;
- int base = (intptr_t)tree->cdr->car;
+ int base = nint(tree->cdr->car);
mrb_int i;
mrb_code co;
mrb_bool overflow;
@@ -2376,7 +2377,7 @@ codegen(codegen_scope *s, node *tree, int val)
node *n = tree;
while (n) {
- if ((intptr_t)n->car->car != NODE_STR) {
+ if (nint(n->car->car) != NODE_STR) {
codegen(s, n->car, NOVAL);
}
n = n->cdr;
@@ -2403,7 +2404,7 @@ codegen(codegen_scope *s, node *tree, int val)
codegen(s, tree->car, VAL);
n = tree->cdr;
while (n) {
- if ((intptr_t)n->car->car == NODE_XSTR) {
+ if (nint(n->car->car) == NODE_XSTR) {
n->car->car = (struct mrb_ast_node*)(intptr_t)NODE_STR;
mrb_assert(!n->cdr); /* must be the end */
}
@@ -2539,7 +2540,7 @@ codegen(codegen_scope *s, node *tree, int val)
node *n = tree->car;
while (n) {
- if ((intptr_t)n->car->car != NODE_STR) {
+ if (nint(n->car->car) != NODE_STR) {
codegen(s, n->car, NOVAL);
}
n = n->cdr;
@@ -2549,7 +2550,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_SYM:
if (val) {
- int sym = new_sym(s, sym(tree));
+ int sym = new_sym(s, nsym(tree));
genop(s, MKOP_ABx(OP_LOADSYM, cursp(), sym));
push();
@@ -2593,8 +2594,8 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_ALIAS:
{
- int a = new_msym(s, sym(tree->car));
- int b = new_msym(s, sym(tree->cdr));
+ int a = new_msym(s, nsym(tree->car));
+ int b = new_msym(s, nsym(tree->cdr));
int c = new_msym(s, mrb_intern_lit(s->mrb, "alias_method"));
genop(s, MKOP_A(OP_TCLASS, cursp()));
@@ -2627,7 +2628,7 @@ codegen(codegen_scope *s, node *tree, int val)
pop_n(num);
genop(s, MKOP_ABC(OP_ARRAY, cursp(), cursp(), num));
while (t) {
- symbol = new_msym(s, sym(t->car));
+ symbol = new_msym(s, nsym(t->car));
push();
genop(s, MKOP_ABx(OP_LOADSYM, cursp(), symbol));
pop();
@@ -2637,7 +2638,7 @@ codegen(codegen_scope *s, node *tree, int val)
num = CALL_MAXARGS;
break;
}
- symbol = new_msym(s, sym(t->car));
+ symbol = new_msym(s, nsym(t->car));
genop(s, MKOP_ABx(OP_LOADSYM, cursp(), symbol));
push();
t = t->cdr;
@@ -2677,7 +2678,7 @@ codegen(codegen_scope *s, node *tree, int val)
push();
}
pop(); pop();
- idx = new_msym(s, sym(tree->car->cdr));
+ idx = new_msym(s, nsym(tree->car->cdr));
genop(s, MKOP_AB(OP_CLASS, cursp(), idx));
idx = scope_body(s, tree->cdr->cdr->car, val);
genop(s, MKOP_ABx(OP_EXEC, cursp(), idx));
@@ -2703,7 +2704,7 @@ codegen(codegen_scope *s, node *tree, int val)
codegen(s, tree->car->car, VAL);
}
pop();
- idx = new_msym(s, sym(tree->car->cdr));
+ idx = new_msym(s, nsym(tree->car->cdr));
genop(s, MKOP_AB(OP_MODULE, cursp(), idx));
idx = scope_body(s, tree->cdr->car, val);
genop(s, MKOP_ABx(OP_EXEC, cursp(), idx));
@@ -2730,7 +2731,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_DEF:
{
- int sym = new_msym(s, sym(tree->car));
+ int sym = new_msym(s, nsym(tree->car));
int idx = lambda_body(s, tree->cdr, 0);
genop(s, MKOP_A(OP_TCLASS, cursp()));
@@ -2749,7 +2750,7 @@ codegen(codegen_scope *s, node *tree, int val)
case NODE_SDEF:
{
node *recv = tree->car;
- int sym = new_msym(s, sym(tree->cdr->car));
+ int sym = new_msym(s, nsym(tree->cdr->car));
int idx = lambda_body(s, tree->cdr->cdr, 0);
codegen(s, recv, VAL);