From b19a6672bf97dc4ccdee09e465ef2e6cbb6ffe9a Mon Sep 17 00:00:00 2001 From: slava Date: Thu, 10 Aug 2006 20:33:15 +0000 Subject: [PATCH] Simplify inference code a bit --- library/compiler/inference/words.factor | 29 ++++++++++--------------- 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/library/compiler/inference/words.factor b/library/compiler/inference/words.factor index d981ce5da6..bb3d7545cc 100644 --- a/library/compiler/inference/words.factor +++ b/library/compiler/inference/words.factor @@ -29,28 +29,21 @@ IN: inference TUPLE: rstate label base-case? ; -: nest-node ( -- dataflow current ) - dataflow-graph get dataflow-graph off - current-node get current-node off ; +: nest-node ( -- ) #entry node, ; -: unnest-node ( new-node dataflow current -- new-node ) - >r >r dataflow-graph get 1array over set-node-children - r> dataflow-graph set - r> current-node set ; +: unnest-node ( new-node -- new-node ) + dup node-param #return node, + dataflow-graph get 1array over set-node-children ; -: with-recursive-state ( word label base-case quot -- ) - >r 2array recursive-state [ swap add ] change r> - nest-node 2slip unnest-node ; inline +: add-recursive-state ( word label base-case -- ) + 2array recursive-state [ swap add ] change ; : inline-block ( word base-case -- node-block variables ) [ - copy-inference - >r gensym 2dup r> [ - dup #label >r - #entry node, - swap word-def infer-quot - #return node, r> - ] with-recursive-state + copy-inference nest-node + >r gensym 2dup r> add-recursive-state + #label >r word-def infer-quot r> + unnest-node ] make-hash ; : apply-infer ( hash -- ) @@ -62,7 +55,7 @@ GENERIC: collect-recursion* ( label node -- ) M: node collect-recursion* ( label node -- ) 2drop ; M: #call-label collect-recursion* ( label node -- ) - tuck node-param = [ node-in-d , ] [ drop ] if ; + tuck node-param eq? [ node-in-d , ] [ drop ] if ; : collect-recursion ( #label -- seq ) #! Collect the input stacks of all #call-label nodes that