use of org.elasticsearch.painless.node.AStatement in project elasticsearch by elastic.
the class Walker method visitSource.
@Override
public ANode visitSource(SourceContext ctx) {
reserved.push(new MainMethodReserved());
List<SFunction> functions = new ArrayList<>();
for (FunctionContext function : ctx.function()) {
functions.add((SFunction) visit(function));
}
List<AStatement> statements = new ArrayList<>();
for (StatementContext statement : ctx.statement()) {
statements.add((AStatement) visit(statement));
}
return new SSource(scriptInterface, settings, sourceName, sourceText, debugStream, (MainMethodReserved) reserved.pop(), location(ctx), functions, globals, statements);
}
use of org.elasticsearch.painless.node.AStatement in project elasticsearch by elastic.
the class Walker method visitFunction.
@Override
public ANode visitFunction(FunctionContext ctx) {
reserved.push(new FunctionReserved());
String rtnType = ctx.decltype().getText();
String name = ctx.ID().getText();
List<String> paramTypes = new ArrayList<>();
List<String> paramNames = new ArrayList<>();
List<AStatement> statements = new ArrayList<>();
for (DecltypeContext decltype : ctx.parameters().decltype()) {
paramTypes.add(decltype.getText());
}
for (TerminalNode id : ctx.parameters().ID()) {
paramNames.add(id.getText());
}
for (StatementContext statement : ctx.block().statement()) {
statements.add((AStatement) visit(statement));
}
return new SFunction((FunctionReserved) reserved.pop(), location(ctx), rtnType, name, paramTypes, paramNames, statements, false);
}
use of org.elasticsearch.painless.node.AStatement in project elasticsearch by elastic.
the class Walker method visitLambda.
@Override
public ANode visitLambda(LambdaContext ctx) {
reserved.push(new FunctionReserved());
List<String> paramTypes = new ArrayList<>();
List<String> paramNames = new ArrayList<>();
List<AStatement> statements = new ArrayList<>();
for (LamtypeContext lamtype : ctx.lamtype()) {
if (lamtype.decltype() == null) {
paramTypes.add("def");
} else {
paramTypes.add(lamtype.decltype().getText());
}
paramNames.add(lamtype.ID().getText());
}
if (ctx.expression() != null) {
// single expression
AExpression expression = (AExpression) visit(ctx.expression());
statements.add(new SReturn(location(ctx), expression));
} else {
for (StatementContext statement : ctx.block().statement()) {
statements.add((AStatement) visit(statement));
}
}
String name = nextLambda();
return new ELambda(name, (FunctionReserved) reserved.pop(), location(ctx), paramTypes, paramNames, statements);
}
Aggregations