protected Object visit()

in src/main/java/org/apache/commons/jexl3/internal/Debugger.java [1020:1084]


    protected Object visit(final ASTJexlScript node, final Object arg) {
        if (outputPragmas) {
            writePragmas(builder, node.getPragmas());
        }
        Object data = arg;
        boolean named = false;
        // if lambda, produce parameters
        if (node instanceof ASTJexlLambda) {
            final ASTJexlLambda lambda = (ASTJexlLambda) node;
            final JexlNode parent = node.jjtGetParent();
            // use lambda syntax if not assigned
            final boolean expr = isLambdaExpr(lambda);
            named = node.jjtGetChild(0) instanceof ASTVar;
            final boolean assigned = parent instanceof ASTAssignment || named;
            if (assigned && !expr) {
                builder.append("function");
                if (named) {
                    final ASTVar avar = (ASTVar) node.jjtGetChild(0);
                    builder.append(' ');
                    builder.append(avar.getName());
                }
            }
            builder.append('(');
            final String[] params = lambda.getParameters();
            if (params != null) {
                final Scope scope = lambda.getScope();
                final LexicalScope lexicalScope = lambda.getLexicalScope();
                for (int p = 0; p < params.length; ++p) {
                    if (p > 0) {
                        builder.append(", ");
                    }
                    final String param = params[p];
                    final int symbol = scope.getSymbol(param);
                    if (lexicalScope.isConstant(symbol)) {
                        builder.append("const ");
                    } else if (scope.isLexical(symbol)) {
                        builder.append("let ");
                    }
                    builder.append(visitParameter(param, data));
                }
            }
            builder.append(')');
            if (assigned && !expr) {
                // block follows
                builder.append(' ');
            } else {
                builder.append(arrow);
                // add a space if lambda expr otherwise block follows
                if (expr) {
                    builder.append(' ');
                }
            }
        }
        // no parameters or done with them
        final int num = node.jjtGetNumChildren();
        if (num == 1 && !(node instanceof ASTJexlLambda)) {
            data = accept(node.jjtGetChild(0), data);
        } else {
            for (int i = named? 1 : 0; i < num; ++i) {
                final JexlNode child = node.jjtGetChild(i);
                acceptStatement(child, data);
            }
        }
        return data;
    }