mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Prevent PrintOptions from being implicitly copied.
NFC *except* that I noticed a bug by inspection where we suppress `@escaping` when print enum element types. Since this affects recursive positions, we end up suppressing `@escaping` in places we shouldn't. This is unlikely to affect much real code, but should still obviously be fixed. The new design is a little sketchy in that we're using `const` to prevent direct use (and allow initialization of `const &` parameters) but still relying on modification of the actual object. Essentially, we are treating the `const`-ness of the reference as a promise to leave the original value in the object after computation rather than a guarantee of not modifying the object. This is okay --- a temporary bound to a `const` reference is still a non-`const` object formally and can be modified without invoking UB --- but makes me a little uncomfortable.
This commit is contained in:
@@ -4636,41 +4636,43 @@ int main(int argc, char *argv[]) {
|
||||
}
|
||||
}
|
||||
|
||||
PrintOptions PrintOpts;
|
||||
if (options::PrintInterface) {
|
||||
PrintOpts = PrintOptions::printModuleInterface(
|
||||
PrintOptions PrintOpts = [&] {
|
||||
if (options::PrintInterface) {
|
||||
return PrintOptions::printModuleInterface(
|
||||
InitInvok.getFrontendOptions().PrintFullConvention);
|
||||
} else if (options::PrintInterfaceForDoc) {
|
||||
PrintOpts = PrintOptions::printDocInterface();
|
||||
} else {
|
||||
PrintOpts = PrintOptions::printEverything();
|
||||
PrintOpts.FullyQualifiedTypes = options::FullyQualifiedTypes;
|
||||
PrintOpts.FullyQualifiedTypesIfAmbiguous =
|
||||
options::FullyQualifiedTypesIfAmbiguous;
|
||||
PrintOpts.SynthesizeSugarOnTypes = options::SynthesizeSugarOnTypes;
|
||||
PrintOpts.AbstractAccessors = options::AbstractAccessors;
|
||||
PrintOpts.FunctionDefinitions = options::FunctionDefinitions;
|
||||
PrintOpts.PrintExprs = options::Expressions;
|
||||
PrintOpts.PreferTypeRepr = options::PreferTypeRepr;
|
||||
PrintOpts.ExplodePatternBindingDecls = options::ExplodePatternBindingDecls;
|
||||
PrintOpts.PrintImplicitAttrs = options::PrintImplicitAttrs;
|
||||
PrintOpts.PrintAccess = options::PrintAccess;
|
||||
PrintOpts.AccessFilter = options::AccessFilter;
|
||||
PrintOpts.PrintDocumentationComments = !options::SkipDocumentationComments;
|
||||
PrintOpts.SkipPrivateSystemDecls = options::SkipPrivateSystemDecls;
|
||||
PrintOpts.SkipUnsafeCXXMethods = options::SkipUnsafeCXXMethods;
|
||||
PrintOpts.SkipUnavailable = options::SkipUnavailable;
|
||||
PrintOpts.SkipDeinit = options::SkipDeinit;
|
||||
PrintOpts.SkipImports = options::SkipImports;
|
||||
PrintOpts.SkipOverrides = options::SkipOverrides;
|
||||
if (options::SkipParameterNames) {
|
||||
PrintOpts.ArgAndParamPrinting
|
||||
= PrintOptions::ArgAndParamPrintingMode::ArgumentOnly;
|
||||
} else if (options::AlwaysArgumentLabels) {
|
||||
PrintOpts.ArgAndParamPrinting
|
||||
= PrintOptions::ArgAndParamPrintingMode::BothAlways;
|
||||
} else if (options::PrintInterfaceForDoc) {
|
||||
return PrintOptions::printDocInterface();
|
||||
} else {
|
||||
auto PrintOpts = PrintOptions::printEverything();
|
||||
PrintOpts.FullyQualifiedTypes = options::FullyQualifiedTypes;
|
||||
PrintOpts.FullyQualifiedTypesIfAmbiguous =
|
||||
options::FullyQualifiedTypesIfAmbiguous;
|
||||
PrintOpts.SynthesizeSugarOnTypes = options::SynthesizeSugarOnTypes;
|
||||
PrintOpts.AbstractAccessors = options::AbstractAccessors;
|
||||
PrintOpts.FunctionDefinitions = options::FunctionDefinitions;
|
||||
PrintOpts.PrintExprs = options::Expressions;
|
||||
PrintOpts.PreferTypeRepr = options::PreferTypeRepr;
|
||||
PrintOpts.ExplodePatternBindingDecls = options::ExplodePatternBindingDecls;
|
||||
PrintOpts.PrintImplicitAttrs = options::PrintImplicitAttrs;
|
||||
PrintOpts.PrintAccess = options::PrintAccess;
|
||||
PrintOpts.AccessFilter = options::AccessFilter;
|
||||
PrintOpts.PrintDocumentationComments = !options::SkipDocumentationComments;
|
||||
PrintOpts.SkipPrivateSystemDecls = options::SkipPrivateSystemDecls;
|
||||
PrintOpts.SkipUnsafeCXXMethods = options::SkipUnsafeCXXMethods;
|
||||
PrintOpts.SkipUnavailable = options::SkipUnavailable;
|
||||
PrintOpts.SkipDeinit = options::SkipDeinit;
|
||||
PrintOpts.SkipImports = options::SkipImports;
|
||||
PrintOpts.SkipOverrides = options::SkipOverrides;
|
||||
if (options::SkipParameterNames) {
|
||||
PrintOpts.ArgAndParamPrinting
|
||||
= PrintOptions::ArgAndParamPrintingMode::ArgumentOnly;
|
||||
} else if (options::AlwaysArgumentLabels) {
|
||||
PrintOpts.ArgAndParamPrinting
|
||||
= PrintOptions::ArgAndParamPrintingMode::BothAlways;
|
||||
}
|
||||
return PrintOpts;
|
||||
}
|
||||
}
|
||||
}();
|
||||
if (options::SkipUnderscoredSystemProtocols)
|
||||
PrintOpts.SkipUnderscoredSystemProtocols = true;
|
||||
if (options::PrintOriginalSourceText)
|
||||
|
||||
Reference in New Issue
Block a user