diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-08-20 23:38:49 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-08-20 23:38:49 +0900 |
| commit | e73a0913430fbffcf5ec741055dfdc6146fa743c (patch) | |
| tree | 672bd9cb5d67c17023e39bdab72f625760cba24b /src/codegen.c | |
| parent | c7fda2232b690f5e68a5d1f72e9dc8cd21682703 (diff) | |
| parent | 05ede52239fce58b6a8be4b72d51db10ae1c2632 (diff) | |
| download | mruby-e73a0913430fbffcf5ec741055dfdc6146fa743c.tar.gz mruby-e73a0913430fbffcf5ec741055dfdc6146fa743c.zip | |
Merge branch 'cubicdaiya-issues/scope_new_error_handlings'
Diffstat (limited to 'src/codegen.c')
| -rw-r--r-- | src/codegen.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/codegen.c b/src/codegen.c index 7ff911758..48ab63de0 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -85,6 +85,7 @@ static void gen_assignment(codegen_scope *s, node *node, int sp, int val); static void gen_vmassignment(codegen_scope *s, node *tree, int rhs, int val); static void codegen(codegen_scope *s, node *tree, int val); +static void raise_error(codegen_scope *s, const char *msg); static void codegen_error(codegen_scope *s, const char *message) @@ -552,6 +553,10 @@ for_body(codegen_scope *s, node *tree) codegen(s, tree->cdr->car, VAL); /* generate loop-block */ s = scope_new(s->mrb, s, NULL); + if (s == NULL) { + raise_error(prev, "unexpected scope"); + } + push(); /* push for a block parameter */ lp = loop_push(s, LOOP_FOR); @@ -589,6 +594,10 @@ lambda_body(codegen_scope *s, node *tree, int blk) mrb_code c; codegen_scope *parent = s; s = scope_new(s->mrb, s, tree->car); + if (s == NULL) { + raise_error(parent, "unexpected scope"); + } + s->mscope = !blk; if (blk) { @@ -674,6 +683,9 @@ static int scope_body(codegen_scope *s, node *tree, int val) { codegen_scope *scope = scope_new(s->mrb, s, tree->car); + if (scope == NULL) { + raise_error(s, "unexpected scope"); + } codegen(scope, tree->cdr, VAL); if (!s->iseq) { @@ -2470,7 +2482,7 @@ scope_new(mrb_state *mrb, codegen_scope *prev, node *lv) mrb_pool *pool = mrb_pool_open(mrb); codegen_scope *p = (codegen_scope *)mrb_pool_alloc(pool, sizeof(codegen_scope)); - if (!p) return 0; + if (!p) return NULL; *p = codegen_scope_zero; p->mrb = mrb; p->mpool = pool; |
