code: @Nullable
    public Value findVariableForName(@Nullable final String name, final boolean enforceUnknownVarAsNull) {
      if (name == null) {
        return null;
      }
  
      final String normalized = assertNotNull(PreprocessorUtils.normalizeVariableName(name));
  
      if (normalized.isEmpty()) {
        return null;
      }
  
      final SpecialVariableProcessor processor = mapVariableNameToSpecialVarProcessor.get(normalized);
  
      if (processor != null) {
        return processor.getVariable(normalized, this);
      }
  
      final Value val = getLocalVariable(normalized);
      if (val != null) {
        return val;
      }
  
      Value result = globalVarTable.get(normalized);
  
      if (result == null && !enforceUnknownVarAsNull && this.unknownVariableAsFalse) {
        logDebug("Unknown variable '" + name + "' is replaced by FALSE!");
        result = Value.BOOLEAN_FALSE;
      }
  
      return result;
    }
docs: Find value among local and global variables for a name. It finds in the order: special processors, local variables, global variables
  
  @param name                    the name for the needed variable, it will be normalized to the supported format
  @param enforceUnknownVarAsNull if true then state of the unknownVariableAsFalse flag in context will be ignored
  @return false if either the variable is not found or the name is null, otherwise the variable value