DIRECTORY CCTypes, CirioTypes USING [CompilerContext, Type], DeferringTypes; DeferringTypesImpl: CEDAR PROGRAM IMPORTS CCTypes EXPORTS DeferringTypes SHARES CirioTypes = BEGIN CC: TYPE = CirioTypes.CompilerContext; Type: TYPE = CirioTypes.Type; CreateDeferringType: PUBLIC PROC [cc: CC] RETURNS [Type] ~ { dt: Type _ CCTypes.CreateCedarType[$defer, NIL, NIL, cc]; RETURN [dt]}; SetUndertype: PUBLIC PROC [deferring, under: Type] ~ { IF under=NIL THEN CCTypes.CCError[cirioError, "SetUndertype[.., NIL]"]; IF deferring.procData#NIL THEN CCTypes.CCError[cirioError, "Re-Setting the undertype of a deferring type"]; deferring.procData _ deferring.defaultType _ under; deferring.indirectType.defaultType _ under.indirectType; RETURN}; GetUndertype: PUBLIC PROC [deferring: Type] RETURNS [Type] ~ { RETURN [deferring.defaultType]}; IsDeferring: PUBLIC PROC [t: Type] RETURNS [BOOL] ~ { RETURN [t.class = $defer]}; UndertypeStar: PUBLIC PROC [deferring: Type] RETURNS [Type] ~ { IF NOT IsDeferring[deferring] THEN RETURN [deferring]; RETURN [UndertypeStar[GetUndertype[deferring]]]}; END. * DeferringTypesImpl.mesa Copyright Σ 1991 by Xerox Corporation. All rights reserved. Last tweaked by Mike Spreitzer December 20, 1991 12:40 pm PST Laurie Horton, July 20, 1992 10:31 am PDT Some implementation also exists in CCTypesImpl.Get(TypeClass,ProcDataFromType,DefaultTypeFromType). Κ»•NewlineDelimiter ™™J™Kšœ˜ —K˜š ž œœœ œœ˜5Kšœ˜K˜—šž œœœœ ˜?Kšœœœœ ˜6Kšœ+˜1—K˜K™cK˜Kšœ˜—…—D)