Move exception raising to `scope_new`.

Besides that fix bugs that mistakenly calls `raise_error` that emits
code to raise runtime error instead of `codegen_error` that terminates
code generation immediately.
parent 20ceee79
...@@ -686,9 +686,6 @@ for_body(codegen_scope *s, node *tree) ...@@ -686,9 +686,6 @@ for_body(codegen_scope *s, node *tree)
codegen(s, tree->cdr->car, VAL); codegen(s, tree->cdr->car, VAL);
/* generate loop-block */ /* generate loop-block */
s = scope_new(s->mrb, s, NULL); s = scope_new(s->mrb, s, NULL);
if (s == NULL) {
raise_error(prev, "unexpected scope");
}
push(); /* push for a block parameter */ push(); /* push for a block parameter */
...@@ -724,9 +721,6 @@ lambda_body(codegen_scope *s, node *tree, int blk) ...@@ -724,9 +721,6 @@ lambda_body(codegen_scope *s, node *tree, int blk)
{ {
codegen_scope *parent = s; codegen_scope *parent = s;
s = scope_new(s->mrb, s, tree->car); s = scope_new(s->mrb, s, tree->car);
if (s == NULL) {
raise_error(parent, "unexpected scope");
}
s->mscope = !blk; s->mscope = !blk;
...@@ -888,9 +882,6 @@ static int ...@@ -888,9 +882,6 @@ static int
scope_body(codegen_scope *s, node *tree, int val) scope_body(codegen_scope *s, node *tree, int val)
{ {
codegen_scope *scope = scope_new(s->mrb, s, tree->car); codegen_scope *scope = scope_new(s->mrb, s, tree->car);
if (scope == NULL) {
codegen_error(s, "unexpected scope");
}
codegen(scope, tree->cdr, VAL); codegen(scope, tree->cdr, VAL);
gen_return(scope, OP_RETURN, scope->sp-1); gen_return(scope, OP_RETURN, scope->sp-1);
...@@ -2972,7 +2963,11 @@ scope_new(mrb_state *mrb, codegen_scope *prev, node *lv) ...@@ -2972,7 +2963,11 @@ scope_new(mrb_state *mrb, codegen_scope *prev, node *lv)
mrb_pool *pool = mrb_pool_open(mrb); mrb_pool *pool = mrb_pool_open(mrb);
codegen_scope *p = (codegen_scope *)mrb_pool_alloc(pool, sizeof(codegen_scope)); codegen_scope *p = (codegen_scope *)mrb_pool_alloc(pool, sizeof(codegen_scope));
if (!p) return NULL; if (!p) {
if (prev)
codegen_error(prev, "unexpected scope");
return NULL;
}
*p = codegen_scope_zero; *p = codegen_scope_zero;
p->mrb = mrb; p->mrb = mrb;
p->mpool = pool; p->mpool = pool;
...@@ -3165,9 +3160,6 @@ generate_code(mrb_state *mrb, parser_state *p, int val) ...@@ -3165,9 +3160,6 @@ generate_code(mrb_state *mrb, parser_state *p, int val)
struct RProc *proc; struct RProc *proc;
struct mrb_jmpbuf *prev_jmp = mrb->jmp; struct mrb_jmpbuf *prev_jmp = mrb->jmp;
if (!scope) {
return NULL;
}
scope->mrb = mrb; scope->mrb = mrb;
scope->parser = p; scope->parser = p;
scope->filename_sym = p->filename_sym; scope->filename_sym = p->filename_sym;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment