summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-09-09 13:14:32 +0900
committerYukihiro Matsumoto <[email protected]>2012-09-09 13:14:32 +0900
commit9e7ca5d94462c749b25a34bc2d23984ccd37d14d (patch)
tree12aab82d0fcc19ec57d54336d8c915d545994716
parentfc52d2d6e076248c86525b30d9ea62ecfbcfb12e (diff)
downloadmruby-9e7ca5d94462c749b25a34bc2d23984ccd37d14d.tar.gz
mruby-9e7ca5d94462c749b25a34bc2d23984ccd37d14d.zip
mrb might be intialized incompletely from mrbc; close #457
-rw-r--r--mrblib/Makefile2
-rw-r--r--mrblib/error.rb8
-rw-r--r--src/error.c4
-rw-r--r--src/vm.c6
4 files changed, 10 insertions, 10 deletions
diff --git a/mrblib/Makefile b/mrblib/Makefile
index 01a5a6198..c6a668dbd 100644
--- a/mrblib/Makefile
+++ b/mrblib/Makefile
@@ -65,7 +65,7 @@ $(MLIB) : $(CLIB)
$(CLIB) : $(RLIB) $(MRBC)
$(MRBC) -Bmrblib_irep -o$(DLIB) $(RLIB); $(CAT) init_$(TARGET).c $(DLIB) > $@
-$(MRBC) : ../src/opcode.h ../src/codegen.c ../src/parse.y
+$(MRBC) : $(LIBR0)
$(MAKE) -C ../tools/mrbc $(MAKE_FLAGS)
# merge mruby sources
diff --git a/mrblib/error.rb b/mrblib/error.rb
index 16e88eefb..32b50da92 100644
--- a/mrblib/error.rb
+++ b/mrblib/error.rb
@@ -51,14 +51,6 @@ end
class KeyError < IndexError
end
-# ISO 15.2.37
-class ScriptError < Exception
-end
-
-# ISO 15.2.38
-class SyntaxError < ScriptError
-end
-
class NotImplementedError < ScriptError
end
diff --git a/src/error.c b/src/error.c
index 6d05a3c6c..1adf5cb05 100644
--- a/src/error.c
+++ b/src/error.c
@@ -407,4 +407,8 @@ mrb_init_exception(mrb_state *mrb)
mrb->eStandardError_class = mrb_define_class(mrb, "StandardError", mrb->eException_class); /* 15.2.23 */
mrb_define_class(mrb, "RuntimeError", mrb->eStandardError_class); /* 15.2.28 */
+
+ mrb_define_class(mrb, "RuntimeError", mrb->eStandardError_class); /* 15.2.28 */
+ e = mrb_define_class(mrb, "ScriptError", mrb->eException_class); /* 15.2.37 */
+ mrb_define_class(mrb, "SyntaxError", e); /* 15.2.38 */
}
diff --git a/src/vm.c b/src/vm.c
index f6922be37..7745c0433 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -233,7 +233,7 @@ mrb_funcall_with_block(mrb_state *mrb, mrb_value self, mrb_sym mid, int argc, mr
struct RClass *c;
mrb_sym undef = 0;
mrb_callinfo *ci;
- int n = mrb->ci->nregs;
+ int n;
mrb_value val;
if (!mrb->jmp) {
@@ -250,6 +250,10 @@ mrb_funcall_with_block(mrb_state *mrb, mrb_value self, mrb_sym mid, int argc, mr
return val;
}
+ if (!mrb->stack) {
+ stack_init(mrb);
+ }
+ n = mrb->ci->nregs;
if (argc < 0) {
mrb_raise(mrb, E_ARGUMENT_ERROR, "negative argc for funcall (%d)", argc);
}