private void genSimpleCompare(int type, int trueGOTO, int falseGOTO) { if (trueGOTO == -1) throw Codegen.badTree(); switch (type) { case Token.LE : cfw.add(ByteCode.DCMPG); cfw.add(ByteCode.IFLE, trueGOTO); break; case Token.GE : cfw.add(ByteCode.DCMPL); cfw.add(ByteCode.IFGE, trueGOTO); break; case Token.LT : cfw.add(ByteCode.DCMPG); cfw.add(ByteCode.IFLT, trueGOTO); break; case Token.GT : cfw.add(ByteCode.DCMPL); cfw.add(ByteCode.IFGT, trueGOTO); break; default : throw Codegen.badTree(); } if (falseGOTO != -1) cfw.add(ByteCode.GOTO, falseGOTO); }
private void genSimpleCompare(int type, int trueGOTO, int falseGOTO) { if (trueGOTO == -1) throw Codegen.badTree(); switch (type) { case Token.LE : cfw.add(ByteCode.DCMPG); cfw.add(ByteCode.IFLE, trueGOTO); break; case Token.GE : cfw.add(ByteCode.DCMPL); cfw.add(ByteCode.IFGE, trueGOTO); break; case Token.LT : cfw.add(ByteCode.DCMPG); cfw.add(ByteCode.IFLT, trueGOTO); break; case Token.GT : cfw.add(ByteCode.DCMPL); cfw.add(ByteCode.IFGT, trueGOTO); break; default : throw Codegen.badTree(); } if (falseGOTO != -1) cfw.add(ByteCode.GOTO, falseGOTO); }
private void genSimpleCompare(int type, int trueGOTO, int falseGOTO) { if (trueGOTO == -1) throw Codegen.badTree(); switch (type) { case Token.LE : cfw.add(ByteCode.DCMPG); cfw.add(ByteCode.IFLE, trueGOTO); break; case Token.GE : cfw.add(ByteCode.DCMPL); cfw.add(ByteCode.IFGE, trueGOTO); break; case Token.LT : cfw.add(ByteCode.DCMPG); cfw.add(ByteCode.IFLT, trueGOTO); break; case Token.GT : cfw.add(ByteCode.DCMPL); cfw.add(ByteCode.IFGT, trueGOTO); break; default : throw Codegen.badTree(); } if (falseGOTO != -1) cfw.add(ByteCode.GOTO, falseGOTO); }
private void genSimpleCompare(int type, int trueGOTO, int falseGOTO) { if (trueGOTO == -1) throw Codegen.badTree(); switch (type) { case Token.LE : cfw.add(ByteCode.DCMPG); cfw.add(ByteCode.IFLE, trueGOTO); break; case Token.GE : cfw.add(ByteCode.DCMPL); cfw.add(ByteCode.IFGE, trueGOTO); break; case Token.LT : cfw.add(ByteCode.DCMPG); cfw.add(ByteCode.IFLT, trueGOTO); break; case Token.GT : cfw.add(ByteCode.DCMPL); cfw.add(ByteCode.IFGT, trueGOTO); break; default : throw Codegen.badTree(); } if (falseGOTO != -1) cfw.add(ByteCode.GOTO, falseGOTO); }
private void visitStandardNew(Node node, Node child) { if (node.getType() != Token.NEW) throw Codegen.badTree(); Node firstArgChild = child.getNext(); generateExpression(child, node); // stack: ... functionObj cfw.addALoad(contextLocal); cfw.addALoad(variableObjectLocal); // stack: ... functionObj cx scope generateCallArgArray(node, firstArgChild, false); addScriptRuntimeInvoke( "newObject", "(Ljava/lang/Object;" +"Lorg/mozilla/javascript/Context;" +"Lorg/mozilla/javascript/Scriptable;" +"[Ljava/lang/Object;" +")Lorg/mozilla/javascript/Scriptable;"); }
private void visitStandardNew(Node node, Node child) { if (node.getType() != Token.NEW) throw Codegen.badTree(); Node firstArgChild = child.getNext(); generateExpression(child, node); // stack: ... functionObj cfw.addALoad(contextLocal); cfw.addALoad(variableObjectLocal); // stack: ... functionObj cx scope generateCallArgArray(node, firstArgChild, false); addScriptRuntimeInvoke( "newObject", "(Ljava/lang/Object;" +"Lorg/mozilla/javascript/Context;" +"Lorg/mozilla/javascript/Scriptable;" +"[Ljava/lang/Object;" +")Lorg/mozilla/javascript/Scriptable;"); }
private void visitStandardNew(Node node, Node child) { if (node.getType() != Token.NEW) throw Codegen.badTree(); Node firstArgChild = child.getNext(); generateExpression(child, node); // stack: ... functionObj cfw.addALoad(contextLocal); cfw.addALoad(variableObjectLocal); // stack: ... functionObj cx scope generateCallArgArray(node, firstArgChild, false); addScriptRuntimeInvoke( "newObject", "(Ljava/lang/Object;" +"Lorg/mozilla/javascript/Context;" +"Lorg/mozilla/javascript/Scriptable;" +"[Ljava/lang/Object;" +")Lorg/mozilla/javascript/Scriptable;"); }
private void visitStandardNew(Node node, Node child) { if (node.getType() != Token.NEW) throw Codegen.badTree(); Node firstArgChild = child.getNext(); generateExpression(child, node); // stack: ... functionObj cfw.addALoad(contextLocal); cfw.addALoad(variableObjectLocal); // stack: ... functionObj cx scope generateCallArgArray(node, firstArgChild, false); addScriptRuntimeInvoke( "newObject", "(Ljava/lang/Object;" +"Lorg/mozilla/javascript/Context;" +"Lorg/mozilla/javascript/Scriptable;" +"[Ljava/lang/Object;" +")Lorg/mozilla/javascript/Scriptable;"); }
private void visitStandardNew(Node node, Node child) { if (node.getType() != Token.NEW) throw Codegen.badTree(); Node firstArgChild = child.getNext(); generateExpression(child, node); // stack: ... functionObj cfw.addALoad(contextLocal); cfw.addALoad(variableObjectLocal); // stack: ... functionObj cx scope generateCallArgArray(node, firstArgChild, false); addScriptRuntimeInvoke( "newObject", "(Ljava/lang/Object;" +"Lorg/mozilla/javascript/Context;" +"Lorg/mozilla/javascript/Scriptable;" +"[Ljava/lang/Object;" +")Lorg/mozilla/javascript/Scriptable;"); }
private void visitGOTO(Node.Jump node, int type, Node child) { Node target = node.target; if (type == Token.IFEQ || type == Token.IFNE) { if (child == null) throw Codegen.badTree(); int targetLabel = getTargetLabel(target); int fallThruLabel = cfw.acquireLabel(); if (type == Token.IFEQ) generateIfJump(child, node, targetLabel, fallThruLabel); else generateIfJump(child, node, fallThruLabel, targetLabel); cfw.markLabel(fallThruLabel); } else { if (type == Token.JSR) addGoto(target, ByteCode.JSR); else addGoto(target, ByteCode.GOTO); } }
private void visitStandardNew(Node node, Node child) { if (node.getType() != Token.NEW) throw Codegen.badTree(); Node firstArgChild = child.getNext(); generateExpression(child, node); // stack: ... functionObj cfw.addALoad(contextLocal); cfw.addALoad(variableObjectLocal); // stack: ... functionObj cx scope generateCallArgArray(node, firstArgChild, false); addScriptRuntimeInvoke( "newObject", "(Ljava/lang/Object;" +"Lorg/mozilla/javascript/Context;" +"Lorg/mozilla/javascript/Scriptable;" +"[Ljava/lang/Object;" +")Lorg/mozilla/javascript/Scriptable;"); }
private void visitGoto(Node.Jump node, int type, Node child) { Node target = node.target; if (type == Token.IFEQ || type == Token.IFNE) { if (child == null) throw Codegen.badTree(); int targetLabel = getTargetLabel(target); int fallThruLabel = cfw.acquireLabel(); if (type == Token.IFEQ) generateIfJump(child, node, targetLabel, fallThruLabel); else generateIfJump(child, node, fallThruLabel, targetLabel); cfw.markLabel(fallThruLabel); } else { if (type == Token.JSR) { if (isGenerator) { addGotoWithReturn(target); } else { addGoto(target, ByteCode.JSR); } } else { addGoto(target, ByteCode.GOTO); } } }
private void visitGoto(Jump node, int type, Node child) { Node target = node.target; if (type == Token.IFEQ || type == Token.IFNE) { if (child == null) throw Codegen.badTree(); int targetLabel = getTargetLabel(target); int fallThruLabel = cfw.acquireLabel(); if (type == Token.IFEQ) generateIfJump(child, node, targetLabel, fallThruLabel); else generateIfJump(child, node, fallThruLabel, targetLabel); cfw.markLabel(fallThruLabel); } else { if (type == Token.JSR) { if (isGenerator) { addGotoWithReturn(target); } else { // This assumes that JSR is only ever used for finally inlineFinally(target); } } else { addGoto(target, ByteCode.GOTO); } } }
private void visitGoto(Jump node, int type, Node child) { Node target = node.target; if (type == Token.IFEQ || type == Token.IFNE) { if (child == null) throw Codegen.badTree(); int targetLabel = getTargetLabel(target); int fallThruLabel = cfw.acquireLabel(); if (type == Token.IFEQ) generateIfJump(child, node, targetLabel, fallThruLabel); else generateIfJump(child, node, fallThruLabel, targetLabel); cfw.markLabel(fallThruLabel); } else { if (type == Token.JSR) { if (isGenerator) { addGotoWithReturn(target); } else { // This assumes that JSR is only ever used for finally inlineFinally(target); } } else { addGoto(target, ByteCode.GOTO); } } }
private void visitGoto(Jump node, int type, Node child) { Node target = node.target; if (type == Token.IFEQ || type == Token.IFNE) { if (child == null) throw Codegen.badTree(); int targetLabel = getTargetLabel(target); int fallThruLabel = cfw.acquireLabel(); if (type == Token.IFEQ) generateIfJump(child, node, targetLabel, fallThruLabel); else generateIfJump(child, node, fallThruLabel, targetLabel); cfw.markLabel(fallThruLabel); } else { if (type == Token.JSR) { if (isGenerator) { addGotoWithReturn(target); } else { // This assumes that JSR is only ever used for finally inlineFinally(target); } } else { addGoto(target, ByteCode.GOTO); } } }
private void visitSwitch(Node.Jump switchNode, Node child) { // See comments in IRFactory.createSwitch() for description // of SWITCH node generateExpression(child, switchNode); // save selector value short selector = getNewWordLocal(); cfw.addAStore(selector); for (Node.Jump caseNode = (Node.Jump)child.getNext(); caseNode != null; caseNode = (Node.Jump)caseNode.getNext()) { if (caseNode.getType() != Token.CASE) throw Codegen.badTree(); Node test = caseNode.getFirstChild(); generateExpression(test, caseNode); cfw.addALoad(selector); addScriptRuntimeInvoke("shallowEq", "(Ljava/lang/Object;" +"Ljava/lang/Object;" +")Z"); addGoto(caseNode.target, ByteCode.IFNE); } releaseWordLocal(selector); }
private void visitSwitch(Jump switchNode, Node child) { // See comments in IRFactory.createSwitch() for description // of SWITCH node generateExpression(child, switchNode); // save selector value short selector = getNewWordLocal(); cfw.addAStore(selector); for (Jump caseNode = (Jump)child.getNext(); caseNode != null; caseNode = (Jump)caseNode.getNext()) { if (caseNode.getType() != Token.CASE) throw Codegen.badTree(); Node test = caseNode.getFirstChild(); generateExpression(test, caseNode); cfw.addALoad(selector); addScriptRuntimeInvoke("shallowEq", "(Ljava/lang/Object;" +"Ljava/lang/Object;" +")Z"); addGoto(caseNode.target, ByteCode.IFNE); } releaseWordLocal(selector); }
private void visitSwitch(Jump switchNode, Node child) { // See comments in IRFactory.createSwitch() for description // of SWITCH node generateExpression(child, switchNode); // save selector value short selector = getNewWordLocal(); cfw.addAStore(selector); for (Jump caseNode = (Jump)child.getNext(); caseNode != null; caseNode = (Jump)caseNode.getNext()) { if (caseNode.getType() != Token.CASE) throw Codegen.badTree(); Node test = caseNode.getFirstChild(); generateExpression(test, caseNode); cfw.addALoad(selector); addScriptRuntimeInvoke("shallowEq", "(Ljava/lang/Object;" +"Ljava/lang/Object;" +")Z"); addGoto(caseNode.target, ByteCode.IFNE); } releaseWordLocal(selector); }
private void visitSwitch(Node.Jump switchNode, Node child) { // See comments in IRFactory.createSwitch() for description // of SWITCH node generateExpression(child, switchNode); // save selector value short selector = getNewWordLocal(); cfw.addAStore(selector); for (Node.Jump caseNode = (Node.Jump)child.getNext(); caseNode != null; caseNode = (Node.Jump)caseNode.getNext()) { if (caseNode.getType() != Token.CASE) throw Codegen.badTree(); Node test = caseNode.getFirstChild(); generateExpression(test, caseNode); cfw.addALoad(selector); addScriptRuntimeInvoke("shallowEq", "(Ljava/lang/Object;" +"Ljava/lang/Object;" +")Z"); addGoto(caseNode.target, ByteCode.IFNE); } releaseWordLocal(selector); }
private void visitSwitch(Jump switchNode, Node child) { // See comments in IRFactory.createSwitch() for description // of SWITCH node generateExpression(child, switchNode); // save selector value short selector = getNewWordLocal(); cfw.addAStore(selector); for (Jump caseNode = (Jump)child.getNext(); caseNode != null; caseNode = (Jump)caseNode.getNext()) { if (caseNode.getType() != Token.CASE) throw Codegen.badTree(); Node test = caseNode.getFirstChild(); generateExpression(test, caseNode); cfw.addALoad(selector); addScriptRuntimeInvoke("shallowEq", "(Ljava/lang/Object;" +"Ljava/lang/Object;" +")Z"); addGoto(caseNode.target, ByteCode.IFNE); } releaseWordLocal(selector); }