abstract class AstGraph extends Scalan.Node
Base class for all compound nodes with schedule (e.g. Lambda, ThunkDef).
The graph is directed acyclic (i.e. DAG) in which edges go from boundVars
down to roots
.
- Self Type
- Scalan.AstGraph
- Alphabetic
- By Inheritance
- AstGraph
- Node
- Product
- Equals
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new AstGraph()
Abstract Value Members
- abstract def boundVars: Seq[Scalan.Sym]
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.
- abstract def canEqual(that: Any): Boolean
- Definition Classes
- Equals
- abstract def isIdentity: Boolean
Whether this graph represents identity function.
Whether this graph represents identity function.
- Annotations
- @inline()
- abstract def productArity: Int
- Definition Classes
- Product
- abstract def productElement(n: Int): Any
- Definition Classes
- Product
- abstract def roots: Seq[Scalan.Sym]
Terminal nodes of the graph.
Terminal nodes of the graph. There are incoming, but no outgoing edges.
- abstract def scheduleIds: Buffer[Int]
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.
- See also
Lambda, ThunkDef
Concrete Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- lazy val allNodes: Map[Int, Scalan.GraphNode]
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- final def buildFlatSchedule(schedule: Scalan.Schedule, flatBuf: Buffer[Scalan.Sym]): Unit
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 toflatBuf
AFTER the unfolded body. - def buildUsageMap(schedule: Scalan.Schedule, usingDeps: Boolean): Map[Int, Scalan.GraphNode]
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
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- final def deps: Array[Scalan.Sym]
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.- returns
array of referencies to other definitions.
- Definition Classes
- Node
- lazy val domain: Set[Int]
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.
- final def elements: Array[AnyRef]
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.
- Definition Classes
- Node
- See also
equals where elements are used.
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(other: Any): Boolean
Default equality of definitions.
Default equality of definitions. Two definitions are equal if they have same
elements
.- Definition Classes
- Node → Equals → AnyRef → Any
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- lazy val flatSchedule: Scalan.Schedule
- def freeVars: Seq[Scalan.Sym]
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 - final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def getDeps: Array[Scalan.Sym]
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.- Attributes
- protected
- Definition Classes
- Node
- def globalUsagesOf(s: Scalan.Sym): Buffer[Scalan.Sym]
- def hasManyUsages(s: Scalan.Sym): Boolean
- def hasManyUsagesGlobal(s: Scalan.Sym): Boolean
- def hashCode(): Int
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.
- Definition Classes
- Node → AnyRef → Any
- def isBoundVar(s: Scalan.Sym): Boolean
Checks the symbol is lambda bound.
Checks the symbol is lambda bound.
- Annotations
- @inline()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def isLocalDef(s: Scalan.Sym): Boolean
- Annotations
- @inline()
- final def isLocalDefId(id: Int): Boolean
- Annotations
- @inline()
- final def isRoot(s: Scalan.Sym): Boolean
- Annotations
- @inline()
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def nodeId: Int
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.- Definition Classes
- Node
- Annotations
- @inline()
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- def productElementName(n: Int): String
- Definition Classes
- Product
- def productElementNames: Iterator[String]
- Definition Classes
- Product
- def productIterator: Iterator[Any]
- Definition Classes
- Product
- def productPrefix: String
- Definition Classes
- Product
- def rootIds: Buffer[Int]
Extract identifies out of
roots
. - lazy val schedule: Scalan.Schedule
Sequence of node references forming a schedule.
Sequence of node references forming a schedule. HOTSPOT: don't beautify the code
- final def syms: Array[Scalan.Sym]
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.- Definition Classes
- Node
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
User readable string representation of this definition.
User readable string representation of this definition. (for debugging only)
- Definition Classes
- Node → AnyRef → Any
- lazy val usageMap: Map[Int, Scalan.GraphNode]
Symbol Usage information for this graph
- def usagesOf(id: Int): Buffer[Int]
HOTSPOT: for performance we return mutable structure, but it should never be changed.
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()