From 16e7efc481bed52285f429c99fd9edcfef022574 Mon Sep 17 00:00:00 2001 From: slava Date: Tue, 21 Nov 2006 09:05:46 +0000 Subject: [PATCH] Improve dynamic scope inference --- library/compiler/inference/variables.factor | 13 +++++++++++-- library/compiler/test/inference.factor | 2 ++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/library/compiler/inference/variables.factor b/library/compiler/inference/variables.factor index 313e799630..54325a3d9b 100644 --- a/library/compiler/inference/variables.factor +++ b/library/compiler/inference/variables.factor @@ -29,7 +29,11 @@ TUPLE: inferred-vars reads writes reads-globals writes-globals ; dup meta-n get [ hash-member? ] contains-with? [ drop ] [ - inferred-vars get inferred-vars-reads push-new + inferred-vars get 2dup inferred-vars-writes member? [ + 2drop + ] [ + inferred-vars-reads push-new + ] if ] if ; : apply-var-write ( symbol -- ) @@ -40,7 +44,12 @@ TUPLE: inferred-vars reads writes reads-globals writes-globals ; ] if ; : apply-global-read ( symbol -- ) - inferred-vars get inferred-vars-reads-globals push-new ; + inferred-vars get + 2dup inferred-vars-writes-globals member? [ + 2drop + ] [ + inferred-vars-reads-globals push-new + ] if ; : apply-global-write ( symbol -- ) inferred-vars get inferred-vars-writes-globals push-new ; diff --git a/library/compiler/test/inference.factor b/library/compiler/test/inference.factor index 06c49d0fef..02bce58c0a 100644 --- a/library/compiler/test/inference.factor +++ b/library/compiler/test/inference.factor @@ -378,3 +378,5 @@ SYMBOL: x [ [ >n ] [ ] if ] unit-test-fails [ V{ 2 3 } ] [ [ [ [ 2 get 3 throw ] [ 3 get ] if ] with-scope ] infer drop inferred-vars-reads ] unit-test + +[ V{ } ] [ [ 5 set 5 get ] infer drop inferred-vars-reads ] unit-test