org.mozilla.javascript
Class Node

java.lang.Object
  extended by org.mozilla.javascript.Node
All Implemented Interfaces:
java.lang.Iterable<Node>
Direct Known Subclasses:
AstNode

public class Node
extends java.lang.Object
implements java.lang.Iterable<Node>

This class implements the root of the intermediate representation.

Author:
Norris Boyd, Mike McCabe

Nested Class Summary
 class Node.NodeIterator
          Iterates over the children of this Node.
 
Field Summary
static int ATTRIBUTE_FLAG
           
static int BOTH
           
static int CASEARRAY_PROP
           
static int CATCH_SCOPE_PROP
           
static int CONTROL_BLOCK_PROP
           
static int DECR_FLAG
           
static int DESCENDANTS_FLAG
           
static int DESTRUCTURING_ARRAY_LENGTH
           
static int DESTRUCTURING_NAMES
           
static int DESTRUCTURING_PARAMS
           
static int DESTRUCTURING_SHORTHAND
           
static int DIRECTCALL_PROP
           
static int END_DROPS_OFF
           
static int END_RETURNS
           
static int END_RETURNS_VALUE
           
static int END_UNREACHED
          These flags enumerate the possible ways a statement/function can terminate.
static int END_YIELDS
           
static int EXPRESSION_CLOSURE_PROP
           
protected  Node first
           
static int FUNCTION_PROP
           
static int GENERATOR_END_PROP
           
static int INCRDECR_PROP
           
static int ISNUMBER_PROP
           
static int JSDOC_PROP
           
static int LABEL_ID_PROP
           
protected  Node last
           
static int LAST_PROP
           
static int LEFT
           
protected  int lineno
           
static int LOCAL_BLOCK_PROP
           
static int LOCAL_PROP
           
static int MEMBER_TYPE_PROP
           
static int NAME_PROP
           
protected  Node next
           
static int NON_SPECIALCALL
           
static int OBJECT_IDS_PROP
           
static int PARENTHESIZED_PROP
           
static int POST_FLAG
           
static int PROPERTY_FLAG
           
protected  org.mozilla.javascript.Node.PropListItem propListHead
          Linked list of properties.
static int REGEXP_PROP
           
static int RIGHT
           
static int SKIP_INDEXES_PROP
           
static int SPECIALCALL_EVAL
           
static int SPECIALCALL_PROP
           
static int SPECIALCALL_WITH
           
static int TARGETBLOCK_PROP
           
protected  int type
           
static int VARIABLE_PROP
           
 
Constructor Summary
Node(int nodeType)
           
Node(int nodeType, int line)
           
Node(int nodeType, Node child)
           
Node(int nodeType, Node child, int line)
           
Node(int nodeType, Node left, Node right)
           
Node(int nodeType, Node left, Node right, int line)
           
Node(int nodeType, Node left, Node mid, Node right)
           
Node(int nodeType, Node left, Node mid, Node right, int line)
           
 
Method Summary
 void addChildAfter(Node newChild, Node node)
          Add 'child' after 'node'.
 void addChildBefore(Node newChild, Node node)
          Add 'child' before 'node'.
 void addChildrenToBack(Node children)
           
 void addChildrenToFront(Node children)
           
 void addChildToBack(Node child)
           
 void addChildToFront(Node child)
           
 Node getChildBefore(Node child)
           
 double getDouble()
          Can only be called when getType() == Token.NUMBER
 int getExistingIntProp(int propType)
           
 Node getFirstChild()
           
 int getIntProp(int propType, int defaultValue)
           
 java.lang.String getJsDoc()
          Gets the JsDoc comment string attached to this node.
 Comment getJsDocNode()
          Gets the JsDoc Comment object attached to this node.
 Node getLastChild()
           
 Node getLastSibling()
           
 int getLineno()
          Return the line number recorded for this node.
 Node getNext()
           
 java.lang.Object getProp(int propType)
           
 Scope getScope()
          Can only be called when node has String context.
 java.lang.String getString()
          Can only be called when node has String context.
 int getType()
           
 boolean hasChildren()
           
 boolean hasConsistentReturnUsage()
          Checks that every return usage in a function body is consistent with the requirements of strict-mode.
 boolean hasSideEffects()
           
 java.util.Iterator<Node> iterator()
          Returns an Iterator over the node's children.
 int labelId()
           
 void labelId(int labelId)
           
static Node newNumber(double number)
           
static Node newString(int type, java.lang.String str)
           
static Node newString(java.lang.String str)
           
static Node newTarget()
           
 void putIntProp(int propType, int prop)
           
 void putProp(int propType, java.lang.Object prop)
           
 void removeChild(Node child)
           
 void removeChildren()
           
 void removeProp(int propType)
           
 void replaceChild(Node child, Node newChild)
           
 void replaceChildAfter(Node prevChild, Node newChild)
           
 void resetTargets()
          Recursively unlabel every TARGET or YIELD node in the tree.
 void setDouble(double number)
           
 void setJsDocNode(Comment jsdocNode)
          Sets the JsDoc comment string attached to this node.
 void setLineno(int lineno)
           
 void setScope(Scope s)
          Can only be called when node has String context.
 void setString(java.lang.String s)
          Can only be called when node has String context.
 Node setType(int type)
          Sets the node type and returns this node.
 java.lang.String toString()
           
 java.lang.String toStringTree(ScriptNode treeTop)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

FUNCTION_PROP

public static final int FUNCTION_PROP
See Also:
Constant Field Values

LOCAL_PROP

public static final int LOCAL_PROP
See Also:
Constant Field Values

LOCAL_BLOCK_PROP

public static final int LOCAL_BLOCK_PROP
See Also:
Constant Field Values

REGEXP_PROP

public static final int REGEXP_PROP
See Also:
Constant Field Values

CASEARRAY_PROP

public static final int CASEARRAY_PROP
See Also:
Constant Field Values

TARGETBLOCK_PROP

public static final int TARGETBLOCK_PROP
See Also:
Constant Field Values

VARIABLE_PROP

public static final int VARIABLE_PROP
See Also:
Constant Field Values

ISNUMBER_PROP

public static final int ISNUMBER_PROP
See Also:
Constant Field Values

DIRECTCALL_PROP

public static final int DIRECTCALL_PROP
See Also:
Constant Field Values

SPECIALCALL_PROP

public static final int SPECIALCALL_PROP
See Also:
Constant Field Values

SKIP_INDEXES_PROP

public static final int SKIP_INDEXES_PROP
See Also:
Constant Field Values

OBJECT_IDS_PROP

public static final int OBJECT_IDS_PROP
See Also:
Constant Field Values

INCRDECR_PROP

public static final int INCRDECR_PROP
See Also:
Constant Field Values

CATCH_SCOPE_PROP

public static final int CATCH_SCOPE_PROP
See Also:
Constant Field Values

LABEL_ID_PROP

public static final int LABEL_ID_PROP
See Also:
Constant Field Values

MEMBER_TYPE_PROP

public static final int MEMBER_TYPE_PROP
See Also:
Constant Field Values

NAME_PROP

public static final int NAME_PROP
See Also:
Constant Field Values

CONTROL_BLOCK_PROP

public static final int CONTROL_BLOCK_PROP
See Also:
Constant Field Values

PARENTHESIZED_PROP

public static final int PARENTHESIZED_PROP
See Also:
Constant Field Values

GENERATOR_END_PROP

public static final int GENERATOR_END_PROP
See Also:
Constant Field Values

DESTRUCTURING_ARRAY_LENGTH

public static final int DESTRUCTURING_ARRAY_LENGTH
See Also:
Constant Field Values

DESTRUCTURING_NAMES

public static final int DESTRUCTURING_NAMES
See Also:
Constant Field Values

DESTRUCTURING_PARAMS

public static final int DESTRUCTURING_PARAMS
See Also:
Constant Field Values

JSDOC_PROP

public static final int JSDOC_PROP
See Also:
Constant Field Values

EXPRESSION_CLOSURE_PROP

public static final int EXPRESSION_CLOSURE_PROP
See Also:
Constant Field Values

DESTRUCTURING_SHORTHAND

public static final int DESTRUCTURING_SHORTHAND
See Also:
Constant Field Values

LAST_PROP

public static final int LAST_PROP
See Also:
Constant Field Values

BOTH

public static final int BOTH
See Also:
Constant Field Values

LEFT

public static final int LEFT
See Also:
Constant Field Values

RIGHT

public static final int RIGHT
See Also:
Constant Field Values

NON_SPECIALCALL

public static final int NON_SPECIALCALL
See Also:
Constant Field Values

SPECIALCALL_EVAL

public static final int SPECIALCALL_EVAL
See Also:
Constant Field Values

SPECIALCALL_WITH

public static final int SPECIALCALL_WITH
See Also:
Constant Field Values

DECR_FLAG

public static final int DECR_FLAG
See Also:
Constant Field Values

POST_FLAG

public static final int POST_FLAG
See Also:
Constant Field Values

PROPERTY_FLAG

public static final int PROPERTY_FLAG
See Also:
Constant Field Values

ATTRIBUTE_FLAG

public static final int ATTRIBUTE_FLAG
See Also:
Constant Field Values

DESCENDANTS_FLAG

public static final int DESCENDANTS_FLAG
See Also:
Constant Field Values

END_UNREACHED

public static final int END_UNREACHED
These flags enumerate the possible ways a statement/function can terminate. These flags are used by endCheck() and by the Parser to detect inconsistent return usage. END_UNREACHED is reserved for code paths that are assumed to always be able to execute (example: throw, continue) END_DROPS_OFF indicates if the statement can transfer control to the next one. Statement such as return dont. A compound statement may have some branch that drops off control to the next statement. END_RETURNS indicates that the statement can return (without arguments) END_RETURNS_VALUE indicates that the statement can return a value. A compound statement such as if (condition) { return value; } Will be detected as (END_DROPS_OFF | END_RETURN_VALUE) by endCheck()

See Also:
Constant Field Values

END_DROPS_OFF

public static final int END_DROPS_OFF
See Also:
Constant Field Values

END_RETURNS

public static final int END_RETURNS
See Also:
Constant Field Values

END_RETURNS_VALUE

public static final int END_RETURNS_VALUE
See Also:
Constant Field Values

END_YIELDS

public static final int END_YIELDS
See Also:
Constant Field Values

type

protected int type

next

protected Node next

first

protected Node first

last

protected Node last

lineno

protected int lineno

propListHead

protected org.mozilla.javascript.Node.PropListItem propListHead
Linked list of properties. Since vast majority of nodes would have no more then 2 properties, linked list saves memory and provides fast lookup. If this does not holds, propListHead can be replaced by UintMap.

Constructor Detail

Node

public Node(int nodeType)

Node

public Node(int nodeType,
            Node child)

Node

public Node(int nodeType,
            Node left,
            Node right)

Node

public Node(int nodeType,
            Node left,
            Node mid,
            Node right)

Node

public Node(int nodeType,
            int line)

Node

public Node(int nodeType,
            Node child,
            int line)

Node

public Node(int nodeType,
            Node left,
            Node right,
            int line)

Node

public Node(int nodeType,
            Node left,
            Node mid,
            Node right,
            int line)
Method Detail

newNumber

public static Node newNumber(double number)

newString

public static Node newString(java.lang.String str)

newString

public static Node newString(int type,
                             java.lang.String str)

getType

public int getType()

setType

public Node setType(int type)
Sets the node type and returns this node.


getJsDoc

public java.lang.String getJsDoc()
Gets the JsDoc comment string attached to this node.

Returns:
the comment string or null if no JsDoc is attached to this node

getJsDocNode

public Comment getJsDocNode()
Gets the JsDoc Comment object attached to this node.

Returns:
the Comment or null if no JsDoc is attached to this node

setJsDocNode

public void setJsDocNode(Comment jsdocNode)
Sets the JsDoc comment string attached to this node.


hasChildren

public boolean hasChildren()

getFirstChild

public Node getFirstChild()

getLastChild

public Node getLastChild()

getNext

public Node getNext()

getChildBefore

public Node getChildBefore(Node child)

getLastSibling

public Node getLastSibling()

addChildToFront

public void addChildToFront(Node child)

addChildToBack

public void addChildToBack(Node child)

addChildrenToFront

public void addChildrenToFront(Node children)

addChildrenToBack

public void addChildrenToBack(Node children)

addChildBefore

public void addChildBefore(Node newChild,
                           Node node)
Add 'child' before 'node'.


addChildAfter

public void addChildAfter(Node newChild,
                          Node node)
Add 'child' after 'node'.


removeChild

public void removeChild(Node child)

replaceChild

public void replaceChild(Node child,
                         Node newChild)

replaceChildAfter

public void replaceChildAfter(Node prevChild,
                              Node newChild)

removeChildren

public void removeChildren()

iterator

public java.util.Iterator<Node> iterator()
Returns an Iterator over the node's children.

Specified by:
iterator in interface java.lang.Iterable<Node>

removeProp

public void removeProp(int propType)

getProp

public java.lang.Object getProp(int propType)

getIntProp

public int getIntProp(int propType,
                      int defaultValue)

getExistingIntProp

public int getExistingIntProp(int propType)

putProp

public void putProp(int propType,
                    java.lang.Object prop)

putIntProp

public void putIntProp(int propType,
                       int prop)

getLineno

public int getLineno()
Return the line number recorded for this node.

Returns:
the line number

setLineno

public void setLineno(int lineno)

getDouble

public final double getDouble()
Can only be called when getType() == Token.NUMBER


setDouble

public final void setDouble(double number)

getString

public final java.lang.String getString()
Can only be called when node has String context.


setString

public final void setString(java.lang.String s)
Can only be called when node has String context.


getScope

public Scope getScope()
Can only be called when node has String context.


setScope

public void setScope(Scope s)
Can only be called when node has String context.


newTarget

public static Node newTarget()

labelId

public final int labelId()

labelId

public void labelId(int labelId)

hasConsistentReturnUsage

public boolean hasConsistentReturnUsage()
Checks that every return usage in a function body is consistent with the requirements of strict-mode.

Returns:
true if the function satisfies strict mode requirement.

hasSideEffects

public boolean hasSideEffects()

resetTargets

public void resetTargets()
Recursively unlabel every TARGET or YIELD node in the tree. This is used and should only be used for inlining finally blocks where jsr instructions used to be. It is somewhat hackish, but implementing a clone() operation would take much, much more effort. This solution works for inlining finally blocks because you should never be writing any given block to the class file simultaneously. Therefore, an unlabeling will never occur in the middle of a block.


toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

toStringTree

public java.lang.String toStringTree(ScriptNode treeTop)