From 8c23dbb554c44ec9bbdea55314b87b72435fbf35 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sat, 27 Nov 2004 05:51:28 +0000 Subject: [PATCH] inferencer fixes --- library/inference/branches.factor | 4 ++-- library/inference/dataflow.factor | 2 +- library/inference/inference.factor | 10 +++++++--- library/test/inference.factor | 2 ++ 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/library/inference/branches.factor b/library/inference/branches.factor index 3375f1e4f5..0ebe3f288d 100644 --- a/library/inference/branches.factor +++ b/library/inference/branches.factor @@ -93,12 +93,12 @@ DEFER: (infer) : recursive-branch ( quot -- ? ) #! Set base case if inference didn't fail. [ - car infer-branch drop recursive-state get set-base t + car infer-branch drop recursive-state get set-base t ] [ [ drop f ] when ] catch ; -: infer-branches ( consume instruction brachlist -- ) +: infer-branches ( consume instruction branchlist -- ) #! Recursive stack effect inference is done here. If one of #! the branches has an undecidable stack effect, we set the #! base case to this stack effect and try again. diff --git a/library/inference/dataflow.factor b/library/inference/dataflow.factor index df2067f616..8f2798965f 100644 --- a/library/inference/dataflow.factor +++ b/library/inference/dataflow.factor @@ -53,7 +53,7 @@ SYMBOL: 2GENERIC unit cons cons dataflow-graph cons@ ; : dataflow-literal, ( lit -- ) - >r 0 PUSH r> dataflow, ; + >r f PUSH r> dataflow, ; : dataflow-word, ( in word -- ) >r count CALL r> dataflow, ; diff --git a/library/inference/inference.factor b/library/inference/inference.factor index fcfc725034..b930c246e2 100644 --- a/library/inference/inference.factor +++ b/library/inference/inference.factor @@ -138,9 +138,13 @@ DEFER: apply-word : set-base ( [ in | stack ] rstate -- ) #! Set the base case of the current word. - >r uncons vector-length cons r> car cdr [ - entry-effect get swap decompose base-case set - ] bind ; + dup [ + >r uncons vector-length cons r> car cdr [ + entry-effect get swap decompose base-case set + ] bind + ] [ + 2drop + ] ifte ; : infer ( quot -- [ in | out ] ) #! Stack effect of a quotation. diff --git a/library/test/inference.factor b/library/test/inference.factor index 6ce15aa259..9de9069ae9 100644 --- a/library/test/inference.factor +++ b/library/test/inference.factor @@ -193,3 +193,5 @@ SYMBOL: sym-test [ [ 1 | 0 ] ] [ [ >n ] infer ] unit-test [ [ 0 | 1 ] ] [ [ n> ] infer ] unit-test + +[ [ 1 | 1 ] ] [ [ get ] infer ] unit-test