From d29c2750894e0d3fb9ae2bda01aa92199daa4b7f Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@shill.local> Date: Wed, 22 Jul 2009 19:17:21 -0500 Subject: [PATCH] compiler.cfg.builder: Fix construction of ##return instructions from #return-recursive nodes --- basis/compiler/cfg/builder/builder-tests.factor | 10 ++++++++++ basis/compiler/cfg/builder/builder.factor | 9 +++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/basis/compiler/cfg/builder/builder-tests.factor b/basis/compiler/cfg/builder/builder-tests.factor index 90e42912a1..7381bdca55 100644 --- a/basis/compiler/cfg/builder/builder-tests.factor +++ b/basis/compiler/cfg/builder/builder-tests.factor @@ -9,6 +9,15 @@ byte-arrays kernel.private math slots.private ; : unit-test-cfg ( quot -- ) '[ _ test-cfg [ compute-predecessors check-cfg ] each ] [ ] swap unit-test ; +: blahblah ( nodes -- ? ) + { fixnum } declare [ + dup 3 bitand 1 = [ drop t ] [ + dup 3 bitand 2 = [ + blahblah + ] [ drop f ] if + ] if + ] any? ; inline recursive + { [ ] [ dup ] @@ -52,6 +61,7 @@ byte-arrays kernel.private math slots.private ; [ "int" { "int" } "cdecl" [ ] alien-callback ] [ swap - + * ] [ swap slot ] + [ blahblah ] } [ unit-test-cfg ] each diff --git a/basis/compiler/cfg/builder/builder.factor b/basis/compiler/cfg/builder/builder.factor index 48162156c8..7a7156d5c9 100755 --- a/basis/compiler/cfg/builder/builder.factor +++ b/basis/compiler/cfg/builder/builder.factor @@ -160,12 +160,13 @@ M: #shuffle emit-node [ [ [ out-r>> ] [ mapping>> ] bi ] dip '[ _ at _ at ] map rs-store ] 2bi ; ! #return -M: #return emit-node - drop ##branch begin-basic-block ##epilogue ##return ; +: emit-return ( -- ) + ##branch begin-basic-block ##epilogue ##return ; + +M: #return emit-node drop emit-return ; M: #return-recursive emit-node - label>> id>> loops get key? - [ ##epilogue ##return ] unless ; + label>> id>> loops get key? [ emit-return ] unless ; ! #terminate M: #terminate emit-node drop ##no-tco basic-block off ;