diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/codegen.c | 10 | ||||
| -rw-r--r-- | src/parse.y | 1 |
2 files changed, 10 insertions, 1 deletions
diff --git a/src/codegen.c b/src/codegen.c index 031605eb7..78d641faf 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -162,11 +162,19 @@ genop(codegen_scope *s, mrb_code i) #define NOVAL 0 #define VAL 1 +static mrb_bool +no_optimize(codegen_scope *s) +{ + if (s && s->parser && s->parser->no_optimize) + return TRUE; + return FALSE; +} + static int genop_peep(codegen_scope *s, mrb_code i, int val) { /* peephole optimization */ - if (s->lastlabel != s->pc && s->pc > 0) { + if (!no_optimize(s) && s->lastlabel != s->pc && s->pc > 0) { mrb_code i0 = s->iseq[s->pc-1]; int c1 = GET_OPCODE(i); int c0 = GET_OPCODE(i0); diff --git a/src/parse.y b/src/parse.y index 7a3088f0e..d73ef8d1e 100644 --- a/src/parse.y +++ b/src/parse.y @@ -5330,6 +5330,7 @@ parser_init_cxt(parser_state *p, mrbc_context *cxt) } } p->capture_errors = cxt->capture_errors; + p->no_optimize = cxt->no_optimize; if (cxt->partial_hook) { p->cxt = cxt; } |
