use of org.elasticsearch.painless.node.SBlock in project elasticsearch by elastic.
the class Walker method visitTry.
@Override
public ANode visitTry(TryContext ctx) {
SBlock block = (SBlock) visit(ctx.block());
List<SCatch> catches = new ArrayList<>();
for (TrapContext trap : ctx.trap()) {
catches.add((SCatch) visit(trap));
}
return new STry(location(ctx), block, catches);
}
use of org.elasticsearch.painless.node.SBlock in project elasticsearch by elastic.
the class Walker method visitFor.
@Override
public ANode visitFor(ForContext ctx) {
reserved.peek().setMaxLoopCounter(settings.getMaxLoopCounter());
ANode initializer = ctx.initializer() == null ? null : visit(ctx.initializer());
AExpression expression = ctx.expression() == null ? null : (AExpression) visit(ctx.expression());
AExpression afterthought = ctx.afterthought() == null ? null : (AExpression) visit(ctx.afterthought());
if (ctx.trailer() != null) {
SBlock block = (SBlock) visit(ctx.trailer());
return new SFor(location(ctx), initializer, expression, afterthought, block);
} else if (ctx.empty() != null) {
return new SFor(location(ctx), initializer, expression, afterthought, null);
} else {
throw location(ctx).createError(new IllegalStateException("Illegal tree structure."));
}
}
use of org.elasticsearch.painless.node.SBlock in project elasticsearch by elastic.
the class Walker method visitTrap.
@Override
public ANode visitTrap(TrapContext ctx) {
String type = ctx.TYPE().getText();
String name = ctx.ID().getText();
SBlock block = (SBlock) visit(ctx.block());
return new SCatch(location(ctx), type, name, block);
}
use of org.elasticsearch.painless.node.SBlock in project elasticsearch by elastic.
the class Walker method visitEach.
@Override
public ANode visitEach(EachContext ctx) {
reserved.peek().setMaxLoopCounter(settings.getMaxLoopCounter());
String type = ctx.decltype().getText();
String name = ctx.ID().getText();
AExpression expression = (AExpression) visit(ctx.expression());
SBlock block = (SBlock) visit(ctx.trailer());
return new SEach(location(ctx), type, name, expression, block);
}
use of org.elasticsearch.painless.node.SBlock in project elasticsearch by elastic.
the class Walker method visitIf.
@Override
public ANode visitIf(IfContext ctx) {
AExpression expression = (AExpression) visit(ctx.expression());
SBlock ifblock = (SBlock) visit(ctx.trailer(0));
if (ctx.trailer().size() > 1) {
SBlock elseblock = (SBlock) visit(ctx.trailer(1));
return new SIfElse(location(ctx), expression, ifblock, elseblock);
} else {
return new SIf(location(ctx), expression, ifblock);
}
}
Aggregations