diff --git a/core/syntax/syntax.factor b/core/syntax/syntax.factor index 6361ddad61..91a453408d 100755 --- a/core/syntax/syntax.factor +++ b/core/syntax/syntax.factor @@ -183,13 +183,7 @@ IN: bootstrap.syntax "(" [ ")" parse-effect - word dup [ - swap - [ "declared-effect" set-word-prop ] - [ drop redefined ] - [ drop +inlined+ changed-definition ] - 2tri - ] [ 2drop ] if + word dup [ set-stack-effect ] [ 2drop ] if ] define-syntax "((" [ diff --git a/core/words/words.factor b/core/words/words.factor index 226c4949ff..806625aa83 100755 --- a/core/words/words.factor +++ b/core/words/words.factor @@ -144,6 +144,14 @@ M: object redefined drop ; dup +inlined+ changed-definition dup crossref? [ dup xref ] when drop ; +: set-stack-effect ( effect word -- ) + 2dup "declared-effect" word-prop = [ 2drop ] [ + swap + [ "declared-effect" set-word-prop ] + [ drop [ redefined ] [ +inlined+ changed-definition ] bi ] + 2bi + ] if ; + : define-declared ( word def effect -- ) pick swap "declared-effect" set-word-prop define ;