diff --git a/basis/compiler/cfg/stack-analysis/stack-analysis.factor b/basis/compiler/cfg/stack-analysis/stack-analysis.factor index 419c43c47e..bce3064a9e 100644 --- a/basis/compiler/cfg/stack-analysis/stack-analysis.factor +++ b/basis/compiler/cfg/stack-analysis/stack-analysis.factor @@ -278,9 +278,6 @@ ERROR: cannot-merge-poisoned states ; : block-in-state ( bb -- states ) dup predecessors>> state-out get '[ _ at ] map merge-states ; -: maybe-set-at ( value key assoc -- changed? ) - 3dup at* [ = [ 3drop f ] [ set-at t ] if ] [ 2drop set-at t ] if ; - : set-block-in-state ( state bb -- ) [ clone ] dip state-in get set-at ; diff --git a/core/assocs/assocs-tests.factor b/core/assocs/assocs-tests.factor index fc74df6d45..c21cac2632 100644 --- a/core/assocs/assocs-tests.factor +++ b/core/assocs/assocs-tests.factor @@ -142,3 +142,7 @@ unit-test [ 1 f ] [ 1 H{ } ?at ] unit-test [ 2 t ] [ 1 H{ { 1 2 } } ?at ] unit-test + +[ f ] [ 1 2 H{ { 2 1 } } maybe-set-at ] unit-test +[ t ] [ 1 3 H{ { 2 1 } } clone maybe-set-at ] unit-test +[ t ] [ 3 2 H{ { 2 1 } } clone maybe-set-at ] unit-test diff --git a/core/assocs/assocs.factor b/core/assocs/assocs.factor index e783ef81c4..7fc3eae00c 100755 --- a/core/assocs/assocs.factor +++ b/core/assocs/assocs.factor @@ -22,6 +22,9 @@ M: assoc assoc-like drop ; : ?at ( key assoc -- value/key ? ) 2dup at* [ 2nip t ] [ 2drop f ] if ; inline +: maybe-set-at ( value key assoc -- changed? ) + 3dup at* [ = [ 3drop f ] [ set-at t ] if ] [ 2drop set-at t ] if ; +