@@ -419,6 +419,10 @@ bool ArgsToFrontendOptionsConverter::convert(
419419 }
420420
421421 Opts.DisableSandbox = Args.hasArg (OPT_disable_sandbox);
422+
423+ if (computeAvailabilityDomains ())
424+ return true ;
425+
422426 return false ;
423427}
424428
@@ -548,6 +552,39 @@ void ArgsToFrontendOptionsConverter::computeDumpScopeMapLocations() {
548552 Diags.diagnose (SourceLoc (), diag::error_no_source_location_scope_map);
549553}
550554
555+ bool ArgsToFrontendOptionsConverter::computeAvailabilityDomains () {
556+ using namespace options ;
557+
558+ bool hadError = false ;
559+ llvm::SmallSet<std::string, 4 > seenDomains;
560+
561+ for (const Arg *A :
562+ Args.filtered_reverse (OPT_define_enabled_availability_domain,
563+ OPT_define_disabled_availability_domain,
564+ OPT_define_dynamic_availability_domain)) {
565+ std::string domain = A->getValue ();
566+ if (!seenDomains.insert (domain).second )
567+ continue ;
568+
569+ if (!Lexer::isIdentifier (domain)) {
570+ Diags.diagnose (SourceLoc (), diag::error_invalid_arg_value,
571+ A->getAsString (Args), A->getValue ());
572+ hadError = true ;
573+ continue ;
574+ }
575+
576+ auto &option = A->getOption ();
577+ if (option.matches (OPT_define_enabled_availability_domain))
578+ Opts.AvailabilityDomains .EnabledDomains .emplace_back (domain);
579+ else if (option.matches (OPT_define_disabled_availability_domain))
580+ Opts.AvailabilityDomains .DisabledDomains .emplace_back (domain);
581+ else if (option.matches (OPT_define_dynamic_availability_domain))
582+ Opts.AvailabilityDomains .DynamicDomains .emplace_back (domain);
583+ }
584+
585+ return hadError;
586+ }
587+
551588FrontendOptions::ActionType
552589ArgsToFrontendOptionsConverter::determineRequestedAction (const ArgList &args) {
553590 using namespace options ;
0 commit comments