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.db4
parent
6e141b8f6e
commit
ff50cc6f0f
basis/tools/deploy/shaker
|
@ -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 ( -- )
|
||||
|
|
Loading…
Reference in New Issue