[macruby-changes] [2808] MacRuby/trunk/vm.cpp
source_changes at macosforge.org
source_changes at macosforge.org
Wed Oct 14 19:43:29 PDT 2009
Revision: 2808
http://trac.macosforge.org/projects/ruby/changeset/2808
Author: lsansonetti at apple.com
Date: 2009-10-14 19:43:28 -0700 (Wed, 14 Oct 2009)
Log Message:
-----------
fixed a bug when loading scripts where the current VM state wasn't restored if an exception occurred
Modified Paths:
--------------
MacRuby/trunk/vm.cpp
Modified: MacRuby/trunk/vm.cpp
===================================================================
--- MacRuby/trunk/vm.cpp 2009-10-15 01:16:49 UTC (rev 2807)
+++ MacRuby/trunk/vm.cpp 2009-10-15 02:43:28 UTC (rev 2808)
@@ -3259,7 +3259,6 @@
rb_vm_binding_t *binding, bool inside_eval)
{
RoxorVM *vm = GET_VM();
- RoxorCompiler *compiler = RoxorCompiler::shared;
VALUE old_top_object = vm->get_current_top_object();
if (binding != NULL) {
@@ -3269,19 +3268,31 @@
vm->set_current_top_object(self);
}
Class old_class = GET_VM()->get_current_class();
- bool old_dynamic_class = compiler->is_dynamic_class();
+ bool old_dynamic_class = RoxorCompiler::shared->is_dynamic_class();
if (klass != 0) {
vm->set_current_class((Class)klass);
- compiler->set_dynamic_class(true);
+ RoxorCompiler::shared->set_dynamic_class(true);
}
- VALUE val = rb_vm_run(fname, node, binding, inside_eval);
+ struct Finally {
+ RoxorVM *vm;
+ bool old_dynamic_class;
+ Class old_class;
+ VALUE old_top_object;
+ Finally(RoxorVM *_vm, bool _dynamic_class, Class _class, VALUE _obj) {
+ vm = _vm;
+ old_dynamic_class = _dynamic_class;
+ old_class = _class;
+ old_top_object = _obj;
+ }
+ ~Finally() {
+ RoxorCompiler::shared->set_dynamic_class(old_dynamic_class);
+ vm->set_current_top_object(old_top_object);
+ vm->set_current_class(old_class);
+ }
+ } finalizer(vm, old_dynamic_class, old_class, old_top_object);
- compiler->set_dynamic_class(old_dynamic_class);
- vm->set_current_top_object(old_top_object);
- vm->set_current_class(old_class);
-
- return val;
+ return rb_vm_run(fname, node, binding, inside_eval);
}
extern "C"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20091014/7e69133f/attachment-0001.html>
More information about the macruby-changes
mailing list