<<>> <> <> <> <> <> DIRECTORY CedarCode USING[Operator], CirioSyntacticOperations USING[NameArgPair, ParseTree], CirioTypes USING[CompilerContext, Mem, Node, Type, TypeClass, TypedCode , BinaryTargetTypes, CCTypeProcs, ConformanceCheck, IdFieldCase, LR], IO USING[STREAM], Rope USING[ROPE]; CCTypes: CEDAR DEFINITIONS SHARES CirioTypes = BEGIN OPEN CirioTypes; ROPE: TYPE ~ Rope.ROPE; <> Operator: TYPE = CedarCode.Operator; <> LR: TYPE = CirioTypes.LR; <> BinaryTargetTypes: TYPE = CirioTypes.BinaryTargetTypes; <> <<>> CC: TYPE = CompilerContext; CreateCedarCompilerContext: PROC RETURNS[CompilerContext]; <<>> <> <<>> <> <<>> CreateCompoundNameScope: PROC[ampersandContext1, ampersandContext2, targetWorldContext: Node, cc: CC] RETURNS[Node]; <> <<&identifiers behave as follows: for loads, we try ampersandContext1, then ampersandContext2. For stores, we only use ampersandContext1.>> <<>> GlobalScopeIndex: CARD = 1; <> <> <> <> <> <> <> GetWrongType: PROC[cc: CC] RETURNS[Type]; GetNodeType: PROC[cc: CC] RETURNS[Type]; GetBooleanType: PROC[cc: CC] RETURNS[Type]; SetBooleanType: PROC[cc: CC, t: Type]; GetCharType: PROC[cc: CC] RETURNS[Type]; SetCharType: PROC[cc: CC, t: Type]; GetCedarNumericType: PROC[desc: NumericDescriptor, cc: CC, insist: BOOL] RETURNS[Type]; SetCedarNumericType: PROC[cc: CC, desc: NumericDescriptor, t: Type]; GetRopeType: PROC[cc: CC] RETURNS[Type]; SetRopeType: PROC[cc: CC, t: Type]; GetAnyTargetType: PROC[cc: CC] RETURNS[Type]; SetRefAnyType: PROC[cc: CC, t: Type]; GetRefAnyType: PROC[cc: CC] RETURNS[Type]; GetNilRefType: PROC[cc: CC] RETURNS[Type]; GetNilPointerType: PROC[cc: CC] RETURNS[Type]; SetNilPointerType: PROC[cc: CC, t: Type]; GetAmpersandContextType: PROC[cc: CC] RETURNS[Type]; GetAmpersandVarType: PROC[cc: CC] RETURNS[Type]; NumericDescriptor: TYPE = RECORD[ nBits: INT, basicCases: SELECT primary: * FROM real => [], signed => [ cases: SELECT secondary: * FROM full => [], subRange => [bottom, top: INT32], ENDCASE], unsigned => [ cases: SELECT secondary: * FROM full => [], subRange => [bottom, top: CARD32], ENDCASE], ENDCASE]; <<>> <> <<>> <> ConformanceCheck: TYPE = CirioTypes.ConformanceCheck; <<>> <> TryStandardCoercion: PROC[targetType: CirioTypes.Type, tc: TypedCode, continueCoerce: PROC RETURNS[TypedCode], cc: CC] RETURNS[TypedCode]; <<>> <> <> <<>> <> LocalCedarTargetWorld: TYPE = REF LocalCedarTargetWorldBody; LocalCedarTargetWorldBody: TYPE = RECORD[ createNodeFromRefAny: PROC[refAny: REF ANY, lctw: LocalCedarTargetWorld, cc: CC] RETURNS[Node], -- this may be de-implemented createFrameNodeForSelf: PROC[lctw: LocalCedarTargetWorld, cc: CC] RETURNS[Node], data: REF ANY]; <> <<>> <> RegisterLocalCedarTargetWorld: PROC[lctw: LocalCedarTargetWorld, cc: CC]; <> <<>> CreateNodeFromRefAny: PROC[refAny: REF ANY, cc: CC] RETURNS[Node]; <> <<>> CreateFrameNodeForSelf: PROC[cc: CC] RETURNS[Node]; <> <<>> <<>> GetCirioAddressType: PROC[cc: CC] RETURNS[Type]; <> <<>> <<>> <> CCError: ERROR[case: CCErrorCase, msg: ROPE]; <> CCErrorCase: TYPE = {none, syntax, operation, typeConformity, unimplemented, cirioError}; <> <> <> <> <> <> <> <<>> <> <<>> <> <<>> <> <<>> Conforms: PROC[valType, varType: Type, cc: CC, oc: Type _ NIL] RETURNS[BOOLEAN]; <> <> <> <> <> <<>> Storable: PROC[valType, indirectType: Type, cc: CC, oc: Type _ NIL] RETURNS[BOOLEAN]; <> <> CheckConformance: PROC[valType, varType: Type, cc: CC, oc: Type _ NIL] RETURNS[ConformanceCheck]; <> <> <> <<>> CheckFamilyInclusion: PROC[valType, varType: Type, cc: CC, oc: Type _ NIL] RETURNS[BOOLEAN]; <> <> <<>> IsASingleton: PROC[type: Type, cc: CC, oc: Type _ NIL] RETURNS[BOOLEAN]; <> <> <> <<>> BinaryOperandTypes: PROC[op: Operator, left, right: Type, cc: CC, oc: Type _ NIL] RETURNS[BinaryTargetTypes]; <> <> <> IsAnIndirect: PROC[type: Type, cc: CC, oc: Type _ NIL] RETURNS[BOOLEAN]; <> <> <<>> GetLTargetType: PROC[type: Type, cc: CC, oc: Type _ NIL] RETURNS[Type]; <> <> <> <<>> GetRTargetType: PROC[type: Type, cc: CC, oc: Type _ NIL] RETURNS[Type]; <> <> <> <<>> GetFieldsType: PROC[rcdType: Type, cc: CC, oc: Type _ NIL] RETURNS[Type]; <> <> <<>> <<>> GetRefType: PROC[rhs: Type, cc: CC, oc: Type _ NIL] RETURNS[Type]; <> <> <<>> <> IdFieldCase: TYPE = CirioTypes.IdFieldCase; <<>> HasIdField: PROC[id: ROPE, fieldContext: Type, cc: CC, oc: Type _ NIL] RETURNS[IdFieldCase]; <> <> <<>> ContainsVariance: PROC[type: Type, cc: CC, oc: Type _ NIL] RETURNS[BOOLEAN]; <> <> GetNVariants: PROC[type: Type, cc: CC, oc: Type _ NIL] RETURNS[INT]; <> <> AsIndexSet: PROC[type: Type, cc: CC, oc: Type _ NIL] RETURNS[Type]; <> <> <<>> Operand: PROC[op: Operator, lr: LR, tc: TypedCode, cc: CC, oc: Type _ NIL] RETURNS[TypedCode]; <> <> <> ApplyOperand: PROC[operatorType: Type, operand: CirioSyntacticOperations.ParseTree, cc: CC, oc: Type _ NIL] RETURNS[TypedCode]; <> <> IndexOperand: PROC[operatorType: Type, operand: CirioSyntacticOperations.ParseTree, cc: CC, oc: Type _ NIL] RETURNS[TypedCode]; <> <> CoerceToType: PROC[targetType: Type, tc: TypedCode, cc: CC, oc: Type _ NIL] RETURNS[TypedCode]; <> <> BinaryOp: PROC[op: Operator, left, right: TypedCode, cc: CC, oc: Type _ NIL] RETURNS[TypedCode]; <> <> <> UnaryOp: PROC[op: Operator, arg: TypedCode, cc: CC, oc: Type _ NIL] RETURNS[TypedCode]; <> <> <> <<>> NAryOperandType: PROC[op: Operator, typeSoFar, nextType: Type, cc: CC, oc: Type _ NIL] RETURNS[Type]; <> <> <> <<>> NAryOp: PROC[op: Operator, args: LIST OF TypedCode, cc: CC, oc: Type _ NIL] RETURNS[TypedCode]; <> <> <> <> TypeOp: PROC[op: Operator, type: Type, cc: CC, oc: Type _ NIL] RETURNS[TypedCode]; <> <> <> TypeOp2OperandType: PROC[op: Operator, type: Type, cc: CC, oc: Type _ NIL] RETURNS[Type]; <> < pair. For example, this might be the size of a sequence type with n components. TypeOp2OperandType defines the target type for the number expression.>> <> TypeOp2: PROC[op: Operator, type: Type, arg: TypedCode, cc: CC, oc: Type _ NIL] RETURNS[TypedCode]; <> <> <> <<>> Constructor: PROC[list: LIST OF CirioSyntacticOperations.ParseTree, targetType: Type, cc: CC, oc: Type _ NIL] RETURNS[TypedCode]; <> <> <<>> PairConstructor: PROC[list: LIST OF CirioSyntacticOperations.NameArgPair, targetType: Type, cc: CompilerContext, oc: Type _ NIL] RETURNS[TypedCode]; <> <> Store: PROC[value: TypedCode, indirect: TypedCode, cc: CC, oc: Type _ NIL] RETURNS[TypedCode]; <> <> <<>> Load: PROC[indirect: TypedCode, cc: CC, oc: Type _ NIL] RETURNS[TypedCode]; <> <> <<>> ExtractIdField: PROC[id: ROPE, fieldContext: Type, cc: CC, oc: Type _ NIL] RETURNS[TypedCode]; <> <> LoadIdVal: PROC[id: ROPE, targetType: Type, cc: CC, oc: Type _ NIL] RETURNS[TypedCode]; <> <> SelectIdField: PROC[id: ROPE, fieldIndirectContext: Type, cc: CC, oc: Type _ NIL] RETURNS[TypedCode]; <> <> LoadIdField: PROC[id: ROPE, fieldIndirectContext: Type, cc: CC, oc: Type _ NIL] RETURNS[TypedCode]; <> <> <<>> Apply: PROC[operator: TypedCode, operand: TypedCode, cc: CC, oc: Type _ NIL] RETURNS[TypedCode]; <> <> <<>> Index: PROC[operator: TypedCode, operand: TypedCode, cc: CC, oc: Type _ NIL] RETURNS[TypedCode]; <> <> GetTypeRepresentation: PROC[type: Type, cc: CC, oc: Type _ NIL] RETURNS[REF ANY]; <> <> <<>> GetNElements: PROC[type: Type, cc: CC, oc: Type _ NIL] RETURNS[CARD]; <> <> <<>> GetScopeIndex: PROC [type: Type, cc: CC, oc: Type _ NIL] RETURNS [CARD]; <> <<>> GetGroundType: PROC[type: Type, cc: CC, oc: Type _ NIL] RETURNS[Type]; <> <> <<>> PrintType: PROC[to: IO.STREAM, type: Type, printDepth, printWidth: INT, cc: CC, oc: Type _ NIL]; <> <> sia: READONLY INT; --Standard Indentation Amount DoObject: PROC [to: IO.STREAM, printit: PROC]; <> BreakObject: PROC [to: IO.STREAM, printit: PROC, sep: ROPE _ NIL]; <<= {SS.Bp[to, lookLeft, sia, sep]; DoObject[printit]}>> PrintTypeBracketed: PROC[to: IO.STREAM, type: Type, printDepth: INT, printWidth: INT, cc: CC, oc: Type _ NIL]; <<= DoObject[to, {PrintType[...]}]>> BreakPrintType: PROC[to: IO.STREAM, type: Type, printDepth, printWidth: INT, cc: CC, sep: ROPE _ NIL, oc: Type _ NIL]; <<= BreakObject[to, {PrintType[...]}, sep]>> GetIndirectCreateNode: PROC[targetType: Type, mem: Mem, cc: CC] RETURNS[Node]; CreateIndirectNode: PROC[indirectType: Type, mem: Mem, cc: CC, oc: Type _ NIL] RETURNS[Node]; GetBitSize: PROC[indirectType: Type, cc: CC, oc: Type _ NIL] RETURNS[CARD]; <> CreateCedarType: PROC[class: TypeClass, typeOps, indirectTypeOps: REF CCTypeProcs, cc: CC, procData: REF ANY _ NIL, defaultType: Type _ NIL] RETURNS[Type]; <> <<>> <<>> IsIndirectType: PROC [type: Type] RETURNS [BOOLEAN]; GetIndirectType: PROC[rhs: Type] RETURNS[Type]; GetTargetTypeOfIndirect: PROC[indirect: Type] RETURNS[Type]; GetTypeClass: PROC [type: Type] RETURNS [CirioTypes.TypeClass]; GetProcDataFromType: PROC[type: Type] RETURNS[REF ANY]; GetDefaultTypeFromType: PROC[type: Type] RETURNS[Type]; GetGroundTypeClass: PROC [type: Type, cc: CC] RETURNS [CirioTypes.TypeClass]; GetProcDataFromGroundType: PROC[type: Type, cc: CC] RETURNS[REF ANY]; CCTypeProcs: TYPE ~ CirioTypes.CCTypeProcs; <> <<(Note: February 27, 1989 11:44:56 am PST: I don't believe that this routine is used anymore. I shall comment it out to check that claim.)>> <<>> <> <<(implemented in CirioTypesImpl.)>> END..