diff --git a/library/compiler/optimizer/class-infer.factor b/library/compiler/optimizer/class-infer.factor index 0e05e8ea46..5a7d2cce4f 100644 --- a/library/compiler/optimizer/class-infer.factor +++ b/library/compiler/optimizer/class-infer.factor @@ -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