<<>> <> <> <> <> <> <> <> DIRECTORY CirioTypes USING[Code, CompilerContext, Node, OperationsBody, ParseTree, ParseTreeBody, Type], IO USING[STREAM], Rope USING[ROPE]; CedarCode: CEDAR DEFINITIONS SHARES CirioTypes = BEGIN Code: TYPE = CirioTypes.Code; Type: TYPE = CirioTypes.Type; CC: TYPE = CirioTypes.CompilerContext; Node: TYPE = CirioTypes.Node; Operator: TYPE = ATOM; <> <<{plus, minus, div, mult, mod, le, lt, eq, ne, gt, ge, and, or, not, max, min, size, bits, bytes, units, words, first, last, dot, assign, uparrow, leftSideuparrow, extractId, selectId, apply, index, cons};>> <> <<>> <> <<>> ParseTree: TYPE = CirioTypes.ParseTree; ParseTreeBody: TYPE = CirioTypes.ParseTreeBody; <> ShowCode: PROC [Code] RETURNS [Rope.ROPE]; <> ConcatCode: PROC[c1, c2: Code] RETURNS[Code]; CopyCode: PROC [Code] RETURNS [Code]; CodeToDoUnpopedCond: PROC[test, trueCase, falseCase: Code] RETURNS[Code]; CodeToPop: PROC[nPops: INT] RETURNS[Code]; CodeToDup: PROC RETURNS [Code]; NullCode: PROC RETURNS[Code]; CodeToLoadGlobalFrame: PROC [name: Rope.ROPE, nToSkip: INT] RETURNS [Code]; CodeToLoadNameScope: PROC RETURNS[Code]; <> CodeToGetNameContext: PUBLIC PROC[scopeIndex: CARDINAL] RETURNS[Code]; <> CodeToLoadContentsOfAMNode: PROC[node: Node] RETURNS[Code]; <> CodeToLoadAMNode: PROC[node: Node] RETURNS[Code]; <> CodeToMakeAMNode: PROC[sourceType: Type] RETURNS[Code]; <> CodeToCoerce: PROC[sourceType, targetType: Type] RETURNS[Code]; <> CodeToDoBinaryOp: PROC[op: Operator, left, right: Type] RETURNS[Code]; <> CodeToDoUnaryOp: PROC[op: Operator, type: Type] RETURNS[Code]; <> CodeToBuildRecord: PROC[nFields: INT, rcdType: Type] RETURNS[Code]; <> <<>> CodeToStoreUnpopped: PROC[indirectType: Type, sourceType: Type] RETURNS[Code]; <> <<>> CodeToLoadThroughIndirect: PROC[indirectType: Type] RETURNS[Code]; <> <<>> <<>> CodeToExtractField: PROC[id: Rope.ROPE, type: Type] RETURNS[Code]; <> <<>> CodeToSelectField: PROC[id: Rope.ROPE, indirectType: Type] RETURNS[Code]; <> <<>> CodeToDoApply: PROC[operatorType: Type, operandType: Type] RETURNS[Code]; <> CodeToDoIndex: PROC[indirectOperatorType: Type, operandType: Type] RETURNS[Code]; <> CodeToSelectNestedBlock: PROC[set: INT, depth: INT, indirectType: Type] RETURNS[Code]; <> <> <<>> <> <<>> Interpret: PROC[code: Code, cc: CC, debug: IO.STREAM _ NIL] RETURNS[Node]; <> <<>> CreateCedarNode: PROC[ops: REF OperationsBody, type: Type, data: REF ANY] RETURNS[Node]; GetTypeOfNode: PROC[node: Node] RETURNS[Type]; <> GetCurrentTypeOfNode: PROC[node: Node, cc: CC] RETURNS[Type]; GetDataFromNode: PROC[node: Node] RETURNS[REF ANY]; Coerce: PROC[sourceType, targetType: Type, node: Node, cc: CC] RETURNS[Node]; <> <<>> <> OperationsBody: TYPE = CirioTypes.OperationsBody; <> AdvanceNameScope: PROC [node: Node, cc: CC] RETURNS [Node]; ExamineParseTree: PROC[node: Node, cc: CC] RETURNS[ParseTree]; ApplyBinaryOp: PROC[op: Operator, leftType, rightType: Type, leftNode, rightNode: Node, cc: CC] RETURNS[Node]; ApplyUnaryOp: PROC[op: Operator, type: Type, node: Node, cc: CC] RETURNS[Node]; StoreThroughIndirectNode: PROC[valType: Type, valNode: Node, indirectType: Type, indirectNode: Node, cc: CC]; LoadThroughIndirectNode: PROC[indirectType: Type, indirectNode: Node, cc: CC] RETURNS[Node]; <> ForceNodeIn: PROC[type: Type, node: Node, cc: CC] RETURNS[Node]; <> ExtractFieldFromNode: PROC[id: Rope.ROPE, type: Type, node: Node, cc: CC] RETURNS[Node]; SelectFieldFromNode: PROC[id: Rope.ROPE, indirectType: Type, indirectNode: Node, cc: CC] RETURNS[Node]; NodeAsIndex: PROC[type: Type, node: Node, cc: CC] RETURNS[CARD]; <> ShowNode: PROC[to: IO.STREAM, node: Node, depth, width: INT, cc: CC]; ShowNodeBracketed: PROC[to: IO.STREAM, node: Node, depth, width: INT, cc: CC]; BreakShowNode: PROC[to: IO.STREAM, node: Node, depth, width: INT, cc: CC, sep: Rope.ROPE _ NIL]; GetNodeRepresentation: PROC[node: Node, cc: CC] RETURNS[REF ANY]; <> <<>> <<>> <> <<>> <<>> AMNodeConstructRecordNode: PROC[rcdType: Type, fields: LIST OF Node, cc: CC] RETURNS[Node]; <> <<>> AMNodeConstructArrayNode: PROC[arrayType: Type, entries: LIST OF Node, cc: CC] RETURNS[Node]; <> <<>> END.. <<>>