]> gitweb.factorcode.org Git - factor.git/blobdiff - core/classes/classes.factor
Fixing everything for mandatory stack effects
[factor.git] / core / classes / classes.factor
index 91fc4c60a739583f81e25649296360fa9a5bc5be..593213c5c637e9912155939e9d754172f267f9fa 100755 (executable)
@@ -67,8 +67,6 @@ GENERIC: reset-class ( class -- )
 
 M: word reset-class drop ;
 
-<PRIVATE
-
 ! update-map
 : class-uses ( class -- seq )
     [
@@ -81,6 +79,8 @@ M: word reset-class drop ;
 : class-usages ( class -- assoc )
     [ update-map get at ] closure ;
 
+<PRIVATE
+
 : update-map+ ( class -- )
     dup class-uses update-map get add-vertex ;
 
@@ -100,6 +100,7 @@ M: word reset-class drop ;
 : (define-class) ( word props -- )
     >r
     dup reset-class
+    dup class? [ dup new-class ] unless
     dup deferred? [ dup define-symbol ] when
     dup word-props
     r> assoc-union over set-word-props
@@ -115,13 +116,13 @@ GENERIC: update-class ( class -- )
 
 M: class update-class drop ;
 
-GENERIC: update-methods ( assoc -- )
+GENERIC: update-methods ( class assoc -- )
 
 : update-classes ( class -- )
-    class-usages
-    [ [ drop update-class ] assoc-each ]
+    dup class-usages
+    [ nip keys [ update-class ] each ]
     [ update-methods ]
-    bi ;
+    2bi ;
 
 : define-class ( word superclass members participants metaclass -- )
     #! If it was already a class, update methods after.