"The " { $vocab-link "compiler.codegen.gc-maps" } " handles generating code for keeping track of garbage collection maps. Every code block either ends with:"
{ $description "Emits the scrub location data in all gc-maps registered in the " { $link gc-maps } " variable to the make sequence being created. The result is a concatenation of all datastack scrub locations, retainstack scrub locations and gc root locations converted into a byte-array. Given that byte-array and knowledge of the number of scrub locations, the original gc-map can be reconstructed." } ;
HELP:emit-scrub
{ $values
{ "seqs""a sequence of sequences of 0/1" }
{ "n""length of the longest sequence" }
}
{ $description "Emits a space-efficient " { $link bit-array } " to the make sequence being created. The outputted array will be of length n times the number of sequences given. Each group of n elements in the array contains true values if the stack location should be scrubbed, and false if it shouldn't." }
{ $examples
{ $example
"USING: bit-arrays byte-arrays compiler.codegen.gc-maps make prettyprint ;"
{ $description "Emits an unsigned 32 bit integer to the make sequence being created. The word takes care of ensuring that the byte order is correct for the current machine." }
{ $examples
{ $example
"USING: compiler.codegen.gc-maps make prettyprint ;"
"[ 0xffff emit-uint ] B{ } make ."
"B{ 255 255 0 0 }"
}
} ;
HELP:gc-maps
{ $var-description "Variable that holds a sequence of " { $link gc-map } " tuples." } ;