in src/main/java/org/apache/commons/jexl3/internal/Engine32.java [44:68]
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 && 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;
}