<> <> <> <> 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..