X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=blobdiff_plain;f=core%2Feffects%2Feffects.factor;h=8d622bf8cf0ae0bd79d1706e391f1087d4183fc3;hp=f14f5cfecb35a8ae4c8705c0aa6521710a2fc53e;hb=2e1562ca8d545f3dc91995869b1cc1b230ad3cbb;hpb=9abfeafd1dbb42055e408c5becc34441868528d3 diff --git a/core/effects/effects.factor b/core/effects/effects.factor index f14f5cfecb..8d622bf8cf 100644 --- a/core/effects/effects.factor +++ b/core/effects/effects.factor @@ -27,7 +27,7 @@ TUPLE: effect [ out>> length ] [ in>> length ] bi - ; inline : variable-effect? ( effect -- ? ) - [ in-var>> ] [ out-var>> ] bi or ; + dup in-var>> [ drop t ] [ out-var>> ] if ; : bivariable-effect? ( effect -- ? ) [ in-var>> ] [ out-var>> ] bi = not ; @@ -44,10 +44,11 @@ TUPLE: effect } cond 2nip ; inline : effect= ( effect1 effect2 -- ? ) - [ [ in>> length ] same? ] - [ [ out>> length ] same? ] - [ [ terminated?>> ] same? ] - 2tri and and ; + 2dup [ in>> length ] same? [ + 2dup [ out>> length ] same? [ + [ terminated?>> ] same? + ] [ 2drop f ] if + ] [ 2drop f ] if ; GENERIC: effect>string ( obj -- str ) M: string effect>string ; @@ -105,13 +106,7 @@ M: word stack-effect M: deferred stack-effect call-next-method ( -- * ) or ; M: effect clone - { - [ in>> clone ] - [ out>> clone ] - [ terminated?>> ] - [ in-var>> ] - [ out-var>> ] - } cleave effect boa ; + (clone) [ clone ] change-in [ clone ] change-out ; : stack-height ( word -- n ) stack-effect effect-height ; inline