tpd
Some creators for typed trees
Attributes
- Graph
-
- Supertypes
- Self type
-
tpd.type
Members list
Type members
Classlikes
Attributes
- Supertypes
A treemap that generates the same contexts as the original typer for statements. This means:
A treemap that generates the same contexts as the original typer for statements. This means:
- statements that are not definitions get the exprOwner as owner
- imports are reflected in the contexts of subsequent statements
Attributes
- Supertypes
- Known subtypes
-
class TreeMapWithImplicitsclass TreeMapWithStagesclass CrossStageSafetyclass Transformerclass PostTyperTransformerShow all
Attributes
- Supertypes
-
class AnyValtrait Matchableclass Any
A trait for loaders that compute trees. Currently implemented just by DottyUnpickler.
A trait for loaders that compute trees. Currently implemented just by DottyUnpickler.
Attributes
- Supertypes
- Known subtypes
-
class DottyUnpickler
Attributes
- Supertypes
- Known subtypes
-
class TimeTravellingTreeCopier
Inherited classlikes
Extractor for not-null assertions. A not-null assertion for reference x
has the form x.$asInstanceOf$[x.type & T]
.
Extractor for not-null assertions. A not-null assertion for reference x
has the form x.$asInstanceOf$[x.type & T]
.
Attributes
- Inherited from:
- TypedTreeInfo
- Supertypes
Attributes
- Inherited from:
- TypedTreeInfo
- Supertypes
Fold f
over all tree nodes, in depth-first, prefix order
Fold f
over all tree nodes, in depth-first, prefix order
Attributes
- Inherited from:
- Instance
- Supertypes
Attributes
- Inherited from:
- TypedTreeInfo
- Supertypes
Fold f
over all tree nodes, in depth-first, prefix order, but don't visit subtrees where f
returns a different result for the root, i.e. f(x, root) ne x
.
Fold f
over all tree nodes, in depth-first, prefix order, but don't visit subtrees where f
returns a different result for the root, i.e. f(x, root) ne x
.
Attributes
- Inherited from:
- Instance
- Supertypes
Extractors for type splices
Attributes
- Inherited from:
- Instance
- Supertypes
- Known subtypes
-
class DeepFolder[X]class ShallowFolder[X]class TreeTraverserclass Setupclass Extractorclass InitTreeTraverserobject TreeNodeCheckerclass UntypedTreeAccumulator[X]class UntypedDeepFolder[X]class UntypedTreeTraverserobject hasSkolemShow all
A class for copying trees. The copy methods avoid creating a new tree If all arguments stay the same.
A class for copying trees. The copy methods avoid creating a new tree If all arguments stay the same.
Note: Some of the copy methods take a context. These are exactly those methods that are overridden in TypedTreeCopier so that they selectively retype themselves. Retyping needs a context.
Attributes
- Inherited from:
- Instance
- Supertypes
- Known subtypes
Attributes
- Inherited from:
- Instance
- Supertypes
- Known subtypes
-
class TreeTypeMapclass TreeMapWithImplicitsclass TreeMapWithStagesclass CrossStageSafetyclass Transformerclass PostTyperTransformerclass UntypedTreeMapclass MakeInlineableMapclass MakeInlineableDirectclass MakeInlineablePassingclass TailRecEliminationShow all
Attributes
- Inherited from:
- Instance
- Supertypes
- Known subtypes
An extractor for closures, either contained in a block or standalone.
An extractor for closures, either contained in a block or standalone.
Attributes
- Inherited from:
- TypedTreeInfo
- Supertypes
An extractor for def of a closure contained the block of the closure.
An extractor for def of a closure contained the block of the closure.
Attributes
- Inherited from:
- TypedTreeInfo
- Supertypes
Inherited types
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Value members
Concrete methods
An anonymous class
An anonymous class
new parents { termForwarders; typeAliases }
Value parameters
- parents
-
a non-empty list of class types
- termForwarders
-
a non-empty list of forwarding definitions specified by their name and the definition they forward to.
- typeMembers
-
a possibly-empty list of type members specified by their name and their right hand side. The class has the same owner as the first function in
termForwarders
. Its position is the union of all symbols intermForwarders
.
Attributes
An anonymous class
An anonymous class
new parents { body }
with the specified owner and position.
Attributes
A pattern corresponding to sym: tpe
A pattern corresponding to sym: tpe
Attributes
A function def
A function def
vparams => expr
gets expanded to
{ def $anonfun(vparams) = expr; Closure($anonfun) }
where the closure's type is the target type of the expression (FunctionN, unless otherwise specified).
Attributes
A DefDef with given method symbol sym
.
A DefDef with given method symbol sym
.
Attributes
A closure whose anonymous function has the given method type
A closure whose anonymous function has the given method type
Attributes
An object def
An object def
object obs extends parents { decls }
gets expanded to
(The following no longer applies: What's interesting here is that the block is well typed (because class obj$ is hoistable), but the type of the obj
val is not expressible. What needs to happen in general when inferring the type of a val from its RHS, is: if the type contains a class that has the val itself as owner, then that class is remapped to have the val's owner as owner. Remapping could be done by cloning the class with the new owner and substituting everywhere in the tree. We know that remapping is safe because the only way a local class can appear in the RHS of a val is by being hoisted outside of a block, and the necessary checks are done at this point already.
On the other hand, for method result type inference, if the type of the RHS of a method contains a class owned by the method, this would be an error.)
Attributes
new C(args), calling the primary constructor of C
new C(args), calling the primary constructor of C
Attributes
new C(args), calling given constructor constr
of C
new C(args), calling given constructor constr
of C
Attributes
A _
with given type
A _
with given type
Attributes
Record inlined trees
Record inlined trees
Attributes
A tree that corresponds to Predef.classOf[$tp]
in source
A tree that corresponds to Predef.classOf[$tp]
in source
Attributes
Desugar identifier into a select node. Return the tree itself if not possible
Desugar identifier into a select node. Return the tree itself if not possible
Attributes
Recover identifier prefix (e.g. this) if it exists
Recover identifier prefix (e.g. this) if it exists
Attributes
All enclosing calls that are currently inlined, from innermost to outermost.
All enclosing calls that are currently inlined, from innermost to outermost.
Attributes
Let bind tree
unless tree
is at least idempotent
Let bind tree
unless tree
is at least idempotent
Attributes
Creates the nested higher-kinded pairs type tree representation of the type trees in ts
Creates the nested higher-kinded pairs type tree representation of the type trees in ts
Attributes
The list of select trees that resolve to the same symbols as the ones that are imported by imp
.
The list of select trees that resolve to the same symbols as the ones that are imported by imp
.
Attributes
The symbols that are imported with expr.name
The symbols that are imported with expr.name
Value parameters
- expr
-
The base of the import statement
- name
-
The name that is being imported.
Attributes
- Returns
-
All the symbols that would be imported with
expr.name
.
All the symbols that are imported by the first selector of imp
that matches selectorPredicate
.
All the symbols that are imported by the first selector of imp
that matches selectorPredicate
.
Value parameters
- imp
-
The import statement to analyze
- selectorPredicate
-
A test to find the selector to use.
Attributes
- Returns
-
The symbols imported.
Record an enclosing inlined call. EmptyTree calls (for parameters) cancel the next-enclosing call in the list instead of being added to it. We assume parameters are never nested inside parameters.
Record an enclosing inlined call. EmptyTree calls (for parameters) cancel the next-enclosing call in the list instead of being added to it. We assume parameters are never nested inside parameters.
Attributes
- Definition Classes
If tree
's purity level is less than level
, let-bind it so that it gets evaluated only once. I.e. produce a
If tree
's purity level is less than level
, let-bind it so that it gets evaluated only once. I.e. produce a
{ val x = 'tree ; ~within('x) }
instead of otherwise
~within('tree)
Attributes
The local context to use when traversing trees
The local context to use when traversing trees
Attributes
The owner to be used in a local context when traversing a tree
The owner to be used in a local context when traversing a tree
Attributes
Create a tree representing a list containing all the elements of the argument list. A "list of tree to tree of list" conversion.
Create a tree representing a list containing all the elements of the argument list. A "list of tree to tree of list" conversion.
Value parameters
- tpt
-
the type of the elements of the resulting list.
- trees
-
the elements the list represented by the resulting tree should contain.
Attributes
Creates the nested pairs type tree representation of the type trees in ts
Creates the nested pairs type tree representation of the type trees in ts
Attributes
A tree representing a newXYZArray
operation of the right kind for the given element type in elemTpe
. No type arguments or length
arguments are given.
A tree representing a newXYZArray
operation of the right kind for the given element type in elemTpe
. No type arguments or length
arguments are given.
Attributes
A path that corresponds to the given type tp
. Error if tp
is not a refinement of an addressable singleton type.
A path that corresponds to the given type tp
. Error if tp
is not a refinement of an addressable singleton type.
Attributes
Check if the limit on the number of inlined trees has been reached
Check if the limit on the number of inlined trees has been reached
Attributes
A tree representing the same reference as the given type
A tree representing the same reference as the given type
Attributes
Convert a list of trees to a vararg-compatible tree. Used to make arguments for methods that accept varargs.
Convert a list of trees to a vararg-compatible tree. Used to make arguments for methods that accept varargs.
Attributes
Join stats
in front of expr
creating a new block if necessary
Join stats
in front of expr
creating a new block if necessary
Attributes
Hook to indicate that a transform of some subtree should be skipped
Hook to indicate that a transform of some subtree should be skipped
Attributes
- Definition Classes
The source file where the symbol of the inline
method referred to by call
is defined
The source file where the symbol of the inline
method referred to by call
is defined
Attributes
Split argument clauses into a leading type argument clause if it exists and remaining clauses
Split argument clauses into a leading type argument clause if it exists and remaining clauses
Attributes
Creates the tuple type tree representation of the type trees in ts
Creates the tuple type tree representation of the type trees in ts
Attributes
A tree representing a wrapXYZArray(tree)
operation of the right kind for the given element type in elemTpe
.
A tree representing a wrapXYZArray(tree)
operation of the right kind for the given element type in elemTpe
.
Attributes
The wrapped array method name for an array of type elemtp
The wrapped array method name for an array of type elemtp
Attributes
Inherited methods
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
The type and term arguments of a possibly curried call, in the order they are given
The type and term arguments of a possibly curried call, in the order they are given
Attributes
- Inherited from:
- TypedTreeInfo
All term arguments of an application in a single flattened list
All type and value parameter symbols of this DefDef
The tree stripped of the possibly nested applications (term and type). The original tree if it's not an application.
The tree stripped of the possibly nested applications (term and type). The original tree if it's not an application.
Attributes
- Inherited from:
- TreeInfo
Construct the application $receiver.$method[$targs]($args)
using overloading resolution to find a matching overload of $method
if necessary. This is useful when overloading resolution needs to be performed in a phase after typer. Note that this will not perform any kind of implicit search.
Construct the application $receiver.$method[$targs]($args)
using overloading resolution to find a matching overload of $method
if necessary. This is useful when overloading resolution needs to be performed in a phase after typer. Note that this will not perform any kind of implicit search.
Value parameters
- expectedType
-
An expected type of the application used to guide overloading resolution
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- TypedTreeInfo
Does this CaseDef catch everything of a certain Type?
Does this CaseDef catch Throwable?
If tree is a closure, its body, otherwise tree itself
(1) If tree
is a constant expression, its value as a Literal, or tree
itself otherwise.
(1) If tree
is a constant expression, its value as a Literal, or tree
itself otherwise.
Note: Demanding idempotency instead of purity in literalize is strictly speaking too loose. Example
object O { final val x = 42; println("43") } O.x
Strictly speaking we can't replace O.x
with 42
. But this would make most expressions non-constant. Maybe we can change the spec to accept this kind of eliding behavior. Or else enforce true purity in the compiler. The choice will be affected by what we will do with inline
and with Singleton type bounds (see SIP 23). Presumably
object O1 { val x: Singleton = 42; println("43") } object O2 { inline val x = 42; println("43") }
should behave differently.
O1.x should have the same effect as { println("43"); 42 }
whereas
O2.x = 42
Revisit this issue once we have standardized on inline
. Then we can demand purity of the prefix unless the selection goes to a inline val.
Note: This method should be applied to all term tree nodes that are not literals, that can be idempotent, and that can have constant types. So far, only nodes of the following classes qualify:
Ident
Select
TypeApply
(2) A primitive unary operator expression pre.op
where op
is one of +
, -
, ~
, !
that has a constant type ConstantType(v)
but that is not a constant expression (i.e. pre
has side-effects) is translated to
{ pre; v }
(3) An expression pre.getClass[..]()
that has a constant type ConstantType(v)
but where pre
has side-effects is translated to:
{ pre; v }
This avoids the situation where we have a Select node that does not have a symbol.
Attributes
- Inherited from:
- TypedTreeInfo
Decompose a template body into parameters and other statements
Decompose a template body into parameters and other statements
Attributes
- Inherited from:
- TypedTreeInfo
Going from child to parent, the path of tree nodes that starts with a definition of symbol sym
and ends with root
, or Nil if no such path exists. Pre: sym
must have a position.
Going from child to parent, the path of tree nodes that starts with a definition of symbol sym
and ends with root
, or Nil if no such path exists. Pre: sym
must have a position.
Attributes
- Inherited from:
- TypedTreeInfo
If tree
is a DefTree, the symbol defined by it, otherwise NoSymbol
If tree
is a DefTree, the symbol defined by it, otherwise NoSymbol
Attributes
- Inherited from:
- TypedTreeInfo
The statement sequence that contains a definition of sym
, or Nil if none was found. For a tree to be found, The symbol must have a position and its definition tree must be reachable from come tree stored in an enclosing context.
The statement sequence that contains a definition of sym
, or Nil if none was found. For a tree to be found, The symbol must have a position and its definition tree must be reachable from come tree stored in an enclosing context.
Attributes
- Inherited from:
- TypedTreeInfo
The purity level of this expression. See docs for PurityLevel for what that means
The purity level of this expression. See docs for PurityLevel for what that means
Note that purity and idempotency are treated differently. References to modules and lazy vals are impure (side-effecting) both because side-effecting code may be executed and because the first reference takes a different code path than all to follow; but they are idempotent because running the expression a second time gives the cached result.
Attributes
- Inherited from:
- TypedTreeInfo
The first constructor definition in stats
Checks whether predicate p
is true for all result parts of this expression, where we zoom into Ifs, Matches, and Blocks.
Checks whether predicate p
is true for all result parts of this expression, where we zoom into Ifs, Matches, and Blocks.
Attributes
- Inherited from:
- TreeInfo
The function part of a possibly curried call. Unlike methPart
this one does not decompose blocks
The function part of a possibly curried call. Unlike methPart
this one does not decompose blocks
Attributes
- Inherited from:
- TypedTreeInfo
Is tree explicitly parameterized with type arguments?
Does this list contain a named argument tree?
Is tree a backquoted identifier or definition
Is tree a type tree of the form => T
or (under pureFunctions) {refs}-> T
?
Is tree a type tree of the form => T
or (under pureFunctions) {refs}-> T
?
Attributes
- Inherited from:
- TreeInfo
Is this pattern node a catch-all or type-test pattern?
Attributes
- Inherited from:
- TreeInfo
Is this pattern node a catch-all (wildcard or variable) pattern?
Is this pattern node a catch-all (wildcard or variable) pattern?
Attributes
- Inherited from:
- TreeInfo
Attributes
- Inherited from:
- TypedTreeInfo
Is this case guarded?
Attributes
- Inherited from:
- TypedTreeInfo
Attributes
- Inherited from:
- TypedTreeInfo
Attributes
- Inherited from:
- TypedTreeInfo
Attributes
- Inherited from:
- TreeInfo
Is the application tree
with function part fn
known to be pure? Function value and arguments can still be impure.
Is the application tree
with function part fn
known to be pure? Function value and arguments can still be impure.
Attributes
- Inherited from:
- TypedTreeInfo
Attributes
- Inherited from:
- TypedTreeInfo
Attributes
- Inherited from:
- TypedTreeInfo
Attributes
- Inherited from:
- TypedTreeInfo
Attributes
- Inherited from:
- TypedTreeInfo
Is tpt a vararg type of the form T* or => T*?
Is tree a this
node which belongs to enclClass
?
Is tree a self constructor call this(...)? I.e. a call to a constructor of the same object?
Is tree a self constructor call this(...)? I.e. a call to a constructor of the same object?
Attributes
- Inherited from:
- TreeInfo
Attributes
- Inherited from:
- TreeInfo
Is this a (potentially applied) selection of a member of a structural type that is not a member of an underlying class or trait?
Is this a (potentially applied) selection of a member of a structural type that is not a member of an underlying class or trait?
Attributes
- Inherited from:
- TypedTreeInfo
Is tree a super constructor call?
Attributes
- Inherited from:
- TreeInfo
Attributes
- Inherited from:
- Instance
Is tree an application with result this.type
? Accept b.addOne(x)
and also xs(i) += x
where the op is an assignment operator.
Is tree an application with result this.type
? Accept b.addOne(x)
and also xs(i) += x
where the op is an assignment operator.
Attributes
- Inherited from:
- TreeInfo
Attributes
- Inherited from:
- TreeInfo
Is this parameter list a using clause?
Attributes
- Inherited from:
- TreeInfo
Is tree a variable pattern?
Is tree a reference to a mutable variable, or to a potential getter that has a setter in the same class?
Is tree a reference to a mutable variable, or to a potential getter that has a setter in the same class?
Attributes
- Inherited from:
- TypedTreeInfo
Is the argument a wildcard argument of the form _
or x @ _
?
Is this argument node of the form
Is this argument node of the form
Attributes
- Inherited from:
- TreeInfo
Does this argument list end with an argument of the form
If tparams
is non-empty, add it to the left paramss
, merging it with a leading type parameter list of paramss
, if one exists.
If tparams
is non-empty, add it to the left paramss
, merging it with a leading type parameter list of paramss
, if one exists.
Attributes
- Inherited from:
- Instance
If path
looks like a language import, Some(name)
where name is experimental
if that sub-module is imported, and the empty term name otherwise.
If path
looks like a language import, Some(name)
where name is experimental
if that sub-module is imported, and the empty term name otherwise.
Attributes
- Inherited from:
- TreeInfo
The symbols defined locally in a statement list
Is symbol potentially a getter of a mutable variable?
The method part of an application node, possibly enclosed in a block with only valdefs as statements. the reason for also considering blocks is that named arguments can transform a call into a block, e.g.
The method part of an application node, possibly enclosed in a block with only valdefs as statements. the reason for also considering blocks is that named arguments can transform a call into a block, e.g.
Attributes
- Inherited from:
- TreeInfo
The number of arguments in an application
The largest subset of {NoInits, PureInterface} that a trait or class with these parents can have as flags.
The largest subset of {NoInits, PureInterface} that a trait or class with these parents can have as flags.
Attributes
- Inherited from:
- TreeInfo
The variables defined by a pattern, in reverse order of their appearance.
The variables defined by a pattern, in reverse order of their appearance.
Attributes
- Inherited from:
- TypedTreeInfo
The qualifier part of a Select or Ident. For an Ident, this is the This
of the current class.
The qualifier part of a Select or Ident. For an Ident, this is the This
of the current class.
Attributes
- Inherited from:
- TypedTreeInfo
The purity level of this reference.
The purity level of this reference.
Attributes
- Returns
-
PurePath if reference is (nonlazy and stable) or to a parameterized function or its type is a constant type IdempotentPath if reference is lazy and stable Impure otherwise
- Inherited from:
- TypedTreeInfo
Attributes
- Inherited from:
- Instance
Attributes
- Inherited from:
- Instance
The tree containing only the top-level classes and objects matching either cls
or its companion object
The tree containing only the top-level classes and objects matching either cls
or its companion object
Attributes
- Inherited from:
- TypedTreeInfo
Return a pair consisting of (supercall, rest)
Return a pair consisting of (supercall, rest)
- supercall: the superclass call, excluding trait constr calls
The supercall is always the first statement (if it exists)
Attributes
- Inherited from:
- TypedTreeInfo
The purity level of this statement.
The purity level of this statement.
Attributes
- Returns
-
Pure if statement has no side effects Idempotent if running the statement a second time has no side effects Impure otherwise
- Inherited from:
- TypedTreeInfo
Attributes
- Inherited from:
- TreeInfo
If this is an application, its function part, stripping all Apply nodes (but leaving TypeApply nodes in). Otherwise the tree itself.
If this is an application, its function part, stripping all Apply nodes (but leaving TypeApply nodes in). Otherwise the tree itself.
Attributes
- Inherited from:
- TreeInfo
If this is a block, its expression part
Strip => T
to T
and (under pureFunctions) {refs}-> T
to T
Strips layers of .asInstanceOf[T]
/ _.$asInstanceOf[T]()
from an expression
Strips layers of .asInstanceOf[T]
/ _.$asInstanceOf[T]()
from an expression
Attributes
- Inherited from:
- TypedTreeInfo
Attributes
- Inherited from:
- TreeInfo
Attributes
- Inherited from:
- TreeInfo
The term arguments of a possibly curried call
Attributes
- Inherited from:
- Instance
The top level classes in this tree, including only those module classes that are not a linked class of some other class in the result.
The top level classes in this tree, including only those module classes that are not a linked class of some other class in the result.
Attributes
- Inherited from:
- TypedTreeInfo
The context to use when transforming a tree. It ensures that the source is correct, and that the local context is used if that's necessary for transforming the whole tree. TODO: ensure transform is always called with the correct context as argument
The context to use when transforming a tree. It ensures that the source is correct, and that the local context is used if that's necessary for transforming the whole tree. TODO: ensure transform is always called with the correct context as argument
Attributes
- See also
- Inherited from:
- Instance
If tree
is an instance of TupleN[...](e1, ..., eN)
, the arguments e1, ..., eN
otherwise the empty list.
If tree
is an instance of TupleN[...](e1, ..., eN)
, the arguments e1, ..., eN
otherwise the empty list.
Attributes
- Inherited from:
- TypedTreeInfo
The type arguments of a possibly curried call
The underlying pattern ignoring any bindings
Concrete fields
Extensions
Extensions
Equivalent (but faster) to
Equivalent (but faster) to
flatten(trees.mapConserve(op))
assuming that trees
does not contain Thicket
s to start with.
Attributes
Transform statements while maintaining import contexts and expression contexts in the same way as Typer does. The code addresses additional concerns:
Transform statements while maintaining import contexts and expression contexts in the same way as Typer does. The code addresses additional concerns:
- be tail-recursive where possible
- don't re-allocate trees where nothing has changed
Attributes
Inherited extensions
Structural tree comparison (since == on trees is reference equality). For the moment, only Ident, Select, Literal, Apply and TypeApply are supported
Structural tree comparison (since == on trees is reference equality). For the moment, only Ident, Select, Literal, Apply and TypeApply are supported
Attributes
- Inherited from:
- TypedTreeInfo
Structural tree comparison (since == on trees is reference equality). For the moment, only Ident, Select, Literal, Apply and TypeApply are supported
Structural tree comparison (since == on trees is reference equality). For the moment, only Ident, Select, Literal, Apply and TypeApply are supported
Attributes
- Inherited from:
- TypedTreeInfo
Type of the quoted expression as seen from outside the quote
Type of the quoted expression as seen from outside the quote
Attributes
- Inherited from:
- TypedTreeInfo
Type of the quoted pattern