-- SMTypesImpl.mesa -- lasted edited by Satterthwaite, June 22, 1983 8:57 am DIRECTORY SMTree: TYPE Tree USING [Handle, --Id,-- Link, Name, null, nullHandle, nullName], SMTreeOps: TYPE USING [GetName, NthSon, OpName], SMTypes: TYPE USING []; SMTypesImpl: CEDAR PROGRAM IMPORTS SMTreeOps EXPORTS SMTypes ~{ OPEN Tree~~SMTree, TreeOps~~SMTreeOps; StrucType: PUBLIC PROC[type: Tree.Link] RETURNS[Tree.Handle] ~ { RETURN [WITH type SELECT FROM -- id: Tree.Id => StrucType[id.value], node: Tree.Handle => node, ENDCASE => (IF type = Tree.null THEN Tree.nullHandle ELSE ERROR)]}; TypeName: PROC[type: Tree.Handle] RETURNS[Tree.Name] ~ { -- $type node t: Tree.Link ~ TreeOps.NthSon[type, 1]; RETURN [IF t = Tree.nullHandle THEN Tree.nullName ELSE TreeOps.GetName[t]]}; Equiv: PUBLIC PROC[type1, type2: Tree.Link] RETURNS[BOOL] ~ { s1: Tree.Handle ~ StrucType[type1]; s2: Tree.Handle ~ StrucType[type2]; RETURN [s1 = s2 OR ( -- quick check SELECT TreeOps.OpName[s1] FROM $type => TreeOps.OpName[s2] = $type AND (TypeName[s1] = TypeName[s2]), $control => TreeOps.OpName[s2] = $control, $typeSTRING => TreeOps.OpName[s2] = $typeSTRING, ENDCASE => FALSE)]}; -- for now Implies: PUBLIC PROC[type1, type2: Tree.Link] RETURNS[BOOL] ~ Equiv; -- temporary }.