The direct child trees of this tree.
The direct child trees of this tree. EmptyTrees are always omitted. Lists are flattened.
Like setType
, but if this is a previously empty TypeTree that
fact is remembered so that resetAllAttrs will snap back.
Like setType
, but if this is a previously empty TypeTree that
fact is remembered so that resetAllAttrs will snap back.
Attempting to elaborate on the above, I find: If defineType is called on a TypeTree whose type field is null or NoType, this is recorded as "wasEmpty = true". That value is used in ResetAttrsTraverser, which nulls out the type field of TypeTrees for which wasEmpty is true, leaving the others alone.
resetAllAttrs is used in situations where some speculative
typing of a tree takes place, fails, and the tree needs to be
returned to its former state to try again. So according to me:
using defineType
instead of setType
is how you communicate
that the type being set does not depend on any previous state,
and therefore should be abandoned if the current line of type
inquiry doesn't work out.
Is there part of this tree which satisfies predicate p
?
Is there part of this tree which satisfies predicate p
?
Find all subtrees matching predicate p
Find all subtrees matching predicate p
Returns optionally first tree (in a preorder traversal) which satisfies predicate p
,
or None if none exists.
Returns optionally first tree (in a preorder traversal) which satisfies predicate p
,
or None if none exists.
Apply f
to each subtree
Apply f
to each subtree
The canonical way to test if a Tree represents a term.
The canonical way to test if a Tree represents a term.
The canonical way to test if a Tree represents a type.
The canonical way to test if a Tree represents a type.
Set tpe to give tp
and return this.
Set tpe to give tp
and return this.
Note that symbol is fixed as null at this level.
Note that symbol is fixed as null at this level. In SymTrees, it is overridden and implemented with a var, initialized to NoSymbol.
Trees which are not SymTrees but which carry symbols do so by
overriding def symbol
to forward it elsewhere. Examples:
Super(qual, _) // has qual's symbol Apply(fun, args) // has fun's symbol TypeApply(fun, args) // has fun's symbol AppliedTypeTree(tpt, args) // has tpt's symbol TypeTree(tpe) // has tpe's typeSymbol, if tpe != null
Attempting to set the symbol of a Tree which does not support it will induce an exception.
Assignment