summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mrbgems/mruby-eval/src/eval.c2
-rw-r--r--src/class.c2
-rw-r--r--src/codegen.c12
-rw-r--r--test/t/module.rb2
4 files changed, 15 insertions, 3 deletions
diff --git a/mrbgems/mruby-eval/src/eval.c b/mrbgems/mruby-eval/src/eval.c
index 738d64709..8ee651718 100644
--- a/mrbgems/mruby-eval/src/eval.c
+++ b/mrbgems/mruby-eval/src/eval.c
@@ -13,7 +13,7 @@ get_closure_irep(mrb_state *mrb, int level)
if (level == 0) {
return mrb->c->ci[-1].proc->body.irep;
}
-
+
while (--level) {
e = (struct REnv*)e->c;
if (!e) return NULL;
diff --git a/src/class.c b/src/class.c
index 2fa02fa87..37ac751a7 100644
--- a/src/class.c
+++ b/src/class.c
@@ -1944,7 +1944,7 @@ mrb_mod_module_function(mrb_state *mrb, mrb_value mod)
int ai;
mrb_check_type(mrb, mod, MRB_TT_MODULE);
-
+
mrb_get_args(mrb, "*", &argv, &argc);
if(argc == 0) {
/* set MODFUNC SCOPE if implemented */
diff --git a/src/codegen.c b/src/codegen.c
index 268ecf1e8..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) {
diff --git a/test/t/module.rb b/test/t/module.rb
index 2e19f350f..8503cb9fc 100644
--- a/test/t/module.rb
+++ b/test/t/module.rb
@@ -528,7 +528,7 @@ assert('Module#module_function') do
def modfunc; end
module_function :modfunc
end
-
+
assert_true M.respond_to?(:modfunc)
end