[Gd-chatter] r10938 - trunk/fundev/sources/dylan

andreas at gwydiondylan.org andreas at gwydiondylan.org
Thu Nov 2 00:15:13 CET 2006


Author: andreas
Date: Thu Nov  2 00:15:11 2006
New Revision: 10938

Modified:
   trunk/fundev/sources/dylan/class-dynamic.dylan
   trunk/fundev/sources/dylan/slot-descriptor-dynamic.dylan
Log:
bug: 7192

We know what we're doing with calling add-method on a sealed function here. This fixes that annoying bug.



Modified: trunk/fundev/sources/dylan/class-dynamic.dylan
==============================================================================
--- trunk/fundev/sources/dylan/class-dynamic.dylan	(original)
+++ trunk/fundev/sources/dylan/class-dynamic.dylan	Thu Nov  2 00:15:11 2006
@@ -84,7 +84,6 @@
   class-library(iclass-class(x))
 end method;
 
-
 define method initialize 
     (class :: <class>, #rest initargs,
      #key superclasses, slots :: <sequence> = #[], 
@@ -105,7 +104,8 @@
 	    library: home-library(module),
 	    initargs);
   install-implementation-class(iclass, $empty-subjunctive-class-universe);
-  add-slot-methods(iclass, $empty-subjunctive-class-universe);
+  add-slot-methods(iclass, $empty-subjunctive-class-universe,
+                   override-sealing?: module ~= $runtime-module);
   complete-dependent-generic-functions(iclass, $empty-subjunctive-class-universe);
 end method initialize;
 
@@ -763,14 +763,15 @@
 
 
 define function add-slot-methods (iclass :: <implementation-class>,
-				  u :: <subjunctive-class-universe>)
+				  u :: <subjunctive-class-universe>,
+                                  #key override-sealing?)
  => ()
   let slotvec :: <simple-object-vector> = direct-slot-descriptors(iclass);
   for (sd :: <slot-descriptor> in slotvec)
     let g = slot-getter(sd);
-    if (g) add-getter-method(slot-owner(sd), g, sd) end;
+    if (g) add-getter-method(slot-owner(sd), g, sd, override-sealing?) end;
     let s = slot-setter(sd);
-    if (s) add-setter-method(slot-owner(sd), s, sd) end;
+    if (s) add-setter-method(slot-owner(sd), s, sd, override-sealing?) end;
   end for;
 end function;
 

Modified: trunk/fundev/sources/dylan/slot-descriptor-dynamic.dylan
==============================================================================
--- trunk/fundev/sources/dylan/slot-descriptor-dynamic.dylan	(original)
+++ trunk/fundev/sources/dylan/slot-descriptor-dynamic.dylan	Thu Nov  2 00:15:11 2006
@@ -18,7 +18,8 @@
 define method add-setter-method
     (class :: <class>,
      slot-setter :: <generic-function>,
-     descriptor :: <constant-slot-descriptor>)
+     descriptor :: <constant-slot-descriptor>,
+     override-sealing? :: <boolean>)
   values(#f, #f)
 end method add-setter-method;
 
@@ -263,20 +264,22 @@
 define method add-getter-method
     (class-NOT :: <class>,
      slot-getter :: <generic-function>,
-     descriptor :: <slot-descriptor>)
+     descriptor :: <slot-descriptor>,
+     override-sealing? :: <boolean>)
   let new-method = make-a-slot-method(descriptor, #f);
   %add-a-method(slot-getter, new-method, home-library(class-module(class-NOT)),
-		#t, #t, slot-method-sealed?(descriptor))
+		#t, ~ override-sealing?, slot-method-sealed?(descriptor))
 end method add-getter-method;
 
 
 define method add-setter-method
     (class-NOT :: <class>,
      slot-setter :: <generic-function>,
-     descriptor :: <slot-descriptor>)
+     descriptor :: <slot-descriptor>,
+     override-sealing? :: <boolean>)
   let new-method = make-a-slot-method(descriptor, #t);
   %add-a-method(slot-setter, new-method, home-library(class-module(class-NOT)),
-		#t, #t, slot-method-sealed?(descriptor))
+		#t, ~ override-sealing?, slot-method-sealed?(descriptor))
 end method add-setter-method;
 
 
@@ -306,14 +309,16 @@
 define method add-getter-method
     (class :: <class>,
      slot-getter :: <generic-function>,
-     descriptor :: <virtual-slot-descriptor>)
+     descriptor :: <virtual-slot-descriptor>,
+     override-sealing? :: <boolean>)
   values(#f, #f)
 end method add-getter-method;
 
 define method add-setter-method
     (class :: <class>,
      slot-setter :: <generic-function>,
-     descriptor :: <virtual-slot-descriptor>)
+     descriptor :: <virtual-slot-descriptor>,
+     override-sealing? :: <boolean>)
   values(#f, #f)
 end method add-setter-method;
 



More information about the chatter mailing list