-- SaffronValueCompile1Impl.mesa -- Copyright Ó 1987 by Xerox Corporation. All rights reserved. -- Generated by Rauen.pa at September 1, 1988 7:33:04 pm PDT -- using ThreeCasabaFour [1.2] of June 1, 1987 6:00:00 pm PDT DIRECTORY SaffronAG1aDef, SaffronAG1bDef, SaffronPGDef, ThreeC4Support, SaffronBaseDef, BigIntegers, SaffronATDef; SaffronValueCompile1Impl: CEDAR PROGRAM IMPORTS SaffronPGDef, ThreeC4Support, SaffronBaseDef, BigIntegers, SaffronATDef EXPORTS SaffronAG1aDef, SaffronAG1bDef= BEGIN OPEN SaffronAG1aDef, SaffronAG1bDef, SaffronPGDef, ThreeC4Support, SaffronBaseDef, BigIntegers, SaffronATDef; ExpsumProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpsumProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["Arithmetic expression used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpsumProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpsumProdData _ NARROW[tree.data]; BEGIN result: ValueNode; temp2: BOOLEAN; lhsType: TypeGraphNodeNode; rhsType: TypeGraphNodeNode; lhs: ValueNode; rhs: ValueNode; uncheckedRhs: ValueNode; contextTree2: ContextTreeNode; uncheckedLhs: ValueNode; contextTree1: ContextTreeNode; [uncheckedLhs, contextTree1] _ treeData.Expleft.procs.CompileExpression[treeData.Expleft, contextTree, cs, targetType]; [uncheckedRhs, contextTree2] _ treeData.Expright.procs.CompileExpression[treeData.Expright, contextTree1, cs, targetType]; rhs _ DemandNumber[uncheckedRhs]; lhs _ DemandNumber[uncheckedLhs]; rhsType _ Type[rhs]; lhsType _ Type[lhs]; IF And[And[Static[lhs], Static[rhs]], And[ConformsToInteger[lhsType], ConformsToInteger[rhsType]]] THEN {IF temp2 _ treeData.AddOp.procs.IsPlus[treeData.AddOp] THEN { NULL; } ELSE {NULL; }; result _ CastIntegerValue[(IF temp2 THEN Add[RetrieveIntegerValue[lhs], RetrieveIntegerValue[rhs]] ELSE Sub[RetrieveIntegerValue[lhs], RetrieveIntegerValue[rhs]]), GetIntrinsicIntegerTypes[cs]]; } ELSE {BEGIN code: ProgramFragmentNode; pushLHS: ProgramFragmentNode; pushRHS: ProgramFragmentNode; op: ProgramFragmentNode; IF treeData.AddOp.procs.IsPlus[treeData.AddOp] THEN {op _ MakePGAdd[]; } ELSE {op _ MakePGSubtract[]; }; pushRHS _ Code[rhs]; pushLHS _ Code[lhs]; code _ ConcatProgramFragments[ConcatProgramFragments[pushLHS, pushRHS], op]; result _ MakeRuntimeValue[code, targetType]; END; }; temp1 _ contextTree2; temp0 _ result; END; END END; ExpsumProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpsumProdData _ NARROW[tree.data]; BEGIN temp1: BOOLEAN; lhs: ValueNode; rhs: ValueNode; uncheckedRhs: ValueNode; uncheckedLhs: ValueNode; uncheckedLhs _ treeData.Expleft.procs.EvaluateExpression[treeData.Expleft, lc, fl, cs, targetType]; uncheckedRhs _ treeData.Expright.procs.EvaluateExpression[treeData.Expright, lc, fl, cs, targetType]; rhs _ DemandNumber[uncheckedRhs]; lhs _ DemandNumber[uncheckedLhs]; IF temp1 _ treeData.AddOp.procs.IsPlus[treeData.AddOp] THEN { NULL; } ELSE {NULL; }; temp0 _ CastIntegerValue[(IF temp1 THEN Add[RetrieveIntegerValue[lhs], RetrieveIntegerValue[rhs]] ELSE Sub[RetrieveIntegerValue[lhs], RetrieveIntegerValue[rhs]]), GetIntrinsicIntegerTypes[cs]]; END; END END; ExpunarysumProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpunarysumProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["Arithmetic expression used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpunarysumProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpunarysumProdData _ NARROW[tree.data]; BEGIN result: ValueNode; temp2: BOOLEAN; rhsType: TypeGraphNodeNode; rhs: ValueNode; uncheckedRhs: ValueNode; contextTree1: ContextTreeNode; [uncheckedRhs, contextTree1] _ treeData.Exp.procs.CompileExpression[treeData.Exp, contextTree, cs, targetType]; rhs _ DemandNumber[uncheckedRhs]; rhsType _ Type[rhs]; IF And[Static[rhs], ConformsToInteger[rhsType]] THEN {IF temp2 _ treeData.AddOp.procs.IsPlus[treeData.AddOp] THEN { NULL; } ELSE {NULL; }; result _ CastIntegerValue[(IF temp2 THEN RetrieveIntegerValue[rhs] ELSE Neg[RetrieveIntegerValue[rhs]]), GetIntrinsicIntegerTypes[cs]]; } ELSE {BEGIN code: ProgramFragmentNode; pushRHS: ProgramFragmentNode; pushRHS _ Code[rhs]; IF treeData.AddOp.procs.IsPlus[treeData.AddOp] THEN {code _ ConcatProgramFragments[pushRHS, MakePGNoOp[]]; } ELSE {code _ ConcatProgramFragments[pushRHS, MakePGNegate[]]; }; result _ MakeRuntimeValue[code, targetType]; END; }; temp1 _ contextTree1; temp0 _ result; END; END END; ExpunarysumProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpunarysumProdData _ NARROW[tree.data]; BEGIN temp1: BOOLEAN; rhs: ValueNode; uncheckedRhs: ValueNode; uncheckedRhs _ treeData.Exp.procs.EvaluateExpression[treeData.Exp, lc, fl, cs, targetType]; rhs _ DemandNumber[uncheckedRhs]; IF temp1 _ treeData.AddOp.procs.IsPlus[treeData.AddOp] THEN { NULL; } ELSE {NULL; }; temp0 _ CastIntegerValue[(IF temp1 THEN RetrieveIntegerValue[rhs] ELSE Neg[RetrieveIntegerValue[rhs]]), GetIntrinsicIntegerTypes[cs]]; END; END END; ExpproductProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpproductProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["Arithmetic expression used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpproductProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpproductProdData _ NARROW[tree.data]; BEGIN result: ValueNode; temp3: BOOLEAN; temp2: BOOLEAN; lhsType: TypeGraphNodeNode; rhsType: TypeGraphNodeNode; lhs: ValueNode; rhs: ValueNode; uncheckedRhs: ValueNode; contextTree2: ContextTreeNode; uncheckedLhs: ValueNode; contextTree1: ContextTreeNode; [uncheckedLhs, contextTree1] _ treeData.Expleft.procs.CompileExpression[treeData.Expleft, contextTree, cs, targetType]; [uncheckedRhs, contextTree2] _ treeData.Expright.procs.CompileExpression[treeData.Expright, contextTree1, cs, targetType]; rhs _ DemandNumber[uncheckedRhs]; lhs _ DemandNumber[uncheckedLhs]; rhsType _ Type[rhs]; lhsType _ Type[lhs]; IF And[And[Static[lhs], Static[rhs]], And[ConformsToInteger[lhsType], ConformsToInteger[rhsType]]] THEN {IF temp3 _ treeData.MultOp.procs.IsTimes[treeData.MultOp] THEN { NULL; } ELSE {NULL; IF temp2 _ treeData.MultOp.procs.IsDivide[treeData.MultOp] THEN { NULL; } ELSE {NULL; }; }; result _ CastIntegerValue[(IF temp3 THEN Mul[RetrieveIntegerValue[lhs], RetrieveIntegerValue[rhs]] ELSE (IF temp2 THEN Div[RetrieveIntegerValue[lhs], RetrieveIntegerValue[rhs]] ELSE Mod[RetrieveIntegerValue[lhs], RetrieveIntegerValue[rhs]])), GetIntrinsicIntegerTypes[cs]]; } ELSE {BEGIN code: ProgramFragmentNode; pushLHS: ProgramFragmentNode; pushRHS: ProgramFragmentNode; op: ProgramFragmentNode; IF treeData.MultOp.procs.IsTimes[treeData.MultOp] THEN {op _ MakePGMultiply[]; } ELSE {IF treeData.MultOp.procs.IsDivide[treeData.MultOp] THEN {op _ MakePGDivide[]; } ELSE {op _ MakePGMod[]; }; }; pushRHS _ Code[rhs]; pushLHS _ Code[lhs]; code _ ConcatProgramFragments[ConcatProgramFragments[pushLHS, pushRHS], op]; result _ MakeRuntimeValue[code, targetType]; END; }; temp1 _ contextTree2; temp0 _ result; END; END END; ExpproductProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpproductProdData _ NARROW[tree.data]; BEGIN temp2: BOOLEAN; temp1: BOOLEAN; lhs: ValueNode; rhs: ValueNode; uncheckedRhs: ValueNode; uncheckedLhs: ValueNode; uncheckedLhs _ treeData.Expleft.procs.EvaluateExpression[treeData.Expleft, lc, fl, cs, targetType]; uncheckedRhs _ treeData.Expright.procs.EvaluateExpression[treeData.Expright, lc, fl, cs, targetType]; rhs _ DemandNumber[uncheckedRhs]; lhs _ DemandNumber[uncheckedLhs]; IF temp2 _ treeData.MultOp.procs.IsTimes[treeData.MultOp] THEN { NULL; } ELSE {NULL; IF temp1 _ treeData.MultOp.procs.IsDivide[treeData.MultOp] THEN { NULL; } ELSE {NULL; }; }; temp0 _ CastIntegerValue[(IF temp2 THEN Mul[RetrieveIntegerValue[lhs], RetrieveIntegerValue[rhs]] ELSE (IF temp1 THEN Div[RetrieveIntegerValue[lhs], RetrieveIntegerValue[rhs]] ELSE Mod[RetrieveIntegerValue[lhs], RetrieveIntegerValue[rhs]])), GetIntrinsicIntegerTypes[cs]]; END; END END; ExporProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExporProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["OR expression used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExporProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExporProdData _ NARROW[tree.data]; BEGIN result: ValueNode; rhs: ValueNode; contextTree2: ContextTreeNode; lhs: ValueNode; contextTree1: ContextTreeNode; boolean: TypeGraphNodeNode; boolean _ GetIntrinsicBooleanType[cs]; [lhs, contextTree1] _ CompileAndTypeCheckExpression[treeData.Expleft, contextTree, cs, boolean]; [rhs, contextTree2] _ CompileAndTypeCheckExpression[treeData.Expright, contextTree1, cs, boolean]; IF And[Static[lhs], Static[rhs]] THEN {result _ MakeStaticBoolean[Or[BooleanValue[lhs], BooleanValue[rhs]], boolean]; } ELSE {BEGIN code: ProgramFragmentNode; pushLHS: ProgramFragmentNode; pushRHS: ProgramFragmentNode; op: ProgramFragmentNode; op _ MakePGOr[]; pushRHS _ Code[rhs]; pushLHS _ Code[lhs]; code _ ConcatProgramFragments[ConcatProgramFragments[pushLHS, pushRHS], op]; result _ MakeRuntimeValue[code, boolean]; END; }; temp1 _ contextTree2; temp0 _ result; END; END END; ExporProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExporProdData _ NARROW[tree.data]; BEGIN rhs: ValueNode; lhs: ValueNode; boolean: TypeGraphNodeNode; boolean _ GetIntrinsicBooleanType[cs]; lhs _ EvaluateAndTypeCheckExpression[treeData.Expleft, lc, fl, cs, boolean]; rhs _ EvaluateAndTypeCheckExpression[treeData.Expright, lc, fl, cs, boolean]; temp0 _ MakeStaticBoolean[Or[BooleanValue[lhs], BooleanValue[rhs]], boolean]; END; END END; ExpandProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpandProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["AND expression used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpandProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpandProdData _ NARROW[tree.data]; BEGIN result: ValueNode; rhs: ValueNode; contextTree2: ContextTreeNode; lhs: ValueNode; contextTree1: ContextTreeNode; boolean: TypeGraphNodeNode; boolean _ GetIntrinsicBooleanType[cs]; [lhs, contextTree1] _ CompileAndTypeCheckExpression[treeData.Expleft, contextTree, cs, boolean]; [rhs, contextTree2] _ CompileAndTypeCheckExpression[treeData.Expright, contextTree1, cs, boolean]; IF And[Static[lhs], Static[rhs]] THEN {result _ MakeStaticBoolean[And[BooleanValue[lhs], BooleanValue[rhs]], boolean]; } ELSE {BEGIN code: ProgramFragmentNode; pushLHS: ProgramFragmentNode; pushRHS: ProgramFragmentNode; op: ProgramFragmentNode; op _ MakePGAnd[]; pushRHS _ Code[rhs]; pushLHS _ Code[lhs]; code _ ConcatProgramFragments[ConcatProgramFragments[pushLHS, pushRHS], op]; result _ MakeRuntimeValue[code, boolean]; END; }; temp1 _ contextTree2; temp0 _ result; END; END END; ExpandProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpandProdData _ NARROW[tree.data]; BEGIN rhs: ValueNode; lhs: ValueNode; boolean: TypeGraphNodeNode; boolean _ GetIntrinsicBooleanType[cs]; lhs _ EvaluateAndTypeCheckExpression[treeData.Expleft, lc, fl, cs, boolean]; rhs _ EvaluateAndTypeCheckExpression[treeData.Expright, lc, fl, cs, boolean]; temp0 _ MakeStaticBoolean[And[BooleanValue[lhs], BooleanValue[rhs]], boolean]; END; END END; ExpnotProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpnotProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["NOT expression used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpnotProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpnotProdData _ NARROW[tree.data]; BEGIN result: ValueNode; rhs: ValueNode; contextTree1: ContextTreeNode; boolean: TypeGraphNodeNode; boolean _ GetIntrinsicBooleanType[cs]; [rhs, contextTree1] _ CompileAndTypeCheckExpression[treeData.Exp, contextTree, cs, boolean]; IF Static[rhs] THEN {result _ MakeStaticBoolean[Not[BooleanValue[rhs]], boolean]; } ELSE {BEGIN code: ProgramFragmentNode; code _ ConcatProgramFragments[Code[rhs], MakePGNot[]]; result _ MakeRuntimeValue[code, boolean]; END; }; temp1 _ contextTree1; temp0 _ result; END; END END; ExpnotProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpnotProdData _ NARROW[tree.data]; BEGIN rhs: ValueNode; boolean: TypeGraphNodeNode; boolean _ GetIntrinsicBooleanType[cs]; rhs _ EvaluateAndTypeCheckExpression[treeData.Exp, lc, fl, cs, boolean]; temp0 _ MakeStaticBoolean[Not[BooleanValue[rhs]], boolean]; END; END END; ExprelationProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExprelationProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["Relation used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExprelationProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExprelationProdData _ NARROW[tree.data]; BEGIN result: ValueNode; contextTree1: ContextTreeNode; contextTree1 _ FakeDamageContextTree[contextTree]; result _ MakeDummy["relation"]; temp1 _ contextTree1; temp0 _ result; END; END END; ExprelationProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExprelationProdData _ NARROW[tree.data]; temp0 _ MakeDummy["relation"]; END END; ExpifthenelseProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpifthenelseProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["IF expression used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpifthenelseProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpifthenelseProdData _ NARROW[tree.data]; BEGIN result: ValueNode; contextTree4: ContextTreeNode; condition: ValueNode; contextTree1: ContextTreeNode; booleanType: TypeGraphNodeNode; booleanType _ GetIntrinsicBooleanType[cs]; [condition, contextTree1] _ CompileAndTypeCheckExpression[treeData.Expcond, contextTree, cs, booleanType]; IF Static[condition] THEN {IF BooleanValue[condition] THEN {[result, contextTree4] _ CompileAndTypeCheckExpression[treeData.Expthenpart, contextTree1, cs, targetType]; } ELSE {[result, contextTree4] _ CompileAndTypeCheckExpression[treeData.Expelsepart, contextTree1, cs, targetType]; }; } ELSE {BEGIN code: ProgramFragmentNode; elsePart: ValueNode; contextTree3: ContextTreeNode; thenPart: ValueNode; contextTree2: ContextTreeNode; [thenPart, contextTree2] _ CompileAndTypeCheckExpression[treeData.Expthenpart, contextTree1, cs, targetType]; [elsePart, contextTree3] _ CompileAndTypeCheckExpression[treeData.Expelsepart, contextTree2, cs, targetType]; code _ MakePGTest[Code[condition], Code[thenPart], Code[elsePart]]; contextTree4 _ contextTree3; result _ MakeRuntimeValue[code, targetType]; END; }; temp1 _ contextTree4; temp0 _ result; END; END END; ExpifthenelseProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpifthenelseProdData _ NARROW[tree.data]; BEGIN boolean: TypeGraphNodeNode; boolean _ GetIntrinsicBooleanType[cs]; IF BooleanValue[EvaluateAndTypeCheckExpression[treeData.Expcond, lc, fl, cs, boolean]] THEN {temp0 _ EvaluateAndTypeCheckExpression[treeData.Expthenpart, lc, fl, cs, targetType]; } ELSE {temp0 _ EvaluateAndTypeCheckExpression[treeData.Expelsepart, lc, fl, cs, targetType]; }; END; END END; ExpselectProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpselectProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["SELECT expression used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpselectProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpselectProdData _ NARROW[tree.data]; BEGIN result: ValueNode; contextTree1: ContextTreeNode; contextTree1 _ FakeDamageContextTree[contextTree]; result _ MakeDummy["select"]; temp1 _ contextTree1; temp0 _ result; END; END END; ExpselectProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpselectProdData _ NARROW[tree.data]; temp0 _ MakeDummy["select"]; END END; ExpassignProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpassignProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["Assignment expression used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpassignProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpassignProdData _ NARROW[tree.data]; BEGIN result: ValueNode; code: ProgramFragmentNode; storeTOS: ProgramFragmentNode; rhsValue: ValueNode; contextTree1: ContextTreeNode; lvalue: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; [lvalue, tgn] _ treeData.Explhs.procs.CompileLValue[treeData.Explhs, contextTree, cs]; [rhsValue, contextTree1] _ CompileAndTypeCheckExpression[treeData.Exprhs, contextTree, cs, tgn]; IF PFDIsLocal[lvalue] THEN {storeTOS _ MakePGStoreLocal[lvalue]; } ELSE {storeTOS _ MakePGStoreIndirect[lvalue]; }; code _ ConcatProgramFragments[Code[rhsValue], storeTOS]; result _ MakeRuntimeValue[code, tgn]; temp1 _ contextTree1; temp0 _ result; END; END END; ExpassignProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpassignProdData _ NARROW[tree.data]; BEGIN err: BOOLEAN; err _ Error["Exp.assign should never be evaluated!"]; temp0 _ MakeTrash[targetType]; END; END END; ExpmultiassignProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpmultiassignProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["Multiple assignment expression used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpmultiassignProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpmultiassignProdData _ NARROW[tree.data]; BEGIN result: ValueNode; contextTree1: ContextTreeNode; contextTree1 _ FakeDamageContextTree[contextTree]; result _ MakeDummy["multiassign"]; temp1 _ contextTree1; temp0 _ result; END; END END; ExpmultiassignProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpmultiassignProdData _ NARROW[tree.data]; BEGIN err: BOOLEAN; err _ Error["Exp.multiassign should never be evaluated!"]; temp0 _ MakeTrash[targetType]; END; END END; ExpidProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpidProdData _ NARROW[tree.data]; [temp0, temp1] _ GetPathToName[contextTree, treeData.Id]; END END; ExpidProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpidProdData _ NARROW[tree.data]; BEGIN contextTree1: ContextTreeNode; result: ValueNode; expAsLValue: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; [expAsLValue, tgn] _ tree.procs.CompileLValue[tree, contextTree, cs]; result _ CompileLValueIntoRValue[expAsLValue, contextTree]; contextTree1 _ FakeDamageContextTree[contextTree]; temp1 _ contextTree1; temp0 _ result; END; END END; ExpidProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpidProdData _ NARROW[tree.data]; BEGIN result: ValueNode; access: AccessValNode; tgn: TypeGraphNodeNode; initialization: InitializationPTreeNode; value: ValueNode; field2: FieldNode; field1: FieldNode; field1 _ LookupNameInFieldList[fl, treeData.Id]; IF FieldExists[field1] THEN {field2 _ field1; } ELSE {field2 _ LookupNameInContextRib[treeData.Id, ParentRib[lc]]; }; [access, tgn, initialization, value] _ DemandConstantField[field2]; IF Static[value] THEN {result _ value; } ELSE {BEGIN err: BOOLEAN; err _ Error["blat"]; result _ MakeDummy[""]; END; }; temp0 _ result; END; END END; ExpnumProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpnumProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["Number literal used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpnumProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpnumProdData _ NARROW[tree.data]; BEGIN result: ValueNode; integerValue: BigINT; contextTree1: ContextTreeNode; contextTree1 _ FakeDamageContextTree[contextTree]; integerValue _ treeData.Num.procs.IntegerValueFromLiteral[treeData.Num]; result _ CastIntegerValue[integerValue, GetIntrinsicIntegerTypes[cs]]; temp1 _ contextTree1; temp0 _ result; END; END END; ExpnumProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpnumProdData _ NARROW[tree.data]; BEGIN result: ValueNode; integerValue: BigINT; integerValue _ treeData.Num.procs.IntegerValueFromLiteral[treeData.Num]; result _ CastIntegerValue[integerValue, GetIntrinsicIntegerTypes[cs]]; temp0 _ result; END; END END; ExpstringProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpstringProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["String literal used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpstringProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpstringProdData _ NARROW[tree.data]; BEGIN result: ValueNode; contextTree1: ContextTreeNode; contextTree1 _ FakeDamageContextTree[contextTree]; result _ MakeDummy["string"]; temp1 _ contextTree1; temp0 _ result; END; END END; ExpstringProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpstringProdData _ NARROW[tree.data]; temp0 _ MakeDummy["string"]; END END; ExpflnumProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpflnumProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["REAL literal used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpflnumProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpflnumProdData _ NARROW[tree.data]; BEGIN result: ValueNode; contextTree1: ContextTreeNode; contextTree1 _ FakeDamageContextTree[contextTree]; result _ MakeDummy["flnum"]; temp1 _ contextTree1; temp0 _ result; END; END END; ExpflnumProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpflnumProdData _ NARROW[tree.data]; temp0 _ MakeDummy["flnum"]; END END; ExpcharProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpcharProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["Character literal used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpcharProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpcharProdData _ NARROW[tree.data]; BEGIN result: ValueNode; contextTree1: ContextTreeNode; contextTree1 _ FakeDamageContextTree[contextTree]; result _ MakeDummy["char"]; temp1 _ contextTree1; temp0 _ result; END; END END; ExpcharProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpcharProdData _ NARROW[tree.data]; temp0 _ MakeDummy["char"]; END END; ExpatomProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpatomProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["Character literal used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpatomProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpatomProdData _ NARROW[tree.data]; BEGIN result: ValueNode; contextTree1: ContextTreeNode; contextTree1 _ FakeDamageContextTree[contextTree]; result _ MakeDummy["atom"]; temp1 _ contextTree1; temp0 _ result; END; END END; ExpatomProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpatomProdData _ NARROW[tree.data]; temp0 _ MakeDummy["atom"]; END END; ExpnarrowProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpnarrowProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["NARROW expression used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpnarrowProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpnarrowProdData _ NARROW[tree.data]; BEGIN result: ValueNode; contextTree1: ContextTreeNode; contextTree1 _ FakeDamageContextTree[contextTree]; result _ MakeDummy["narrow"]; temp1 _ contextTree1; temp0 _ result; END; END END; ExpnarrowProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpnarrowProdData _ NARROW[tree.data]; temp0 _ MakeDummy["narrow"]; END END; ExploopholeProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExploopholeProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["LOOPHOLE expression used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExploopholeProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExploopholeProdData _ NARROW[tree.data]; BEGIN result: ValueNode; contextTree1: ContextTreeNode; contextTree1 _ FakeDamageContextTree[contextTree]; result _ MakeDummy["loophole"]; temp1 _ contextTree1; temp0 _ result; END; END END; ExploopholeProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExploopholeProdData _ NARROW[tree.data]; temp0 _ MakeDummy["loophole"]; END END; ExpapplyProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpapplyProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["Apply expression used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpapplyProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpapplyProdData _ NARROW[tree.data]; BEGIN result: ValueNode; contextTree1: ContextTreeNode; contextTree1 _ FakeDamageContextTree[contextTree]; result _ MakeDummy["apply"]; temp1 _ contextTree1; temp0 _ result; END; END END; ExpapplyProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpapplyProdData _ NARROW[tree.data]; temp0 _ MakeDummy["apply"]; END END; ExpqualifierProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpqualifierProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["Qualifier l-value not implemented yet!!!!!!!!!"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpqualifierProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpqualifierProdData _ NARROW[tree.data]; BEGIN value: ValueNode; contextTree1: ContextTreeNode; top: TypeGraphNodeNode; top _ GetTop[cs]; [value, contextTree1] _ CompileAndTypeCheckExpression[treeData.Exp, contextTree, cs, top]; [temp0, temp1] _ treeData.Qualifier.procs.CompileQualifiedExpression[treeData.Qualifier, value, contextTree1, cs, targetType]; END; END END; ExpqualifierProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpqualifierProdData _ NARROW[tree.data]; temp0 _ MakeDummy["qualifier"]; END END; ExpexplistProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpexplistProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["ExpList l-value not implemented yet!!!!!!!!!"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpexplistProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpexplistProdData _ NARROW[tree.data]; BEGIN result: ValueNode; contextTree1: ContextTreeNode; contextTree1 _ FakeDamageContextTree[contextTree]; result _ MakeDummy["explist"]; temp1 _ contextTree1; temp0 _ result; END; END END; ExpexplistProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpexplistProdData _ NARROW[tree.data]; temp0 _ MakeDummy["explist"]; END END; ExpprefixopProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpprefixopProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["PrefixOp expression used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpprefixopProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpprefixopProdData _ NARROW[tree.data]; BEGIN result: ValueNode; contextTree1: ContextTreeNode; contextTree1 _ FakeDamageContextTree[contextTree]; result _ MakeDummy["prefixop"]; temp1 _ contextTree1; temp0 _ result; END; END END; ExpprefixopProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpprefixopProdData _ NARROW[tree.data]; temp0 _ MakeDummy["prefixop"]; END END; ExpvalProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpvalProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["Val expression used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpvalProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpvalProdData _ NARROW[tree.data]; BEGIN result: ValueNode; contextTree1: ContextTreeNode; contextTree1 _ FakeDamageContextTree[contextTree]; result _ MakeDummy["val"]; temp1 _ contextTree1; temp0 _ result; END; END END; ExpvalProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpvalProdData _ NARROW[tree.data]; temp0 _ MakeDummy["val"]; END END; ExpallProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpallProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["ALL expression used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpallProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpallProdData _ NARROW[tree.data]; BEGIN result: ValueNode; contextTree1: ContextTreeNode; contextTree1 _ FakeDamageContextTree[contextTree]; result _ MakeDummy["all"]; temp1 _ contextTree1; temp0 _ result; END; END END; ExpallProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpallProdData _ NARROW[tree.data]; temp0 _ MakeDummy["all"]; END END; ExpnewProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpnewProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["NEW expression used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpnewProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpnewProdData _ NARROW[tree.data]; BEGIN result: ValueNode; contextTree1: ContextTreeNode; contextTree1 _ FakeDamageContextTree[contextTree]; result _ MakeDummy["new"]; temp1 _ contextTree1; temp0 _ result; END; END END; ExpnewProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpnewProdData _ NARROW[tree.data]; BEGIN err: BOOLEAN; err _ Error["Should not be evaluating Exp.new!"]; temp0 _ MakeTrash[targetType]; END; END END; ExpconsProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpconsProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["CONS expression used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpconsProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpconsProdData _ NARROW[tree.data]; BEGIN result: ValueNode; contextTree1: ContextTreeNode; contextTree1 _ FakeDamageContextTree[contextTree]; result _ MakeDummy["cons"]; temp1 _ contextTree1; temp0 _ result; END; END END; ExpconsProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpconsProdData _ NARROW[tree.data]; BEGIN err: BOOLEAN; err _ Error["Should not be evaluating Exp.cons!"]; temp0 _ MakeTrash[targetType]; END; END END; ExplistconsProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExplistconsProdData _ NARROW[tree.data]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["ListCons expression used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExplistconsProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExplistconsProdData _ NARROW[tree.data]; BEGIN result: ValueNode; contextTree1: ContextTreeNode; contextTree1 _ FakeDamageContextTree[contextTree]; result _ MakeDummy["listcons"]; temp1 _ contextTree1; temp0 _ result; END; END END; ExplistconsProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExplistconsProdData _ NARROW[tree.data]; BEGIN err: BOOLEAN; err _ Error["Should not be evaluating Exp.listcons!"]; temp0 _ MakeTrash[targetType]; END; END END; ExpnilProdCompileLValue: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode] RETURNS[temp0: ParameterizedFieldDescriptorNode, temp1: TypeGraphNodeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; BEGIN pfd: ParameterizedFieldDescriptorNode; tgn: TypeGraphNodeNode; err: BOOLEAN; err _ Error["NIL expression used as l-value"]; tgn _ GetIntrinsicBooleanType[cs]; pfd _ EmptyPFD[]; temp1 _ tgn; temp0 _ pfd; END; END END; ExpnilProdCompileExpression: PUBLIC PROC[ref: REF ANY, contextTree: ContextTreeNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode, temp1: ContextTreeNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; BEGIN result: ValueNode; contextTree1: ContextTreeNode; contextTree1 _ FakeDamageContextTree[contextTree]; result _ MakeDummy["nil"]; temp1 _ contextTree1; temp0 _ result; END; END END; ExpnilProdEvaluateExpression: PUBLIC PROC[ref: REF ANY, lc: LocalContextNode, fl: FieldListNode, cs: CompilerStateNode, targetType: TypeGraphNodeNode] RETURNS[temp0: ValueNode] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; temp0 _ MakeDummy["nil"]; END END; END..