protected ASTJexlScript parse()

in src/main/java/org/apache/commons/jexl3/internal/Engine.java [987:1023]


    protected ASTJexlScript parse(final JexlInfo info, final JexlFeatures parsingf, final String src, final Scope scope) {
        final boolean cached = src.length() < cacheThreshold && cache != null;
        final JexlFeatures features = parsingf != null ? parsingf : DEFAULT_FEATURES;
       // if (features.getNameSpaces().isEmpty() && !functions.isEmpty()) {
       //     features = new JexlFeatures(features).nameSpaces(functions.keySet());
       // }
        final Source source = cached? new Source(features, src) : null;
        ASTJexlScript script;
        if (source != null) {
            script = cache.get(source);
            if (script != null) {
                final Scope f = script.getScope();
                if ((f == null && scope == null) || (f != null && f.equals(scope))) {
                    return script;
                }
            }
        }
        final JexlInfo ninfo = info == null && debug ? createInfo() : info;
        // if parser not in use...
        if (parsing.compareAndSet(false, true)) {
            try {
                // lets parse
                script = parser.parse(ninfo, features, src, scope);
            } finally {
                // no longer in use
                parsing.set(false);
            }
        } else {
            // ...otherwise parser was in use, create a new temporary one
            final Parser lparser = new Parser(new StringProvider(";"));
            script = lparser.parse(ninfo, features, src, scope);
        }
        if (source != null) {
            cache.put(source, script);
        }
        return script;
    }