SiroccoMethodsAImpl.mesa
Copyright Ó 1987 by Xerox Corporation. All rights reserved.
Generated by BJackson.pa at August 26, 1987 3:45:37 pm PDT
using ThreeCasabaFour [1.2] of June 1, 1987 6:00:00 pm PDT
DIRECTORY
SiroccoAG2Def,
SiroccoAG1Def,
SiroccoBaseDef,
Rope,
SiroccoCGDef,
SiroccoPrivate,
ThreeC4Support,
SiroccoATDef;
SiroccoMethodsAImpl: CEDAR PROGRAM IMPORTS SiroccoBaseDef, ThreeC4Support EXPORTS SiroccoAG2Def, SiroccoAG1Def=
BEGIN
OPEN SiroccoAG2Def, SiroccoAG1Def, SiroccoBaseDef, Rope, SiroccoCGDef, SiroccoPrivate, ThreeC4Support, SiroccoATDef;
ProgramexportProdMakeSymbolTable: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: ROPE, temp1: CARD, temp2: CARD, temp3: TypeGraph] =
BEGIN
tree: ProgramNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ProgramexportProdData ← NARROW[tree.data];
BEGIN
res: TypeGraph;
tossB: BOOLEAN;
tossA: BOOLEAN;
typegraph: TypeGraph;
context: CONTEXT;
scope: SCOPE;
rib: RIB;
name: ROPE;
pgm: CARD;
version: CARD;
version ← CardFromDecimal[treeData.decimalversion];
pgm ← CardFromDecimal[treeData.decimalpgm];
name ← TextFromID[treeData.idexport];
rib ← treeData.ImportList.procs.BuildRIB[treeData.ImportList];
scope ← treeData.DeclarationList.procs.BuildItemTable[treeData.DeclarationList];
context ← CreateContext[rib, scope, name, pgm, version];
typegraph ← treeData.DeclarationList.procs.BuildTypeGraph[treeData.DeclarationList, context];
tossA ← AssertTypeGraphAcyclic[typegraph];
tossB ← AssertValueGraphAcyclic[typegraph];
res ← typegraph;
temp3 ← res;
temp2 ← version;
temp1 ← pgm;
temp0 ← name;
END;
END
END;
ImportListemptyProdBuildRIB: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: RIB] =
BEGIN
tree: ImportListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← EmptyRIB[];
END
END;
ImportListmoreProdBuildRIB: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: RIB] =
BEGIN
tree: ImportListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ImportListmoreProdData ← NARROW[tree.data];
BEGIN
newrib: RIB;
rib: RIB;
scope: SCOPE;
scope ← treeData.Import.procs.BuildScope[treeData.Import];
rib ← treeData.ImportList.procs.BuildRIB[treeData.ImportList];
newrib ← ScopeConcat[rib, scope];
temp0 ← newrib;
END;
END
END;
ImportinterfaceProdBuildScope: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: SCOPE] =
BEGIN
tree: ImportNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ImportinterfaceProdData ← NARROW[tree.data];
BEGIN
scope: SCOPE;
interface: ROPE;
pgm: CARD;
version: CARD;
version ← CardFromDecimal[treeData.decimalversion];
pgm ← CardFromDecimal[treeData.decimalpgm];
interface ← TextFromID[treeData.idinterface];
scope ← DiskToTable[interface, pgm, version];
temp0 ← scope;
END;
END
END;
DeclarationListemptyProdBuildTypeGraph: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraph] =
BEGIN
tree: DeclarationListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← CreateEmptyTGN[context];
END
END;
DeclarationListemptyProdBuildItemTable: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: SCOPE] =
BEGIN
tree: DeclarationListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
temp0 ← EmptyScope[];
END
END;
DeclarationListmoreProdBuildTypeGraph: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraph] =
BEGIN
tree: DeclarationListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: DeclarationListmoreProdData ← NARROW[tree.data];
BEGIN
graphB: TypeGraph;
graphA: TypeGraph;
name: ROPE;
node: TypeGraphNode;
value: AbstractValue;
[name, node, value] ← treeData.Declaration.procs.BuildNamedItem[treeData.Declaration, context];
graphA ← treeData.DeclarationList.procs.BuildTypeGraph[treeData.DeclarationList, context];
graphB ← UpdateItem[graphA, name, node, value];
temp0 ← graphB;
END;
END
END;
DeclarationListmoreProdBuildItemTable: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: SCOPE] =
BEGIN
tree: DeclarationListNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: DeclarationListmoreProdData ← NARROW[tree.data];
BEGIN
newscope: SCOPE;
scope: SCOPE;
item: ITEM;
item ← treeData.Declaration.procs.BuildItem[treeData.Declaration];
scope ← treeData.DeclarationList.procs.BuildItemTable[treeData.DeclarationList];
newscope ← ItemConcat[scope, item];
temp0 ← newscope;
END;
END
END;
DeclarationtypeProdBuildNamedItem: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: ROPE, temp1: TypeGraphNode, temp2: AbstractValue] =
BEGIN
tree: DeclarationNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: DeclarationtypeProdData ← NARROW[tree.data];
BEGIN
value: AbstractValue;
node: TypeGraphNode;
item: ITEM;
name: ROPE;
name ← TextFromID[treeData.id];
item ← ItemFromContext[context, name];
node ← treeData.Type.procs.BuildTGN[treeData.Type, context];
value ← CreateNullAVN[];
temp2 ← value;
temp1 ← node;
temp0 ← name;
END;
END
END;
DeclarationtypeProdBuildItem: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: ITEM] =
BEGIN
tree: DeclarationNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: DeclarationtypeProdData ← NARROW[tree.data];
BEGIN
index: INT;
name: ROPE;
name ← TextFromID[treeData.id];
index ← tree.position;
temp0 ← MakeItem[name, index, ItemKind.type];
END;
END
END;
DeclarationconstantProdBuildNamedItem: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: ROPE, temp1: TypeGraphNode, temp2: AbstractValue] =
BEGIN
tree: DeclarationNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: DeclarationconstantProdData ← NARROW[tree.data];
BEGIN
value: AbstractValue;
node: TypeGraphNode;
name: ROPE;
name ← TextFromID[treeData.id];
node ← treeData.Type.procs.BuildTGN[treeData.Type, context];
value ← treeData.Constant.procs.BuildAbstractValue[treeData.Constant, context];
temp2 ← value;
temp1 ← node;
temp0 ← name;
END;
END
END;
DeclarationconstantProdBuildItem: PUBLIC PROC[ref: REF ANY] RETURNS[temp0: ITEM] =
BEGIN
tree: DeclarationNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: DeclarationconstantProdData ← NARROW[tree.data];
BEGIN
index: INT;
key: ROPE;
key ← TextFromID[treeData.id];
index ← tree.position;
temp0 ← MakeItem[key, index, ItemKind.const];
END;
END
END;
TypealiasProdBuildTGN: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraphNode] =
BEGIN
tree: TypeNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: TypealiasProdData ← NARROW[tree.data];
BEGIN
node: TypeGraphNode;
item: ROPE;
item ← TextFromID[treeData.id];
node ← CreateDerefTGN[context, item];
temp0 ← node;
END;
END
END;
TypeimportProdBuildTGN: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraphNode] =
BEGIN
tree: TypeNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: TypeimportProdData ← NARROW[tree.data];
BEGIN
node: TypeGraphNode;
interface: ROPE;
item: ROPE;
item ← TextFromID[treeData.iditem];
interface ← TextFromID[treeData.idinterface];
node ← CreateLinkTGN[context, interface, item];
temp0 ← node;
END;
END
END;
TypeboolProdBuildTGN: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraphNode] =
BEGIN
tree: TypeNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
BEGIN
node: TypeGraphNode;
node ← CreateBaseTypeTGN[BaseTypeKind.bool];
temp0 ← node;
END;
END
END;
Typecard16ProdBuildTGN: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraphNode] =
BEGIN
tree: TypeNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
BEGIN
node: TypeGraphNode;
node ← CreateBaseTypeTGN[BaseTypeKind.card16];
temp0 ← node;
END;
END
END;
Typecard32ProdBuildTGN: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraphNode] =
BEGIN
tree: TypeNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
BEGIN
node: TypeGraphNode;
node ← CreateBaseTypeTGN[BaseTypeKind.card32];
temp0 ← node;
END;
END
END;
Typeint16ProdBuildTGN: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraphNode] =
BEGIN
tree: TypeNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
BEGIN
node: TypeGraphNode;
node ← CreateBaseTypeTGN[BaseTypeKind.int16];
temp0 ← node;
END;
END
END;
Typeint32ProdBuildTGN: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraphNode] =
BEGIN
tree: TypeNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
BEGIN
node: TypeGraphNode;
node ← CreateBaseTypeTGN[BaseTypeKind.int32];
temp0 ← node;
END;
END
END;
TypesinkProdBuildTGN: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraphNode] =
BEGIN
tree: TypeNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
BEGIN
node: TypeGraphNode;
node ← CreateBaseTypeTGN[BaseTypeKind.sink];
temp0 ← node;
END;
END
END;
TypesourceProdBuildTGN: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraphNode] =
BEGIN
tree: TypeNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
BEGIN
node: TypeGraphNode;
node ← CreateBaseTypeTGN[BaseTypeKind.source];
temp0 ← node;
END;
END
END;
TypestringProdBuildTGN: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraphNode] =
BEGIN
tree: TypeNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
BEGIN
node: TypeGraphNode;
node ← CreateBaseTypeTGN[BaseTypeKind.string];
temp0 ← node;
END;
END
END;
TypeunspecProdBuildTGN: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraphNode] =
BEGIN
tree: TypeNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
BEGIN
node: TypeGraphNode;
node ← CreateBaseTypeTGN[BaseTypeKind.unspec];
temp0 ← node;
END;
END
END;
TypearrayProdBuildTGN: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraphNode] =
BEGIN
tree: TypeNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: TypearrayProdData ← NARROW[tree.data];
BEGIN
node: TypeGraphNode;
length: AbstractValue;
subtype: TypeGraphNode;
subtype ← treeData.Type.procs.BuildTGN[treeData.Type, context];
length ← treeData.Constant.procs.BuildAbstractValue[treeData.Constant, context];
node ← CreateArrayTGN[length, subtype];
temp0 ← node;
END;
END
END;
TypechoiceProdBuildTGN: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraphNode] =
BEGIN
tree: TypeNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: TypechoiceProdData ← NARROW[tree.data];
BEGIN
node: TypeGraphNode;
ktype: TypeGraphNode;
union: TypeGraphNode;
union ← treeData.Union.procs.BuildTGN[treeData.Union, context];
ktype ← treeData.Type.procs.BuildTGN[treeData.Type, context];
node ← CreateChoiceTGN[ktype, union];
temp0 ← node;
END;
END
END;
TypeenumProdBuildTGN: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraphNode] =
BEGIN
tree: TypeNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: TypeenumProdData ← NARROW[tree.data];
BEGIN
node: TypeGraphNode;
enum: TypeGraphNode;
enum ← treeData.Enumeration.procs.BuildTGN[treeData.Enumeration, context];
node ← CreateEnumerationTGN[enum];
temp0 ← node;
END;
END
END;
TypeerrorProdBuildTGN: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraphNode] =
BEGIN
tree: TypeNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: TypeerrorProdData ← NARROW[tree.data];
BEGIN
node: TypeGraphNode;
fieldlist: TypeGraphNode;
fieldlist ← treeData.FieldList.procs.BuildTGN[treeData.FieldList, context];
node ← CreateErrorTGN[fieldlist];
temp0 ← node;
END;
END
END;
TypeprocProdBuildTGN: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraphNode] =
BEGIN
tree: TypeNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: TypeprocProdData ← NARROW[tree.data];
BEGIN
node: TypeGraphNode;
args: TypeGraphNode;
results: TypeGraphNode;
errors: TypeGraphNode;
errors ← treeData.NameList.procs.BuildTGN[treeData.NameList, context];
results ← treeData.FieldListres.procs.BuildTGN[treeData.FieldListres, context];
args ← treeData.FieldListarg.procs.BuildTGN[treeData.FieldListarg, context];
node ← CreateProcTGN[args, results, errors];
temp0 ← node;
END;
END
END;
TyperecordProdBuildTGN: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraphNode] =
BEGIN
tree: TypeNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: TyperecordProdData ← NARROW[tree.data];
BEGIN
node: TypeGraphNode;
fieldlist: TypeGraphNode;
fieldlist ← treeData.FieldList.procs.BuildTGN[treeData.FieldList, context];
node ← CreateRecordTGN[fieldlist];
temp0 ← node;
END;
END
END;
TypenullProdBuildTGN: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraphNode] =
BEGIN
tree: TypeNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
BEGIN
node: TypeGraphNode;
empty: TypeGraphNode;
empty ← CreatePrimitiveTGN[Generic.record];
node ← CreateRecordTGN[empty];
temp0 ← node;
END;
END
END;
TypeseqProdBuildTGN: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: TypeGraphNode] =
BEGIN
tree: TypeNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: TypeseqProdData ← NARROW[tree.data];
BEGIN
node: TypeGraphNode;
maxlength: AbstractValue;
subtype: TypeGraphNode;
subtype ← treeData.Type.procs.BuildTGN[treeData.Type, context];
maxlength ← treeData.Constant.procs.BuildAbstractValue[treeData.Constant, context];
node ← CreateSequenceTGN[maxlength, subtype];
temp0 ← node;
END;
END
END;
ConstantderefProdBuildAbstractValue: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: AbstractValue] =
BEGIN
tree: ConstantNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ConstantderefProdData ← NARROW[tree.data];
BEGIN
value: AbstractValue;
item: ROPE;
item ← TextFromID[treeData.id];
value ← CreateDerefAVN[context, item];
temp0 ← value;
END;
END
END;
ConstantimportProdBuildAbstractValue: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: AbstractValue] =
BEGIN
tree: ConstantNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ConstantimportProdData ← NARROW[tree.data];
BEGIN
value: AbstractValue;
interface: ROPE;
item: ROPE;
item ← TextFromID[treeData.iditem];
interface ← TextFromID[treeData.idinterface];
value ← CreateLinkAVN[context, interface, item];
temp0 ← value;
END;
END
END;
ConstantemptyProdBuildAbstractValue: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: AbstractValue] =
BEGIN
tree: ConstantNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
BEGIN
value: AbstractValue;
node: AbstractValue;
node ← CreateNullAVN[];
value ← CreateGroupingAVN[node];
temp0 ← value;
END;
END
END;
ConstantfalseProdBuildAbstractValue: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: AbstractValue] =
BEGIN
tree: ConstantNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
BEGIN
value: AbstractValue;
value ← CreateLogicalAVN[False[]];
temp0 ← value;
END;
END
END;
ConstanttrueProdBuildAbstractValue: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: AbstractValue] =
BEGIN
tree: ConstantNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
BEGIN
value: AbstractValue;
value ← CreateLogicalAVN[True[]];
temp0 ← value;
END;
END
END;
ConstantunboundedProdBuildAbstractValue: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: AbstractValue] =
BEGIN
tree: ConstantNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
BEGIN
value: AbstractValue;
value ← CreateNumericalAVN[card[65536]];
temp0 ← value;
END;
END
END;
ConstantinvertedProdBuildAbstractValue: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: AbstractValue] =
BEGIN
tree: ConstantNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ConstantinvertedProdData ← NARROW[tree.data];
BEGIN
value: AbstractValue;
node: AbstractValue;
node ← treeData.Number.procs.BuildAbstractValue[treeData.Number, context];
value ← CreateNegativeAVN[node];
temp0 ← value;
END;
END
END;
ConstantnumberProdBuildAbstractValue: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: AbstractValue] =
BEGIN
tree: ConstantNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ConstantnumberProdData ← NARROW[tree.data];
BEGIN
value: AbstractValue;
value ← treeData.Number.procs.BuildAbstractValue[treeData.Number, context];
temp0 ← value;
END;
END
END;
ConstantstringProdBuildAbstractValue: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: AbstractValue] =
BEGIN
tree: ConstantNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ConstantstringProdData ← NARROW[tree.data];
BEGIN
value: AbstractValue;
text: ROPE;
text ← GetRopeFromRope[treeData.rope];
value ← CreateRopeAVN[text];
temp0 ← value;
END;
END
END;
ConstantchoiceProdBuildAbstractValue: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: AbstractValue] =
BEGIN
tree: ConstantNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ConstantchoiceProdData ← NARROW[tree.data];
BEGIN
value: AbstractValue;
tag: ROPE;
node: AbstractValue;
node ← treeData.Constant.procs.BuildAbstractValue[treeData.Constant, context];
tag ← TextFromID[treeData.id];
value ← CreateVariantAVN[tag, node];
temp0 ← value;
END;
END
END;
ConstantconstructorProdBuildAbstractValue: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: AbstractValue] =
BEGIN
tree: ConstantNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ConstantconstructorProdData ← NARROW[tree.data];
BEGIN
value: AbstractValue;
node: AbstractValue;
node ← treeData.Constructor.procs.BuildAbstractValue[treeData.Constructor, context];
value ← CreateConstructorAVN[node];
temp0 ← value;
END;
END
END;
ConstantgroupingProdBuildAbstractValue: PUBLIC PROC[ref: REF ANY, context: CONTEXT] RETURNS[temp0: AbstractValue] =
BEGIN
tree: ConstantNode← NARROW[ref];
BEGIN
ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length];
treeData: ConstantgroupingProdData ← NARROW[tree.data];
BEGIN
value: AbstractValue;
node: AbstractValue;
node ← treeData.Grouping.procs.BuildAbstractValue[treeData.Grouping, context];
value ← CreateGroupingAVN[node];
temp0 ← value;
END;
END
END;
END..