diff --git a/library/inference/branches.factor b/library/inference/branches.factor index fc16268090..048496483e 100644 --- a/library/inference/branches.factor +++ b/library/inference/branches.factor @@ -103,12 +103,9 @@ namespaces prettyprint sequences strings unparser vectors words ; #ifte pop-d drop infer-branches ] "infer" set-word-prop -: vtable-value ( rstate vtable -- seq ) - [ swap ] map-with ; - USE: kernel-internals \ dispatch [ - pop-literal vtable-value + pop-literal nip [ ] map #dispatch pop-d drop infer-branches ] "infer" set-word-prop diff --git a/library/inference/inference.factor b/library/inference/inference.factor index 9fe87e91f9..de6e008f1c 100644 --- a/library/inference/inference.factor +++ b/library/inference/inference.factor @@ -66,7 +66,7 @@ GENERIC: apply-object : apply-literal ( obj -- ) #! Literals are annotated with the current recursive #! state. - recursive-state get push-d 1 #push node, ; + push-d 1 #push node, ; M: object apply-object apply-literal ; diff --git a/library/inference/values.factor b/library/inference/values.factor index 178b524445..1f0cdfd8a8 100644 --- a/library/inference/values.factor +++ b/library/inference/values.factor @@ -5,21 +5,20 @@ USING: generic kernel lists namespaces sequences unparser words ; TUPLE: value recursion safe? ; -C: value ( recursion -- value ) - [ t swap set-value-safe? ] keep - [ set-value-recursion ] keep ; +C: value ( rstate -- value ) + t over set-value-safe? + recursive-state get over set-value-recursion ; M: value = eq? ; TUPLE: computed ; -C: computed ( -- value ) - recursive-state get over set-delegate ; +C: computed ( -- value ) over set-delegate ; TUPLE: literal value ; -C: literal ( obj rstate -- value ) - [ >r r> set-delegate ] keep +C: literal ( obj -- value ) + over set-delegate [ set-literal-value ] keep ; M: value literal-value ( value -- ) @@ -34,7 +33,7 @@ M: value literal-value ( value -- ) TUPLE: meet values ; C: meet ( values -- value ) - [ set-meet-values ] keep f over set-delegate ; + over set-delegate [ set-meet-values ] keep ; PREDICATE: tuple safe-literal ( obj -- ? ) dup literal? [ value-safe? ] [ drop f ] ifte ; diff --git a/library/test/compiler/optimizer.factor b/library/test/compiler/optimizer.factor index 31b9f6c848..aa4d0c8c40 100644 --- a/library/test/compiler/optimizer.factor +++ b/library/test/compiler/optimizer.factor @@ -23,7 +23,7 @@ USE: sequences [ [ [ 1 ] [ 2 ] ] ] [ [ [ 1 ] [ 2 ] ifte ] kill-set* ] unit-test [ [ t t f ] ] [ - [ 1 2 3 ] [ f ] map + [ 1 2 3 ] [ ] map [ [ literal-value 2 <= ] subset ] keep in-d-node <#drop> kill-mask ] unit-test