[macruby-changes] [1244] MacRuby/branches/experimental

source_changes at macosforge.org source_changes at macosforge.org
Sat Mar 28 20:32:35 PDT 2009


Revision: 1244
          http://trac.macosforge.org/projects/ruby/changeset/1244
Author:   lsansonetti at apple.com
Date:     2009-03-28 20:32:31 -0700 (Sat, 28 Mar 2009)
Log Message:
-----------
fixed const lookup from a metaclass

Modified Paths:
--------------
    MacRuby/branches/experimental/class.c
    MacRuby/branches/experimental/roxor.cpp

Modified: MacRuby/branches/experimental/class.c
===================================================================
--- MacRuby/branches/experimental/class.c	2009-03-29 03:31:28 UTC (rev 1243)
+++ MacRuby/branches/experimental/class.c	2009-03-29 03:32:31 UTC (rev 1244)
@@ -351,8 +351,9 @@
 {
     if (RCLASS_SINGLETON(klass)) {
 	static ID attachedId = 0;
-	if (attachedId == 0)
+	if (attachedId == 0) {
 	    attachedId = rb_intern("__attached__");
+	}
 	rb_ivar_set(klass, attachedId, obj);
     }
 }
@@ -1158,7 +1159,9 @@
 	    case T_CLASS:
 	    case T_MODULE:
 		klass = *(VALUE *)obj;
+		rb_vm_set_outer(klass, obj);
 		break;
+
 	    default:
 		klass = rb_make_metaclass(obj, RBASIC(obj)->klass);
 		break;

Modified: MacRuby/branches/experimental/roxor.cpp
===================================================================
--- MacRuby/branches/experimental/roxor.cpp	2009-03-29 03:31:28 UTC (rev 1243)
+++ MacRuby/branches/experimental/roxor.cpp	2009-03-29 03:32:31 UTC (rev 1244)
@@ -504,11 +504,17 @@
 
 	void set_outer(Class klass, Class mod) {
 	    struct rb_vm_outer *mod_outer = get_outer(mod);
-	    struct rb_vm_outer *class_outer = (struct rb_vm_outer *)
-		malloc(sizeof(struct rb_vm_outer));
-	    class_outer->klass = klass;
-	    class_outer->outer = mod_outer;
-	    outers[klass] = class_outer;
+	    struct rb_vm_outer *class_outer = get_outer(klass);
+	    if (class_outer == NULL || class_outer->outer != mod_outer) {
+		if (class_outer != NULL) {
+		    free(class_outer);
+		}
+		class_outer = (struct rb_vm_outer *)
+		    malloc(sizeof(struct rb_vm_outer));
+		class_outer->klass = klass;
+		class_outer->outer = mod_outer;
+		outers[klass] = class_outer;
+	    }
 	}
 };
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090328/3d128303/attachment.html>


More information about the macruby-changes mailing list