@@ -385,36 +385,44 @@ static T extractMaskValue(T KeyPath) {
385
385
return KeyPath & Value;
386
386
}
387
387
388
- #define PARSE_OPTION_WITH_MARSHALLING (ARGS, DIAGS, SUCCESS, ID, FLAGS, PARAM, \
389
- SHOULD_PARSE, KEYPATH, DEFAULT_VALUE, \
390
- IMPLIED_CHECK, IMPLIED_VALUE, \
391
- NORMALIZER, MERGER, TABLE_INDEX) \
388
+ #define THIS_PREFIX (KEYPATH ) this ->KEYPATH
389
+ #define NO_PREFIX (KEYPATH ) KEYPATH
390
+
391
+ #define PARSE_OPTION_WITH_MARSHALLING ( \
392
+ ARGS, DIAGS, SUCCESS, PREFIX_KEYPATH, PREFIX_TYPE, NAME, ID, KIND, GROUP, \
393
+ ALIAS, ALIASARGS, FLAGS, PARAM, HELPTEXT, METAVAR, VALUES, SPELLING, \
394
+ SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, IMPLIED_CHECK, \
395
+ IMPLIED_VALUE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, TABLE_INDEX) \
392
396
if ((FLAGS)&options::CC1Option) { \
393
- KEYPATH = MERGER (KEYPATH, DEFAULT_VALUE); \
397
+ PREFIX_KEYPATH ( KEYPATH) = MERGER (PREFIX_KEYPATH ( KEYPATH) , DEFAULT_VALUE); \
394
398
if (IMPLIED_CHECK) \
395
- KEYPATH = MERGER (KEYPATH, IMPLIED_VALUE); \
399
+ PREFIX_KEYPATH (KEYPATH) = \
400
+ MERGER (PREFIX_KEYPATH (KEYPATH), IMPLIED_VALUE); \
396
401
if (SHOULD_PARSE) \
397
402
if (auto MaybeValue = \
398
403
NORMALIZER (OPT_##ID, TABLE_INDEX, ARGS, DIAGS, SUCCESS)) \
399
- KEYPATH = \
400
- MERGER (KEYPATH, static_cast <decltype (KEYPATH)>(*MaybeValue)); \
404
+ PREFIX_KEYPATH (KEYPATH) = MERGER ( \
405
+ PREFIX_KEYPATH (KEYPATH), \
406
+ static_cast <decltype (PREFIX_KEYPATH (KEYPATH))>(*MaybeValue)); \
401
407
}
402
408
403
409
// Capture the extracted value as a lambda argument to avoid potential issues
404
410
// with lifetime extension of the reference.
405
411
#define GENERATE_OPTION_WITH_MARSHALLING ( \
406
- ARGS, STRING_ALLOCATOR, KIND, FLAGS, SPELLING, ALWAYS_EMIT, KEYPATH, \
407
- DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, DENORMALIZER, EXTRACTOR, \
412
+ ARGS, STRING_ALLOCATOR, PREFIX_KEYPATH, PREFIX_TYPE, NAME, ID, KIND, \
413
+ GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, HELPTEXT, METAVAR, VALUES, \
414
+ SPELLING, SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \
415
+ IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, MERGER, EXTRACTOR, \
408
416
TABLE_INDEX) \
409
417
if ((FLAGS)&options::CC1Option) { \
410
418
[&](const auto &Extracted) { \
411
419
if (ALWAYS_EMIT || \
412
420
(Extracted != \
413
- static_cast <decltype (KEYPATH)>((IMPLIED_CHECK) ? (IMPLIED_VALUE) \
414
- : (DEFAULT_VALUE)))) \
421
+ static_cast <decltype (PREFIX_KEYPATH ( KEYPATH))>( \
422
+ (IMPLIED_CHECK) ? (IMPLIED_VALUE) : (DEFAULT_VALUE)))) \
415
423
DENORMALIZER (ARGS, SPELLING, STRING_ALLOCATOR, Option::KIND##Class, \
416
424
TABLE_INDEX, Extracted); \
417
- }(EXTRACTOR (KEYPATH)); \
425
+ }(EXTRACTOR (PREFIX_KEYPATH ( KEYPATH))); \
418
426
}
419
427
420
428
static const StringRef GetInputKindName (InputKind IK);
@@ -986,15 +994,8 @@ bool CompilerInvocation::ParseCodeGenArgs(CodeGenOptions &Opts, ArgList &Args,
986
994
// variable name and type.
987
995
const LangOptions *LangOpts = &LangOptsRef;
988
996
989
- #define CODEGEN_OPTION_WITH_MARSHALLING ( \
990
- PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
991
- HELPTEXT, METAVAR, VALUES, SPELLING, SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, \
992
- DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, \
993
- MERGER, EXTRACTOR, TABLE_INDEX) \
994
- PARSE_OPTION_WITH_MARSHALLING (Args, Diags, Success, ID, FLAGS, PARAM, \
995
- SHOULD_PARSE, KEYPATH, DEFAULT_VALUE, \
996
- IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, \
997
- MERGER, TABLE_INDEX)
997
+ #define CODEGEN_OPTION_WITH_MARSHALLING (...) \
998
+ PARSE_OPTION_WITH_MARSHALLING (Args, Diags, Success, NO_PREFIX, __VA_ARGS__)
998
999
#include " clang/Driver/Options.inc"
999
1000
#undef CODEGEN_OPTION_WITH_MARSHALLING
1000
1001
@@ -1456,15 +1457,8 @@ bool CompilerInvocation::parseSimpleArgs(const ArgList &Args,
1456
1457
DiagnosticsEngine &Diags) {
1457
1458
bool Success = true ;
1458
1459
1459
- #define OPTION_WITH_MARSHALLING ( \
1460
- PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
1461
- HELPTEXT, METAVAR, VALUES, SPELLING, SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, \
1462
- DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, \
1463
- MERGER, EXTRACTOR, TABLE_INDEX) \
1464
- PARSE_OPTION_WITH_MARSHALLING (Args, Diags, Success, ID, FLAGS, PARAM, \
1465
- SHOULD_PARSE, this ->KEYPATH , DEFAULT_VALUE, \
1466
- IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, \
1467
- MERGER, TABLE_INDEX)
1460
+ #define OPTION_WITH_MARSHALLING (...) \
1461
+ PARSE_OPTION_WITH_MARSHALLING (Args, Diags, Success, THIS_PREFIX, __VA_ARGS__)
1468
1462
#include " clang/Driver/Options.inc"
1469
1463
#undef OPTION_WITH_MARSHALLING
1470
1464
@@ -1486,15 +1480,8 @@ bool clang::ParseDiagnosticArgs(DiagnosticOptions &Opts, ArgList &Args,
1486
1480
DiagnosticOptions *DiagnosticOpts = &Opts;
1487
1481
bool Success = true ;
1488
1482
1489
- #define DIAG_OPTION_WITH_MARSHALLING ( \
1490
- PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
1491
- HELPTEXT, METAVAR, VALUES, SPELLING, SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, \
1492
- DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, \
1493
- MERGER, EXTRACTOR, TABLE_INDEX) \
1494
- PARSE_OPTION_WITH_MARSHALLING (Args, *Diags, Success, ID, FLAGS, PARAM, \
1495
- SHOULD_PARSE, KEYPATH, DEFAULT_VALUE, \
1496
- IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, \
1497
- MERGER, TABLE_INDEX)
1483
+ #define DIAG_OPTION_WITH_MARSHALLING (...) \
1484
+ PARSE_OPTION_WITH_MARSHALLING (Args, *Diags, Success, NO_PREFIX, __VA_ARGS__)
1498
1485
#include " clang/Driver/Options.inc"
1499
1486
#undef DIAG_OPTION_WITH_MARSHALLING
1500
1487
@@ -1847,14 +1834,8 @@ static void GenerateHeaderSearchArgs(const HeaderSearchOptions &Opts,
1847
1834
SmallVectorImpl<const char *> &Args,
1848
1835
CompilerInvocation::StringAllocator SA) {
1849
1836
const HeaderSearchOptions *HeaderSearchOpts = &Opts;
1850
- #define HEADER_SEARCH_OPTION_WITH_MARSHALLING ( \
1851
- PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
1852
- HELPTEXT, METAVAR, VALUES, SPELLING, SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, \
1853
- DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, \
1854
- MERGER, EXTRACTOR, TABLE_INDEX) \
1855
- GENERATE_OPTION_WITH_MARSHALLING ( \
1856
- Args, SA, KIND, FLAGS, SPELLING, ALWAYS_EMIT, KEYPATH, DEFAULT_VALUE, \
1857
- IMPLIED_CHECK, IMPLIED_VALUE, DENORMALIZER, EXTRACTOR, TABLE_INDEX)
1837
+ #define HEADER_SEARCH_OPTION_WITH_MARSHALLING (...) \
1838
+ GENERATE_OPTION_WITH_MARSHALLING (Args, SA, NO_PREFIX, __VA_ARGS__)
1858
1839
#include " clang/Driver/Options.inc"
1859
1840
#undef HEADER_SEARCH_OPTION_WITH_MARSHALLING
1860
1841
}
@@ -1865,15 +1846,8 @@ static void ParseHeaderSearchArgs(HeaderSearchOptions &Opts, ArgList &Args,
1865
1846
HeaderSearchOptions *HeaderSearchOpts = &Opts;
1866
1847
bool Success = true ;
1867
1848
1868
- #define HEADER_SEARCH_OPTION_WITH_MARSHALLING ( \
1869
- PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
1870
- HELPTEXT, METAVAR, VALUES, SPELLING, SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, \
1871
- DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, \
1872
- MERGER, EXTRACTOR, TABLE_INDEX) \
1873
- PARSE_OPTION_WITH_MARSHALLING (Args, Diags, Success, ID, FLAGS, PARAM, \
1874
- SHOULD_PARSE, KEYPATH, DEFAULT_VALUE, \
1875
- IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, \
1876
- MERGER, TABLE_INDEX)
1849
+ #define HEADER_SEARCH_OPTION_WITH_MARSHALLING (...) \
1850
+ PARSE_OPTION_WITH_MARSHALLING (Args, Diags, Success, NO_PREFIX, __VA_ARGS__)
1877
1851
#include " clang/Driver/Options.inc"
1878
1852
#undef HEADER_SEARCH_OPTION_WITH_MARSHALLING
1879
1853
@@ -2292,15 +2266,8 @@ void CompilerInvocation::ParseLangArgs(LangOptions &Opts, ArgList &Args,
2292
2266
LangOptions *LangOpts = &Opts;
2293
2267
bool Success = true ;
2294
2268
2295
- #define LANG_OPTION_WITH_MARSHALLING ( \
2296
- PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
2297
- HELPTEXT, METAVAR, VALUES, SPELLING, SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, \
2298
- DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, \
2299
- MERGER, EXTRACTOR, TABLE_INDEX) \
2300
- PARSE_OPTION_WITH_MARSHALLING (Args, Diags, Success, ID, FLAGS, PARAM, \
2301
- SHOULD_PARSE, KEYPATH, DEFAULT_VALUE, \
2302
- IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, \
2303
- MERGER, TABLE_INDEX)
2269
+ #define LANG_OPTION_WITH_MARSHALLING (...) \
2270
+ PARSE_OPTION_WITH_MARSHALLING (Args, Diags, Success, NO_PREFIX, __VA_ARGS__)
2304
2271
#include " clang/Driver/Options.inc"
2305
2272
#undef LANG_OPTION_WITH_MARSHALLING
2306
2273
@@ -3016,16 +2983,8 @@ std::string CompilerInvocation::getModuleHash() const {
3016
2983
3017
2984
void CompilerInvocation::generateCC1CommandLine (
3018
2985
SmallVectorImpl<const char *> &Args, StringAllocator SA) const {
3019
- #define OPTION_WITH_MARSHALLING ( \
3020
- PREFIX_TYPE, NAME, ID, KIND, GROUP, ALIAS, ALIASARGS, FLAGS, PARAM, \
3021
- HELPTEXT, METAVAR, VALUES, SPELLING, SHOULD_PARSE, ALWAYS_EMIT, KEYPATH, \
3022
- DEFAULT_VALUE, IMPLIED_CHECK, IMPLIED_VALUE, NORMALIZER, DENORMALIZER, \
3023
- MERGER, EXTRACTOR, TABLE_INDEX) \
3024
- GENERATE_OPTION_WITH_MARSHALLING (Args, SA, KIND, FLAGS, SPELLING, \
3025
- ALWAYS_EMIT, this ->KEYPATH , DEFAULT_VALUE, \
3026
- IMPLIED_CHECK, IMPLIED_VALUE, DENORMALIZER, \
3027
- EXTRACTOR, TABLE_INDEX)
3028
-
2986
+ #define OPTION_WITH_MARSHALLING (...) \
2987
+ GENERATE_OPTION_WITH_MARSHALLING (Args, SA, THIS_PREFIX, __VA_ARGS__)
3029
2988
#define DIAG_OPTION_WITH_MARSHALLING OPTION_WITH_MARSHALLING
3030
2989
#define LANG_OPTION_WITH_MARSHALLING OPTION_WITH_MARSHALLING
3031
2990
#define CODEGEN_OPTION_WITH_MARSHALLING OPTION_WITH_MARSHALLING
0 commit comments