<> <> <> <> DIRECTORY CedarBaseContext, SaffronAG6Def, CedarBaseMisc, CedarBaseTypeAux, ThreeC4Support, SaffronATDef, CedarBaseValue, CedarBaseType; SaffronMakeTypeBoundImpl: CEDAR PROGRAM IMPORTS CedarBaseMisc, CedarBaseTypeAux, ThreeC4Support, CedarBaseValue, CedarBaseType EXPORTS SaffronAG6Def= BEGIN OPEN CedarBaseContext, SaffronAG6Def, CedarBaseMisc, CedarBaseTypeAux, ThreeC4Support, SaffronATDef, CedarBaseValue, CedarBaseType; BoundProdMakeTypeBound: PUBLIC PROC[ref: REF ANY, typeIndex: TypeIndex, localContext: LocalContext, ribContext: RibContext, typeGraph: TypeGraph] RETURNS[temp0: OrdinalValue, temp1: LocalContext, temp2: TypeGraph] = BEGIN tree: BoundNode_ NARROW[ref]; BEGIN ENABLE ThreeC4Support.GetSourceInfo => RESUME[tree.position, tree.length]; treeData: BoundProdData _ NARROW[tree.data]; BEGIN assert2: BOOLEAN; assert1: BOOLEAN; typeNode: TypeNode; localContext3: LocalContext; typeGraph3: TypeGraph; assert: BOOLEAN; boundTypeNode: TypeNode; localContext2: LocalContext; typeGraph2: TypeGraph; boundTypeIndex: TypeIndex; value: Value; localContext1: LocalContext; typeGraph1: TypeGraph; [value, localContext1, typeGraph1] _ treeData.Exp.procs.MakeValue[treeData.Exp, localContext, ribContext, typeGraph, typeIndex]; boundTypeIndex _ ValueGetType[value]; [boundTypeNode, localContext2, typeGraph2] _ FetchType[typeGraph1, boundTypeIndex, localContext1, ribContext]; assert _ Assert[IsEnumType[boundTypeNode], "type mismatch", BotchAction.quit]; [typeNode, localContext3, typeGraph3] _ FetchType[typeGraph2, typeIndex, localContext2, ribContext]; assert1 _ Assert[PaintEqual[GetPaint[typeNode], GetPaint[boundTypeNode]], "type mismatch", BotchAction.quit]; assert2 _ Assert[IsSimpleValue[value], "not a compile-time constant", BotchAction.quit]; temp2 _ typeGraph3; temp1 _ localContext3; temp0 _ ValueGetOrdinal[value]; END; END END; END..