From ff50cc6f0f3e8577b106766ab1b0093d217c94a1 Mon Sep 17 00:00:00 2001 From: Joe Groff Date: Mon, 12 Dec 2011 16:08:25 -0800 Subject: [PATCH] tools.deploy.shaker: more timid global stripping Strip globals by replacing their value with "f". The list of globals to strip was written with the assumption that the stripped globals would get restored like normal hashtable keys when accessed. This isn't valid anymore with the globals optimization, since creating a new box breaks the foldable invariant between a global name and its associated box. Need to go through the list of globals to strip and find the ones that actually can be entirely removed as opposed to just reset to f. Fixes #445. Fixes #446. --- basis/tools/deploy/shaker/shaker.factor | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/basis/tools/deploy/shaker/shaker.factor b/basis/tools/deploy/shaker/shaker.factor index dd65d6fac9..cf53e47b63 100755 --- a/basis/tools/deploy/shaker/shaker.factor +++ b/basis/tools/deploy/shaker/shaker.factor @@ -9,7 +9,7 @@ sets vectors quotations byte-arrays sorting compiler.units definitions generic generic.standard generic.single tools.deploy.config combinators combinators.private classes vocabs.loader.private classes.builtin slots.private grouping -command-line io.pathnames ; +command-line io.pathnames namespaces.private ; QUALIFIED: bootstrap.stage2 QUALIFIED: classes.private QUALIFIED: compiler.crossref @@ -398,12 +398,14 @@ IN: tools.deploy.shaker "windows-messages" "windows.messages" lookup-word [ , ] when* ] { } make ; +: strip-global? ( name stripped-globals -- ? ) + '[ _ member? ] [ string? ] bi or ; + : strip-globals ( stripped-globals -- ) strip-globals? [ "Stripping globals" show global boxes>> swap - '[ drop _ member? not ] assoc-filter! - [ drop string? not ] assoc-filter! drop ! strip CLI args + '[ swap _ strip-global? [ f swap value<< ] [ drop ] if ] assoc-each ] [ drop ] if ; : strip-c-io ( -- )