Revision
4462
Author
lsansonetti@apple.com
Date
2010-08-24 14:50:09 -0700 (Tue, 24 Aug 2010)

Log Message

avoid mutual recursion while setting outers

Modified Paths

Diff

Modified: MacRuby/trunk/vm.cpp (4461 => 4462)


--- MacRuby/trunk/vm.cpp	2010-08-24 16:14:21 UTC (rev 4461)
+++ MacRuby/trunk/vm.cpp	2010-08-24 21:50:09 UTC (rev 4462)
@@ -1273,17 +1273,19 @@
 void
 RoxorCore::set_outer(Class klass, Class mod) 
 {
-    struct rb_vm_outer *mod_outer = get_outer(mod);
-    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);
+    if (klass != mod) {
+	struct rb_vm_outer *mod_outer = get_outer(mod);
+	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;
 	}
-	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;
     }
 }