@@ -419,6 +419,10 @@ bool ArgsToFrontendOptionsConverter::convert(
419
419
}
420
420
421
421
Opts.DisableSandbox = Args.hasArg (OPT_disable_sandbox);
422
+
423
+ if (computeAvailabilityDomains ())
424
+ return true ;
425
+
422
426
return false ;
423
427
}
424
428
@@ -548,6 +552,39 @@ void ArgsToFrontendOptionsConverter::computeDumpScopeMapLocations() {
548
552
Diags.diagnose (SourceLoc (), diag::error_no_source_location_scope_map);
549
553
}
550
554
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
+
551
588
FrontendOptions::ActionType
552
589
ArgsToFrontendOptionsConverter::determineRequestedAction (const ArgList &args) {
553
590
using namespace options ;
0 commit comments