Parse Tree Types:
SymbolTableEntry: TYPE = REF SymbolTableEntryRep;
SymbolTableEntryRep:
TYPE =
RECORD [
name: ROPE,
value:
SELECT type: SymbolTableEntryType
FROM
nodeTypeConstructor => [stc: NodeTypeConstructor],
cellClass => [
globvar: BOOL,
definedIn: ROPE,
cd: CellDef],
node => [nodeType: NodeType],
cellFn => [
definedIn: ROPE,
cf: CellFn],
ENDCASE];
SymbolTableEntryType: TYPE = {nodeTypeConstructor, cellClass, node, cellFn};
stcEntry: TYPE = REF SymbolTableEntryRep[nodeTypeConstructor];
ccEntry: TYPE = REF SymbolTableEntryRep[cellClass];
cfEntry: TYPE = REF SymbolTableEntryRep[cellFn];
nodeEntry: TYPE = REF SymbolTableEntryRep[node];
DigestedInterface: TYPE = REF DigestedInterfaceRep;
DigestedInterfaceRep:
TYPE =
RECORD [
sr: SourceRange,
asTable: SymbolTable,
asList: InterfaceEltList,
hasSwitchElt: BOOL ← FALSE];
InterfaceEltList: TYPE = LIST OF InterfaceElt;
InterfaceElt: TYPE = REF InterfaceEltRep;
InterfaceEltRep:
TYPE =
RECORD [
sr: SourceRange,
name: ROPE,
sti: SignalTypeInvocation,
input, output, spare: BOOLEAN ← FALSE,
assertions: Assertions ← NIL];
Invocation:
TYPE =
RECORD [
sr: SourceRange,
name: ROPE,
parms: REF ANY --UNION [BindingList, Args]
];
SignalTypeInvocation: TYPE = REF SignalTypeInvocationRep;
SignalTypeInvocationRep:
TYPE =
RECORD [
sr: SourceRange,
st: NodeType,
invocation: Invocation];
Application: TYPE = REF ApplicationRep;
ApplicationRep:
TYPE =
RECORD [
sr: SourceRange,
subject: REF ANY, --UNION [ID, Application]
args: REF ANY --UNION [BindingList, Args]
];
Args: TYPE = REF ArgsRep;
ArgsRep:
TYPE =
RECORD [
sr: SourceRange,
args: LIST OF Arg];
Arg: TYPE = REF ANY; --UNION [ID, Quoted, Int, Reel]
Int: TYPE = REF IntRep;
IntRep:
TYPE =
RECORD [
sr: SourceRange,
i: INT];
Reel: TYPE = REF ReelRep;
ReelRep:
TYPE =
RECORD [
sr: SourceRange,
r: REAL];
CellFn: TYPE = REF CellFnRep;
CellFnRep:
TYPE =
RECORD [
sr: SourceRange,
args: BindingList ← NIL,
cd: CellDef ← NIL,
howToApply: CedarSource ← NIL];
CellDef: TYPE = REF CellDefRep;
CellDefRep:
TYPE =
RECORD [
sr: SourceRange,
interfaceLiteral: DigestedInterface ← NIL,
interfaceSource: CedarSource ← NIL,
stateInittable: BOOLEAN ← FALSE,
ioRefTypeName, literalName: ROPE ← NIL,
nameIsLiteral, ioCreatorGiven, stateGiven, initializerGiven, bbTestGiven, stTestGiven, initCTPropsGiven, expandGiven: BOOL ← FALSE,
nameSource, ioCreatorSource, stateSource, initializerSource, bbTestSource, stTestSource, initCTPropsSource: CedarSource ← NIL,
evalsGiven: ARRAY EvalType OF BOOLEAN ← ALL[FALSE],
evalSources: ARRAY EvalType OF CedarSource ← ALL[NIL],
expandCode: Statements ← NIL,
portCount: CARDINAL ← 0,
assertions: Assertions ← NIL,
forFn: CellFn ← NIL];
EvalType: TYPE = {ValsChanged, InitQ, PropQ, InitUD, PropUD, FinalUD, EvalSimple, FindVicinity};
CedarSource: TYPE = REF CedarSourceRep;
CedarSourceRep: TYPE = RECORD [sr: SourceRange, parent: TextNode.Ref];
CedarLiteral: TYPE = REF CedarLiteralRep;
CedarLiteralRep: TYPE = RECORD [sr: SourceRange, cedar: ROPE];
RefAnyList: TYPE = REF RefAnyListRep;
RefAnyListRep:
TYPE =
RECORD [
sr: SourceRange,
l: LORA];
BindingList: TYPE = LIST OF Binding;
Binding: TYPE = REF BindingRep;
BindingRep:
TYPE =
RECORD [
sr: SourceRange,
name: ROPE,
value: REF ANY,
assertions: Assertions ← NIL,
initial: REF ANY --UNION [Quoted, CedarLiteral]-- ← NIL];
Quoted: TYPE = REF QuotedRep;
QuotedRep: TYPE = RECORD [sr: SourceRange, rope: ROPE];
ID: TYPE = REF IDRep;
IDRep: TYPE = RECORD [sr: SourceRange, rope: ROPE];
Statements: TYPE = REF StatementsRep;
StatementsRep:
TYPE =
RECORD [
sr: SourceRange,
statements: LORA,
hasRefs: BOOL ← FALSE];
SquareBracketed: TYPE = REF SquareBracketedRep;
SquareBracketedRep:
TYPE =
RECORD [
sr: SourceRange,
subject: REF ANY --UNION [InterfaceElementList, BindingList]--];