<> <> <> <> DIRECTORY CedarBaseContext, SaffronAG6Def, CedarBaseMisc, CedarBaseTypeAux, ThreeC4Support, SaffronATDef, CedarBaseType; SaffronMakeTypeImpl: CEDAR PROGRAM IMPORTS CedarBaseContext, CedarBaseMisc, CedarBaseTypeAux, ThreeC4Support, CedarBaseType EXPORTS SaffronAG6Def= BEGIN OPEN CedarBaseContext, SaffronAG6Def, CedarBaseMisc, CedarBaseTypeAux, ThreeC4Support, SaffronATDef, CedarBaseType; SubrangenamedProdMakeType: PUBLIC PROC[ref: REF ANY, localContext: LocalContext, ribContext: RibContext, typeGraph: TypeGraph, optTypeIndex: TypeIndex] RETURNS[temp0: TypeIndex, temp1: LocalContext, temp2: TypeGraph] = BEGIN tree: SubrangeNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: SubrangenamedProdData _ NARROW[tree.data]; BEGIN typeGraph3: TypeGraph; resultTypeIndex: TypeIndex; newTypeNode: TypeNode; typeNode: TypeNode; bounds: TypeBounds; localContext2: LocalContext; typeGraph2: TypeGraph; typeIndex: TypeIndex; localContext1: LocalContext; typeGraph1: TypeGraph; [typeIndex, localContext1, typeGraph1] _ treeData.TypeId.procs.MakeType[treeData.TypeId, localContext, ribContext, typeGraph, UndefinedTypeIndex[]]; [typeNode, bounds, localContext2, typeGraph2] _ treeData.Interval.procs.MakeTypeInterval[treeData.Interval, typeIndex, localContext1, ribContext, typeGraph1]; newTypeNode _ BuildSubrangeType[typeNode, bounds]; [typeGraph3, resultTypeIndex] _ AddOrSetType[typeGraph2, newTypeNode, optTypeIndex]; temp2 _ typeGraph3; temp1 _ localContext2; temp0 _ resultTypeIndex; END; END END; TypeExpenumProdMakeType: PUBLIC PROC[ref: REF ANY, localContext: LocalContext, ribContext: RibContext, typeGraph: TypeGraph, optTypeIndex: TypeIndex] RETURNS[temp0: TypeIndex, temp1: LocalContext, temp2: TypeGraph] = BEGIN tree: TypeExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: TypeExpenumProdData _ NARROW[tree.data]; BEGIN typeGraph2: TypeGraph; typeIndex: TypeIndex; typeNode: TypeNode; typeGraph1: TypeGraph; paint: Paint; eltList: EltList; eltList _ treeData.ElementList.procs.MakeEltList[treeData.ElementList]; [typeGraph1, paint] _ NewPaint[typeGraph]; typeNode _ BuildEnumType[paint, eltList]; [typeGraph2, typeIndex] _ AddOrSetType[typeGraph1, typeNode, optTypeIndex]; temp2 _ typeGraph2; temp1 _ XLocalContext[localContext]; temp0 _ typeIndex; END; END END; TypeExprecordProdMakeType: PUBLIC PROC[ref: REF ANY, localContext: LocalContext, ribContext: RibContext, typeGraph: TypeGraph, optTypeIndex: TypeIndex] RETURNS[temp0: TypeIndex, temp1: LocalContext, temp2: TypeGraph] = BEGIN tree: TypeExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: TypeExprecordProdData _ NARROW[tree.data]; BEGIN typeGraph2: TypeGraph; typeIndex: TypeIndex; typeNode: TypeNode; fieldList: FieldList; localContext1: LocalContext; typeGraph1: TypeGraph; [fieldList, localContext1, typeGraph1] _ treeData.RecList.procs.MakeFieldList[treeData.RecList, localContext, ribContext, typeGraph]; typeNode _ BuildRecordType[fieldList]; [typeGraph2, typeIndex] _ AddOrSetType[typeGraph1, typeNode, optTypeIndex]; temp2 _ typeGraph2; temp1 _ localContext1; temp0 _ typeIndex; END; END END; TypeExprefProdMakeType: PUBLIC PROC[ref: REF ANY, localContext: LocalContext, ribContext: RibContext, typeGraph: TypeGraph, optTypeIndex: TypeIndex] RETURNS[temp0: TypeIndex, temp1: LocalContext, temp2: TypeGraph] = BEGIN tree: TypeExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: TypeExprefProdData _ NARROW[tree.data]; BEGIN typeGraph2: TypeGraph; typeIndex: TypeIndex; typeNode: TypeNode; referentTypeIndex: TypeIndex; localContext1: LocalContext; typeGraph1: TypeGraph; [referentTypeIndex, localContext1, typeGraph1] _ treeData.TypeExp.procs.MakeType[treeData.TypeExp, localContext, ribContext, typeGraph, UndefinedTypeIndex[]]; typeNode _ BuildRefType[referentTypeIndex]; [typeGraph2, typeIndex] _ AddOrSetType[typeGraph1, typeNode, optTypeIndex]; temp2 _ typeGraph2; temp1 _ localContext1; temp0 _ typeIndex; END; END END; TypeExpsubrangeProdMakeType: PUBLIC PROC[ref: REF ANY, localContext: LocalContext, ribContext: RibContext, typeGraph: TypeGraph, optTypeIndex: TypeIndex] RETURNS[temp0: TypeIndex, temp1: LocalContext, temp2: TypeGraph] = BEGIN tree: TypeExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: TypeExpsubrangeProdData _ NARROW[tree.data]; [temp0, temp1, temp2] _ treeData.Subrange.procs.MakeType[treeData.Subrange, localContext, ribContext, typeGraph, optTypeIndex]; END END; TypeExptypeidProdMakeType: PUBLIC PROC[ref: REF ANY, localContext: LocalContext, ribContext: RibContext, typeGraph: TypeGraph, optTypeIndex: TypeIndex] RETURNS[temp0: TypeIndex, temp1: LocalContext, temp2: TypeGraph] = BEGIN tree: TypeExpNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: TypeExptypeidProdData _ NARROW[tree.data]; [temp0, temp1, temp2] _ treeData.TypeId.procs.MakeType[treeData.TypeId, localContext, ribContext, typeGraph, optTypeIndex]; END END; TypeIdidProdMakeType: PUBLIC PROC[ref: REF ANY, localContext: LocalContext, ribContext: RibContext, typeGraph: TypeGraph, optTypeIndex: TypeIndex] RETURNS[temp0: TypeIndex, temp1: LocalContext, temp2: TypeGraph] = BEGIN tree: TypeIdNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: TypeIdidProdData _ NARROW[tree.data]; BEGIN typeIndex: TypeIndex; assert2: BOOLEAN; assert1: BOOLEAN; descriptor: Descriptor; descriptor _ Lookup[ribContext, localContext, treeData.id]; assert1 _ Assert[Not[IsUndefinedDescriptor[descriptor]], "undeclared id", BotchAction.quit]; assert2 _ Assert[IsTypeDescriptor[descriptor], "type id expected", BotchAction.quit]; typeIndex _ GetType[descriptor]; IF IsUndefinedTypeIndex[optTypeIndex] THEN {temp2 _ XTypeGraph[typeGraph]; temp1 _ XLocalContext[localContext]; temp0 _ typeIndex; } ELSE {BEGIN typeGraph2: TypeGraph; typeNode: TypeNode; localContext1: LocalContext; typeGraph1: TypeGraph; [typeNode, localContext1, typeGraph1] _ FetchType[typeGraph, typeIndex, localContext, ribContext]; typeGraph2 _ SetType[typeGraph1, typeNode, optTypeIndex]; temp2 _ typeGraph2; temp1 _ localContext1; temp0 _ XTypeIndex[optTypeIndex]; END; }; END; END END; END..