protected Object visit()

in src/main/java/org/apache/commons/jexl3/internal/TemplateInterpreter.java [228:264]


    protected Object visit(final ASTFunctionNode node, final Object data) {
        final int argc = node.jjtGetNumChildren();
        if (argc == 2) {
            final ASTIdentifier functionNode = (ASTIdentifier) node.jjtGetChild(0);
            if ("jexl".equals(functionNode.getNamespace())) {
                final String functionName = functionNode.getName();
                final ASTArguments argNode = (ASTArguments) node.jjtGetChild(1);
                if ("print".equals(functionName)) {
                    // evaluate the arguments
                    final Object[] argv = visit(argNode, null);
                    if (argv != null && argv.length > 0 && argv[0] instanceof Number) {
                        print(((Number) argv[0]).intValue());
                        return null;
                    }
                }
                if ("include".equals(functionName)) {
                    // evaluate the arguments
                    Object[] argv = visit(argNode, null);
                    if (argv != null && argv.length > 0) {
                        if (argv[0] instanceof TemplateScript) {
                            final TemplateScript script = (TemplateScript) argv[0];
                            if (argv.length > 1) {
                                argv = Arrays.copyOfRange(argv, 1, argv.length);
                            } else {
                                argv = null;
                            }
                            include(script, argv);
                            return null;
                        }
                    }
                }
                // fail safe
                throw new JxltEngine.Exception(node.jexlInfo(), "no callable template function " + functionName, null);
            }
        }
        return super.visit(node, data);
    }