summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-compiler/core/codegen.c
diff options
context:
space:
mode:
authorShokuji <[email protected]>2019-04-16 09:47:32 +0900
committerShokuji <[email protected]>2019-04-16 09:47:32 +0900
commitcdfeb53887d886adc10848e4a6e76c81fbd2a4c4 (patch)
tree2bc17e536d396f7d20b8c9de4ce39c4f284d9256 /mrbgems/mruby-compiler/core/codegen.c
parent164985881b6d7d96218ec5cd986ca1bb4c919698 (diff)
parent4e3e4260c3860e4c0c274f520744bdb7629ea9cd (diff)
downloadmruby-cdfeb53887d886adc10848e4a6e76c81fbd2a4c4.tar.gz
mruby-cdfeb53887d886adc10848e4a6e76c81fbd2a4c4.zip
Merge branch 'master' into fix_mruby-io_test
Diffstat (limited to 'mrbgems/mruby-compiler/core/codegen.c')
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index 927cc3a0f..ed8fc3150 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -102,6 +102,7 @@ codegen_error(codegen_scope *s, const char *message)
while (s->prev) {
codegen_scope *tmp = s->prev;
mrb_free(s->mrb, s->iseq);
+ mrb_free(s->mrb, s->lines);
mrb_pool_close(s->mpool);
s = tmp;
}
@@ -272,8 +273,7 @@ genop_W(codegen_scope *s, mrb_code i, uint32_t a)
#define NOVAL 0
#define VAL 1
-//static
-mrb_bool
+static mrb_bool
no_optimize(codegen_scope *s)
{
if (s && s->parser && s->parser->no_optimize)
@@ -3020,6 +3020,9 @@ scope_finish(codegen_scope *s)
mrb_state *mrb = s->mrb;
mrb_irep *irep = s->irep;
+ if (s->nlocals >= 0x3ff) {
+ codegen_error(s, "too many local variables");
+ }
irep->flags = 0;
if (s->iseq) {
irep->iseq = (mrb_code *)codegen_realloc(s, s->iseq, sizeof(mrb_code)*s->pc);