mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +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:
@@ -704,8 +704,9 @@ public:
|
||||
|
||||
// Preserve the behavior of previous implementations which formatted of
|
||||
// empty extensions compactly with '{}' on the same line.
|
||||
PrintOptions extensionPrintOptions = printOptions;
|
||||
extensionPrintOptions.PrintEmptyMembersOnSameLine = true;
|
||||
PrintOptions::OverrideScope extensionPrintingScope(printOptions);
|
||||
OVERRIDE_PRINT_OPTION(extensionPrintingScope,
|
||||
PrintEmptyMembersOnSameLine, true);
|
||||
|
||||
// Then walk the remaining ones, and see what we need to print.
|
||||
// FIXME: This will pick the availability attributes from the first sight
|
||||
@@ -744,7 +745,7 @@ public:
|
||||
!M->isImportedImplementationOnly(inherited->getParentModule())) {
|
||||
auto protoAndAvailability = ProtocolAndAvailability(
|
||||
inherited, availability, isUnchecked, otherAttrs);
|
||||
printSynthesizedExtension(out, extensionPrintOptions, M, nominal,
|
||||
printSynthesizedExtension(out, printOptions, M, nominal,
|
||||
protoAndAvailability);
|
||||
return TypeWalker::Action::SkipNode;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user