in src/main/java/org/apache/commons/jexl3/internal/Engine32.java [75:101]
static Object getVariable(final Interpreter ii, final Frame frame, final LexicalScope block, final ASTIdentifier identifier) {
final int symbol = identifier.getSymbol();
// if we have a symbol, we have a scope thus a frame
if ((ii.options.isLexicalShade() || identifier.isLexical()) && identifier.isShaded()) {
return ii.undefinedVariable(identifier, identifier.getName());
}
if (symbol >= 0) {
if (frame.has(symbol)) {
final Object value = frame.get(symbol);
if (value != Scope.UNDEFINED) {
return value;
}
}
}
final String name = identifier.getName();
final Object value = ii.context.get(name);
if (value == null && !ii.context.has(name)) {
final boolean ignore = (ii.isSafe()
&& (symbol >= 0
|| identifier.jjtGetParent() instanceof ASTAssignment))
|| (identifier.jjtGetParent() instanceof ASTReference);
if (!ignore) {
return ii.unsolvableVariable(identifier, name, true); // undefined
}
}
return value;
}