<> <> <> <> <> <<1. (convenience) allow &fm[FooImpl] to mean &fm["FooImpl"]>> <<2. allow a call on &tlf to appear to yield a local frame rather than a TV for a local frame.>> <> DIRECTORY AMTypes USING [TV, nullType, Type], InterpreterOps USING [EvalHead, Tree], Rope USING [ROPE], SymTab USING [Ref]; EvalQuote: CEDAR DEFINITIONS = BEGIN OPEN AMTypes, InterpreterOps, Rope; Register: PROC [name: ROPE, proc: EvalQuoteProc, symTab: SymTab.Ref, data: REF _ NIL]; <> <> EvalQuoteProc: TYPE = PROC [head: EvalHead, tree: Tree, target: Type _ nullType, data: REF _ NIL] RETURNS [return: TV]; <> Lookup: PROC [symTab: SymTab.Ref, name: ROPE--starting with &--] RETURNS [proc: EvalQuoteProc, data: REF]; <> <> Enumerate: PROC [symTab: SymTab.Ref, visit: VisitProc]; <> VisitProc: TYPE = PROC [name: ROPE, proc: EvalQuoteProc, data: REF _ NIL] RETURNS [--stop:-- BOOL]; <> RegisterNameProc: PROC [name: Rope.ROPE, symTab: SymTab.Ref, proc: NameProc, data: REF _ NIL]; <> LookupNameProc: PROC [symTab: SymTab.Ref, name: Rope.ROPE] RETURNS [proc: NameProc, data: REF]; <> EnumerateNameProcs: PROC [ symTab: SymTab.Ref, perRegistration: PROC [name: ROPE, proc: NameProc, data: REF] RETURNS [stop: BOOL] ]; <> NameProc: TYPE = PROC [head: EvalHead, nameAsRope: ROPE, nameAsTree: Tree, target: Type _ nullType, data: REF _ NIL] RETURNS [value: TV]; <<... is the type of procedure supplied by the client.>> <> <<>> NameClosure: TYPE = REF NameClosureRep; NameClosureRep: TYPE = RECORD [proc: NameProc, data: REF ANY]; END.