public class Scope extends Jump
AstNode
implementations that can introduce a new scope.AstNode.DebugPrintVisitor, AstNode.PositionComparator
Node.NodeIterator
Modifier and Type | Field and Description |
---|---|
protected Scope |
parentScope |
protected java.util.Map<java.lang.String,Symbol> |
symbolTable |
protected ScriptNode |
top |
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 |
---|
Scope() |
Scope(int pos) |
Scope(int pos,
int len) |
Modifier and Type | Method and Description |
---|---|
void |
addChildScope(Scope child)
Add a scope to our list of child scopes.
|
void |
clearParentScope()
Used only for code generation.
|
java.util.List<Scope> |
getChildScopes()
Return a list of the scopes whose parent is this scope.
|
Scope |
getDefiningScope(java.lang.String name)
Returns the scope in which this name is defined
|
Scope |
getParentScope() |
java.util.List<AstNode> |
getStatements()
Returns a copy of the child list, with each child cast to an
AstNode . |
Symbol |
getSymbol(java.lang.String name)
Looks up a symbol in this scope.
|
java.util.Map<java.lang.String,Symbol> |
getSymbolTable()
Returns the symbol table for this scope.
|
ScriptNode |
getTop()
Returns current script or function scope
|
static void |
joinScopes(Scope source,
Scope dest)
Copies all symbols from source scope to dest scope.
|
void |
putSymbol(Symbol symbol)
Enters a symbol into this scope.
|
void |
replaceWith(Scope newScope)
Used by the parser; not intended for typical use.
|
void |
setParentScope(Scope parentScope)
Sets parent scope
|
void |
setSymbolTable(java.util.Map<java.lang.String,Symbol> table)
Sets the symbol table for this scope.
|
void |
setTop(ScriptNode top)
Sets top current script or function scope
|
static Scope |
splitScope(Scope scope)
Creates a new scope node, moving symbol table information
from "scope" to the new node, and making "scope" a nested
scope contained by the new node.
|
java.lang.String |
toSource(int depth)
Emits source code for this node.
|
void |
visit(NodeVisitor v)
Jumps are only used directly during code generation, and do
not support this interface.
|
getContinue, getDefault, getFinally, getJumpStatement, getLoop, setContinue, setDefault, setFinally, setJumpStatement, setLoop
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, getScope, getString, getType, hasChildren, hasConsistentReturnUsage, iterator, labelId, labelId, newNumber, newString, newString, newTarget, putIntProp, putProp, removeChild, removeChildren, removeProp, replaceChild, replaceChildAfter, resetTargets, setDouble, setJsDocNode, setLineno, setScope, setString, setType, toString, toStringTree
protected java.util.Map<java.lang.String,Symbol> symbolTable
protected Scope parentScope
protected ScriptNode top
public Scope()
public Scope(int pos)
public Scope(int pos, int len)
public Scope getParentScope()
public void setParentScope(Scope parentScope)
public void clearParentScope()
public java.util.List<Scope> getChildScopes()
null
if nonepublic void addChildScope(Scope child)
java.lang.IllegalStateException
- if the child's parent scope is
non-null
public void replaceWith(Scope newScope)
newScope
- the scope that will replace this one on the
scope stack.public ScriptNode getTop()
public void setTop(ScriptNode top)
public static Scope splitScope(Scope scope)
public static void joinScopes(Scope source, Scope dest)
public Scope getDefiningScope(java.lang.String name)
name
- the symbol to look upScope
, one of its parent scopes, or null
if
the name is not defined any this scope chainpublic Symbol getSymbol(java.lang.String name)
name
- the symbol namenull
if not foundpublic void putSymbol(Symbol symbol)
public java.util.Map<java.lang.String,Symbol> getSymbolTable()
null
.public void setSymbolTable(java.util.Map<java.lang.String,Symbol> table)
null
.public java.util.List<AstNode> getStatements()
AstNode
.java.lang.ClassCastException
- if any non-AstNode
objects are
in the child list, e.g. if this method is called after the code
generator begins the tree transformation.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)
Jump