Search in sources :

Example 1 with XmlDotQuery

use of org.mozilla.javascript.ast.XmlDotQuery in project HL4A by HL4A.

the class Parser method memberExprTail.

/**
 * Parse any number of "(expr)", "[expr]" ".expr", "..expr",
 * or ".(expr)" constructs trailing the passed expression.
 * @param pn the non-null parent node
 * @return the outermost (lexically last occurring) expression,
 * which will have the passed parent node as a descendant
 */
private AstNode memberExprTail(boolean allowCallSyntax, AstNode pn) throws IOException {
    // we no longer return null for errors, so this won't be null
    if (pn == null)
        codeBug();
    int pos = pn.getPosition();
    int lineno;
    tailLoop: for (; ; ) {
        int tt = peekToken();
        switch(tt) {
            case Token.DOT:
            case Token.DOTDOT:
                lineno = ts.lineno;
                pn = propertyAccess(tt, pn);
                pn.setLineno(lineno);
                break;
            case Token.DOTQUERY:
                consumeToken();
                int opPos = ts.tokenBeg, rp = -1;
                lineno = ts.lineno;
                mustHaveXML();
                setRequiresActivation();
                AstNode filter = expr();
                int end = getNodeEnd(filter);
                if (mustMatchToken(Token.RP, "msg.no.paren")) {
                    rp = ts.tokenBeg;
                    end = ts.tokenEnd;
                }
                XmlDotQuery q = new XmlDotQuery(pos, end - pos);
                q.setLeft(pn);
                q.setRight(filter);
                q.setOperatorPosition(opPos);
                q.setRp(rp - pos);
                q.setLineno(lineno);
                pn = q;
                break;
            case Token.LB:
                consumeToken();
                int lb = ts.tokenBeg, rb = -1;
                lineno = ts.lineno;
                AstNode expr = expr();
                end = getNodeEnd(expr);
                if (mustMatchToken(Token.RB, "msg.no.bracket.index")) {
                    rb = ts.tokenBeg;
                    end = ts.tokenEnd;
                }
                ElementGet g = new ElementGet(pos, end - pos);
                g.setTarget(pn);
                g.setElement(expr);
                g.setParens(lb, rb);
                g.setLineno(lineno);
                pn = g;
                break;
            case Token.LP:
                if (!allowCallSyntax) {
                    break tailLoop;
                }
                lineno = ts.lineno;
                consumeToken();
                checkCallRequiresActivation(pn);
                FunctionCall f = new FunctionCall(pos);
                f.setTarget(pn);
                // Assign the line number for the function call to where
                // the paren appeared, not where the name expression started.
                f.setLineno(lineno);
                f.setLp(ts.tokenBeg - pos);
                List<AstNode> args = argumentList();
                if (args != null && args.size() > ARGC_LIMIT)
                    reportError("msg.too.many.function.args");
                f.setArguments(args);
                f.setRp(ts.tokenBeg - pos);
                f.setLength(ts.tokenEnd - pos);
                pn = f;
                break;
            default:
                break tailLoop;
        }
    }
    return pn;
}
Also used : XmlDotQuery(org.mozilla.javascript.ast.XmlDotQuery) List(java.util.List) ArrayList(java.util.ArrayList) FunctionCall(org.mozilla.javascript.ast.FunctionCall) AstNode(org.mozilla.javascript.ast.AstNode) ElementGet(org.mozilla.javascript.ast.ElementGet)

Example 2 with XmlDotQuery

use of org.mozilla.javascript.ast.XmlDotQuery in project HL4A by HL4A.

the class IRFactory method transformInfix.

private Node transformInfix(InfixExpression node) {
    Node left = transform(node.getLeft());
    decompiler.addToken(node.getType());
    Node right = transform(node.getRight());
    if (node instanceof XmlDotQuery) {
        decompiler.addToken(Token.RP);
    }
    return createBinary(node.getType(), left, right);
}
Also used : XmlDotQuery(org.mozilla.javascript.ast.XmlDotQuery) ScriptNode(org.mozilla.javascript.ast.ScriptNode) AstNode(org.mozilla.javascript.ast.AstNode) LetNode(org.mozilla.javascript.ast.LetNode) FunctionNode(org.mozilla.javascript.ast.FunctionNode)

Aggregations

AstNode (org.mozilla.javascript.ast.AstNode)2 XmlDotQuery (org.mozilla.javascript.ast.XmlDotQuery)2 ArrayList (java.util.ArrayList)1 List (java.util.List)1 ElementGet (org.mozilla.javascript.ast.ElementGet)1 FunctionCall (org.mozilla.javascript.ast.FunctionCall)1 FunctionNode (org.mozilla.javascript.ast.FunctionNode)1 LetNode (org.mozilla.javascript.ast.LetNode)1 ScriptNode (org.mozilla.javascript.ast.ScriptNode)1