DIRECTORY Addresses, CCTypes USING [CCError, CCErrorCase, CCTypeProcs, CreateCedarType, LR, ConformanceCheck, GetGroundTypeClass, Operator], CirioTypes USING [Type, TypedCode, CompilerContext, Node], CedarCode USING [Code, CreateCedarNode, OperationsBody, GetDataFromNode, Operator], IO USING [PutFR, card], Rope USING[ROPE]; AddressesImpl: CEDAR PROGRAM IMPORTS CCTypes, CedarCode, IO EXPORTS Addresses = BEGIN OPEN CCTypes; CC: TYPE = CirioTypes.CompilerContext; Code: TYPE = CedarCode.Code; Type: TYPE = CirioTypes.Type; TypedCode: TYPE = CirioTypes.TypedCode; Node: TYPE = CirioTypes.Node; CCE: ERROR[case: CCTypes.CCErrorCase, msg: Rope.ROPE _ NIL] _ CCTypes.CCError; Operator: TYPE = CedarCode.Operator; CreateAddressType: PUBLIC PROC [cc: CC] RETURNS [Type] = BEGIN RETURN [CCTypes.CreateCedarType[$address, AddressTypeCCTypeProcs, NIL, cc]]; END; AddressTypeCCTypeProcs: REF CCTypes.CCTypeProcs _ NEW[CCTypes.CCTypeProcs _[ checkConformance: AddressCCTypesCheckConformance, printType: AddressCCTypesPrintType]]; AddressCCTypesCheckConformance: PROC[valType, varType: Type, cc: CC, procData: REF ANY] RETURNS[CCTypes.ConformanceCheck] = BEGIN IF CCTypes.GetGroundTypeClass[varType, cc] = $address THEN RETURN[yes] ELSE RETURN[no]; END; AddressCCTypesPrintType: PROC [type: Type, printDepth: INT, printWidth: INT, cc: CC, procData: REF ANY] RETURNS [Rope.ROPE] = { RETURN ["ADDRESS"]; }; CreateAddressNode: PUBLIC PROC [type: Type, info: REF ANY, cc: CC] RETURNS [Node] = { RETURN [CedarCode.CreateCedarNode[AddressOps, type, info]]; }; AddressOps: REF CedarCode.OperationsBody _ NEW[CedarCode.OperationsBody _[ show: AddressShow ]]; AddressShow: PROC [node: Node, depth: INT, width: INT, cc: CC] RETURNS [Rope.ROPE] = { info: Addresses.AddressNodeInfo _ NARROW[CedarCode.GetDataFromNode[node]]; addressValue: CARD _ info.getAddressValue[info.data]; addressValueRope: Rope.ROPE _ IO.PutFR["%bB&", IO.card[addressValue]]; RETURN [addressValueRope]; }; END. ¬ AddressesImpl.mesa Created by Theimer: August 21, 1989 1:29:54 pm PDT Last changed by Theimer on August 21, 1989 10:28:20 pm PDT Type operations Node operations. ΚΗ•NewlineDelimiter ™šœ™J™2Icode™:—J˜J˜šΟk ˜ Kšœ ˜ Kšœœ6œ2˜wKšœ œ*˜:Kšœ œD˜SKšœœ˜Kšœœœ˜—K˜K˜K˜KšΠln œ ˜Kšœ˜Kšœ ˜šœ œ ˜K˜Kšœœ˜&Kšœœ˜Jšœœ˜Kšœ œ˜'Kšœœ˜Jšœœ&œœ˜NJšœ œ˜$J˜J™K˜šΟnœ œœœ ˜8Kš˜Kšœ<œ˜LKšœ˜—K˜šΟb œœ˜LK˜1Kšœ%˜%—J˜š  Ÿœœœ œœœ˜{Kš˜Jš œ4œœœœ˜WKšœ˜—K˜š œœœœœ œœœœ˜Kšœ ˜K˜—K˜K˜K˜K™K™š Ÿœ œœœœœ ˜UKšœ5˜;K˜—K˜š  œœœ˜JK˜J˜—K˜š  œœœ œœœœ˜VKšœ"œ"˜JKšœœ#˜5Kšœœœœ˜FKšœ˜K˜——K˜Kšœ˜—…—Ό /