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;
}
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);
}
Aggregations