Parameterized Field Descriptor
ParameterizedFieldDescriptorNode: TYPE = REF ParameterizedFieldDescriptorNodeBody;
ParameterizedFieldDescriptorNodeBody:
TYPE =
RECORD [
firstCell: ParameterizedFieldDescriptorCell,
lastCell: ParameterizedFieldDescriptorCell
];
ParameterizedFieldDescriptorCell: TYPE = REF ParameterizedFieldDescriptorCellBody;
ParameterizedFieldDescriptorCellBody:
TYPE =
RECORD [
next: ParameterizedFieldDescriptorCell,
k:
SELECT kind: *
FROM
index => [], -- find it on the stack!
index => [index: BD.ValueNode],
nested => [],
staticLink => [],
vars => [name: Rope.ROPE],
fieldName => [name: Rope.ROPE]
ENDCASE
];
Program Graph
ProgramGraphNode: TYPE = REF ProgramGraphNodeBody;
ProgramGraphNodeBody:
TYPE =
RECORD [
main: ProcedureGraphNode,
firstSubroutine: ProcedureGraphCell,
lastSubroutine: ProcedureGraphCell
];
ProcedureGraphCell: TYPE = REF ProcedureGraphCellBody;
ProcedureGraphCellBody:
TYPE =
RECORD [
next: ProcedureGraphCell,
procedureGraph: ProcedureGraphNode
];
ProcedureGraphNode: TYPE = REF ProcedureGraphNodeBody;
ProcedureGraphNodeBody:
TYPE =
RECORD [
code: ProgramFragmentNode
];
Invariant: code.exitingOperations = NIL
ProgramFragmentNode: TYPE = REF ProgramFragmentNodeBody;
ProgramFragmentNodeBody:
TYPE =
RECORD [
firstOperation: OperationNode,
exitingOperations: LIST OF OperationNode
];
Invariant: