DIRECTORY CirioTypes USING[CompilerContext, Mem, Node, Type], Rope USING[ROPE]; VariantRecords: CEDAR DEFINITIONS = BEGIN Type: TYPE = CirioTypes.Type; Mem: TYPE = CirioTypes.Mem; Node: TYPE = CirioTypes.Node; CC: TYPE = CirioTypes.CompilerContext; CreateVariantRecordType: PROC[preamble: Type, tailName: Rope.ROPE, tagName: Rope.ROPE, tagType: Type, nTailTypes: INT, controlled: BOOL, details: VariantRecordTypeDetails, cc: CC, procData: REF ANY] RETURNS[Type]; VariantRecordTypeDetails: TYPE ~ REF VariantRecordTypeDetailsRec; VariantRecordTypeDetailsRec: TYPE ~ RECORD [ createIndirectNode: PROC [cc: CC, procData: REF ANY, indirectType, targetType: Type, mem: Mem] RETURNS [Node], getBitSize: PROC[indirectType: Type, cc: CC, procData: REF ANY] RETURNS[CARD], getTailType: PROC[index: INT, procData: REF ANY] RETURNS[Type] ]; GetVRVariant: PROC[vrType: Type, index: INT, cc: CC] RETURNS[Type]; IndirectVRNodeProcs: TYPE = RECORD[ selectPreamble: PROC[procsData: REF ANY, cc: CC] RETURNS[Node], readVariantIndex: PROC[procsData: REF ANY, cc: CC] RETURNS[INT], selectTag: PROC[procsData: REF ANY, cc: CC] RETURNS[Node], selectTailBody: PROC[procsData: REF ANY, cc: CC] RETURNS[Node], getPointer: PROC[procsData: REF ANY, cc: CC] RETURNS[Node]]; VariantRecordNodeProcs: TYPE = RECORD[ extractPreamble: PROC[procsData: REF ANY, cc: CC] RETURNS[Node], variantIndex: PROC[procsData: REF ANY, cc: CC] RETURNS[INT], extractTag: PROC[procsData: REF ANY, cc: CC] RETURNS[Node], extractTailBody: PROC[procsData: REF ANY, cc: CC] RETURNS[Node]]; CreateIndirectVariantRecordNode: PROC[vrType: Type, procs: REF IndirectVRNodeProcs, procsData: REF ANY, cc: CC] RETURNS[Node]; CreateVariantRecordNode: PROC[type: Type, procs: REF VariantRecordNodeProcs, procsData: REF ANY, cc: CC, alreadyLoaded: BOOLEAN _ FALSE] RETURNS[Node]; END.. ^ VariantRecords.mesa Copyright Σ 1991, 1992 by Xerox Corporation. All rights reserved. Sturgis, November 20, 1988 Sturgis, December 12, 1988 3:50:07 pm PST Last changed by Theimer on July 16, 1989 4:36:43 pm PDT Spreitze, May 21, 1991 8:38 am PDT Laurie Horton, January 29, 1992 9:42 am PST The preamble type is expected to behave like a FieldList type. The tag type is expected to be an Enumerated type. The tail types are expected to be Record or VariantRecord types. index is in [0..nTailTypes) CCTypes.GetTypeRepresentation will return procData. maybe this should be a CRTypes object action? ΚJ•NewlineDelimiter ™codešœ™K™BKšœ™Kšœ)™)K™7K™"K™+—K˜šΟk ˜ Kšœ œ#˜3Kšœœœ˜—K˜šΟnœœ œ˜#Kš˜Kšœœ˜Kšœœ˜Kšœœ˜Kšœœ˜&K˜K˜™Kšœ>™>Kšœ2™2Kšœ@™@Kšœ™—K™šžœœ œœœœ)œ œœœ˜ΥKšœ3™3—K˜Kšœœœ˜Ašœœœ˜,Kš œœœ œœ,œ˜nKš œ œœ œœœœ˜NKš œ œœ œœœ˜>Kšœ˜—˜Kšœ-™-—Kš ž œœœœœ˜CK˜K™šœœœ˜#Kš œœ œœœœ˜?Kš œœ œœœœœ˜@Kš œ œ œœœœ˜:Kš œœ œœœœ˜?Kš œ œ œœœœ˜