code: private Map<String, Macro> parsePredefinedUnitMacros(Map<String, Macro> configuredMacros) {
      if (!ctorInProgress || (unitMacros != null)) {
        throw new IllegalStateException("Preconditions for initial fill-out of predefinedUnitMacros were violated");
      }
  
      if (conf.getCompilationUnitSourceFiles().isEmpty() && (conf.getGlobalCompilationUnitSettings() == null)) {
        // configuration doesn't contain any settings for compilation units.
        // CxxPreprocessor will use fixedMacros only
        return Collections.emptyMap();
      }
  
      unitMacros = new MapChain<>();
      if (getMacros() != unitMacros) {
        throw new IllegalStateException("expected unitMacros as active macros map");
      }
  
      try {
        getMacros().setHighPrio(true);
        getMacros().putAll(Macro.UNIT_MACROS);
        getMacros().putAll(configuredMacros);
        parseForcedIncludes();
        final HashMap<String, Macro> result = new HashMap<>(unitMacros.getHighPrioMap());
        return result;
      } finally {
        getMacros().setHighPrio(false); // just for the symmetry
        unitMacros = null; // remove unitMacros, switch getMacros() to fixedMacros
      }
    }
docs: Create temporary unitMacros map; This map will be used as an active macros'
  storage while parsing of forced includes. After parsing was over extract
  resulting macros and destroy the unitMacros. fixedMacros will be set as
  active macros again.