<<>> <> <> <> <> DIRECTORY C2CAddressing, C2CCodePlaces, C2CDefs, IntCodeDefs, Rope; C2CStateUtils: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = Rope.ROPE; Macro: TYPE = REF MacroRep; MacroRep: TYPE; DeclareVariable: PROC [place: C2CCodePlaces.CodePlace, bits: INT, prefix: ROPE ¬ NIL] RETURNS [name: ROPE]; <<--declares a variable and return its name>> <<--place specifies where; caller is responsible to use reasonable places only>> DefineProcDesc: PROC [procName: ROPE] RETURNS [descAddr: ROPE]; <<--creates a declaration for a global procedure descriptor [to a outer level procedure]>> ANewBitAddress: PROC [] RETURNS [C2CAddressing.AddressContainer]; <<--creates the declarations for a AddressContainer>> DefineMacro: PROC [name: ROPE, def: C2CDefs.CodeOrRope] RETURNS [Macro]; <<--delayed declaration of>> <<--#define name def /n >> <<--must be called statically; destructiv on def >> <<--PRECOMPUTATION ONCE FOR ALL COMPILATIONS >> MacroName: PROC [macro: Macro] RETURNS [ROPE]; <<--returns name of macro, and, declares macro if necessary>> END.