diff --git a/basis/compiler/compiler.factor b/basis/compiler/compiler.factor index eee00bfccb..7527f6b339 100644 --- a/basis/compiler/compiler.factor +++ b/basis/compiler/compiler.factor @@ -96,11 +96,11 @@ M: predicate-engine-word no-compile? "owner-generic" word-prop no-compile? ; : not-compiled-def ( word error -- def ) '[ _ _ not-compiled ] [ ] like ; +: deoptimize* ( word -- * ) + dup def>> deoptimize-with ; + : ignore-error ( word error -- * ) - drop - [ clear-compiler-error ] - [ dup def>> deoptimize-with ] - bi ; + drop [ clear-compiler-error ] [ deoptimize* ] bi ; : remember-error ( word error -- * ) [ swap compiler-error ] @@ -124,13 +124,13 @@ M: predicate-engine-word no-compile? "owner-generic" word-prop no-compile? ; : contains-breakpoints? ( -- ? ) dependencies get keys [ "break?" word-prop ] any? ; -: frontend ( word -- nodes ) +: frontend ( word -- tree ) #! If the word contains breakpoints, don't optimize it, since #! the walker does not support this. dup optimize? [ [ [ build-tree ] [ deoptimize ] recover optimize-tree ] keep - contains-breakpoints? [ nip dup def>> deoptimize-with ] [ drop ] if - ] [ dup def>> deoptimize-with ] if ; + contains-breakpoints? [ nip deoptimize* ] [ drop ] if + ] [ deoptimize* ] if ; : compile-dependency ( word -- ) #! If a word calls an unoptimized word, try to compile the callee. @@ -150,7 +150,7 @@ t compile-dependencies? set-global [ compile-dependencies ] bi ; -: backend ( nodes word -- ) +: backend ( tree word -- ) build-cfg [ optimize-cfg build-mr