code: @Nonnull
    public PreprocessorContext setGlobalVariable(@Nonnull final String name, @Nonnull final Value value) {
      assertNotNull("Variable name is null", name);
  
      final String normalizedName = assertNotNull(PreprocessorUtils.normalizeVariableName(name));
  
      if (normalizedName.isEmpty()) {
        throw makeException("Name is empty", null);
      }
  
      assertNotNull("Value is null", value);
  
      if (mapVariableNameToSpecialVarProcessor.containsKey(normalizedName)) {
        mapVariableNameToSpecialVarProcessor.get(normalizedName).setVariable(normalizedName, value, this);
      } else {
        if (isVerbose()) {
          final String valueAsStr = value.toString();
          if (globalVarTable.containsKey(normalizedName)) {
            logForVerbose("Replacing global variable [" + normalizedName + '=' + valueAsStr + ']');
          } else {
            logForVerbose("Defining new global variable [" + normalizedName + '=' + valueAsStr + ']');
          }
        }
        globalVarTable.put(normalizedName, value);
      }
      return this;
    }
docs: Set a global variable value
  
  @param name  the variable name, it must not be null and will be normalized to the supported format
  @param value the variable value, it must not be null
  @return this preprocessor context