org.mozilla.javascript.ast
Class Scope

java.lang.Object
  extended by org.mozilla.javascript.Node
      extended by org.mozilla.javascript.ast.AstNode
          extended by org.mozilla.javascript.ast.Jump
              extended by org.mozilla.javascript.ast.Scope
All Implemented Interfaces:
java.lang.Comparable<AstNode>, java.lang.Iterable<Node>
Direct Known Subclasses:
ArrayComprehension, GeneratorExpression, LetNode, Loop, ScriptNode

public class Scope
extends Jump

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.mozilla.javascript.ast.AstNode
AstNode.DebugPrintVisitor, AstNode.PositionComparator
 
Nested classes/interfaces inherited from class org.mozilla.javascript.Node
Node.NodeIterator
 
Field Summary
protected  Scope parentScope
           
protected  java.util.Map<java.lang.String,Symbol> symbolTable
           
protected  ScriptNode top
           
 
Fields inherited from class org.mozilla.javascript.ast.Jump
target
 
Fields inherited from class org.mozilla.javascript.ast.AstNode
length, parent, position
 
Fields inherited from class org.mozilla.javascript.Node
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 Summary
Scope()
           
Scope(int pos)
           
Scope(int pos, int len)
           
 
Method Summary
 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.
 
Methods inherited from class org.mozilla.javascript.ast.Jump
getContinue, getDefault, getFinally, getJumpStatement, getLoop, setContinue, setDefault, setFinally, setJumpStatement, setLoop
 
Methods inherited from class org.mozilla.javascript.ast.AstNode
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
 
Methods inherited from class org.mozilla.javascript.Node
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
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

symbolTable

protected java.util.Map<java.lang.String,Symbol> symbolTable

parentScope

protected Scope parentScope

top

protected ScriptNode top
Constructor Detail

Scope

public Scope()

Scope

public Scope(int pos)

Scope

public Scope(int pos,
             int len)
Method Detail

getParentScope

public Scope getParentScope()

setParentScope

public void setParentScope(Scope parentScope)
Sets parent scope


clearParentScope

public void clearParentScope()
Used only for code generation.


getChildScopes

public java.util.List<Scope> getChildScopes()
Return a list of the scopes whose parent is this scope.

Returns:
the list of scopes we enclose, or null if none

addChildScope

public void addChildScope(Scope child)
Add a scope to our list of child scopes. Sets the child's parent scope to this scope.

Throws:
java.lang.IllegalStateException - if the child's parent scope is non-null

replaceWith

public void replaceWith(Scope newScope)
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

public ScriptNode getTop()
Returns current script or function scope


setTop

public void setTop(ScriptNode top)
Sets top current script or function scope


splitScope

public 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. Useful for injecting a new scope in a scope chain.


joinScopes

public static void joinScopes(Scope source,
                              Scope dest)
Copies all symbols from source scope to dest scope.


getDefiningScope

public Scope getDefiningScope(java.lang.String name)
Returns the scope in which this name is defined

Parameters:
name - the symbol to look up
Returns:
this Scope, one of its parent scopes, or null if the name is not defined any this scope chain

getSymbol

public Symbol getSymbol(java.lang.String name)
Looks up a symbol in this scope.

Parameters:
name - the symbol name
Returns:
the Symbol, or null if not found

putSymbol

public void putSymbol(Symbol symbol)
Enters a symbol into this scope.


getSymbolTable

public java.util.Map<java.lang.String,Symbol> getSymbolTable()
Returns the symbol table for this scope.

Returns:
the symbol table. May be null.

setSymbolTable

public void setSymbolTable(java.util.Map<java.lang.String,Symbol> table)
Sets the symbol table for this scope. May be null.


getStatements

public java.util.List<AstNode> getStatements()
Returns a copy of the child list, with each child cast to an AstNode.

Throws:
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.

toSource

public java.lang.String toSource(int depth)
Description copied from class: AstNode
Emits source code for this node. Callee is responsible for calling this function recursively on children, incrementing indent as appropriate.

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.

Overrides:
toSource in class Jump
Parameters:
depth - the current recursion depth, typically beginning at 0 when called on the root node.

visit

public void visit(NodeVisitor v)
Description copied from class: Jump
Jumps are only used directly during code generation, and do not support this interface.

Overrides:
visit in class Jump
Parameters:
v - the object to call with this node and its children