Description of expand.scm Purpose: -------- Eliminates all occurrences of the special forms DELAY (introducing %make-promise), OR (by expansion), and UNASSIGNED? (introducing %unassigned?). Eliminates #!AUX bindings from lambda expressions by replacing them with a LET binding inside the LAMBDA, giving them an initial value of %unassigned. Inside of this LET it puts SET! initializations, sorted to place simple values (QUOTE or LAMBDA) first. This helps the single assignment analysis in assconv (the one that introduces LETREC). Sequential DEFINEs are turned into a MULTI-DEFINE, introducing %*define* and %vector. Operators Introduced: --------------------- %*define* for DEFINE_MULTIPLE %unassigned? for replacing UNASSIGNED? %unassigned for the initial value of a variable %vector for a vector of the values of the multiple defines %make-promise for DELAY Restrictions on Input: ---------------------- Special forms excluded: ACCESS, DEFINE, IN-PACKAGE, LETREC, THE-ENVIRONMENT Special forms introduced: ------------------------- none Magic Cookies handled specially: -------------------------------- %*define: multiple %*define in the same body are replaced by a single %*define* Guarantees on Output: --------------------- No occurrences of DELAY, OR, UNASSIGNED? or #!AUX bindings in lambda expressions.