diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-08-12 09:35:35 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-08-12 09:35:35 +0900 |
| commit | 8bf492f12707777c321dcf40494f757947649f62 (patch) | |
| tree | d03211047847039b1f3387a00d2a76c53e46c98e /mrbgems/mruby-compiler/core/codegen.c | |
| parent | baa5d2e3f72cb036c8c4e4f434b584998caaaa2c (diff) | |
| download | mruby-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.c | 135 |
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); |
