diff options
Diffstat (limited to 'src/codegen.c')
| -rw-r--r-- | src/codegen.c | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/src/codegen.c b/src/codegen.c index cfbbe7286..5681ce03a 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -59,7 +59,7 @@ typedef struct scope { int icapa; mrb_irep *irep; - int pcapa; + size_t pcapa; int scapa; int nlocals; @@ -426,9 +426,8 @@ push_(codegen_scope *s) static inline int new_lit(codegen_scope *s, mrb_value val) { - int i; + size_t i; - switch (mrb_type(val)) { case MRB_TT_STRING: for (i=0; i<s->irep->plen; i++) { @@ -448,7 +447,7 @@ new_lit(codegen_scope *s, mrb_value val) } break; } - + if (s->irep->plen == s->pcapa) { s->pcapa *= 2; s->irep->pool = (mrb_value *)codegen_realloc(s, s->irep->pool, sizeof(mrb_value)*s->pcapa); @@ -462,7 +461,7 @@ new_lit(codegen_scope *s, mrb_value val) static inline int new_msym(codegen_scope *s, mrb_sym sym) { - int i, len; + size_t i, len; len = s->irep->slen; if (len > 256) len = 256; @@ -481,7 +480,7 @@ new_msym(codegen_scope *s, mrb_sym sym) static inline int new_sym(codegen_scope *s, mrb_sym sym) { - int i; + size_t i; for (i=0; i<s->irep->slen; i++) { if (s->irep->syms[i] == sym) return i; @@ -684,7 +683,7 @@ scope_body(codegen_scope *s, node *tree) return idx - s->idx; } -static int +static mrb_bool nosplat(node *t) { while (t) { @@ -2065,7 +2064,7 @@ codegen(codegen_scope *s, node *tree, int val) char *p1 = (char*)tree->car; char *p2 = (char*)tree->cdr; int ai = mrb_gc_arena_save(s->mrb); - int sym = new_sym(s, mrb_intern(s->mrb, REGEXP_CLASS)); + int sym = new_sym(s, mrb_intern2(s->mrb, REGEXP_CLASS, REGEXP_CLASS_CSTR_LEN)); int off = new_lit(s, mrb_str_new(s->mrb, p1, strlen(p1))); int argc = 1; @@ -2092,7 +2091,7 @@ codegen(codegen_scope *s, node *tree, int val) if (val) { node *n = tree->car; int ai = mrb_gc_arena_save(s->mrb); - int sym = new_sym(s, mrb_intern(s->mrb, REGEXP_CLASS)); + int sym = new_sym(s, mrb_intern2(s->mrb, REGEXP_CLASS, REGEXP_CLASS_CSTR_LEN)); int argc = 1; int off; char *p; @@ -2506,7 +2505,8 @@ codedump(mrb_state *mrb, int n) { #ifdef ENABLE_STDIO mrb_irep *irep = mrb->irep[n]; - int i, ai; + uint32_t i; + int ai; mrb_code c; if (!irep) return; @@ -2842,13 +2842,15 @@ codegen_start(mrb_state *mrb, parser_state *p) if (p->filename) { scope->filename = p->filename; } - if (setjmp(scope->jmp) != 0) { + if (setjmp(scope->jmp) == 0) { + // prepare irep + codegen(scope, p->tree, NOVAL); + mrb_pool_close(scope->mpool); + return 0; + } + else { return -1; } - // prepare irep - codegen(scope, p->tree, NOVAL); - mrb_pool_close(scope->mpool); - return 0; } int |
