java.lang.Object
org.htmlunit.corejs.javascript.Node
org.htmlunit.corejs.javascript.ast.AstNode
org.htmlunit.corejs.javascript.ast.Jump
org.htmlunit.corejs.javascript.ast.Scope
- All Implemented Interfaces:
Comparable<AstNode>,Iterable<Node>
- Direct Known Subclasses:
ArrayComprehension,GeneratorExpression,LetNode,Loop,ScriptNode,SwitchStatement
Represents a scope in the lexical scope chain. Base type for all
AstNode implementations
that can introduce a new scope.-
Nested Class Summary
Nested classes/interfaces inherited from class org.htmlunit.corejs.javascript.ast.AstNode
AstNode.DebugPrintVisitor, AstNode.PositionComparatorNested classes/interfaces inherited from class org.htmlunit.corejs.javascript.Node
Node.NodeIterator -
Field Summary
FieldsFields inherited from class org.htmlunit.corejs.javascript.ast.AstNode
inlineComment, length, parent, positionFields inherited from class org.htmlunit.corejs.javascript.Node
ARROW_FUNCTION_PROP, ATTRIBUTE_FLAG, BOTH, CASEARRAY_PROP, CATCH_SCOPE_PROP, CONST_IDS_PROP, CONTROL_BLOCK_PROP, DECR_FLAG, DESCENDANTS_FLAG, DESTRUCTURING_ARRAY_LENGTH, DESTRUCTURING_NAMES, DESTRUCTURING_PARAMS, DIRECTCALL_PROP, END_DROPS_OFF, END_RETURNS, END_RETURNS_VALUE, END_UNREACHED, END_YIELDS, EXPRESSION_CLOSURE_PROP, first, FIRST_PROP, FUNCTION_PROP, GENERATOR_END_PROP, INCRDECR_PROP, IS_CONST_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, NUMBER_OF_SPREAD, OBJECT_IDS_PROP, OBJECT_LITERAL_DESTRUCTURING, OBJECT_REST_PROP, OPTIONAL_CHAINING, PARENTHESIZED_PROP, POST_FLAG, PROPERTY_FLAG, propListHead, REGEXP_PROP, RIGHT, SKIP_INDEXES_PROP, SPECIALCALL_EVAL, SPECIALCALL_PROP, SUPER_PROPERTY_ACCESS, TARGETBLOCK_PROP, TEMPLATE_LITERAL_PROP, TRAILING_COMMA, type, VARIABLE_PROP -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidaddChildScope(Scope child) Add a scope to our list of child scopes.voidUsed only for code generation.Return a list of the scopes whose parent is this scope.getDefiningScope(String name) Returns the scope in which this name is definedReturns a copy of the child list, with each child cast to anAstNode.Looks up a symbol in this scope.Returns the symbol table for this scope.getTop()Returns current script or function scopegetVarSymbol(String name) Looks up a var-hoisted symbol recorded in this scope.Returns the var symbol table for this scope.static voidjoinScopes(Scope source, Scope dest) Copies all symbols from source scope to dest scope.static voidjoinVarScopes(Scope source, Scope dest) Copies all var-hoisted symbol entries from source scope to dest scope.voidmoveSymbol(String name, Scope dest) Moves a single symbol from this scope to the destination scope.voidEnters a symbol into this scope.voidputVarSymbol(Symbol symbol) Records a var- or function-hoisted symbol in this scope's secondary index.voidreplaceWith(Scope newScope) Used by the parser; not intended for typical use.voidsetParentScope(Scope parentScope) Sets parent scopevoidsetSymbolTable(Map<String, Symbol> table) Sets the symbol table for this scope.voidsetTop(ScriptNode top) Sets top current script or function scopestatic ScopesplitScope(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.toSource(int depth) Jumps are only used directly during code generation, and do not support this interface.voidvisit(NodeVisitor v) Jumps are only used directly during code generation, and do not support this interface.Methods inherited from class org.htmlunit.corejs.javascript.ast.Jump
getContinue, getDefault, getFinally, getJumpStatement, getLoop, setContinue, setDefault, setFinally, setJumpStatement, setLoopMethods inherited from class org.htmlunit.corejs.javascript.ast.AstNode
addChild, assertNotNull, codeBug, compareTo, debugPrint, depth, getAbsolutePosition, getAstRoot, getEnclosingFunction, getEnclosingScope, getInlineComment, getLength, getLineno, getParent, getPosition, hasSideEffects, makeIndent, operatorToString, printList, setBounds, setInlineComment, setLength, setParent, setPosition, setRelative, shortName, toSourceMethods inherited from class org.htmlunit.corejs.javascript.Node
addChildAfter, addChildBefore, addChildrenToBack, addChildrenToFront, addChildToBack, addChildToFront, clearAllLabelIds, clearLabelId, getBigInt, getChildBefore, getColumn, 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, setBigInt, setDouble, setJsDocNode, setLineColumnNumber, setScope, setString, setType, toString, toStringTreeMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface java.lang.Iterable
forEach, spliterator
-
Field Details
-
symbolTable
-
varSymbolTable
-
parentScope
-
top
-
-
Constructor Details
-
Scope
public Scope() -
Scope
public Scope(int pos) -
Scope
public Scope(int pos, int len)
-
-
Method Details
-
getParentScope
-
setParentScope
Sets parent scope -
clearParentScope
public void clearParentScope()Used only for code generation. -
getChildScopes
Return a list of the scopes whose parent is this scope.- Returns:
- the list of scopes we enclose, or
nullif none
-
addChildScope
Add a scope to our list of child scopes. Sets the child's parent scope to this scope.- Throws:
IllegalStateException- if the child's parent scope is non-null
-
replaceWith
Used by the parser; not intended for typical use. Changes the parent-scope links for this scope's child scopes to the specified new scope. Copies symbols from this scope into new scope.- Parameters:
newScope- the scope that will replace this one on the scope stack.
-
getTop
Returns current script or function scope -
setTop
Sets top current script or function scope -
splitScope
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. Useful for injecting a new scope in a scope chain. -
moveSymbol
Moves a single symbol from this scope to the destination scope. UnlikeputSymbol(org.htmlunit.corejs.javascript.ast.Symbol), this does not re-register the symbol with the top-level ScriptNode since it was already registered when first defined. -
joinScopes
Copies all symbols from source scope to dest scope. -
joinVarScopes
Copies all var-hoisted symbol entries from source scope to dest scope. -
getDefiningScope
Returns the scope in which this name is defined- Parameters:
name- the symbol to look up- Returns:
- this
Scope, one of its parent scopes, ornullif the name is not defined any this scope chain
-
getSymbol
Looks up a symbol in this scope.- Parameters:
name- the symbol name- Returns:
- the Symbol, or
nullif not found
-
putSymbol
Enters a symbol into this scope. -
getSymbolTable
Returns the symbol table for this scope.- Returns:
- the symbol table. May be
null.
-
setSymbolTable
Sets the symbol table for this scope. May benull. -
getVarSymbol
Looks up a var-hoisted symbol recorded in this scope.- Parameters:
name- the symbol name- Returns:
- the Symbol, or
nullif not found
-
putVarSymbol
Records a var- or function-hoisted symbol in this scope's secondary index. Does not affect the master symbol list on the enclosingScriptNode; that registration is handled by the normalputSymbol(org.htmlunit.corejs.javascript.ast.Symbol)call. -
getVarSymbolTable
Returns the var symbol table for this scope.- Returns:
- the var symbol table. May be
null.
-
getStatements
Returns a copy of the child list, with each child cast to anAstNode.- Throws:
ClassCastException- if any non-AstNodeobjects are in the child list, e.g. if this method is called after the code generator begins the tree transformation.
-
toSource
Description copied from class:JumpJumps are only used directly during code generation, and do not support this interface. -
visit
Description copied from class:JumpJumps are only used directly during code generation, and do not support this interface.
-