/** * Create a valid statement Node containing an assignment to name of the * given expression. */ private static Node createAssignStatementNode(String name, Node expression) { // Create 'name = result-expression;' statement. // EXPR (ASSIGN (NAME, EXPRESSION)) Node nameNode = IR.name(name); Node assign = IR.assign(nameNode, expression); return NodeUtil.newExpr(assign); }
/** Creates an ASSIGN node with type information matching its RHS. */ private Node createAssignNode(Node lhs, Node rhs) { Node assignNode = IR.assign(lhs, rhs); if (shouldAddTypesOnNewAstNodes) { assignNode.setJSType(rhs.getJSType()); } return assignNode; }
/** * Create a valid statement Node containing an assignment to name of the * given expression. */ private static Node createAssignStatementNode(String name, Node expression) { // Create 'name = result-expression;' statement. // EXPR (ASSIGN (NAME, EXPRESSION)) Node nameNode = IR.name(name); Node assign = IR.assign(nameNode, expression); return NodeUtil.newExpr(assign); }
/** Creates an assignment expression `lhs = rhs` */ Node createAssign(Node lhs, Node rhs) { Node result = IR.assign(lhs, rhs); if (isAddingTypes()) { result.setJSType(rhs.getJSType()); } return result; }
public Node buildConditionalStatement(int startLine, int endLine, String fileName) { Node indexLineNumber = buildLineNumberExpression(startLine, fileName, "conditionals"); Node lineNumberLiteral = IR.number(endLine); Node assignment = IR.assign(indexLineNumber, lineNumberLiteral); return IR.exprResult(assignment); }
public Node buildConditionalStatement(int startLine, int endLine, String fileName) { Node indexLineNumber = buildLineNumberExpression(startLine, fileName, "conditionals"); Node lineNumberLiteral = IR.number(endLine); Node assignment = IR.assign(indexLineNumber, lineNumberLiteral); return IR.exprResult(assignment); }
private static Node createStateUpdate() { return IR.exprResult(IR.assign(IR.name(GENERATOR_STATE), IR.number(generatorCaseCount))); }
private static Node createStateUpdate(int state) { return IR.exprResult(IR.assign(IR.name(GENERATOR_STATE), IR.number(state))); }
/** Returns an assign replacing the equivalent var or let declaration. */ private static Node varToAssign(Node var) { Node assign = IR.assign(var.getFirstChild().cloneNode(), var.getFirstChild().removeFirstChild()); return IR.exprResult(assign).useSourceInfoIfMissingFromForTree(var); } }
/** * @return An assign replacing the equivalent var or let declaration. */ private static Node varToAssign(Node var) { Node assign = IR.assign( var.getFirstChild().cloneNode(), var.getFirstChild().removeFirstChild()); return IR.exprResult(assign).useSourceInfoFromForTree(var); } }
/** * When define is called with an object literal, assign it to module.exports and * we're done. */ private void handleDefineObjectLiteral(NodeTraversal t, Node parent, Node onlyExport, Node script) { onlyExport.detach(); script.replaceChild(parent, IR.exprResult( IR.assign( NodeUtil.newQName(compiler, "module.exports"), onlyExport)) .useSourceInfoIfMissingFromForTree(onlyExport)); t.reportCodeChange(); }
private static Node createFinallyJumpBlock(Node finallyName, int finallyStartState) { int jumpPoint = generatorCaseCount++; Node setReturnState = IR.exprResult(IR.assign(finallyName.cloneTree(), IR.number(jumpPoint))); Node toFinally = createStateUpdate(finallyStartState); Node returnPoint = makeGeneratorMarker(jumpPoint); Node returnBlock = IR.block(setReturnState, toFinally, createSafeBreak()); returnBlock.addChildToBack(returnPoint); return returnBlock; }
/** * When define is called with an object literal, assign it to module.exports and * we're done. */ private void handleDefineObjectLiteral(Node parent, Node onlyExport, Node script) { onlyExport.getParent().removeChild(onlyExport); script.replaceChild(parent, IR.exprResult( IR.assign( NodeUtil.newQName(compiler, "module.exports"), onlyExport)) .useSourceInfoIfMissingFromForTree(onlyExport)); compiler.reportCodeChange(); }
@Override public void visit(NodeTraversal t, Node n, Node parent) { if (n.isReturn() && n.hasChildren()) { Node retVal = n.getFirstChild(); n.removeChild(retVal); parent.replaceChild(n, IR.exprResult( IR.assign( IR.getprop(IR.name("module"), IR.string("exports")), retVal)) .useSourceInfoFromForTree(n)); } } }
@Override public void visit(NodeTraversal t, Node n, Node parent) { if (n.isReturn() && n.hasChildren()) { Node retVal = n.getFirstChild(); n.removeChild(retVal); parent.replaceChild(n, IR.exprResult( IR.assign( IR.getprop(IR.name("module"), IR.string("exports")), retVal)) .useSourceInfoFromForTree(n)); } } }
/** Transforms `a += b` to `a = a + b`. */ private static Node normalizeAssignmentOp(Node n) { Node lhs = n.getFirstChild(); Node rhs = n.getLastChild(); Node newRhs = new Node(NodeUtil.getOpFromAssignmentOp(n), lhs.cloneTree(), rhs.cloneTree()).srcrefTree(n); return replace(n, IR.assign(lhs.cloneTree(), newRhs).srcrefTree(n)); }
private void visitExponentiationAssignmentOperator(Node operator) { Node lValue = operator.removeFirstChild(); Node callClone = mathPowCall.cloneTree(); callClone.addChildToBack(lValue.cloneTree()); // Base argument. callClone.addChildToBack(operator.removeFirstChild()); // Exponent argument. Node assignment = IR.assign(lValue, callClone).setJSType(numberType); assignment.useSourceInfoIfMissingFromForTree(operator); operator.replaceWith(assignment); compiler.reportChangeToEnclosingScope(assignment); }
/** Transforms `a += b` to `a = a + b`. */ private static Node normalizeAssignmentOp(Node n) { Node lhs = n.getFirstChild(); Node rhs = n.getLastChild(); Node newRhs = new Node(NodeUtil.getOpFromAssignmentOp(n), lhs.cloneTree(), rhs.cloneTree()).srcrefTree(n); return replace(n, IR.assign(lhs.cloneTree(), newRhs).srcrefTree(n)); }
/** * Hoists {@code var} statements into the closure containing the iterator * to preserve their state across * multiple calls to next(). */ private void visitVar() { Node name = currentStatement.removeFirstChild(); while (name != null) { if (name.hasChildren()) { enclosingBlock.addChildToBack(IR.exprResult(IR.assign(name, name.removeFirstChild()))); } hoistRoot.getParent().addChildAfter(IR.var(name.cloneTree()), hoistRoot); name = currentStatement.removeFirstChild(); } }
private void normalizeAssignShorthand(Node shorthand) { if (shorthand.getFirstChild().isName()) { Node name = shorthand.getFirstChild(); shorthand.setToken(NodeUtil.getOpFromAssignmentOp(shorthand)); Node parent = shorthand.getParent(); Node insertPoint = IR.empty(); parent.replaceChild(shorthand, insertPoint); Node assign = IR.assign(name.cloneNode().useSourceInfoFrom(name), shorthand) .useSourceInfoFrom(shorthand); assign.setJSDocInfo(shorthand.getJSDocInfo()); shorthand.setJSDocInfo(null); parent.replaceChild(insertPoint, assign); compiler.reportChangeToEnclosingScope(assign); } }