<> <> <> <> DIRECTORY CedarBaseContext, SaffronAG3Def, SaffronAG1Def, CedarBaseMisc, CedarBaseTypeAux, ThreeC4Support, CedarBaseNarrow, SaffronATDef, CedarBaseType, CedarBaseValue; SaffronMakeValueImpl: CEDAR PROGRAM IMPORTS CedarBaseContext, CedarBaseMisc, CedarBaseTypeAux, ThreeC4Support, CedarBaseNarrow, CedarBaseType, CedarBaseValue EXPORTS SaffronAG3Def, SaffronAG1Def= BEGIN OPEN CedarBaseContext, SaffronAG3Def, SaffronAG1Def, CedarBaseMisc, CedarBaseTypeAux, ThreeC4Support, CedarBaseNarrow, SaffronATDef, CedarBaseType, CedarBaseValue; ExpidProdMakeValue: PUBLIC PROC[ref: REF ANY, localContext: LocalContext, ribContext: RibContext, typeGraph: TypeGraph, typeIndex: TypeIndex] RETURNS[temp0: Value, temp1: LocalContext, temp2: TypeGraph] = BEGIN tree: ExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: ExpidProdData _ NARROW[tree.data]; BEGIN assert4: BOOLEAN; assert3: BOOLEAN; assert2: BOOLEAN; descriptor: Descriptor; typeNode: TypeNode; localContext1: LocalContext; typeGraph1: TypeGraph; [typeNode, localContext1, typeGraph1] _ FetchType[typeGraph, typeIndex, localContext, ribContext]; IF IsEnumType[typeNode] THEN {BEGIN ordinalValue: OrdinalValue; eltList: EltList; eltList _ EnumTypeEltList[typeNode]; ordinalValue _ EltListLookup[eltList, treeData.id]; IF IsUndefinedOrdinalValue[ordinalValue] THEN {descriptor _ Lookup[ribContext, localContext1, treeData.id]; } ELSE {descriptor _ BuildValueDescriptor[BuildSimpleValue[typeIndex, ordinalValue]]; }; END; } ELSE {descriptor _ Lookup[ribContext, localContext1, treeData.id]; }; assert2 _ Assert[Not[IsUndefinedDescriptor[descriptor]], "undefined identifier", BotchAction.quit]; assert3 _ Assert[Not[IsInaccessibleDescriptor[descriptor]], "circularly defined value", BotchAction.quit]; assert4 _ Assert[Not[IsTypeDescriptor[descriptor]], "type identifier not allowed", BotchAction.quit]; IF IsSuspendedDescriptor[descriptor] THEN {BEGIN localContext2: LocalContext; typeGraph2: TypeGraph; temp3: DeclarationNode; temp3 _ NarrowToDeclaration[DescriptorGetDecl[descriptor]]; [localContext2, typeGraph2] _ temp3.procs.ProcessOneDecl[temp3, UndefinedTypeIndex[], localContext1, ribContext, typeGraph1]; [temp0, temp1, temp2] _ tree.procs.MakeValue[tree, localContext2, ribContext, typeGraph2, typeIndex]; END; } ELSE {temp2 _ XTypeGraph[typeGraph1]; temp1 _ XLocalContext[localContext1]; temp0 _ GetValue[descriptor]; }; END; END END; InitializationassignmentProdMakeValue: PUBLIC PROC[ref: REF ANY, localContext: LocalContext, ribContext: RibContext, typeGraph: TypeGraph, typeIndex: TypeIndex] RETURNS[temp0: Value, temp1: LocalContext, temp2: TypeGraph] = BEGIN tree: InitializationNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: InitializationassignmentProdData _ NARROW[tree.data]; temp2 _ XTypeGraph[typeGraph]; temp1 _ XLocalContext[localContext]; temp0 _ BuildVarValue[typeIndex]; END END; InitializationbindingProdMakeValue: PUBLIC PROC[ref: REF ANY, localContext: LocalContext, ribContext: RibContext, typeGraph: TypeGraph, typeIndex: TypeIndex] RETURNS[temp0: Value, temp1: LocalContext, temp2: TypeGraph] = BEGIN tree: InitializationNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: InitializationbindingProdData _ NARROW[tree.data]; [temp0, temp1, temp2] _ treeData.InitialValue.procs.MakeValue[treeData.InitialValue, localContext, ribContext, typeGraph, typeIndex]; END END; InitializationemptyProdMakeValue: PUBLIC PROC[ref: REF ANY, localContext: LocalContext, ribContext: RibContext, typeGraph: TypeGraph, typeIndex: TypeIndex] RETURNS[temp0: Value, temp1: LocalContext, temp2: TypeGraph] = BEGIN tree: InitializationNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; temp2 _ XTypeGraph[typeGraph]; temp1 _ XLocalContext[localContext]; temp0 _ BuildVarValue[typeIndex]; END END; InitialValueexpProdMakeValue: PUBLIC PROC[ref: REF ANY, localContext: LocalContext, ribContext: RibContext, typeGraph: TypeGraph, typeIndex: TypeIndex] RETURNS[temp0: Value, temp1: LocalContext, temp2: TypeGraph] = BEGIN tree: InitialValueNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: InitialValueexpProdData _ NARROW[tree.data]; [temp0, temp1, temp2] _ treeData.Exp.procs.MakeValue[treeData.Exp, localContext, ribContext, typeGraph, typeIndex]; END END; END..