@@ -3083,6 +3083,14 @@ static void suppressingFeatureIsolatedAny(PrintOptions &options,
30833083 action ();
30843084}
30853085
3086+ static void suppressingFeatureOptionalIsolatedParameters (
3087+ PrintOptions &options,
3088+ llvm::function_ref<void ()> action) {
3089+ llvm::SaveAndRestore<bool > scope (
3090+ options.SuppressOptionalIsolatedParams , true );
3091+ action ();
3092+ }
3093+
30863094static void suppressingFeatureAssociatedTypeImplements (PrintOptions &options,
30873095 llvm::function_ref<void ()> action) {
30883096 unsigned originalExcludeAttrCount = options.ExcludeAttrList .size ();
@@ -3660,8 +3668,11 @@ static void printParameterFlags(ASTPrinter &printer,
36603668 break ;
36613669 }
36623670
3663- if (flags.isIsolated ())
3664- printer.printKeyword (" isolated" , options, " " );
3671+ if (flags.isIsolated ()) {
3672+ if (!(param && param->getInterfaceType ()->isOptional () &&
3673+ options.SuppressOptionalIsolatedParams ))
3674+ printer.printKeyword (" isolated" , options, " " );
3675+ }
36653676
36663677 if (flags.hasResultDependsOn ())
36673678 printer.printKeyword (" _resultDependsOn" , options, " " );
@@ -3809,6 +3820,16 @@ void PrintAST::printOneParameter(const ParamDecl *param,
38093820 }
38103821
38113822 if (param->isDefaultArgument () && Options.PrintDefaultArgumentValue ) {
3823+ auto defaultArgKind = param->getDefaultArgumentKind ();
3824+ if (param->isIsolated () &&
3825+ defaultArgKind == DefaultArgumentKind::ExpressionMacro &&
3826+ Options.SuppressOptionalIsolatedParams ) {
3827+ // If we're suppressing optional isolated parameters, print
3828+ // 'nil' instead of '#isolation'
3829+ Printer << " = nil" ;
3830+ return ;
3831+ }
3832+
38123833 Printer.callPrintStructurePre (PrintStructureKind::DefaultArgumentClause);
38133834 SWIFT_DEFER {
38143835 Printer.printStructurePost (PrintStructureKind::DefaultArgumentClause);
0 commit comments