From 498986fe886c8e0ff9e4750a2e37126852e16bf7 Mon Sep 17 00:00:00 2001 From: Slava Pestov <slava@slava-pestovs-macbook-pro.local> Date: Thu, 10 Jul 2008 02:11:49 -0500 Subject: [PATCH] Fix tuple redefinition bug --- core/classes/tuple/tuple-tests.factor | 14 ++++++++++++++ core/classes/tuple/tuple.factor | 12 ++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/core/classes/tuple/tuple-tests.factor b/core/classes/tuple/tuple-tests.factor index a269fad556..b89abdfd82 100755 --- a/core/classes/tuple/tuple-tests.factor +++ b/core/classes/tuple/tuple-tests.factor @@ -683,3 +683,17 @@ DEFER: error-y [ t ] [ \ error-y tuple-class? ] unit-test [ f ] [ \ error-y generic? ] unit-test + +[ ] [ + "IN: classes.tuple.tests TUPLE: forget-subclass-test ; TUPLE: forget-subclass-test' < forget-subclass-test ;" + <string-reader> "forget-subclass-test" parse-stream + drop +] unit-test + +[ ] [ "forget-subclass-test'" "classes.tuple.tests" lookup new "bad-object" set ] unit-test + +[ ] [ + "IN: classes.tuple.tests TUPLE: forget-subclass-test a ;" + <string-reader> "forget-subclass-test" parse-stream + drop +] unit-test diff --git a/core/classes/tuple/tuple.factor b/core/classes/tuple/tuple.factor index 8471aa918a..6cf6a9897a 100755 --- a/core/classes/tuple/tuple.factor +++ b/core/classes/tuple/tuple.factor @@ -194,13 +194,17 @@ ERROR: bad-superclass class ; [ permute-slots ] [ class>> ] bi slots>tuple ; +: outdated-tuple? ( tuple assoc -- ? ) + over tuple? [ + [ [ layout-of ] dip key? ] + [ drop class "forgotten" word-prop not ] + 2bi and + ] [ 2drop f ] if ; + : update-tuples ( -- ) outdated-tuples get dup assoc-empty? [ drop ] [ - [ - over tuple? - [ >r layout-of r> key? ] [ 2drop f ] if - ] curry instances + [ outdated-tuple? ] curry instances dup [ update-tuple ] map become ] if ;