From 387007abfe10610dc21a35977668da6fe185fe10 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Sun, 23 Aug 2009 17:54:37 -0500 Subject: [PATCH] tools.deploy.shaker: fix regression; strip-compiler-classes wasn't working --- basis/tools/deploy/shaker/shaker.factor | 31 +++++++++++++++++++++---- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/basis/tools/deploy/shaker/shaker.factor b/basis/tools/deploy/shaker/shaker.factor index c750c70e24..a0eb9b5c7f 100755 --- a/basis/tools/deploy/shaker/shaker.factor +++ b/basis/tools/deploy/shaker/shaker.factor @@ -6,7 +6,7 @@ vocabs sequences sequences.private words memory kernel.private continuations io vocabs.loader system strings sets vectors quotations byte-arrays sorting compiler.units definitions generic generic.standard generic.single tools.deploy.config combinators -classes slots.private ; +classes classes.builtin slots.private grouping ; QUALIFIED: bootstrap.stage2 QUALIFIED: command-line QUALIFIED: compiler.errors @@ -194,12 +194,31 @@ IN: tools.deploy.shaker strip-word-names? [ dup strip-word-names ] when 2drop ; +: compiler-classes ( -- seq ) + { "compiler" "stack-checker" } + [ child-vocabs [ words ] map concat [ class? ] filter ] + map concat unique ; + +: prune-decision-tree ( tree classes -- ) + [ tuple class>type ] 2dip '[ + dup array? [ + [ + dup array? [ + [ + 2 group + [ drop _ key? not ] assoc-filter + concat + ] map + ] when + ] map + ] when + ] change-nth ; + : strip-compiler-classes ( -- ) strip-dictionary? [ "Stripping compiler classes" show - { "compiler" "stack-checker" } - [ child-vocabs [ words ] map concat [ class? ] filter ] map concat - [ dup implementors [ "methods" word-prop delete-at ] with each ] each + [ single-generic? ] instances + compiler-classes '[ "decision-tree" word-prop _ prune-decision-tree ] each ] when ; : recursive-subst ( seq old new -- ) @@ -440,6 +459,8 @@ SYMBOL: deploy-vocab "vocab:tools/deploy/shaker/next-methods.factor" run-file ; : (clear-megamorphic-cache) ( i array -- ) + ! Can't do any dispatch while clearing caches since that + ! might leave them in an inconsistent state. 2dup 1 slot < [ 2dup [ f ] 2dip set-array-nth [ 1 + ] dip (clear-megamorphic-cache) @@ -465,8 +486,8 @@ SYMBOL: deploy-vocab compute-next-methods strip-init-hooks strip-c-io - strip-compiler-classes strip-default-methods + strip-compiler-classes f 5 setenv ! we can't use the Factor debugger or Factor I/O anymore deploy-vocab get vocab-main deploy-boot-quot find-megamorphic-caches