diff --git a/core/stack-checker/row-polymorphism/row-polymorphism.factor b/core/stack-checker/row-polymorphism/row-polymorphism.factor index 0aea1268f2..5e2b2481ac 100644 --- a/core/stack-checker/row-polymorphism/row-polymorphism.factor +++ b/core/stack-checker/row-polymorphism/row-polymorphism.factor @@ -34,7 +34,10 @@ IN: stack-checker.row-polymorphism [ vars (check-variable) ] keep ; inline :: unify-variables ( in-diff in-ok? in-var out-diff out-ok? out-var vars -- ? ) - { [ in-ok? ] [ out-ok? ] [ in-diff out-diff = ] } 0&& dup [ + in-ok? + out-ok? and + in-diff out-diff = and + dup [ in-var [ in-diff swap vars adjust-variable ] when* out-var [ out-diff swap vars adjust-variable ] when* ] when ; @@ -42,19 +45,19 @@ IN: stack-checker.row-polymorphism ! A bit of a hack. If the declared effect is one-sided monomorphic and the actual effect is a ! shallow subtype of the root effect, adjust it here :: (balance-actual-depth) ( declared actual -- depth/f ) - { - { [ { - [ declared in-var>> ] - [ declared out-var>> not ] - [ actual out>> length declared out>> length < ] - } 0&& ] [ declared out>> length actual out>> length - ] } - { [ { - [ declared in-var>> not ] - [ declared out-var>> ] - [ actual in>> length declared in>> length < ] - } 0&& ] [ declared in>> length actual in>> length - ] } - [ f ] - } cond ; + declared in-var>> + declared out-var>> not and + actual out>> length declared out>> length < and [ + declared out>> length actual out>> length - + ] [ + declared in-var>> not + declared out-var>> and + actual in>> length declared in>> length < and [ + declared in>> length actual in>> length - + ] [ + f + ] if + ] if ; : (balance-by) ( effect n -- effect' ) "x" swap