<> <> <> DIRECTORY AMBridge, AMTypes, EqualCheck, Rope; EqualCheckImpl: CEDAR PROGRAM IMPORTS AMBridge, AMTypes EXPORTS EqualCheck = BEGIN FindDif: PUBLIC PROC [ a, b: REF ANY ] RETURNS [ fieldNames: LIST OF Rope.ROPE ] = <> BEGIN tva, tvb: AMTypes.TV; typea: AMTypes.Type; TRUSTED { tva _ AMBridge.TVForReferent[a, readOnly]; tvb _ AMBridge.TVForReferent[b, readOnly]; }; typea _ AMTypes.TVType[tva]; IF AMTypes.TVType[tvb] # typea THEN ERROR; fieldNames _ NIL; FOR i: AMTypes.Index DECREASING IN [1..AMTypes.NComponents[typea]] DO tvac: AMTypes.TV = AMTypes.IndexToTV[tva, i]; tvbc: AMTypes.TV = AMTypes.IndexToTV[tvb, i]; IF NOT AMTypes.TVEqual[tvac, tvbc] THEN fieldNames _ CONS[AMTypes.IndexToName[typea, i], fieldNames]; ENDLOOP; END; END.