DIRECTORY MPLeaves, MPTree, CrankTypes, Rope USING [ROPE], IO; CrankOps: CEDAR DEFINITIONS ~ BEGIN OPEN CrankTypes, Rope; Error: SIGNAL [message: ROPE, tree: REF]; Assert: PROC [true: BOOLEAN, format: ROPE ¬ NIL, value: IO.Value ¬ [null[]], tree: REF ¬ NIL]; Help: PROC [format: ROPE, value: IO.Value ¬ [null[]], tree: REF ¬ NIL] RETURNS [result: REF ¬ NIL]; AddAttribute: PROC [aNode: AttributedNode, name: ATOM, value: REF]; GetAttribute: PROC [aTree: Tree, name: ATOM] RETURNS [value: REF]; ReplaceAttribute: PROC [aNode: AttributedNode, name: ATOM, value: REF]; AddTypeCodeAttribute: PROC [tree: REF, attributeName: ATOM, typeCode: TypeCode]; QualifyIdentifierNode: PROC [tree: Tree, qualifier: ROPE]; PropagateAttribute: PROC [dstNode: REF, dstAttributeKey: ATOM, srcNode: AttributedNode, srcAttributeKey: ATOM]; GetTypeCodeAttribute: PROC [tree: REF, attributeName: ATOM ¬ NIL] RETURNS [TypeCode]; GetTypeValueAttribute: PROC [typeGraph: TypeGraph, tree: REF] RETURNS [TypeCode]; NewTypeGraph: PROC RETURNS [TypeGraph]; NewType: PROC [typeGraph: TypeGraph, type: Type] RETURNS [typeCode: TypeCode]; NewDefinitionType: PROC [typeGraph: TypeGraph, qualifier: ROPE, shortName: ROPE, groundType: TypeCode] RETURNS [TypeCode]; NewInitialType: PROC [typeGraph: TypeGraph, environmentModule: ROPE, tree: Tree, groundType: TypeCode] RETURNS [TypeCode]; NewReferenceType: PROC [typeGraph: TypeGraph, referentType: TypeCode, class: ATOM] RETURNS [TypeCode]; NewTypeType: PROC [typeGraph: TypeGraph, value: TypeCode] RETURNS [TypeCode]; TypeFromTypeCode: PROC [typeGraph: TypeGraph, typeCode: TypeCode] RETURNS [Type]; UnderType: PROC [typeGraph: TypeGraph, typeCode: TypeCode] RETURNS [Type]; BaseType: PROC [typeGraph: TypeGraph, typeCode: TypeCode] RETURNS [Type]; DIntFromRef: PROC [ref: REF] RETURNS [DINT]; FieldProc: TYPE = PROC [fieldIndex: INT, fieldName: ROPE, fieldTypeCode: TypeCode, tagName: ROPE, tagTypeCode: TypeCode] RETURNS [quit: BOOL ¬ FALSE]; EnumerateFields: PROC [typeGraph: TypeGraph, typeCode: TypeCode, action: FieldProc] RETURNS [BOOL]; QualifyVariant: PROC [typeGraph: TypeGraph, typeCode: TypeCode, qualifier: ROPE] RETURNS [TypeCode]; ComputeExternalTypeRep: PROC [typeGraph: TypeGraph]; AssertNotVar: PROC [tree: REF]; GetTypeName: PROC [context: Context, typeCode: TypeCode, retainInitalValue: BOOL] RETURNS [LIST OF REF]; GenSym: PROC [typeGraph: TypeGraph, prefix: ROPE] RETURNS [ROPE]; NewContext: PROC [parent: Context] RETURNS [Context]; AddSymbol: PROC [context: Context, id: ROPE, val: SymbolTableEntry]; AddFieldListToContext: PROC [context: Context, fieldList: FieldList]; LookupSymbol: PROC [context: Context, id: ROPE] RETURNS [SymbolTableEntry]; Root: PROC [context: Context] RETURNS [Context]; LookupTypeCode: PROC [context: Context, id: ROPE] RETURNS [TypeCode]; GetConcreteTypeCode: PROC [context: Context, typeCode: TypeCode] RETURNS [TypeCode]; ExportType: PROC [context: Context, concrete, opaque: TypeCode]; GetIdentifier: PROC [tree: Tree] RETURNS [ROPE]; GetTypeRange: PROC [context: Context, tree: Tree] RETURNS [first, last: DINT]; GetSimpleConstant: PROC [context: Context, tree: Tree] RETURNS [DINT]; GetRopeLiteral: PROC [tree: Tree] RETURNS [ROPE]; GetNodeName: PROC [tree: Tree] RETURNS [ATOM]; GetNodeNameCode: PROC [tree: Tree] RETURNS [MPTree.NodeName]; DoList: PROC [listOrItem: Tree, action: PROC [Tree]]; WithId: PROC [tree: Tree, action: PROC [id: ROPE]] RETURNS [BOOL]; WithLiteral: PROC [tree: Tree, action: PROC [literal: REF MPLeaves.LTNode]] RETURNS [BOOL]; With0: PROC [tree: Tree, nodeName: MPTree.NodeName, action: PROC] RETURNS [BOOL]; DoWith1: PROC [tree: Tree, action: PROC [REF]]; With1: PROC [tree: Tree, nodeName: MPTree.NodeName, action: PROC [REF]] RETURNS [BOOL]; DoWith2: PROC [tree: Tree, action: PROC [REF, REF]]; With2: PROC [tree: Tree, nodeName: MPTree.NodeName, action: PROC [REF, REF]] RETURNS [BOOL]; DoWith3: PROC [tree: Tree, action: PROC [REF, REF, REF]]; With3: PROC [tree: Tree, nodeName: MPTree.NodeName, action: PROC [REF, REF, REF]] RETURNS [BOOL]; DoWith4: PROC [tree: Tree, action: PROC [REF, REF, REF, REF]]; With4: PROC [tree: Tree, nodeName: MPTree.NodeName, action: PROC [REF, REF, REF, REF]] RETURNS [BOOL]; DoWith5: PROC [tree: Tree, action: PROC [REF, REF, REF, REF, REF]]; With5: PROC [tree: Tree, nodeName: MPTree.NodeName, action: PROC [REF, REF, REF, REF, REF]] RETURNS [BOOL]; DoWith6: PROC [tree: Tree, action: PROC [REF, REF, REF, REF, REF, REF]]; With6: PROC [tree: Tree, nodeName: MPTree.NodeName, action: PROC [REF, REF, REF, REF, REF, REF]] RETURNS [BOOL]; END. € CrankOps.mesa Copyright Σ 1987, 1991 by Xerox Corporation. All rights reserved. Michael Plass, March 23, 1993 10:53 am PST Error handling Attribute management Adds a qualifier attribute to tree, which should be an id node. Copies the attribute Default attributeName is $TYPECODE Looks for $TYPECODE attribute, which must indicate the tree represents a TYPE, and returns the code for the represented type. TypeGraph management Strips off all definition layers. Strips off all definition and subrange layers. Good for examining first & last in a subrange type. For the union part of a variant record, or the sequence part of a sequence-containing record, the tagName and tagType are supplied; otherwise tagType=nullTypeCode. Enumerates fields of the type. Returns TRUE iff any FieldProc returns TRUE. Qualifies the variant record; qualifier must be a valid tag value. Asserts the $VAR attribute is not present on the tree Symbol table management Looks up the concrete type (if any) associated with the given opaque code. Attributed tree support Tries to pull the range out of a numeric type tree Mostly handles just fixed-point literals, but can do a little constant-folding. ΚH•NewlineDelimiter –(cedarcode) style™code™ Kšœ Οeœ7™BK™*K™—KšΟk œ$žœžœžœ˜>K˜KšΠlnœžœž ˜Kšœžœžœ˜head™šΟnœžœ žœžœ˜)K˜—š œžœžœ žœžœ žœžœžœ˜^K˜—Kš œžœ žœ žœžœžœžœ žœžœ˜c—K˜™š  œžœžœ žœ˜CK˜—š   œžœžœžœ žœ˜BK˜—š œžœžœ žœ˜GK˜—š œžœžœžœ˜PK˜—š œžœžœ˜:K™?K˜—š  œžœ žœžœ,žœ˜oK™K˜—š  œžœžœžœžœžœ ˜UK™"K˜—š œžœžœžœ ˜QK™}K˜——™š  œžœžœ ˜'K˜—š œžœ$žœ˜NK˜—š  œžœ#žœ žœžœ ˜zK˜—š œžœ+žœ$žœ ˜zK˜—š œžœ7žœžœ ˜fK˜—š  œžœ)žœ ˜MK˜—š œžœ,žœ˜QK˜—š  œžœ,žœ˜J™!K™——š œžœ,žœ˜Išœ.™.K™——š   œžœžœžœžœœ˜,K™3K˜—šœ žœžœžœ žœ$žœžœžœžœ˜–K™£K˜—š œžœ?žœžœ˜cK™LK˜—š œžœ7žœžœ ˜dK™BK˜—š œžœ˜4K˜—š  œžœžœ˜K™5K˜—š  œžœ;žœžœžœžœžœ˜hK˜—Kš  œžœ žœžœžœ˜A—™š  œžœžœ ˜5K˜—š  œžœžœ˜DK˜—š œžœ*˜EK˜—š  œžœžœžœ˜KK˜—š œžœžœ ˜0K˜—š œžœžœžœ ˜EK˜—š œžœ(žœ ˜TK™JK™—š  œžœ0˜@K˜K˜——™š  œžœžœžœ˜0K˜—š    œžœ žœžœ˜NK™2K™—š œžœ žœžœ˜FK™OK˜—š œžœžœžœ˜1K˜—š  œžœžœžœ˜.K˜—š œžœžœ˜=K˜—š œžœžœ ˜5K˜—š  œžœžœžœžœžœ˜BK˜—š   œžœžœ žœžœžœ˜[K˜—š  œžœ1žœžœžœ˜QK˜—Kš œžœžœžœ˜/š  œžœ1žœžœžœžœ˜WK˜—Kš  œžœžœžœžœ˜4š œžœ1žœžœžœžœžœ˜\K˜—Kš  œžœžœžœžœžœ˜9š œžœ1žœžœžœžœžœžœ˜aK˜—Kš œžœžœžœžœžœžœ˜>š œžœ1žœžœžœžœžœžœžœ˜fK˜—Kš œžœžœžœžœžœžœžœ˜Cš œžœ1žœžœžœžœžœžœžœžœ˜kK˜—Kš œžœžœžœžœžœžœžœžœ˜Hš œžœ1žœžœžœžœžœžœžœžœžœ˜pK˜——Kšžœ˜—…—