<<>> <> <> <> <> <> <> DIRECTORY CedarCode USING[Operator, ParseTree, ParseTreeBody], CirioTypes USING[CompilerContext, NameArgPair, Node, Type, TypedCode], Rope USING[ROPE]; CirioSyntacticOperations: CEDAR DEFINITIONS = BEGIN OPEN CedarCode, CirioTypes; <> ParseTree: TYPE = CedarCode.ParseTree; ParseTreeBody: TYPE = CedarCode.ParseTreeBody; NameArgPair: TYPE = CirioTypes.NameArgPair; CreateParseTree: PROC[functions: REF ParseTreeFunctions, data: REF ANY] RETURNS[ParseTree]; NilParseTree: PUBLIC PROC [tree: ParseTree] RETURNS [BOOLEAN]; <> CompileForRHS: PROC[tree: ParseTree, nominalTarget: Type, cc: CompilerContext] RETURNS[TypedCode]; CompileForLHS: PROC[tree: ParseTree, cc: CompilerContext] RETURNS[TypedCode]; CompileAsFieldExtraction: PROC[tree: ParseTree, fieldContext: CirioTypes.Type, cc: CompilerContext] RETURNS[TypedCode]; CompileAsFieldSelection: PROC[tree: ParseTree, fieldIndirectContext: CirioTypes.Type, cc: CompilerContext] RETURNS[TypedCode]; ShowParseTree: PROC [tree: ParseTree, cc: CompilerContext] RETURNS [Rope.ROPE]; <> <<>> ParseTreeFunctions: TYPE = RECORD[ compileForRHS: PROC[tree: ParseTree, nominalTarget: Type, cc: CompilerContext, data: REF ANY] RETURNS[TypedCode], compileForLHS: PROC[tree: ParseTree, cc: CompilerContext, data: REF ANY] RETURNS[TypedCode], compileAsFieldExtraction: PROC[tree: ParseTree, fieldContext: CirioTypes.Type, cc: CompilerContext, data: REF ANY] RETURNS[TypedCode], compileAsFieldSelection: PROC[tree: ParseTree, fieldIndirectContext: CirioTypes.Type, cc: CompilerContext, data: REF ANY] RETURNS[TypedCode], showParseTree: PROC [tree: ParseTree, cc: CompilerContext, data: REF ANY] RETURNS [Rope.ROPE]]; <> <> RHSBinaryOp: PROC[op: Operator, left, right: ParseTree, cc: CompilerContext] RETURNS[TypedCode]; RHSUnaryOp: PROC[op: Operator, arg: ParseTree, cc: CompilerContext] RETURNS[TypedCode]; RHSnAryOp: PROC[op: Operator, args: LIST OF ParseTree, cc: CompilerContext] RETURNS[TypedCode]; RHSTypeOp: PROC[op: Operator, type: Type, cc: CompilerContext] RETURNS[TypedCode]; RHSTypeOp2: PROC[op: Operator, type: Type, param: ParseTree, cc: CompilerContext] RETURNS[TypedCode]; RHSAssignment: PROC[left, right: ParseTree, cc: CompilerContext] RETURNS[TypedCode]; RHSBinOpAssignment: PROC [op: Operator, left, right: ParseTree, cc: CompilerContext] RETURNS[TypedCode]; RHSDot: PROC[left, right: ParseTree, cc: CompilerContext] RETURNS[TypedCode]; RHSApply: PROC[left, right: ParseTree, cc: CompilerContext] RETURNS[TypedCode]; RHSCons: PROC [list: ParseTree, targetType: Type, cc: CompilerContext] RETURNS [TypedCode]; RHSConstructor: PROC[list: LIST OF ParseTree, targetType: Type, cc: CompilerContext] RETURNS[TypedCode]; RHSPairConstructor: PROC[list: LIST OF NameArgPair, targetType: Type, cc: CompilerContext] RETURNS[TypedCode]; RHSFieldIdentifier: PROC[id: Rope.ROPE, fieldContext: Type, cc: CompilerContext] RETURNS[TypedCode]; RHSIdentifier: PROC[id: Rope.ROPE, targetType: Type, cc: CompilerContext] RETURNS[TypedCode]; RHSNil: PROC[pointerType: Type, cc: CompilerContext] RETURNS[TypedCode]; RHSLiteral: PROC[literalValue: CirioTypes.Node, cc: CompilerContext] RETURNS[TypedCode]; RHSGlobalFrame: PROC [name: Rope.ROPE, nToSkip: INT, cc: CompilerContext] RETURNS[TypedCode]; <<>> <<>> <<>> LHSFieldIdentifier: PROC[id: Rope.ROPE, fieldIndirectContext: Type, cc: CompilerContext] RETURNS[TypedCode]; LHSIdentifier: PROC[id: Rope.ROPE, cc: CompilerContext] RETURNS[TypedCode]; LHSDot: PROC[left: ParseTree, id: Rope.ROPE, cc: CompilerContext] RETURNS[TypedCode]; LHSuparrow: PROC[left: ParseTree, cc: CompilerContext] RETURNS[TypedCode]; LHSapply: PROC[left, right: ParseTree, cc: CompilerContext] RETURNS[TypedCode]; END..