From ec71ee094078ecf0dafdca0b6874dda9cb142568 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Wed, 28 May 2008 19:34:18 -0500 Subject: [PATCH] Bug fixes --- core/classes/classes-tests.factor | 4 ++-- core/classes/tuple/tuple-tests.factor | 11 ++++++++++- core/classes/tuple/tuple.factor | 6 ------ core/compiler/units/units.factor | 16 +++++++++++++--- core/generic/generic.factor | 16 ++++++++++------ core/parser/parser-tests.factor | 4 ++-- core/parser/parser.factor | 7 +++---- core/sequences/sequences-tests.factor | 6 ------ core/sets/sets-tests.factor | 6 ++++++ core/syntax/syntax.factor | 7 ++++--- core/words/words.factor | 4 +++- 11 files changed, 53 insertions(+), 34 deletions(-) diff --git a/core/classes/classes-tests.factor b/core/classes/classes-tests.factor index 8d20da78b5..eb55b5fccd 100755 --- a/core/classes/classes-tests.factor +++ b/core/classes/classes-tests.factor @@ -166,6 +166,6 @@ GENERIC: method-forget-test TUPLE: method-forget-class ; M: method-forget-class method-forget-test ; -[ f ] [ \ method-forget-test "methods" assoc-empty? ] unit-test +[ f ] [ \ method-forget-test "methods" word-prop assoc-empty? ] unit-test [ ] [ [ \ method-forget-class forget ] with-compilation-unit ] unit-test -[ t ] [ \ method-forget-test "methods" assoc-empty? ] unit-test +[ t ] [ \ method-forget-test "methods" word-prop assoc-empty? ] unit-test diff --git a/core/classes/tuple/tuple-tests.factor b/core/classes/tuple/tuple-tests.factor index 0cf7ea3510..ab6c139f7b 100755 --- a/core/classes/tuple/tuple-tests.factor +++ b/core/classes/tuple/tuple-tests.factor @@ -4,7 +4,7 @@ namespaces quotations sequences.private classes continuations generic.standard effects classes.tuple classes.tuple.private arrays vectors strings compiler.units accessors classes.algebra calendar prettyprint io.streams.string splitting inspector -columns math.order ; +columns math.order classes.private ; IN: classes.tuple.tests TUPLE: rect x y w h ; @@ -543,6 +543,7 @@ TUPLE: another-forget-accessors-test ; ! Missing error check [ "IN: classes.tuple.tests USE: words TUPLE: wrong-superclass < word ;" eval ] must-fail +! Class forget messyness TUPLE: subclass-forget-test ; TUPLE: subclass-forget-test-1 < subclass-forget-test ; @@ -551,6 +552,14 @@ TUPLE: subclass-forget-test-3 < subclass-forget-test-2 ; [ ] [ "IN: classes.tuple.tests FORGET: subclass-forget-test" eval ] unit-test +[ H{ { subclass-forget-test-2 subclass-forget-test-2 } } ] +[ subclass-forget-test-2 class-usages ] +unit-test + +[ H{ { subclass-forget-test-3 subclass-forget-test-3 } } ] +[ subclass-forget-test-3 class-usages ] +unit-test + [ f ] [ subclass-forget-test-1 tuple-class? ] unit-test [ f ] [ subclass-forget-test-2 tuple-class? ] unit-test [ subclass-forget-test-3 new ] must-fail diff --git a/core/classes/tuple/tuple.factor b/core/classes/tuple/tuple.factor index f4054c8468..4e6ce0d2bb 100755 --- a/core/classes/tuple/tuple.factor +++ b/core/classes/tuple/tuple.factor @@ -226,12 +226,6 @@ M: tuple-class reset-class } reset-props ] bi ; -: reset-tuple-class ( class -- ) - [ [ reset-class ] [ update-map- ] bi ] each-subclass ; - -M: tuple-class forget* - [ reset-tuple-class ] [ call-next-method ] bi ; - M: tuple-class rank-class drop 0 ; M: tuple clone diff --git a/core/compiler/units/units.factor b/core/compiler/units/units.factor index 729cfcd179..c2e84429cf 100755 --- a/core/compiler/units/units.factor +++ b/core/compiler/units/units.factor @@ -83,7 +83,14 @@ SYMBOL: update-tuples-hook call-recompile-hook call-update-tuples-hook dup [ drop compiled-crossref? ] assoc-contains? modify-code-heap - updated-definitions notify-definition-observers ; + ; + +: with-nested-compilation-unit ( quot -- ) + [ + H{ } clone changed-definitions set + H{ } clone outdated-tuples set + [ finish-compilation-unit ] [ ] cleanup + ] with-scope ; inline : with-compilation-unit ( quot -- ) [ @@ -92,8 +99,11 @@ SYMBOL: update-tuples-hook H{ } clone outdated-tuples set new-definitions set old-definitions set - [ finish-compilation-unit ] - [ ] cleanup + [ + finish-compilation-unit + updated-definitions + notify-definition-observers + ] [ ] cleanup ] with-scope ; inline : compile-call ( quot -- ) diff --git a/core/generic/generic.factor b/core/generic/generic.factor index e446689303..b9a556e316 100755 --- a/core/generic/generic.factor +++ b/core/generic/generic.factor @@ -147,12 +147,16 @@ M: method-body forget* [ implementors ] [ [ swap 2array ] curry ] bi map forget-all ; M: class forget* ( class -- ) - { - [ forget-methods ] - [ update-map- ] - [ reset-class ] - [ call-next-method ] - } cleave ; + [ + class-usages [ + drop + [ forget-methods ] + [ update-map- ] + [ reset-class ] + tri + ] assoc-each + ] + [ call-next-method ] bi ; M: assoc update-methods ( assoc -- ) implementors* [ make-generic ] each ; diff --git a/core/parser/parser-tests.factor b/core/parser/parser-tests.factor index e8199d3520..37eb5f148e 100755 --- a/core/parser/parser-tests.factor +++ b/core/parser/parser-tests.factor @@ -461,10 +461,10 @@ must-fail-with "methods" word-prop assoc-size ] unit-test -[ [ ] ] [ +[ ] [ 2 [ "IN: parser.tests DEFER: twice-fails FORGET: twice-fails MIXIN: twice-fails" - "twice-fails-test" parse-stream + "twice-fails-test" parse-stream drop ] times ] unit-test diff --git a/core/parser/parser.factor b/core/parser/parser.factor index f08ba8fbc2..3f46d1dd30 100755 --- a/core/parser/parser.factor +++ b/core/parser/parser.factor @@ -357,10 +357,9 @@ M: staging-violation summary "A parsing word cannot be used in the same file it is defined in." ; : execute-parsing ( word -- ) - new-definitions get [ - dupd first key? [ staging-violation ] when - ] when* - execute ; + [ changed-definitions get key? [ staging-violation ] when ] + [ execute ] + bi ; : parse-step ( accum end -- accum ? ) scan-word { diff --git a/core/sequences/sequences-tests.factor b/core/sequences/sequences-tests.factor index 0511721c18..81384a40c4 100755 --- a/core/sequences/sequences-tests.factor +++ b/core/sequences/sequences-tests.factor @@ -215,12 +215,6 @@ unit-test 3 V{ 1 2 3 4 5 6 } clone [ delete-nth ] keep ] unit-test -[ V{ 1 2 3 } ] -[ 3 V{ 1 2 } clone [ adjoin ] keep ] unit-test - -[ V{ 1 2 3 } ] -[ 3 V{ 1 3 2 } clone [ adjoin ] keep ] unit-test - ! erg's random tester found this one [ SBUF" 12341234" ] [ 9 dup "1234" swap push-all dup dup swap push-all diff --git a/core/sets/sets-tests.factor b/core/sets/sets-tests.factor index 86ee100da5..b6e6443afa 100644 --- a/core/sets/sets-tests.factor +++ b/core/sets/sets-tests.factor @@ -15,3 +15,9 @@ IN: sets.tests [ V{ } ] [ { } { } union ] unit-test [ V{ 1 2 3 4 } ] [ { 1 2 3 } { 2 3 4 } union ] unit-test + +[ V{ 1 2 3 } ] +[ 3 V{ 1 2 } clone [ adjoin ] keep ] unit-test + +[ V{ 1 2 3 } ] +[ 3 V{ 1 3 2 } clone [ adjoin ] keep ] unit-test diff --git a/core/syntax/syntax.factor b/core/syntax/syntax.factor index 2410185b18..7ed79f77f1 100755 --- a/core/syntax/syntax.factor +++ b/core/syntax/syntax.factor @@ -101,7 +101,7 @@ IN: bootstrap.syntax "DEFER:" [ scan in get create - dup old-definitions get first delete-at + dup old-definitions get [ delete-at ] with each set-word ] define-syntax @@ -189,8 +189,9 @@ IN: bootstrap.syntax "MAIN:" [ scan-word in get vocab set-vocab-main ] define-syntax "<<" [ - [ \ >> parse-until >quotation ] with-compilation-unit - call + [ + \ >> parse-until >quotation + ] with-nested-compilation-unit call ] define-syntax "call-next-method" [ diff --git a/core/words/words.factor b/core/words/words.factor index 5812516912..5549f98010 100755 --- a/core/words/words.factor +++ b/core/words/words.factor @@ -175,7 +175,9 @@ PRIVATE> : define-symbol ( word -- ) dup [ ] curry define-inline ; -: reset-word ( word -- ) +GENERIC: reset-word ( word -- ) + +M: word reset-word { "unannotated-def" "parsing" "inline" "foldable" "flushable"