@@ -2063,22 +2063,20 @@ void Parser::parseObjCSelector(SmallVector<Identifier, 4> &Names,
20632063}
20642064
20652065bool Parser::peekAvailabilityMacroName () {
2066- parseAllAvailabilityMacroArguments ();
2067- AvailabilityMacroMap Map = AvailabilityMacros;
2066+ AvailabilityMacroMap &Map = parseAllAvailabilityMacroArguments ();
20682067
20692068 StringRef MacroName = Tok.getText ();
2070- return Map.find (MacroName) != Map.end ();
2069+ return Map.Impl . find (MacroName) != Map. Impl .end ();
20712070}
20722071
20732072ParserStatus
20742073Parser::parseAvailabilityMacro (SmallVectorImpl<AvailabilitySpec *> &Specs) {
20752074 // Get the macros from the compiler arguments.
2076- parseAllAvailabilityMacroArguments ();
2077- AvailabilityMacroMap Map = AvailabilityMacros;
2075+ AvailabilityMacroMap &Map = parseAllAvailabilityMacroArguments ();
20782076
20792077 StringRef MacroName = Tok.getText ();
2080- auto NameMatch = Map.find (MacroName);
2081- if (NameMatch == Map.end ())
2078+ auto NameMatch = Map.Impl . find (MacroName);
2079+ if (NameMatch == Map.Impl . end ())
20822080 return makeParserSuccess (); // No match, it could be a standard platform.
20832081
20842082 consumeToken ();
@@ -2114,11 +2112,10 @@ Parser::parseAvailabilityMacro(SmallVectorImpl<AvailabilitySpec *> &Specs) {
21142112 return makeParserSuccess ();
21152113}
21162114
2117- void Parser::parseAllAvailabilityMacroArguments () {
2118-
2119- if (AvailabilityMacrosComputed) return ;
2120-
2121- AvailabilityMacroMap Map;
2115+ AvailabilityMacroMap &Parser::parseAllAvailabilityMacroArguments () {
2116+ AvailabilityMacroMap &Map = Context.getAvailabilityMacroCache ();
2117+ if (Map.WasParsed )
2118+ return Map;
21222119
21232120 SourceManager &SM = Context.SourceMgr ;
21242121 LangOptions LangOpts = Context.LangOpts ;
@@ -2156,9 +2153,9 @@ void Parser::parseAllAvailabilityMacroArguments() {
21562153 ParsedMacro.Specs = SpecsCopy;
21572154
21582155 // Find the macro info by name.
2159- AvailabilityMacroVersionMap MacroDefinition;
2160- auto NameMatch = Map.find (ParsedMacro.Name );
2161- if (NameMatch != Map.end ()) {
2156+ AvailabilityMacroMap::VersionEntry MacroDefinition;
2157+ auto NameMatch = Map.Impl . find (ParsedMacro.Name );
2158+ if (NameMatch != Map.Impl . end ()) {
21622159 MacroDefinition = NameMatch->getSecond ();
21632160 }
21642161
@@ -2171,12 +2168,12 @@ void Parser::parseAllAvailabilityMacroArguments() {
21712168 }
21722169
21732170 // Save back the macro spec.
2174- Map.erase (ParsedMacro.Name );
2175- Map.insert ({ParsedMacro.Name , MacroDefinition});
2171+ Map.Impl . erase (ParsedMacro.Name );
2172+ Map.Impl . insert ({ParsedMacro.Name , MacroDefinition});
21762173 }
21772174
2178- AvailabilityMacros = Map ;
2179- AvailabilityMacrosComputed = true ;
2175+ Map. WasParsed = true ;
2176+ return Map ;
21802177}
21812178
21822179ParserStatus Parser::parsePlatformVersionInList (StringRef AttrName,
0 commit comments