diff options
| author | Tatsuhiko Kubo <[email protected]> | 2014-08-20 12:23:26 +0900 |
|---|---|---|
| committer | Tatsuhiko Kubo <[email protected]> | 2014-08-20 12:25:29 +0900 |
| commit | ae2d49811a51e38106f34858fd3f4ce24af320c2 (patch) | |
| tree | 69cdbd37b6897440e7ed70ea9ce22ce484089f63 | |
| parent | f6f31a8ecd7e8f9f9830f050842e11d2aaef94a1 (diff) | |
| download | mruby-ae2d49811a51e38106f34858fd3f4ce24af320c2.tar.gz mruby-ae2d49811a51e38106f34858fd3f4ce24af320c2.zip | |
Fix allocation-error-handlings for scope_new().
| -rw-r--r-- | src/codegen.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/codegen.c b/src/codegen.c index 268ecf1e8..6e81a51bf 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(s, "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(s, "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) { |
