I removed method duplication in Node where getNext() was duplicated as getNextSibling() and code was using both of them and similarly for getFirstChild()/getFirst().

This commit is contained in:
igor%mir2.org 2002-11-02 22:08:00 +00:00
Родитель 951de612e3
Коммит e33d132a12
10 изменённых файлов: 187 добавлений и 184 удалений

Просмотреть файл

@ -494,8 +494,8 @@ public class IRFactory {
int catchLineNo = cb.getLineno();
Node name = cb.getFirstChild();
Node cond = name.getNextSibling();
Node catchBlock = cond.getNextSibling();
Node cond = name.getNext();
Node catchBlock = cond.getNext();
cb.removeChild(name);
cb.removeChild(cond);
cb.removeChild(catchBlock);
@ -525,7 +525,7 @@ public class IRFactory {
pn.addChildToBack(catchStmt);
// move to next cb
cb = cb.getNextSibling();
cb = cb.getNext();
}
// Generate code to rethrow if no catch clause was executed
@ -595,7 +595,7 @@ public class IRFactory {
// Move cursor to cursor.next before elem.next can be
// altered in new Node constructor
elem = cursor;
cursor = cursor.getNextSibling();
cursor = cursor.getNext();
if (elem.getType() == TokenStream.PRIMARY &&
elem.getOperation() == TokenStream.UNDEFINED)
{
@ -654,13 +654,13 @@ public class IRFactory {
Node comma = new Node(TokenStream.COMMA, temp);
for (Node cursor = ((Node) obj).getFirstChild(); cursor != null;) {
Node n = cursor;
cursor = cursor.getNextSibling();
cursor = cursor.getNext();
int op = (n.getType() == TokenStream.NAME)
? TokenStream.SETPROP
: TokenStream.SETELEM;
// Move cursor before next.next can be altered in new Node
Node next = cursor;
cursor = cursor.getNextSibling();
cursor = cursor.getNext();
Node addelem = new Node(op, createUseTemp(temp), n, next);
comma.addChildToBack(addelem);
}
@ -951,7 +951,7 @@ public class IRFactory {
if (hasSideEffects(child))
return true;
else
child = child.getNextSibling();
child = child.getNext();
}
break;
}

Просмотреть файл

@ -291,16 +291,16 @@ public class Interpreter {
while (child != null) {
if (child.getType() != TokenStream.FUNCTION)
iCodeTop = generateICode(child, iCodeTop);
child = child.getNextSibling();
child = child.getNext();
}
break;
case TokenStream.CASE :
iCodeTop = updateLineNumber(node, iCodeTop);
child = child.getNextSibling();
child = child.getNext();
while (child != null) {
iCodeTop = generateICode(child, iCodeTop);
child = child.getNextSibling();
child = child.getNext();
}
break;
@ -314,13 +314,13 @@ public class Interpreter {
iCodeTop = updateLineNumber(node, iCodeTop);
while (child != null) {
iCodeTop = generateICode(child, iCodeTop);
child = child.getNextSibling();
child = child.getNext();
}
break;
case TokenStream.COMMA :
iCodeTop = generateICode(child, iCodeTop);
while (null != (child = child.getNextSibling())) {
while (null != (child = child.getNext())) {
iCodeTop = addByte(TokenStream.POP, iCodeTop);
itsStackDepth--;
iCodeTop = generateICode(child, iCodeTop);
@ -387,7 +387,7 @@ public class Interpreter {
case TokenStream.EQOP :
case TokenStream.RELOP : {
iCodeTop = generateICode(child, iCodeTop);
child = child.getNextSibling();
child = child.getNext();
iCodeTop = generateICode(child, iCodeTop);
int op = node.getOperation();
if (version == Context.VERSION_1_2) {
@ -424,7 +424,7 @@ public class Interpreter {
functionName = lastAddString;
}
}
child = child.getNextSibling();
child = child.getNext();
childCount++;
}
if (node.getProp(Node.SPECIALCALL_PROP) != null) {
@ -527,7 +527,7 @@ public class Interpreter {
iCodeTop = addForwardGoto(TokenStream.IFNE, iCodeTop);
iCodeTop = addByte(TokenStream.POP, iCodeTop);
itsStackDepth--;
child = child.getNextSibling();
child = child.getNext();
iCodeTop = generateICode(child, iCodeTop);
resolveForwardGoto(falseJumpStart, iCodeTop);
break;
@ -543,7 +543,7 @@ public class Interpreter {
iCodeTop = addForwardGoto(TokenStream.IFEQ, iCodeTop);
iCodeTop = addByte(TokenStream.POP, iCodeTop);
itsStackDepth--;
child = child.getNextSibling();
child = child.getNext();
iCodeTop = generateICode(child, iCodeTop);
resolveForwardGoto(trueJumpStart, iCodeTop);
break;
@ -562,7 +562,7 @@ public class Interpreter {
badTree(node);
}
} else {
child = child.getNextSibling();
child = child.getNext();
iCodeTop = generateICode(child, iCodeTop);
iCodeTop = addByte(TokenStream.GETPROP, iCodeTop);
itsStackDepth--;
@ -584,7 +584,7 @@ public class Interpreter {
case TokenStream.MUL :
case TokenStream.GETELEM :
iCodeTop = generateICode(child, iCodeTop);
child = child.getNextSibling();
child = child.getNext();
iCodeTop = generateICode(child, iCodeTop);
iCodeTop = addByte(type, iCodeTop);
itsStackDepth--;
@ -641,7 +641,7 @@ public class Interpreter {
case TokenStream.SETPROP : {
iCodeTop = generateICode(child, iCodeTop);
child = child.getNextSibling();
child = child.getNext();
iCodeTop = generateICode(child, iCodeTop);
String s = (String) node.getProp(Node.SPECIAL_PROP_PROP);
if (s != null) {
@ -653,7 +653,7 @@ public class Interpreter {
badTree(node);
}
} else {
child = child.getNextSibling();
child = child.getNext();
iCodeTop = generateICode(child, iCodeTop);
iCodeTop = addByte(TokenStream.SETPROP, iCodeTop);
itsStackDepth -= 2;
@ -663,9 +663,9 @@ public class Interpreter {
case TokenStream.SETELEM :
iCodeTop = generateICode(child, iCodeTop);
child = child.getNextSibling();
child = child.getNext();
iCodeTop = generateICode(child, iCodeTop);
child = child.getNextSibling();
child = child.getNext();
iCodeTop = generateICode(child, iCodeTop);
iCodeTop = addByte(type, iCodeTop);
itsStackDepth -= 2;
@ -673,7 +673,7 @@ public class Interpreter {
case TokenStream.SETNAME :
iCodeTop = generateICode(child, iCodeTop);
child = child.getNextSibling();
child = child.getNext();
iCodeTop = generateICode(child, iCodeTop);
iCodeTop = addByte(TokenStream.SETNAME, iCodeTop);
iCodeTop = addString(firstChild.getString(), iCodeTop);
@ -752,7 +752,7 @@ public class Interpreter {
case TokenStream.GETELEM : {
Node getPropChild = child.getFirstChild();
iCodeTop = generateICode(getPropChild, iCodeTop);
getPropChild = getPropChild.getNextSibling();
getPropChild = getPropChild.getNext();
iCodeTop = generateICode(getPropChild, iCodeTop);
if (childType == TokenStream.GETPROP) {
iCodeTop = addByte(type == TokenStream.INC
@ -868,7 +868,7 @@ public class Interpreter {
the try statemets, we need to emit the endtry
before that goto.
*/
Node nextSibling = child.getNextSibling();
Node nextSibling = child.getNext();
if (!insertedEndTry && nextSibling != null &&
(nextSibling == catchTarget ||
nextSibling == finallyTarget))
@ -879,7 +879,7 @@ public class Interpreter {
}
iCodeTop = generateICode(child, iCodeTop);
lastChild = child;
child = child.getNextSibling();
child = child.getNext();
}
itsStackDepth = 0;
if (finallyTarget != null) {
@ -959,7 +959,7 @@ public class Interpreter {
iCodeTop = generateICode(node, iCodeTop);
} else {
String name = child.getString();
child = child.getNextSibling();
child = child.getNext();
iCodeTop = generateICode(child, iCodeTop);
int index = itsVariableTable.getOrdinal(name);
iCodeTop = addByte(TokenStream.SETVAR, iCodeTop);

Просмотреть файл

@ -150,7 +150,7 @@ public class Node implements Cloneable {
return last;
}
public Node getNextSibling() {
public Node getNext() {
return next;
}
@ -541,7 +541,7 @@ public class Node implements Cloneable {
s.append(toString());
s.append('\n');
for (Node cursor = getFirstChild(); cursor != null;
cursor = cursor.getNextSibling())
cursor = cursor.getNext())
{
Node n = cursor;
if (cursor.getType() == TokenStream.FUNCTION) {
@ -556,13 +556,10 @@ public class Node implements Cloneable {
return "";
}
public Node getFirst() { return first; }
public Node getNext() { return next; }
protected int type; // type of the node; TokenStream.NAME for example
protected Node next; // next sibling
protected Node first; // first element of a linked list of children
protected Node last; // last element of a linked list of children
int type; // type of the node; TokenStream.NAME for example
Node next; // next sibling
private Node first; // first element of a linked list of children
private Node last; // last element of a linked list of children
private int intDatum = -1; // encapsulated int data; depends on type
private UintMap props;
}

Просмотреть файл

@ -152,11 +152,11 @@ public class NodeTransformer {
*/
Node breakTarget = new Node(TokenStream.TARGET);
Node parent = iterator.getCurrentParent();
Node next = node.getNextSibling();
Node next = node.getNext();
while (next != null &&
(next.getType() == TokenStream.LABEL ||
next.getType() == TokenStream.TARGET))
next = next.getNextSibling();
next = next.getNext();
if (next == null)
break;
parent.addChildAfter(breakTarget, next);
@ -228,7 +228,7 @@ public class NodeTransformer {
((FunctionNode) tree).setRequiresActivation(true);
}
loops.push(node);
Node leave = node.getNextSibling();
Node leave = node.getNext();
if (leave.getType() != TokenStream.LEAVEWITH) {
throw new RuntimeException("Unexpected tree");
}
@ -406,7 +406,7 @@ public class NodeTransformer {
// Move cursor to next before createAssignment get chance
// to change n.next
Node n = cursor;
cursor = cursor.getNextSibling();
cursor = cursor.getNext();
if (!n.hasChildren())
continue;
Node init = n.getFirstChild();
@ -452,7 +452,7 @@ public class NodeTransformer {
case TokenStream.GETPROP:
if (inFunction) {
Node n = node.getFirstChild().getNextSibling();
Node n = node.getFirstChild().getNext();
String name = n == null ? "" : n.getString();
Context cx = Context.getCurrentContext();
if ((cx != null && cx.isActivationNeeded(name)) ||
@ -516,7 +516,7 @@ public class NodeTransformer {
if (nodeType != TokenStream.VAR)
continue;
for (Node cursor = node.getFirstChild(); cursor != null;
cursor = cursor.getNextSibling())
cursor = cursor.getNext())
{
String name = cursor.getString();
if (fNames == null || !fNames.has(name))
@ -553,7 +553,7 @@ public class NodeTransformer {
{
// Add parameters
for (Node cursor = args.getFirstChild(); cursor != null;
cursor = cursor.getNextSibling())
cursor = cursor.getNext())
{
String arg = cursor.getString();
vars.addParameter(arg, createVariableObject(arg, true));
@ -588,9 +588,9 @@ public class NodeTransformer {
Node left = node.getFirstChild();
// count the arguments
int argCount = 0;
Node arg = left.getNextSibling();
Node arg = left.getNext();
while (arg != null) {
arg = arg.getNextSibling();
arg = arg.getNext();
argCount++;
}
boolean addGetThis = false;

Просмотреть файл

@ -62,25 +62,26 @@ public final class PreorderNodeIterator {
public Node nextNode() {
if (current == null) {
current = start;
}
else if (current.first != null) {
stackPush(current);
cachedPrev = null;
current = current.first;
}
else {
for (;;) {
cachedPrev = current;
current = current.next;
if (current != null) { break; }
if (stackTop == 0) {
// Iteration end: clear cachedPrev that currently points
// to the last sibling of start
cachedPrev = null; break;
} else {
Node first = current.getFirstChild();
if (first != null) {
stackPush(current);
cachedPrev = null;
current = first;
} else {
for (;;) {
cachedPrev = current;
current = current.next;
if (current != null) { break; }
if (stackTop == 0) {
// Iteration end: clear cachedPrev that currently
// points to the last sibling of start
cachedPrev = null; break;
}
--stackTop;
current = stack[stackTop];
stack[stackTop] = null;
}
--stackTop;
current = stack[stackTop];
stack[stackTop] = null;
}
}
return current;

Просмотреть файл

@ -199,7 +199,7 @@ public class Block {
case TokenStream.SETVAR :
{
Node lhs = n.getFirstChild();
Node rhs = lhs.getNextSibling();
Node rhs = lhs.getNext();
lookForVariablesAndCalls(rhs, liveSet, theVariables);
Object theVarProp = n.getProp(Node.VARIABLE_PROP);
if (theVarProp != null) {
@ -212,7 +212,7 @@ public class Block {
Node child = n.getFirstChild();
while (child != null) {
lookForVariablesAndCalls(child, liveSet, theVariables);
child = child.getNextSibling();
child = child.getNext();
}
for (int i = 0; i < liveSet.length; i++) {
if (liveSet[i])
@ -235,7 +235,7 @@ public class Block {
Node child = n.getFirstChild();
while (child != null) {
lookForVariablesAndCalls(child, liveSet, theVariables);
child = child.getNextSibling();
child = child.getNext();
}
break;
}
@ -289,7 +289,7 @@ public class Block {
case TokenStream.SETVAR :
{
Node lhs = n.getFirstChild();
Node rhs = lhs.getNextSibling();
Node rhs = lhs.getNext();
lookForVariableAccess(rhs, lastUse);
Object theVarProp = n.getProp(Node.VARIABLE_PROP);
if (theVarProp != null) {
@ -316,7 +316,7 @@ public class Block {
Node child = n.getFirstChild();
while (child != null) {
lookForVariableAccess(child, lastUse);
child = child.getNextSibling();
child = child.getNext();
}
break;
}
@ -415,7 +415,7 @@ public class Block {
// the result, otherwise it could be a string.
Node child = n.getFirstChild();
int lType = findExpressionType(child);
int rType = findExpressionType(child.getNextSibling());
int rType = findExpressionType(child.getNext());
return lType | rType; // we're not distinguishng strings yet
}
default : {
@ -426,7 +426,7 @@ public class Block {
int result = TypeEvent.NoType;
while (child != null) {
result |= findExpressionType(child);
child = child.getNextSibling();
child = child.getNext();
}
return result;
}
@ -442,7 +442,7 @@ public class Block {
Node child = n.getFirstChild();
while (child != null) {
result |= findDefPoints(child);
child = child.getNextSibling();
child = child.getNext();
}
}
break;
@ -460,8 +460,8 @@ public class Block {
case TokenStream.SETPROP : {
Node baseChild = n.getFirstChild();
Node nameChild = baseChild.getNextSibling();
Node rhs = nameChild.getNextSibling();
Node nameChild = baseChild.getNext();
Node rhs = nameChild.getNext();
if (baseChild != null) {
if (baseChild.getType() == TokenStream.GETVAR) {
OptLocalVariable theVar = (OptLocalVariable)
@ -481,7 +481,7 @@ public class Block {
OptLocalVariable theVar = (OptLocalVariable)
(n.getProp(Node.VARIABLE_PROP));
if (theVar != null) {
Node rValue = firstChild.getNextSibling();
Node rValue = firstChild.getNext();
int theType = findExpressionType(rValue);
result |= theVar.assignType(theType);
}
@ -500,7 +500,7 @@ public class Block {
Node child = n.getFirstChild();
while (child != null) {
localCSE(n, child, theCSETable, theFunction);
child = child.getNextSibling();
child = child.getNext();
}
}
break;
@ -508,7 +508,7 @@ public class Block {
case TokenStream.INC : {
Node child = n.getFirstChild();
if (child.getType() == TokenStream.GETPROP) {
Node nameChild = child.getFirstChild().getNextSibling();
Node nameChild = child.getFirstChild().getNext();
if (nameChild.getType() == TokenStream.STRING)
theCSETable.remove(nameChild.getString());
else
@ -521,8 +521,8 @@ public class Block {
break;
case TokenStream.SETPROP : {
Node baseChild = n.getFirstChild();
Node nameChild = baseChild.getNextSibling();
Node rhs = nameChild.getNextSibling();
Node nameChild = baseChild.getNext();
Node rhs = nameChild.getNext();
if (baseChild != null) localCSE(n, baseChild, theCSETable, theFunction);
if (nameChild != null) localCSE(n, nameChild, theCSETable, theFunction);
if (rhs != null) localCSE(n, rhs, theCSETable, theFunction);
@ -544,7 +544,7 @@ public class Block {
if (baseChild.getType() == TokenStream.PRIMARY
&& baseChild.getOperation() == TokenStream.THIS)
{
Node nameChild = baseChild.getNextSibling();
Node nameChild = baseChild.getNext();
if (nameChild.getType() == TokenStream.STRING) {
String theName = nameChild.getString();
// System.out.println("considering " + theName);
@ -558,7 +558,7 @@ public class Block {
Node theCSE;
if (cse instanceof CSEHolder) {
CSEHolder cseHolder = (CSEHolder)cse;
Node nextChild = cseHolder.getPropChild.getNextSibling();
Node nextChild = cseHolder.getPropChild.getNext();
cseHolder.getPropParent.removeChild(cseHolder.getPropChild);
theCSE = itsIRFactory.createNewLocal(cseHolder.getPropChild);
theFunction.incrementLocalCount();
@ -570,7 +570,7 @@ public class Block {
}
else
theCSE = (Node)cse;
Node nextChild = n.getNextSibling();
Node nextChild = n.getNext();
parent.removeChild(n);
Node cseUse = itsIRFactory.createUseLocal(theCSE);
if (nextChild == null)
@ -585,8 +585,8 @@ public class Block {
break;
case TokenStream.SETELEM : {
Node lhsBase = n.getFirstChild();
Node lhsIndex = lhsBase.getNextSibling();
Node rhs = lhsIndex.getNextSibling();
Node lhsIndex = lhsBase.getNext();
Node rhs = lhsIndex.getNext();
if (lhsBase != null) localCSE(n, lhsBase, theCSETable, theFunction);
if (lhsIndex != null) localCSE(n, lhsIndex, theCSETable, theFunction);
if (rhs != null) localCSE(n, rhs, theCSETable, theFunction);
@ -598,7 +598,7 @@ public class Block {
Node child = n.getFirstChild();
while (child != null) {
localCSE(n, child, theCSETable, theFunction);
child = child.getNextSibling();
child = child.getNext();
}
theCSETable.clear();
//System.out.println("clear all at CALL");

Просмотреть файл

@ -141,7 +141,7 @@ public class Codegen extends Interpreter {
String name = onh.getJavaScriptClassName(null, true);
ScriptableObject obj = new NativeObject();
for (Node cursor = tree.getFirstChild(); cursor != null;
cursor = cursor.getNextSibling())
cursor = cursor.getNext())
{
if (cursor.getType() == TokenStream.FUNCTION) {
obj.put(cursor.getString(), obj,
@ -550,7 +550,7 @@ public class Codegen extends Interpreter {
visitStatement(node);
while (child != null) {
generateCodeFromNode(child, node, trueLabel, falseLabel);
child = child.getNextSibling();
child = child.getNext();
}
break;
@ -566,7 +566,7 @@ public class Codegen extends Interpreter {
visitStatement(node);
while (child != null) {
generateCodeFromNode(child, node, trueLabel, falseLabel);
child = child.getNextSibling();
child = child.getNext();
}
break;
@ -619,12 +619,12 @@ public class Codegen extends Interpreter {
break;
case TokenStream.COMMA: {
Node next = child.getNextSibling();
Node next = child.getNext();
while (next != null) {
generateCodeFromNode(child, node, -1, -1);
addByteCode(ByteCode.POP);
child = next;
next = next.getNextSibling();
next = next.getNext();
}
generateCodeFromNode(child, node, trueLabel, falseLabel);
break;
@ -665,7 +665,7 @@ public class Codegen extends Interpreter {
else {
while (child != null) {
generateCodeFromNode(child, node, trueLabel, falseLabel);
child = child.getNextSibling();
child = child.getNext();
}
if (node.getIntProp(Node.ISNUMBER_PROP, -1) != -1)
addByteCode(ByteCode.POP2);
@ -678,7 +678,7 @@ public class Codegen extends Interpreter {
visitStatement(node);
while (child != null) {
generateCodeFromNode(child, node, trueLabel, falseLabel);
child = child.getNextSibling();
child = child.getNext();
}
astore(scriptResultLocal);
break;
@ -722,7 +722,7 @@ public class Codegen extends Interpreter {
else
addByteCode(ByteCode.IFNE, falseTarget);
addByteCode(ByteCode.POP);
generateCodeFromNode(child.getNextSibling(), node, trueLabel, falseLabel);
generateCodeFromNode(child.getNext(), node, trueLabel, falseLabel);
markLabel(falseTarget);
}
else {
@ -747,7 +747,7 @@ public class Codegen extends Interpreter {
}
}
markLabel(interLabel);
child = child.getNextSibling();
child = child.getNext();
generateCodeFromNode(child, node, trueLabel, falseLabel);
if (!childIsBoolean(child)) {
addScriptRuntimeInvoke("toBoolean",
@ -761,7 +761,7 @@ public class Codegen extends Interpreter {
case TokenStream.ADD: {
generateCodeFromNode(child, node, trueLabel, falseLabel);
generateCodeFromNode(child.getNextSibling(),
generateCodeFromNode(child.getNext(),
node, trueLabel, falseLabel);
switch (node.getIntProp(Node.ISNUMBER_PROP, -1)) {
case Node.BOTH:
@ -871,7 +871,7 @@ public class Codegen extends Interpreter {
case TokenStream.GETELEM:
while (child != null) {
generateCodeFromNode(child, node, trueLabel, falseLabel);
child = child.getNextSibling();
child = child.getNext();
}
aload(variableObjectLocal);
if (node.getIntProp(Node.ISNUMBER_PROP, -1) != -1) {
@ -912,7 +912,7 @@ public class Codegen extends Interpreter {
case TokenStream.SETELEM:
while (child != null) {
generateCodeFromNode(child, node, trueLabel, falseLabel);
child = child.getNextSibling();
child = child.getNext();
}
aload(variableObjectLocal);
if (node.getIntProp(Node.ISNUMBER_PROP, -1) != -1) {
@ -932,7 +932,7 @@ public class Codegen extends Interpreter {
case TokenStream.DELPROP:
while (child != null) {
generateCodeFromNode(child, node, trueLabel, falseLabel);
child = child.getNextSibling();
child = child.getNext();
}
addScriptRuntimeInvoke("delete",
"(Ljava/lang/Object;Ljava/lang/Object;)",
@ -1663,7 +1663,7 @@ public class Codegen extends Interpreter {
else {
while (child != null) {
generateCodeFromNode(child, node, -1, -1);
child = child.getNextSibling();
child = child.getNext();
}
if (type == TokenStream.JSR)
addByteCode(ByteCode.JSR, targetLabel);
@ -1676,7 +1676,7 @@ public class Codegen extends Interpreter {
private void visitEnumInit(Node node, Node child) {
while (child != null) {
generateCodeFromNode(child, node, -1, -1);
child = child.getNextSibling();
child = child.getNext();
}
aload(variableObjectLocal);
addScriptRuntimeInvoke("initEnum",
@ -1690,7 +1690,7 @@ public class Codegen extends Interpreter {
private void visitEnumNext(Node node, Node child) {
while (child != null) {
generateCodeFromNode(child, node, -1, -1);
child = child.getNextSibling();
child = child.getNext();
}
Node init = (Node) node.getProp(Node.ENUM_PROP);
int local = init.getExistingIntProp(Node.LOCAL_PROP);
@ -1701,7 +1701,7 @@ public class Codegen extends Interpreter {
private void visitEnumDone(Node node, Node child) {
while (child != null) {
generateCodeFromNode(child, node, -1, -1);
child = child.getNextSibling();
child = child.getNext();
}
Node init = (Node) node.getProp(Node.ENUM_PROP);
int local = init.getExistingIntProp(Node.LOCAL_PROP);
@ -1711,7 +1711,7 @@ public class Codegen extends Interpreter {
private void visitEnterWith(Node node, Node child) {
while (child != null) {
generateCodeFromNode(child, node, -1, -1);
child = child.getNextSibling();
child = child.getNext();
}
aload(variableObjectLocal);
addScriptRuntimeInvoke("enterWith",
@ -1737,7 +1737,7 @@ public class Codegen extends Interpreter {
Node child = node.getFirstChild();
while (child != null) {
resetTargets(child);
child = child.getNextSibling();
child = child.getNext();
}
}
@ -1781,7 +1781,7 @@ public class Codegen extends Interpreter {
if (type == TokenStream.NEW)
addByteCode(ByteCode.ACONST_NULL);
else {
child = child.getNextSibling();
child = child.getNext();
generateCodeFromNode(child, node, -1, -1);
}
/*
@ -1791,7 +1791,7 @@ public class Codegen extends Interpreter {
in the aReg and the number is the dReg
Else pass the JS object in the aReg and 0.0 in the dReg.
*/
child = child.getNextSibling();
child = child.getNext();
while (child != null) {
boolean handled = false;
if ((child.getType() == TokenStream.GETVAR)
@ -1820,7 +1820,7 @@ public class Codegen extends Interpreter {
}
}
resetTargets(child);
child = child.getNextSibling();
child = child.getNext();
}
addByteCode(ByteCode.ALOAD_0);
@ -1876,14 +1876,14 @@ public class Codegen extends Interpreter {
if (callBase.getType() == TokenStream.GETPROP) {
Node callBaseChild = callBase.getFirstChild();
if (callBaseChild.getType() == TokenStream.NEWTEMP) {
Node callBaseID = callBaseChild.getNextSibling();
Node callBaseID = callBaseChild.getNext();
Node tempChild = callBaseChild.getFirstChild();
if (tempChild.getType() == TokenStream.GETBASE) {
String functionName = tempChild.getString();
if ((callBaseID != null) &&
(callBaseID.getType() == TokenStream.STRING)) {
if (functionName.equals(callBaseID.getString())) {
Node thisChild = callBase.getNextSibling();
Node thisChild = callBase.getNext();
if (thisChild.getType() == TokenStream.GETTHIS) {
Node useChild = thisChild.getFirstChild();
if (useChild.getType() == TokenStream.USETEMP) {
@ -1950,7 +1950,7 @@ public class Codegen extends Interpreter {
int argSkipCount = (type == TokenStream.NEW) ? 1 : 2;
while (child != null) {
childCount++;
child = child.getNextSibling();
child = child.getNext();
}
child = chelsea; // re-start the iterator from the first child,
@ -1958,7 +1958,7 @@ public class Codegen extends Interpreter {
int argIndex = -argSkipCount;
if (firstArgDone && (child != null)) {
child = child.getNextSibling();
child = child.getNext();
argIndex++;
aload(contextLocal);
addByteCode(ByteCode.SWAP);
@ -1978,7 +1978,7 @@ public class Codegen extends Interpreter {
isSimpleCall = true;
push(simpleCallName);
aload(variableObjectLocal);
child = child.getNextSibling().getNextSibling();
child = child.getNext().getNext();
argIndex = 0;
push(childCount - argSkipCount);
addByteCode(ByteCode.ANEWARRAY, "java/lang/Object");
@ -2034,7 +2034,7 @@ public class Codegen extends Interpreter {
// instead ?
constructArgArray(childCount - argSkipCount);
}
child = child.getNextSibling();
child = child.getNext();
}
String className;
@ -2145,7 +2145,7 @@ public class Codegen extends Interpreter {
visitStatement(node);
while (child != null) {
generateCodeFromNode(child, node, -1, -1);
child = child.getNextSibling();
child = child.getNext();
}
Node catchTarget = (Node)node.getProp(Node.TARGET_PROP);
@ -2275,7 +2275,7 @@ public class Codegen extends Interpreter {
visitStatement(node);
while (child != null) {
generateCodeFromNode(child, node, -1, -1);
child = child.getNextSibling();
child = child.getNext();
}
addByteCode(ByteCode.NEW,
@ -2293,7 +2293,7 @@ public class Codegen extends Interpreter {
if (child != null) {
do {
generateCodeFromNode(child, node, -1, -1);
child = child.getNextSibling();
child = child.getNext();
} while (child != null);
} else if (inFunction) {
pushUndefined();
@ -2310,7 +2310,7 @@ public class Codegen extends Interpreter {
visitStatement(node);
while (child != null) {
generateCodeFromNode(child, node, -1, -1);
child = child.getNextSibling();
child = child.getNext();
}
// save selector value
@ -2499,7 +2499,7 @@ public class Codegen extends Interpreter {
if (child.getType() == TokenStream.GETPROP) {
Node getPropChild = child.getFirstChild();
generateCodeFromNode(getPropChild, node, -1, -1);
generateCodeFromNode(getPropChild.getNextSibling(), node, -1, -1);
generateCodeFromNode(getPropChild.getNext(), node, -1, -1);
aload(variableObjectLocal);
addScriptRuntimeInvoke(routine,
"(Ljava/lang/Object;Ljava/lang/String;" +
@ -2511,7 +2511,7 @@ public class Codegen extends Interpreter {
routine += "Elem";
Node getPropChild = child.getFirstChild();
generateCodeFromNode(getPropChild, node, -1, -1);
generateCodeFromNode(getPropChild.getNextSibling(), node, -1, -1);
generateCodeFromNode(getPropChild.getNext(), node, -1, -1);
aload(variableObjectLocal);
addScriptRuntimeInvoke(routine,
"(Ljava/lang/Object;Ljava/lang/Object;" +
@ -2544,7 +2544,7 @@ public class Codegen extends Interpreter {
int childNumberFlag = node.getIntProp(Node.ISNUMBER_PROP, -1);
if (childNumberFlag != -1) {
generateCodeFromNode(child, node, -1, -1);
generateCodeFromNode(child.getNextSibling(), node, -1, -1);
generateCodeFromNode(child.getNext(), node, -1, -1);
addByteCode(opCode);
}
else {
@ -2556,8 +2556,8 @@ public class Codegen extends Interpreter {
generateCodeFromNode(child, node, -1, -1);
if (!isArithmeticNode(child))
addScriptRuntimeInvoke("toNumber", "(Ljava/lang/Object;)", "D");
generateCodeFromNode(child.getNextSibling(), node, -1, -1);
if (!isArithmeticNode(child.getNextSibling()))
generateCodeFromNode(child.getNext(), node, -1, -1);
if (!isArithmeticNode(child.getNext()))
addScriptRuntimeInvoke("toNumber", "(Ljava/lang/Object;)", "D");
addByteCode(opCode);
if (!childOfArithmetic) {
@ -2579,7 +2579,7 @@ public class Codegen extends Interpreter {
// toUint32 instead of toInt32.
if (type == TokenStream.URSH) {
addScriptRuntimeInvoke("toUint32", "(Ljava/lang/Object;)", "J");
generateCodeFromNode(child.getNextSibling(), node, -1, -1);
generateCodeFromNode(child.getNext(), node, -1, -1);
addScriptRuntimeInvoke("toInt32", "(Ljava/lang/Object;)", "I");
// Looks like we need to explicitly mask the shift to 5 bits -
// LUSHR takes 6 bits.
@ -2592,12 +2592,12 @@ public class Codegen extends Interpreter {
}
if (childNumberFlag == -1) {
addScriptRuntimeInvoke("toInt32", "(Ljava/lang/Object;)", "I");
generateCodeFromNode(child.getNextSibling(), node, -1, -1);
generateCodeFromNode(child.getNext(), node, -1, -1);
addScriptRuntimeInvoke("toInt32", "(Ljava/lang/Object;)", "I");
}
else {
addScriptRuntimeInvoke("toInt32", "(D)", "I");
generateCodeFromNode(child.getNextSibling(), node, -1, -1);
generateCodeFromNode(child.getNext(), node, -1, -1);
addScriptRuntimeInvoke("toInt32", "(D)", "I");
}
switch (type) {
@ -2668,14 +2668,14 @@ public class Codegen extends Interpreter {
int childNumberFlag = node.getIntProp(Node.ISNUMBER_PROP, -1);
if (childNumberFlag == Node.BOTH) {
generateCodeFromNode(child, node, -1, -1);
generateCodeFromNode(child.getNextSibling(), node, -1, -1);
generateCodeFromNode(child.getNext(), node, -1, -1);
genSimpleCompare(op, trueGOTO, falseGOTO);
}
else {
if (op == TokenStream.INSTANCEOF) {
aload(variableObjectLocal);
generateCodeFromNode(child, node, -1, -1);
generateCodeFromNode(child.getNextSibling(), node, -1, -1);
generateCodeFromNode(child.getNext(), node, -1, -1);
addScriptRuntimeInvoke("instanceOf",
"(Lorg/mozilla/javascript/Scriptable;"+
"Ljava/lang/Object;Ljava/lang/Object;)", "Z");
@ -2683,7 +2683,7 @@ public class Codegen extends Interpreter {
addByteCode(ByteCode.GOTO, falseGOTO);
} else if (op == TokenStream.IN) {
generateCodeFromNode(child, node, -1, -1);
generateCodeFromNode(child.getNextSibling(), node, -1, -1);
generateCodeFromNode(child.getNext(), node, -1, -1);
aload(variableObjectLocal);
addScriptRuntimeInvoke("in",
"(Ljava/lang/Object;Ljava/lang/Object;"+
@ -2691,7 +2691,7 @@ public class Codegen extends Interpreter {
addByteCode(ByteCode.IFNE, trueGOTO);
addByteCode(ByteCode.GOTO, falseGOTO);
} else {
Node rChild = child.getNextSibling();
Node rChild = child.getNext();
boolean leftIsDCP = nodeIsDirectCallParameter(child);
boolean rightIsDCP = nodeIsDirectCallParameter(rChild);
if (leftIsDCP || rightIsDCP) {
@ -2813,7 +2813,7 @@ public class Codegen extends Interpreter {
if (op == TokenStream.INSTANCEOF)
aload(variableObjectLocal);
generateCodeFromNode(child, node, -1, -1);
generateCodeFromNode(child.getNextSibling(), node, -1, -1);
generateCodeFromNode(child.getNext(), node, -1, -1);
int trueGOTO = acquireLabel();
int skip = acquireLabel();
if (op == TokenStream.INSTANCEOF) {
@ -2847,7 +2847,7 @@ public class Codegen extends Interpreter {
String routine = ((op == TokenStream.LT)
|| (op == TokenStream.GT)) ? "cmp_LTB" : "cmp_LEB";
generateCodeFromNode(child, node, -1, -1);
generateCodeFromNode(child.getNextSibling(), node, -1, -1);
generateCodeFromNode(child.getNext(), node, -1, -1);
if (childNumberFlag == -1) {
if (op == TokenStream.GE || op == TokenStream.GT) {
addByteCode(ByteCode.SWAP);
@ -2898,7 +2898,7 @@ public class Codegen extends Interpreter {
int falseGOTO)
{
int op = node.getOperation();
Node rightChild = child.getNextSibling();
Node rightChild = child.getNext();
boolean isStrict = op == TokenStream.SHEQ ||
op == TokenStream.SHNE;
if (trueGOTO == -1) {
@ -2936,7 +2936,7 @@ public class Codegen extends Interpreter {
}
generateCodeFromNode(child, node, -1, -1);
generateCodeFromNode(child.getNextSibling(), node, -1, -1);
generateCodeFromNode(child.getNext(), node, -1, -1);
// JavaScript 1.2 uses shallow equality for == and !=
String name;
@ -3008,7 +3008,7 @@ public class Codegen extends Interpreter {
return;
}
Node rChild = child.getNextSibling();
Node rChild = child.getNext();
if (nodeIsDirectCallParameter(child)) {
Node convertChild = getConvertToObjectOfNumberNode(rChild);
@ -3227,7 +3227,7 @@ public class Codegen extends Interpreter {
String name = node.getFirstChild().getString();
while (child != null) {
generateCodeFromNode(child, node, -1, -1);
child = child.getNextSibling();
child = child.getNext();
}
aload(variableObjectLocal);
push(name);
@ -3315,7 +3315,7 @@ public class Codegen extends Interpreter {
if (hasVarsInRegs && lVar == null)
lVar = OptLocalVariable.get(vars, child.getString());
if (lVar != null) {
generateCodeFromNode(child.getNextSibling(), node, -1, -1);
generateCodeFromNode(child.getNext(), node, -1, -1);
if (lVar.getJRegister() == -1) {
if (lVar.isNumber())
lVar.assignJRegister(getNewWordPairLocal());
@ -3378,7 +3378,7 @@ public class Codegen extends Interpreter {
if (s != null) {
while (child != null) {
generateCodeFromNode(child, node, -1, -1);
child = child.getNextSibling();
child = child.getNext();
}
aload(variableObjectLocal);
String runtimeMethod = null;
@ -3394,7 +3394,7 @@ public class Codegen extends Interpreter {
"Lorg/mozilla/javascript/Scriptable;");
return;
}
Node nameChild = child.getNextSibling();
Node nameChild = child.getNext();
/*
for 'this.foo' we call thisGet which can skip some
casting overhead.
@ -3438,7 +3438,7 @@ public class Codegen extends Interpreter {
if (s != null) {
while (child != null) {
generateCodeFromNode(child, node, -1, -1);
child = child.getNextSibling();
child = child.getNext();
}
aload(variableObjectLocal);
String runtimeMethod = null;
@ -3457,7 +3457,7 @@ public class Codegen extends Interpreter {
}
while (child != null) {
generateCodeFromNode(child, node, -1, -1);
child = child.getNextSibling();
child = child.getNext();
}
aload(variableObjectLocal);
addScriptRuntimeInvoke("setProp",
@ -3469,7 +3469,7 @@ public class Codegen extends Interpreter {
private void visitBind(Node node, int type, Node child) {
while (child != null) {
generateCodeFromNode(child, node, -1, -1);
child = child.getNextSibling();
child = child.getNext();
}
// Generate code for "ScriptRuntime.bind(varObj, "s")"
aload(variableObjectLocal); // get variable object
@ -3497,7 +3497,7 @@ public class Codegen extends Interpreter {
private void visitNewTemp(Node node, Node child) {
while (child != null) {
generateCodeFromNode(child, node, -1, -1);
child = child.getNextSibling();
child = child.getNext();
}
short local = getLocalFromNode(node);
addByteCode(ByteCode.DUP);
@ -3509,7 +3509,7 @@ public class Codegen extends Interpreter {
private void visitUseTemp(Node node, Node child) {
while (child != null) {
generateCodeFromNode(child, node, -1, -1);
child = child.getNextSibling();
child = child.getNext();
}
Node temp = (Node) node.getProp(Node.TEMP_PROP);
short local = getLocalFromNode(temp);
@ -3532,7 +3532,7 @@ public class Codegen extends Interpreter {
private void visitNewLocal(Node node, Node child) {
while (child != null) {
generateCodeFromNode(child, node, -1, -1);
child = child.getNextSibling();
child = child.getNext();
}
short local = getLocalFromNode(node);
addByteCode(ByteCode.DUP);
@ -3542,7 +3542,7 @@ public class Codegen extends Interpreter {
private void visitUseLocal(Node node, Node child) {
while (child != null) {
generateCodeFromNode(child, node, -1, -1);
child = child.getNextSibling();
child = child.getNext();
}
Node temp = (Node) node.getProp(Node.LOCAL_PROP);
short local = getLocalFromNode(temp);

Просмотреть файл

@ -80,9 +80,9 @@ class OptTransformer extends NodeTransformer {
// count the arguments
int argCount = 0;
Node arg = left.getNextSibling();
Node arg = left.getNext();
while (arg != null) {
arg = arg.getNextSibling();
arg = arg.getNext();
argCount++;
}
@ -91,7 +91,7 @@ class OptTransformer extends NodeTransformer {
markDirectCall(tree, node, argCount, left.getString());
} else {
if (left.getType() == TokenStream.GETPROP) {
Node name = left.getFirstChild().getNextSibling();
Node name = left.getFirstChild().getNext();
markDirectCall(tree, node, argCount, name.getString());
}
}
@ -157,7 +157,7 @@ class OptTransformer extends NodeTransformer {
* count for any call it encounters
*/
void collectContainedFunctions(Node node) {
for (Node tNode=node; tNode != null; tNode = tNode.getNextSibling()) {
for (Node tNode=node; tNode != null; tNode = tNode.getNext()) {
if (tNode.getType() == TokenStream.FUNCTION) {
FunctionNode fnNode = (FunctionNode)
tNode.getProp(Node.FUNCTION_PROP);

Просмотреть файл

@ -415,7 +415,7 @@ public class Optimizer {
}
case TokenStream.SETVAR : {
Node lChild = n.getFirstChild();
Node rChild = lChild.getNextSibling();
Node rChild = lChild.getNext();
int rType = rewriteForNumberVariables(rChild);
OptLocalVariable theVar
= (OptLocalVariable)(n.getProp(Node.VARIABLE_PROP));
@ -458,7 +458,7 @@ public class Optimizer {
}
case TokenStream.RELOP : {
Node lChild = n.getFirstChild();
Node rChild = lChild.getNextSibling();
Node rChild = lChild.getNext();
int lType = rewriteForNumberVariables(lChild);
int rType = rewriteForNumberVariables(rChild);
markDCPNumberContext(lChild);
@ -528,7 +528,7 @@ public class Optimizer {
case TokenStream.ADD : {
Node lChild = n.getFirstChild();
Node rChild = lChild.getNextSibling();
Node rChild = lChild.getNext();
int lType = rewriteForNumberVariables(lChild);
int rType = rewriteForNumberVariables(rChild);
@ -580,7 +580,7 @@ public class Optimizer {
case TokenStream.DIV :
case TokenStream.MOD : {
Node lChild = n.getFirstChild();
Node rChild = lChild.getNextSibling();
Node rChild = lChild.getNext();
int lType = rewriteForNumberVariables(lChild);
int rType = rewriteForNumberVariables(rChild);
markDCPNumberContext(lChild);
@ -632,8 +632,8 @@ public class Optimizer {
}
case TokenStream.SETELEM : {
Node arrayBase = n.getFirstChild();
Node arrayIndex = arrayBase.getNextSibling();
Node rValue = arrayIndex.getNextSibling();
Node arrayIndex = arrayBase.getNext();
Node rValue = arrayIndex.getNext();
int baseType = rewriteForNumberVariables(arrayBase);
if (baseType == TypeEvent.NumberType) {// can never happen ???
if (!convertParameter(arrayBase)) {
@ -664,7 +664,7 @@ public class Optimizer {
}
case TokenStream.GETELEM : {
Node arrayBase = n.getFirstChild();
Node arrayIndex = arrayBase.getNextSibling();
Node arrayIndex = arrayBase.getNext();
int baseType = rewriteForNumberVariables(arrayBase);
if (baseType == TypeEvent.NumberType) {// can never happen ???
if (!convertParameter(arrayBase)) {
@ -695,15 +695,15 @@ public class Optimizer {
*/
Node child = n.getFirstChild(); // the function
rewriteForNumberVariables(child);
child = child.getNextSibling(); // the 'this' object
child = child.getNext(); // the 'this' object
rewriteForNumberVariables(child);
child = child.getNextSibling(); // the first arg
child = child.getNext(); // the first arg
while (child != null) {
int type = rewriteForNumberVariables(child);
if (type == TypeEvent.NumberType) {
markDCPNumberContext(child);
}
child = child.getNextSibling();
child = child.getNext();
}
return TypeEvent.NoType;
}
@ -712,7 +712,7 @@ public class Optimizer {
default : {
Node child = n.getFirstChild();
while (child != null) {
Node nextChild = child.getNextSibling();
Node nextChild = child.getNext();
int type = rewriteForNumberVariables(child);
if (type == TypeEvent.NumberType) {
if (!convertParameter(child)) {
@ -743,7 +743,7 @@ public class Optimizer {
if(lChild == null){ // no children -- exit
return;
}else{
rChild = lChild.getNextSibling();
rChild = lChild.getNext();
if(rChild == null){
foldConstants(lChild, n); // one child -- recurse
@ -756,10 +756,10 @@ public class Optimizer {
foldConstants(rChild, n);
/* take care of all the other children */
Node child = rChild.getNextSibling();
Node child = rChild.getNext();
while (child != null) {
foldConstants(child, n);
child = child.getNextSibling();
child = child.getNext();
}
@ -768,7 +768,7 @@ public class Optimizer {
if(lChild == null){ // no children -- exit
return;
}else{
rChild = lChild.getNextSibling();
rChild = lChild.getNext();
if(rChild == null){
return;
@ -937,11 +937,11 @@ public class Optimizer {
if (definedBoolean == ALWAYS_FALSE_BOOLEAN) {
//if(false) -> replace by the else clause if it exists
Node next1 = rChild.getNextSibling();
Node next1 = rChild.getNext();
if (next1 != null) {
Node next2 = next1.getNextSibling();
Node next2 = next1.getNext();
if (next2 != null) {
Node next3 = next2.getNextSibling();
Node next3 = next2.getNext();
if (next3 != null) {
Node elseClause = next3.getFirstChild();
if (elseClause != null) {
@ -1004,7 +1004,7 @@ public class Optimizer {
Node child = n.getFirstChild();
while (child != null) {
replaceVariableAccess(child, theVariables);
child = child.getNextSibling();
child = child.getNext();
}
switch (n.getType()) {
case TokenStream.SETVAR : {

Просмотреть файл

@ -49,21 +49,23 @@ public class StmtNodeIterator {
private Node findFirstInterestingNode(Node theNode)
{
if (theNode == null) return null;
if ((theNode.getType() == TokenStream.BLOCK)
|| (theNode.getType() == TokenStream.LOOP)
|| (theNode.getType() == TokenStream.FUNCTION)) {
if (theNode.getFirst() == null) {
return findFirstInterestingNode(theNode.getNext());
}
else {
itsStack.push(theNode);
return findFirstInterestingNode(theNode.getFirst());
while (theNode != null) {
int type = theNode.getType();
if (type == TokenStream.BLOCK || type == TokenStream.LOOP
|| type == TokenStream.FUNCTION)
{
Node first = theNode.getFirstChild();
if (first == null) {
theNode = theNode.getNext();
} else {
itsStack.push(theNode);
theNode = first;
}
} else {
break;
}
}
else
return theNode;
return theNode;
}
public Node nextNode()
@ -75,14 +77,17 @@ public class StmtNodeIterator {
if (itsCurrentNode == null) {
while ( ! itsStack.isEmpty()) {
Node n = (Node)(itsStack.pop());
if (n.getNext() != null) {
return itsCurrentNode = findFirstInterestingNode(n.getNext());
Node next = n.getNext();
if (next != null) {
itsCurrentNode = findFirstInterestingNode(next);
return itsCurrentNode;
}
}
return null;
} else {
itsCurrentNode = findFirstInterestingNode(itsCurrentNode);
return itsCurrentNode;
}
else
return itsCurrentNode = findFirstInterestingNode(itsCurrentNode);
}
private ObjArray itsStack = new ObjArray();