public class Name extends AstNode
Token.NAME
.This node type is also used to represent certain non-identifier names that are part of the language syntax. It's used for the "get" and "set" pseudo-keywords for object-initializer getter/setter properties, and it's also used for the "*" wildcard in E4X XML namespace and name expressions.
AstNode.DebugPrintVisitor, AstNode.PositionComparator
Node.NodeIterator
ATTRIBUTE_FLAG, BOTH, CASEARRAY_PROP, CATCH_SCOPE_PROP, CONTROL_BLOCK_PROP, DECR_FLAG, DESCENDANTS_FLAG, DESTRUCTURING_ARRAY_LENGTH, DESTRUCTURING_NAMES, DESTRUCTURING_PARAMS, DESTRUCTURING_SHORTHAND, DIRECTCALL_PROP, END_DROPS_OFF, END_RETURNS, END_RETURNS_VALUE, END_UNREACHED, END_YIELDS, EXPRESSION_CLOSURE_PROP, first, FUNCTION_PROP, GENERATOR_END_PROP, INCRDECR_PROP, ISNUMBER_PROP, JSDOC_PROP, LABEL_ID_PROP, last, LAST_PROP, LEFT, lineno, LOCAL_BLOCK_PROP, LOCAL_PROP, MEMBER_TYPE_PROP, NAME_PROP, next, NON_SPECIALCALL, OBJECT_IDS_PROP, PARENTHESIZED_PROP, POST_FLAG, PROPERTY_FLAG, propListHead, REGEXP_PROP, RIGHT, SKIP_INDEXES_PROP, SPECIALCALL_EVAL, SPECIALCALL_PROP, SPECIALCALL_WITH, TARGETBLOCK_PROP, type, VARIABLE_PROP
Constructor and Description |
---|
Name() |
Name(int pos) |
Name(int pos,
int len) |
Name(int pos,
int len,
java.lang.String name)
Constructs a new
Name |
Name(int pos,
java.lang.String name) |
Modifier and Type | Method and Description |
---|---|
Scope |
getDefiningScope()
Returns the
Scope in which this Name is defined. |
java.lang.String |
getIdentifier()
Returns the node's identifier
|
Scope |
getScope()
Return the
Scope associated with this node. |
boolean |
isLocalName()
Return true if this node is known to be defined as a symbol in a
lexical scope other than the top-level (global) scope.
|
int |
length()
Return the length of this node's identifier, to let you pretend
it's a
String . |
void |
setIdentifier(java.lang.String identifier)
Sets the node's identifier
|
void |
setScope(Scope s)
Set the
Scope associated with this node. |
java.lang.String |
toSource(int depth)
Emits source code for this node.
|
void |
visit(NodeVisitor v)
Visits this node.
|
addChild, assertNotNull, codeBug, compareTo, debugPrint, depth, getAbsolutePosition, getAstRoot, getEnclosingFunction, getEnclosingScope, getLength, getLineno, getParent, getPosition, hasSideEffects, makeIndent, operatorToString, printList, setBounds, setLength, setParent, setPosition, setRelative, shortName, toSource
addChildAfter, addChildBefore, addChildrenToBack, addChildrenToFront, addChildToBack, addChildToFront, getChildBefore, getDouble, getExistingIntProp, getFirstChild, getIntProp, getJsDoc, getJsDocNode, getLastChild, getLastSibling, getNext, getProp, getString, getType, hasChildren, hasConsistentReturnUsage, iterator, labelId, labelId, newNumber, newString, newString, newTarget, putIntProp, putProp, removeChild, removeChildren, removeProp, replaceChild, replaceChildAfter, resetTargets, setDouble, setJsDocNode, setLineno, setString, setType, toString, toStringTree
public Name()
public Name(int pos)
public Name(int pos, int len)
public Name(int pos, int len, java.lang.String name)
Name
pos
- node start positionlen
- node lengthname
- the identifier associated with this Name
nodepublic Name(int pos, java.lang.String name)
public java.lang.String getIdentifier()
public void setIdentifier(java.lang.String identifier)
java.lang.IllegalArgumentException
- if identifier is nullpublic void setScope(Scope s)
Scope
associated with this node. This method does not
set the scope's ast-node field to this node. The field exists only
for temporary storage by the code generator. Not every name has an
associated scope - typically only function and variable names (but not
property names) are registered in a scope.public Scope getScope()
Scope
associated with this node. This is
only used for (and set by) the code generator, so it will always
be null in frontend AST-processing code. Use getDefiningScope()
to find the lexical Scope
in which this Name
is defined,
if any.public Scope getDefiningScope()
Scope
in which this Name
is defined.null
if it's not defined in the current lexical scope chainpublic boolean isLocalName()
true
if this name appears as local variable, a let-bound
variable not in the global scope, a function parameter, a loop
variable, the property named in a PropertyGet
, or in any other
context where the node is known not to resolve to the global scope.
Returns false
if the node is defined in the top-level scope
(i.e., its defining scope is an AstRoot
object), or if its
name is not defined as a symbol in the symbol table, in which case it
may be an external or built-in name (or just an error of some sort.)public int length()
String
. Don't confuse this method with the
AstNode.getLength()
method, which returns the range of
characters that this node overlaps in the source input.public java.lang.String toSource(int depth)
AstNode
Note: if the parser was in error-recovery mode, some AST nodes may have
null
children that are expected to be non-null
when no errors are present. In this situation, the behavior of the
toSource
method is undefined: toSource
implementations may assume that the AST node is error-free, since it is
intended to be invoked only at runtime after a successful parse.
public void visit(NodeVisitor v)