If this graph represent Lambda abstraction, the boundVars is lambda bound symbols.
If this graph represent Lambda abstraction, the boundVars is lambda bound symbols. otherwise this is empty set.
Flatten the given schedule into single sequence of non-AstGraph definitions.
Flatten the given schedule into single sequence of non-AstGraph definitions.
All scope forming definitions like Lambda and ThunkDef are recursively unfolded in the given buffer flatBuf
.
NOTE: The symbols of AstGraph-like definitions are added to flatBuf
AFTER the unfolded body.
Build usage information induced by the given schedule.
Build usage information induced by the given schedule. For each symbol of the schedule a GraphNode is created and usages are collected. HOTSPOT: don't beautify the code
Dependencies of this definition from other definitions.
Dependencies of this definition from other definitions.
If definition is interpreted as an operation, then dependencies are arguments
of the operation.
If definition if compound (like Lambda of ThunkDef) then deps
is equals to
free variables used in the body of the compound definition.
This array also refers to predecessors of this graph node, so it is used
to build topological ordering (execution schedule) of operations.
array of referencies to other definitions.
Set of symbol ids in the schedule.
Set of symbol ids in the schedule. Can be used to quickly recognize symbols belonging to the body of this definition.
All data elements of this graph node to be used in structural equality.
All data elements of this graph node to be used in structural equality.
equals where elements are used.
Default equality of definitions.
Default equality of definitions.
Two definitions are equal if they have same elements
.
Collect a set of symbols used in the graph but which are not part of its schedule.
Collect a set of symbols used in the graph but which are not part of its schedule.
If the graph represents a compound definition (Lambda, Thunk etc),
then each item in freeVars
is used in the body, but not part of it.
Intersection of free vars with bound vars is empty.
HOTSPOT: don't beautify the code
Override to redefine how dependencies are computed.
Override to redefine how dependencies are computed.
For example, in core
implementation this is overriden in Lambda and ThunkDef using freeVars.
Computed once and saved to avoid repeated computations, which is not necessary because definitions are immutable by default.
Computed once and saved to avoid repeated computations, which is not necessary because definitions are immutable by default. If some definition require mutability, this method can be overriden accordingly.
Checks the symbol is lambda bound.
Checks the symbol is lambda bound.
Whether this graph represents identity function.
Whether this graph represents identity function.
Unique id of the graph node assigned for each new instance using
freshId
generator.
Unique id of the graph node assigned for each new instance using
freshId
generator.
Doesn't participate in equality of this Def, thus definitions with
different ids may still be structurally equal.
Used to provide global Def numbering.
Extract identifies out of roots
.
Extract identifies out of roots
.
Terminal nodes of the graph.
Terminal nodes of the graph. There are incoming, but no outgoing edges.
Sequence of node references forming a schedule.
Sequence of node references forming a schedule. HOTSPOT: don't beautify the code
Schedule represents a body of compound definition - topologically ordered sequence of nodes of the graph.
Schedule represents a body of compound definition - topologically ordered sequence of nodes of the graph. It is implemented differently depending on node type.
Lambda, ThunkDef
References to other nodes in this Def instance.
References to other nodes in this Def instance.
Note: This is different form deps
for compound definitions like Lambda and ThunkDef.
User readable string representation of this definition.
User readable string representation of this definition. (for debugging only)
Mirror all the nodes of this graph applying transformer and performing rewriting.
Mirror all the nodes of this graph applying transformer and performing rewriting.
mirror instance to be used for mirroring of nodes
rewriter to be tried for each new created mirrored node
transformer of symbols, to be used for substitution of symbols in the new nodes.
new graph which is not necessary clone of this graph, but should be semantically equivalent to this graph (provided all rw rules preserve equivalence). If rw is identity, then the resulting graph is alpha-equivalent to this graph as long as t is bijection.
Symbol Usage information for this graph
Symbol Usage information for this graph
HOTSPOT: for performance we return mutable structure, but it should never be changed.
HOTSPOT: for performance we return mutable structure, but it should never be changed.
Remove transformer component of the graph.
Immutable graph collected from
roots
following Ref.node.deps links.