-- File: ScriptNode.mesa - last edit by -- Karlton: 1-Sep-82 18:29:08 DIRECTORY ScriptHash USING [Hash]; ScriptNode: DEFINITIONS = BEGIN Handle: TYPE = LONG POINTER TO Object; Type: TYPE = { placeHolder, atom, boolean, expression, integer, node, quotedExpression, real, string, vector, qualifiedID, choice, application, univApplication, colon, target, source, links, localBind, globalBind, environment, dollar, percent}; Object: TYPE = RECORD [ SELECT type: Type FROM placeHolder => NULL, atom => [atom: ID], dollar => [label: ID], links => [label: ID], source, target => [ids: QualifiedID], percent => [ids: QualifiedID], qualifiedID => [ids: QualifiedID], -- has no sons boolean => [boolean: BOOLEAN], expression => [expression: Operator], -- must have 1 or 2 sons choice => NULL, -- must have exactly 3 sons environment => NULL, -- must have exactly 2 sons integer => [integer: LONG INTEGER], node => [private, context: LONG POINTER _ NIL], quotedExpression => NULL, real => [real: REAL], string => [string: String _ []], vector => NULL, application => [ids: QualifiedID _ NIL], univApplication => [atom: ID], globalBind => [lhs: QualifiedID _ NIL, univ: BOOLEAN _ FALSE], -- value is in son node localBind => [lhs: QualifiedID _ NIL] -- value is in son node ENDCASE]; ID: TYPE = ScriptHash.Hash; QualifiedID: TYPE = LONG POINTER TO QualifiedIDSequence; QualifiedIDSequence: TYPE = RECORD [ids: SEQUENCE length: CARDINAL OF ID]; Operator: TYPE = {plus, minus, divide, multiply}; Eval: PROCEDURE [node: Handle] RETURNS [value: Object]; String: TYPE = RECORD [ allSet0: BOOLEAN _ TRUE, allSimple: BOOLEAN _ TRUE, string: REF TEXT _ NIL]; END. -- of ScriptNode