]> gitweb.factorcode.org Git - factor.git/commitdiff
Type inference for clone and (clone)
authorslava <slava@factorcode.org>
Tue, 2 May 2006 10:13:43 +0000 (10:13 +0000)
committerslava <slava@factorcode.org>
Tue, 2 May 2006 10:13:43 +0000 (10:13 +0000)
library/compiler/optimizer/class-infer.factor

index 0e05e8ea461d23cddf164e68ee564c72d2d98ad4..5a7d2cce4f741299bc51e55f6fc46a4d076b4383 100644 (file)
@@ -107,23 +107,26 @@ M: node child-ties ( node -- seq )
     ] if ;
 
 \ make-tuple [
-    dup node-in-d first value-literal 1array
+    node-in-d first value-literal 1array
 ] "output-classes" set-word-prop
 
+{ clone (clone) } [
+    [
+        node-in-d [ value-class* ] map
+    ] "output-classes" set-word-prop
+] each
+
 : output-classes ( node -- seq )
     dup node-param "output-classes" word-prop [
         call
     ] [
         node-param "infer-effect" word-prop second
         dup integer? [ drop f ] when
-    ] ?if ;
+    ] if* ;
 
 M: #call infer-classes* ( node -- )
-    dup node-param [
-        dup create-ties
-        dup output-classes
-        [ over node-out-d intersect-classes ] when*
-    ] when drop ;
+    dup create-ties dup output-classes
+    [ swap node-out-d intersect-classes ] [ drop ] if* ;
 
 M: #push infer-classes* ( node -- )
     node-out-d