Another brief note before I go off to do other things. I reworked the interface of the assembler to allow for macro-instructions: instructions that don't correspond directly to a particular opcode. There are new macro-instructions for the function prologue, loading constants of any kind, initializing slots of constants, and emitting labels. The basic instructions like make-non-immediate now take labels again instead of constants.
With this, I was able to wire up the init procedure to relocate the constants. I've added a test case, and things are working for most kinds of values. Notable exceptions are arrays, uniform and otherwise. OK, off to other things! Andy -- http://wingolog.org/