[macruby-changes] [1116] MacRuby/branches/experimental
source_changes at macosforge.org
source_changes at macosforge.org
Mon Mar 23 17:05:15 PDT 2009
Revision: 1116
http://trac.macosforge.org/projects/ruby/changeset/1116
Author: lsansonetti at apple.com
Date: 2009-03-23 17:05:14 -0700 (Mon, 23 Mar 2009)
Log Message:
-----------
fixed singleton class definition, when passing a non-Array object as a splat argument inside an Array definition make sure to call #to_a if possible, fixed compilation under a given class/outer
Modified Paths:
--------------
MacRuby/branches/experimental/roxor.cpp
MacRuby/branches/experimental/vm_eval.c
Modified: MacRuby/branches/experimental/roxor.cpp
===================================================================
--- MacRuby/branches/experimental/roxor.cpp 2009-03-23 22:23:56 UTC (rev 1115)
+++ MacRuby/branches/experimental/roxor.cpp 2009-03-24 00:05:14 UTC (rev 1116)
@@ -392,7 +392,7 @@
public:
static RoxorVM *current;
- Class current_opened_class;
+ Class current_class;
VALUE current_top_object;
VALUE current_exception;
VALUE loaded_features;
@@ -2791,7 +2791,7 @@
Value *classVal;
if (nd_type(node) == NODE_SCLASS) {
- classVal = compile_singleton_class(compile_current_class());
+ classVal = compile_singleton_class(compile_node(node->nd_recv));
}
else {
assert(node->nd_cpath->nd_mid > 0);
@@ -4012,8 +4012,8 @@
void
rb_vm_set_const(VALUE outer, ID id, VALUE obj)
{
- if (outer == 0) {
- outer = (VALUE)GET_VM()->current_opened_class;
+ if (GET_VM()->current_class != NULL) {
+ outer = (VALUE)GET_VM()->current_class;
}
rb_const_set(outer, id, obj);
GET_VM()->const_defined(id);
@@ -4045,8 +4045,8 @@
{
assert(path > 0);
- if (outer == 0) {
- outer = (VALUE)GET_VM()->current_opened_class;
+ if (GET_VM()->current_class != NULL) {
+ outer = (VALUE)GET_VM()->current_class;
}
VALUE klass;
@@ -4124,7 +4124,13 @@
rb_ary_concat(ary, obj);
}
else {
- rb_ary_push(ary, obj);
+ VALUE ary2 = rb_check_convert_type(obj, T_ARRAY, "Array", "to_a");
+ if (!NIL_P(ary2)) {
+ rb_ary_concat(ary, ary2);
+ }
+ else {
+ rb_ary_push(ary, obj);
+ }
}
return ary;
}
@@ -4256,8 +4262,8 @@
void
rb_vm_prepare_method(Class klass, SEL sel, Function *func, NODE *node)
{
- if (klass == NULL) {
- klass = GET_VM()->current_opened_class;
+ if (GET_VM()->current_class != NULL) {
+ klass = GET_VM()->current_class;
}
IMP imp = GET_VM()->compile(func);
@@ -5297,13 +5303,14 @@
GET_VM()->current_block = NULL;
VALUE old_self = b->self;
b->self = self;
+ //Class old_class = GET_VM()->current_class;
+ //GET_VM()->current_class = (Class)klass;
- // TODO set klass as the default outer!
-
VALUE retval = rb_vm_block_eval0(b, argc, argv);
b->self = old_self;
GET_VM()->current_block = b;
+ //GET_VM()->current_class = old_class;
return retval;
}
@@ -5637,13 +5644,19 @@
VALUE
rb_vm_run_under(VALUE klass, VALUE self, const char *fname, NODE *node)
{
- // TODO honor klass
+ assert(klass != 0);
+ assert(self != 0);
+
VALUE old_top_object = GET_VM()->current_top_object;
GET_VM()->current_top_object = self;
+ Class old_class = GET_VM()->current_class;
+ GET_VM()->current_class = (Class)klass;
+
VALUE val = rb_vm_run(fname, node);
GET_VM()->current_top_object = old_top_object;
+ GET_VM()->current_class = old_class;
return val;
}
@@ -5756,7 +5769,7 @@
{
rb_cTopLevel = rb_define_class("TopLevel", rb_cObject);
- GET_VM()->current_opened_class = (Class)rb_cObject;
+ GET_VM()->current_class = NULL;
VALUE top_self = rb_obj_alloc(rb_cTopLevel);
rb_objc_retain((void *)top_self);
Modified: MacRuby/branches/experimental/vm_eval.c
===================================================================
--- MacRuby/branches/experimental/vm_eval.c 2009-03-23 22:23:56 UTC (rev 1115)
+++ MacRuby/branches/experimental/vm_eval.c 2009-03-24 00:05:14 UTC (rev 1116)
@@ -318,6 +318,9 @@
if (node == NULL) {
rb_raise(rb_eSyntaxError, "compile error");
}
+ if (klass == 0) {
+ klass = rb_cObject;
+ }
return rb_vm_run_under(klass, self, file, node);
}
@@ -498,7 +501,7 @@
VALUE klass;
if (SPECIAL_CONST_P(self)) {
- klass = Qnil;
+ klass = 0;
}
else {
klass = rb_singleton_class(self);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090323/589611fc/attachment-0001.html>
More information about the macruby-changes
mailing list