From 9b492b55e0b4f5b944974f71c6bbdc8c2f668cfb Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Tue, 4 Nov 2008 02:17:37 -0600 Subject: [PATCH] Fix minor leak: class-caches were not reset if a class was forgotten --- core/classes/classes-tests.factor | 13 ++++++++++++- core/classes/classes.factor | 3 ++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/core/classes/classes-tests.factor b/core/classes/classes-tests.factor index 1dee6a095c..dd12674cc4 100644 --- a/core/classes/classes-tests.factor +++ b/core/classes/classes-tests.factor @@ -3,7 +3,8 @@ kernel math namespaces parser prettyprint sequences strings tools.test vectors words quotations classes classes.private classes.union classes.mixin classes.predicate classes.algebra vectors definitions source-files -compiler.units kernel.private sorting vocabs ; +compiler.units kernel.private sorting vocabs memory eval +accessors ; IN: classes.tests [ t ] [ 3 object instance? ] unit-test @@ -27,3 +28,13 @@ M: method-forget-class method-forget-test ; implementors-map get keys [ natural-sort ] bi@ = ] unit-test + +! Minor leak +[ ] [ "IN: classes.tests TUPLE: forget-me ;" eval ] unit-test +[ ] [ f \ word set-global ] unit-test +[ ] [ "IN: classes.tests USE: kernel USE: classes.algebra forget-me tuple class<= drop" eval ] unit-test +[ ] [ "IN: classes.tests FORGET: forget-me" eval ] unit-test +[ 0 ] [ + [ word? ] instances + [ [ name>> "forget-me" = ] [ vocabulary>> "classes.tests" = ] bi and ] count +] unit-test diff --git a/core/classes/classes.factor b/core/classes/classes.factor index dcb69c9149..70fb869c5c 100644 --- a/core/classes/classes.factor +++ b/core/classes/classes.factor @@ -176,7 +176,8 @@ GENERIC: class-forgotten ( use class -- ) [ implementors-map- ] [ update-map- ] [ reset-class ] - } cleave ; + } cleave + reset-caches ; M: class class-forgotten nip forget-class ;