Base:
method
WriteLine
System.IO.TextWriter.WriteLine(System.String)
710 references to WriteLine
Microsoft.AspNetCore.Http.RequestDelegateGenerator (229)
RequestDelegateGenerator.Emitter.cs (54)
26codeWriter.WriteLine(location.GetInterceptsLocationAttributeSyntax()); 29codeWriter.WriteLine($"internal static RouteHandlerBuilder {endpoint.HttpMethod}{endpointWithLocations.Index}("); 31codeWriter.WriteLine("this IEndpointRouteBuilder endpoints,"); 35codeWriter.WriteLine(@"[StringSyntax(""Route"")] string pattern,"); 40codeWriter.WriteLine("IEnumerable<string> httpMethods,"); 42codeWriter.WriteLine("Delegate handler)"); 45codeWriter.WriteLine("MetadataPopulator populateMetadata = (methodInfo, options) =>"); 47codeWriter.WriteLine(@"Debug.Assert(options != null, ""RequestDelegateFactoryOptions not found."");"); 48codeWriter.WriteLine(@"Debug.Assert(options.EndpointBuilder != null, ""EndpointBuilder not found."");"); 49codeWriter.WriteLine($"options.EndpointBuilder.Metadata.Add(new {RequestDelegateGeneratorSources.GeneratedCodeConstructor});"); 51codeWriter.WriteLine("return new RequestDelegateMetadataResult { EndpointMetadata = options.EndpointBuilder.Metadata.AsReadOnly() };"); 53codeWriter.WriteLine("RequestDelegateFactoryFunc createRequestDelegate = (del, options, inferredMetadataResult) =>"); 55codeWriter.WriteLine(@"Debug.Assert(options != null, ""RequestDelegateFactoryOptions not found."");"); 56codeWriter.WriteLine(@"Debug.Assert(options.EndpointBuilder != null, ""EndpointBuilder not found."");"); 57codeWriter.WriteLine(@"Debug.Assert(options.EndpointBuilder.ApplicationServices != null, ""ApplicationServices not found."");"); 58codeWriter.WriteLine(@"Debug.Assert(options.EndpointBuilder.FilterFactories != null, ""FilterFactories not found."");"); 59codeWriter.WriteLine($"var handler = Cast(del, {endpoint.EmitHandlerDelegateType()} => throw null!);"); 60codeWriter.WriteLine("EndpointFilterDelegate? filteredInvocation = null;"); 61codeWriter.WriteLine("var serviceProvider = options.ServiceProvider ?? options.EndpointBuilder.ApplicationServices;"); 68codeWriter.WriteLine("var parameters = del.Method.GetParameters();"); 71codeWriter.WriteLine("if (options.EndpointBuilder.FilterFactories.Count > 0)"); 73codeWriter.WriteLine(endpoint.Response?.IsAwaitable == true 77codeWriter.WriteLine("if (ic.HttpContext.Response.StatusCode == 400)"); 79codeWriter.WriteLine(endpoint.Response?.IsAwaitable == true 85codeWriter.WriteLine("options.EndpointBuilder,"); 86codeWriter.WriteLine("handler.Method);"); 93codeWriter.WriteLine("RequestDelegate targetDelegate = filteredInvocation is null ? RequestHandler : RequestHandlerFiltered;"); 94codeWriter.WriteLine("var metadata = inferredMetadataResult?.EndpointMetadata ?? ReadOnlyCollection<object>.Empty;"); 95codeWriter.WriteLine("return new RequestDelegateResult(targetDelegate, metadata);"); 97codeWriter.WriteLine($"var castHandler = Cast(handler, {endpoint.EmitHandlerDelegateType()} => throw null!);"); 98codeWriter.WriteLine("return MapCore("); 100codeWriter.WriteLine("endpoints,"); 105codeWriter.WriteLine("pattern,"); 109codeWriter.WriteLine($"{SymbolDisplay.FormatLiteral("{*path:nonfile}", true)},"); 111codeWriter.WriteLine("handler,"); 112codeWriter.WriteLine($"{endpoint.EmitVerb()},"); 113codeWriter.WriteLine("populateMetadata,"); 114codeWriter.WriteLine("createRequestDelegate,"); 115codeWriter.WriteLine("castHandler.Method);"); 148codeWriter.WriteLine(RequestDelegateGeneratorSources.ResolveFromRouteOrQueryMethod); 153codeWriter.WriteLine(RequestDelegateGeneratorSources.TryResolveBodyAsyncMethod); 158codeWriter.WriteLine(RequestDelegateGeneratorSources.TryResolveFormAsyncMethod); 163codeWriter.WriteLine(RequestDelegateGeneratorSources.BindAsyncMethod); 168codeWriter.WriteLine(RequestDelegateGeneratorSources.ResolveJsonBodyOrServiceMethod); 173codeWriter.WriteLine(RequestDelegateGeneratorSources.TryParseExplicitMethod); 178codeWriter.WriteLine(RequestDelegateGeneratorSources.ExecuteAsyncExplicitMethod); 183codeWriter.WriteLine(RequestDelegateGeneratorSources.PopulateEndpointMetadataMethod); 188codeWriter.WriteLine(RequestDelegateGeneratorSources.PopulateEndpointParameterMetadataMethod); 207codeWriter.WriteLine(RequestDelegateGeneratorSources.AntiforgeryMetadataClass); 212codeWriter.WriteLine(RequestDelegateGeneratorSources.DisableCookieRedirectMetadataClass); 217codeWriter.WriteLine(RequestDelegateGeneratorSources.ContentTypeConstantsType); 222codeWriter.WriteLine(RequestDelegateGeneratorSources.PropertyAsParameterInfoClass); 227codeWriter.WriteLine(RequestDelegateGeneratorSources.ParameterBindingMetadataClass); 248codeWriter.WriteLine(endpoint);
RequestDelegateGeneratorSources.cs (1)
655codeWriter.WriteLine($$"""private static readonly string[] {{verb}}Verb = new[] { global::Microsoft.AspNetCore.Http.HttpMethods.{{verb}} };""");
src\Shared\RoslynUtils\CodeWriter.cs (4)
17this.WriteLine("{"); 24this.WriteLine("}"); 30this.WriteLine("},"); 36this.WriteLine("};");
StaticRouteHandlerModel\Emitters\EndpointEmitter.cs (4)
89codeWriter.WriteLine($@"GeneratedRouteBuilderExtensionsCore.ResolveFromRouteOrQuery(""{parameterName}"", options.RouteParameterNames);"); 116codeWriter.WriteLine("var serviceProviderIsService = serviceProvider?.GetService<IServiceProviderIsService>();"); 121codeWriter.WriteLine($"ResolveJsonBodyOrService<{parameter.Type.ToDisplayString(EmitterConstants.DisplayFormat)}>(logOrThrowExceptionHelper, {SymbolDisplay.FormatLiteral(shortParameterTypeName, true)}, {SymbolDisplay.FormatLiteral(parameter.SymbolName, true)}, jsonSerializerOptions, serviceProviderIsService);"); 130codeWriter.WriteLine("var logOrThrowExceptionHelper = new LogOrThrowExceptionHelper(serviceProvider, options);");
StaticRouteHandlerModel\Emitters\EndpointJsonPreparationEmitter.cs (6)
11codeWriter.WriteLine("var jsonOptions = serviceProvider?.GetService<IOptions<JsonOptions>>()?.Value ?? FallbackJsonOptions;"); 12codeWriter.WriteLine("var jsonSerializerOptions = jsonOptions.SerializerOptions;"); 13codeWriter.WriteLine("jsonSerializerOptions.MakeReadOnly();"); 14codeWriter.WriteLine($"var objectJsonTypeInfo = (JsonTypeInfo<object?>)jsonSerializerOptions.GetTypeInfo(typeof(object));"); 19codeWriter.WriteLine($"var responseJsonTypeInfo = (JsonTypeInfo<{responseType.ToDisplayString(NullableFlowState.MaybeNull, EmitterConstants.DisplayFormat)}>)jsonSerializerOptions.GetTypeInfo(typeof({typeName}));"); 41codeWriter.WriteLine($"var {parameter.SymbolName}_JsonTypeInfo = (JsonTypeInfo<{typeName}>)jsonSerializerOptions.GetTypeInfo(typeof({parameter.Type.ToDisplayString(EmitterConstants.DisplayFormatWithoutNullability)}));");
StaticRouteHandlerModel\Emitters\EndpointParameterEmitter.cs (95)
15=> codeWriter.WriteLine($"var {endpointParameter.EmitHandlerArgument()} = {endpointParameter.AssigningCode};"); 19codeWriter.WriteLine(endpointParameter.EmitParameterDiagnosticComment()); 27codeWriter.WriteLine($"var {endpointParameter.EmitAssigningCodeResult()} = {assigningCode};"); 35codeWriter.WriteLine($"var {endpointParameter.EmitTempArgument()} = {endpointParameter.EmitAssigningCodeResult()}.ToArray();"); 39codeWriter.WriteLine($"var {endpointParameter.EmitTempArgument()} = {endpointParameter.EmitAssigningCodeResult()}.Count > 0 ? (string?){endpointParameter.EmitAssigningCodeResult()} : null;"); 43codeWriter.WriteLine($"var {endpointParameter.EmitTempArgument()} = {endpointParameter.EmitAssigningCodeResult()};"); 47codeWriter.WriteLine($"if (StringValues.IsNullOrEmpty({endpointParameter.EmitAssigningCodeResult()}))"); 49codeWriter.WriteLine("wasParamCheckFailure = true;"); 50codeWriter.WriteLine($@"logOrThrowExceptionHelper.RequiredParameterNotProvided({SymbolDisplay.FormatLiteral(endpointParameter.Type.ToDisplayString(SymbolDisplayFormat.CSharpShortErrorMessageFormat), true)}, {SymbolDisplay.FormatLiteral(endpointParameter.SymbolName, true)}, {SymbolDisplay.FormatLiteral(endpointParameter.ToMessageString(), true)});"); 52codeWriter.WriteLine($"var {endpointParameter.EmitTempArgument()} = (string?){endpointParameter.EmitAssigningCodeResult()};"); 60codeWriter.WriteLine(endpointParameter.EmitParameterDiagnosticComment()); 70codeWriter.WriteLine($"var {resolveFormResult} = {assigningCode};"); 73codeWriter.WriteLine($"if (!{resolveFormResult}.Item1)"); 75codeWriter.WriteLine("return;"); 80codeWriter.WriteLine($"var {endpointParameter.EmitAssigningCodeResult()} = {endpointParameter.AssigningCode};"); 83codeWriter.WriteLine($"if ({endpointParameter.EmitAssigningCodeResult()} == null)"); 85codeWriter.WriteLine("wasParamCheckFailure = true;"); 86codeWriter.WriteLine($@"logOrThrowExceptionHelper.RequiredParameterNotProvided({SymbolDisplay.FormatLiteral(endpointParameter.Type.ToDisplayString(SymbolDisplayFormat.CSharpShortErrorMessageFormat), true)}, {SymbolDisplay.FormatLiteral(endpointParameter.SymbolName, true)}, {SymbolDisplay.FormatLiteral(endpointParameter.ToMessageString(), true)});"); 89codeWriter.WriteLine($"var {endpointParameter.EmitTempArgument()} = {endpointParameter.EmitAssigningCodeResult()};"); 101codeWriter.WriteLine($"{endpointParameter.Type.ToDisplayString(EmitterConstants.DisplayFormat)} {endpointParameter.EmitHandlerArgument()} = {createArray};"); 103codeWriter.WriteLine($"for (var i = 0; i < {endpointParameter.EmitTempArgument()}.Length; i++)"); 105codeWriter.WriteLine($"var element = {endpointParameter.EmitTempArgument()}[i];"); 108codeWriter.WriteLine($$"""if (!{{endpointParameter.PreferredTryParseInvocation("element", "parsed_element")}})"""); 110codeWriter.WriteLine("if (!string.IsNullOrEmpty(element))"); 120codeWriter.WriteLine($"{endpointParameter.EmitHandlerArgument()}[i] = string.IsNullOrEmpty(element) ? null! : parsed_element!;"); 124codeWriter.WriteLine($"{endpointParameter.EmitHandlerArgument()}[i] = parsed_element!;"); 131codeWriter.WriteLine($"{endpointParameter.Type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)} {endpointParameter.EmitHandlerArgument()} = {endpointParameter.EmitTempArgument()}!;"); 144codeWriter.WriteLine($"""{endpointParameter.Type.ToDisplayString(EmitterConstants.DisplayFormat)} {output_argument} = default;"""); 145codeWriter.WriteLine($"""if ({endpointParameter.PreferredTryParseInvocation(temp_argument, temp_argument_parsed_non_nullable)})"""); 147codeWriter.WriteLine($"""{output_argument} = {temp_argument_parsed_non_nullable};"""); 149codeWriter.WriteLine($"""else if (string.IsNullOrEmpty({temp_argument}))"""); 151codeWriter.WriteLine($"""{output_argument} = {endpointParameter.DefaultValue};"""); 153codeWriter.WriteLine("else"); 155codeWriter.WriteLine("wasParamCheckFailure = true;"); 161codeWriter.WriteLine($$"""if (!{{endpointParameter.PreferredTryParseInvocation(temp_argument, output_argument)}})"""); 163codeWriter.WriteLine($"if (!string.IsNullOrEmpty({temp_argument}))"); 170codeWriter.WriteLine($"{endpointParameter.Type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)} {endpointParameter.EmitHandlerArgument()} = {endpointParameter.EmitParsedTempArgument()}!;"); 175codeWriter.WriteLine($"{endpointParameter.Type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)} {endpointParameter.EmitHandlerArgument()} = {endpointParameter.EmitTempArgument()}!;"); 182writer.WriteLine("wasParamCheckFailure = true;"); 183writer.WriteLine($@"logOrThrowExceptionHelper.RequiredParameterNotProvided({SymbolDisplay.FormatLiteral(parameter.Type.ToDisplayString(SymbolDisplayFormat.CSharpShortErrorMessageFormat), true)}, {SymbolDisplay.FormatLiteral(parameter.SymbolName, true)}, {SymbolDisplay.FormatLiteral(parameter.ToMessageString(), true)});"); 187writer.WriteLine($@"logOrThrowExceptionHelper.ParameterBindingFailed({SymbolDisplay.FormatLiteral(parameter.Type.ToDisplayString(SymbolDisplayFormat.CSharpShortErrorMessageFormat), true)}, {SymbolDisplay.FormatLiteral(parameter.SymbolName, true)}, {inputArgument});"); 188writer.WriteLine("wasParamCheckFailure = true;"); 195codeWriter.WriteLine(endpointParameter.EmitParameterDiagnosticComment()); 199codeWriter.WriteLine($"""if (options?.RouteParameterNames?.Contains("{endpointParameter.LookupName}", StringComparer.OrdinalIgnoreCase) != true)"""); 201codeWriter.WriteLine($$"""throw new InvalidOperationException($"'{{endpointParameter.LookupName}}' is not a route parameter.");"""); 205codeWriter.WriteLine($"var {endpointParameter.EmitAssigningCodeResult()} = {assigningCode};"); 209codeWriter.WriteLine($"if ({endpointParameter.EmitAssigningCodeResult()} == null)"); 211codeWriter.WriteLine("wasParamCheckFailure = true;"); 212codeWriter.WriteLine($@"logOrThrowExceptionHelper.RequiredParameterNotProvided({SymbolDisplay.FormatLiteral(endpointParameter.Type.ToDisplayString(SymbolDisplayFormat.CSharpShortErrorMessageFormat), true)}, {SymbolDisplay.FormatLiteral(endpointParameter.SymbolName, true)}, {SymbolDisplay.FormatLiteral(endpointParameter.ToMessageString(), true)});"); 216codeWriter.WriteLine($"var {endpointParameter.EmitTempArgument()} = (string?){endpointParameter.EmitAssigningCodeResult()};"); 222codeWriter.WriteLine(endpointParameter.EmitParameterDiagnosticComment()); 225codeWriter.WriteLine($"var {endpointParameter.EmitAssigningCodeResult()} = {parameterName}_RouteOrQueryResolver(httpContext);"); 229codeWriter.WriteLine($"var {endpointParameter.EmitTempArgument()} = {endpointParameter.EmitAssigningCodeResult()}.ToArray();"); 236codeWriter.WriteLine($"var {endpointParameter.EmitTempArgument()} = {endpointParameter.EmitAssigningCodeResult()}.Count > 0 ? (string?){endpointParameter.EmitAssigningCodeResult()} : {fallback};"); 240codeWriter.WriteLine($"if ({endpointParameter.EmitAssigningCodeResult()} is StringValues {{ Count: 0 }})"); 242codeWriter.WriteLine("wasParamCheckFailure = true;"); 243codeWriter.WriteLine($@"logOrThrowExceptionHelper.RequiredParameterNotProvided({SymbolDisplay.FormatLiteral(endpointParameter.Type.ToDisplayString(SymbolDisplayFormat.CSharpShortErrorMessageFormat), true)}, {SymbolDisplay.FormatLiteral(endpointParameter.SymbolName, true)}, {SymbolDisplay.FormatLiteral(endpointParameter.ToMessageString(), true)});"); 245codeWriter.WriteLine($"var {endpointParameter.EmitTempArgument()} = (string?){endpointParameter.EmitAssigningCodeResult()};"); 254codeWriter.WriteLine(endpointParameter.EmitParameterDiagnosticComment()); 261codeWriter.WriteLine($"var {resolveBodyResult} = {assigningCode};"); 262codeWriter.WriteLine($"var {endpointParameter.EmitHandlerArgument()} = {resolveBodyResult}.Item2;"); 267codeWriter.WriteLine($"if (!{resolveBodyResult}.Item1)"); 269codeWriter.WriteLine("return;"); 276codeWriter.WriteLine(endpointParameter.EmitParameterDiagnosticComment()); 283codeWriter.WriteLine($"var {resolveJsonBodyOrServiceResult} = {assigningCode};"); 287codeWriter.WriteLine($"if (!{resolveJsonBodyOrServiceResult}.Item1)"); 289codeWriter.WriteLine("return;"); 295codeWriter.WriteLine(!endpointParameter.IsOptional 304codeWriter.WriteLine(endpointParameter.EmitParameterDiagnosticComment()); 307codeWriter.WriteLine($"{endpointParameter.Type.ToDisplayString(EmitterConstants.DisplayFormat)} {endpointParameter.EmitHandlerArgument()} = null!;"); 308codeWriter.WriteLine("if (options.DisableInferBodyFromParameters)"); 310codeWriter.WriteLine($"""var {endpointParameter.EmitAssigningCodeResult()} = httpContext.Request.Query["{endpointParameter.LookupName}"];"""); 311codeWriter.WriteLine($"""{endpointParameter.EmitHandlerArgument()} = {endpointParameter.EmitAssigningCodeResult()}!;"""); 313codeWriter.WriteLine("else"); 322codeWriter.WriteLine($"var {endpointParameter.SymbolName}_JsonTypeInfo = (JsonTypeInfo<{endpointParameter.Type.ToDisplayString(EmitterConstants.DisplayFormat)}>)jsonOptions.SerializerOptions.GetTypeInfo(typeof({endpointParameter.Type.ToDisplayString(EmitterConstants.DisplayFormatWithoutNullability)}));"); 323codeWriter.WriteLine($"var {resolveBodyResult} = {assigningCode};"); 324codeWriter.WriteLine($"{endpointParameter.EmitHandlerArgument()} = {resolveBodyResult}.Item2!;"); 329codeWriter.WriteLine($"if (!{resolveBodyResult}.Item1)"); 331codeWriter.WriteLine("return;"); 356codeWriter.WriteLine($"var {endpointParameter.EmitHandlerArgument()} = await BindAsync<{unwrappedTypeString}>(httpContext, {resolveParameterInfo});"); 359codeWriter.WriteLine($"var {endpointParameter.EmitHandlerArgument()} = await {bindMethodReceiverTypeString}.BindAsync(httpContext, {resolveParameterInfo});"); 362codeWriter.WriteLine($"var {endpointParameter.EmitHandlerArgument()} = await {bindMethodReceiverTypeString}.BindAsync(httpContext);"); 375codeWriter.WriteLine(endpointParameter.Type.IsValueType && endpointParameter.GetBindAsyncReturnType().IsNullableOfT() 379codeWriter.WriteLine($@"logOrThrowExceptionHelper.RequiredParameterNotProvided({SymbolDisplay.FormatLiteral(endpointParameter.Type.ToDisplayString(SymbolDisplayFormat.CSharpShortErrorMessageFormat), true)}, {SymbolDisplay.FormatLiteral(endpointParameter.SymbolName, true)}, {SymbolDisplay.FormatLiteral(endpointParameter.ToMessageString(), true)});"); 380codeWriter.WriteLine("wasParamCheckFailure = true;"); 381codeWriter.WriteLine($"{endpointParameter.EmitHandlerArgument()} = default!;"); 388codeWriter.WriteLine(endpointParameter.EmitParameterDiagnosticComment()); 397codeWriter.WriteLine($"var {endpointParameter.EmitHandlerArgument()} = {assigningCode};"); 402codeWriter.WriteLine(endpointParameter.EmitParameterDiagnosticComment()); 404codeWriter.WriteLine("if (httpContext.RequestServices.GetService<IServiceProviderIsService>() is not IServiceProviderIsKeyedService)"); 406codeWriter.WriteLine(@"throw new InvalidOperationException($""Unable to resolve service referenced by {nameof(FromKeyedServicesAttribute)}. The service provider doesn't support keyed services."");"); 412codeWriter.WriteLine($"var {endpointParameter.EmitHandlerArgument()} = {assigningCode};"); 417codeWriter.WriteLine(endpointParameter.EmitParameterDiagnosticComment()); 418codeWriter.WriteLine(endpointParameter.EndpointParameters?.EmitParameterPreparation(baseIndent: codeWriter.Indent, emitterContext: emitterContext)); 419codeWriter.WriteLine($"var {endpointParameter.EmitHandlerArgument()} = {endpointParameter.AssigningCode};");
StaticRouteHandlerModel\StaticRouteHandlerModel.Emitter.cs (65)
70codeWriter.WriteLine(endpoint.IsAwaitable ? "async Task RequestHandler(HttpContext httpContext)" : "Task RequestHandler(HttpContext httpContext)"); 72codeWriter.WriteLine("var wasParamCheckFailure = false;"); 79codeWriter.WriteLine("if (wasParamCheckFailure)"); 81codeWriter.WriteLine("httpContext.Response.StatusCode = 400;"); 82codeWriter.WriteLine(endpoint.IsAwaitable ? "return;" : "return Task.CompletedTask;"); 90codeWriter.WriteLine($"var task = handler({endpoint.EmitArgumentList()});"); 94codeWriter.WriteLine("if (task == null)"); 96codeWriter.WriteLine("""throw new InvalidOperationException("The Task returned by the Delegate must not be null.");"""); 103codeWriter.WriteLine(endpoint.Response.IsAwaitable ? "await task;" : $"handler({endpoint.EmitArgumentList()});"); 113codeWriter.WriteLine("return Task.CompletedTask;"); 125codeWriter.WriteLine("if (result is string)"); 127codeWriter.WriteLine($@"httpContext.Response.ContentType ??= ""text/plain; charset=utf-8"";"); 129codeWriter.WriteLine("else"); 131codeWriter.WriteLine($@"httpContext.Response.ContentType ??= ""application/json; charset=utf-8"";"); 142codeWriter.WriteLine("if (result == null)"); 144codeWriter.WriteLine("""throw new InvalidOperationException("The IResult returned by the Delegate must not be null.");"""); 146codeWriter.WriteLine($"{returnOrAwait} GeneratedRouteBuilderExtensionsCore.ExecuteAsyncExplicit(result, httpContext);"); 150codeWriter.WriteLine($"{returnOrAwait} httpContext.Response.WriteAsync(result);"); 154codeWriter.WriteLine($"{returnOrAwait} GeneratedRouteBuilderExtensionsCore.ExecuteReturnAsync(result, httpContext, objectJsonTypeInfo);"); 158codeWriter.WriteLine($"{returnOrAwait} {endpointResponse.EmitJsonResponse()}"); 162codeWriter.WriteLine($"{returnOrAwait} Task.CompletedTask;"); 166codeWriter.WriteLine($"{returnOrAwait} httpContext.Response.WriteAsync(result);"); 180codeWriter.WriteLine("async Task RequestHandlerFiltered(HttpContext httpContext)"); 182codeWriter.WriteLine("var wasParamCheckFailure = false;"); 189codeWriter.WriteLine("if (wasParamCheckFailure)"); 191codeWriter.WriteLine("httpContext.Response.StatusCode = 400;"); 193codeWriter.WriteLine($"var result = await filteredInvocation({invocationCreator}{invocationGenericArgs}(httpContext{argumentList}));"); 194codeWriter.WriteLine("if (result is not null)"); 196codeWriter.WriteLine("await GeneratedRouteBuilderExtensionsCore.ExecuteReturnAsync(result, httpContext, objectJsonTypeInfo);"); 216codeWriter.WriteLine($"options.EndpointBuilder.Metadata.Add(new ProducesResponseTypeMetadata(statusCode: StatusCodes.Status200OK, type: typeof(string), contentTypes: GeneratedMetadataConstants.PlaintextContentType));"); 220codeWriter.WriteLine($$"""options.EndpointBuilder.Metadata.Add(new ProducesResponseTypeMetadata(statusCode: StatusCodes.Status200OK, type: typeof({{responseType.ToDisplayString(EmitterConstants.DisplayFormatWithoutNullability)}}), contentTypes: GeneratedMetadataConstants.JsonContentType));"""); 221codeWriter.WriteLine("DisableCookieRedirectMetadata.AddMetadataIfMissing(options.EndpointBuilder);"); 234codeWriter.WriteLine($"PopulateMetadataForEndpoint<{responseType.ToDisplayString(EmitterConstants.DisplayFormat)}>(methodInfo, options.EndpointBuilder);"); 241codeWriter.WriteLine("var parameterInfos = methodInfo.GetParameters();"); 271codeWriter.WriteLine($"var {parameter.SymbolName}_ParameterInfo = {resolveParameterInfo};"); 272codeWriter.WriteLine($"PopulateMetadataForParameter<{parameterType.ToDisplayString(EmitterConstants.DisplayFormat)}>({parameter.SymbolName}_ParameterInfo, options.EndpointBuilder);"); 277codeWriter.WriteLine($"PopulateMetadataForEndpoint<{parameterType.ToDisplayString(EmitterConstants.DisplayFormat)}>(methodInfo, options.EndpointBuilder);"); 289codeWriter.WriteLine("options.EndpointBuilder.Metadata.Add(new AcceptsMetadata(contentTypes: GeneratedMetadataConstants.FormFileContentType));"); 293codeWriter.WriteLine("options.EndpointBuilder.Metadata.Add(new AcceptsMetadata(contentTypes: GeneratedMetadataConstants.FormContentType));"); 317codeWriter.WriteLine($$"""options.EndpointBuilder.Metadata.Add(new AcceptsMetadata(type: typeof({{explicitBodyParameter.Type.ToDisplayString(EmitterConstants.DisplayFormatWithoutNullability)}}), isOptional: {{(explicitBodyParameter.IsOptional ? "true" : "false")}}, contentTypes: GeneratedMetadataConstants.JsonContentType));"""); 321codeWriter.WriteLine("var serviceProvider = options.ServiceProvider ?? options.EndpointBuilder.ApplicationServices;"); 322codeWriter.WriteLine($"var serviceProviderIsService = serviceProvider.GetRequiredService<IServiceProviderIsService>();"); 324codeWriter.WriteLine("var jsonBodyOrServiceTypeTuples = new (bool, Type)[] {"); 326codeWriter.WriteLine("#nullable disable"); 329codeWriter.WriteLine($$"""({{(parameter.IsOptional ? "true" : "false")}}, typeof({{parameter.Type.ToDisplayString(EmitterConstants.DisplayFormatWithoutNullability)}})),"""); 331codeWriter.WriteLine("#nullable enable"); 333codeWriter.WriteLine("};"); 334codeWriter.WriteLine("foreach (var (isOptional, type) in jsonBodyOrServiceTypeTuples)"); 336codeWriter.WriteLine("if (!serviceProviderIsService.IsService(type))"); 338codeWriter.WriteLine("options.EndpointBuilder.Metadata.Add(new AcceptsMetadata(type: type, isOptional: isOptional, contentTypes: GeneratedMetadataConstants.JsonContentType));"); 339codeWriter.WriteLine("options.EndpointBuilder.Metadata.Add(DisableCookieRedirectMetadata.Instance);"); 340codeWriter.WriteLine("break;"); 346codeWriter.WriteLine("options.EndpointBuilder.Metadata.Add(new AcceptsMetadata(contentTypes: GeneratedMetadataConstants.JsonContentType));"); 347codeWriter.WriteLine("options.EndpointBuilder.Metadata.Add(DisableCookieRedirectMetadata.Instance);"); 357codeWriter.WriteLine("options.EndpointBuilder.Metadata.Add(AntiforgeryMetadata.ValidationRequired);"); 383codeWriter.WriteLine("var parameters = methodInfo.GetParameters();"); 397codeWriter.WriteLine($"options.EndpointBuilder.Metadata.Add(new ParameterBindingMetadata({parameterName}, {parameterInfo}, hasTryParse: {hasTryParse}, hasBindAsync: {hasBindAsync}, isOptional: {isOptional}));"); 414codeWriter.WriteLine(endpoint.Response?.IsAwaitable == true 417codeWriter.WriteLine(endpoint.Response?.IsAwaitable == true 423codeWriter.WriteLine($"var task = handler({endpoint.EmitFilteredArgumentList()});"); 426codeWriter.WriteLine("if (task == null)"); 428codeWriter.WriteLine("return (object?)Results.Empty;"); 431codeWriter.WriteLine($"var result = await task;"); 432codeWriter.WriteLine("return (object?)result;"); 436codeWriter.WriteLine($"return ValueTask.FromResult<object?>(handler({endpoint.EmitFilteredArgumentList()}));");
Microsoft.AspNetCore.OpenApi.SourceGenerators (7)
src\Shared\RoslynUtils\CodeWriter.cs (4)
17this.WriteLine("{"); 24this.WriteLine("}"); 30this.WriteLine("},"); 36this.WriteLine("};");
XmlCommentGenerator.Emitter.cs (3)
680codeWriter.WriteLine(location.GetInterceptsLocationAttributeSyntax()); 683codeWriter.WriteLine(GetAddOpenApiInterceptor(source.Variant)); 696codeWriter.WriteLine($"cache.Add({FormatStringForCode(memberKey)}, {EmitSourceGeneratedXmlComment(comment)});");
Microsoft.Extensions.Validation.ValidationsGenerator (18)
Emitters\ValidationsGenerator.Emitter.cs (14)
212cw.WriteLine($"if (type == typeof({typeName}))"); 214cw.WriteLine($"validatableInfo = new GeneratedValidatableTypeInfo("); 216cw.WriteLine($"type: typeof({typeName}),"); 219cw.WriteLine("members: []"); 223cw.WriteLine("members: ["); 230cw.WriteLine("]"); 233cw.WriteLine(");"); 234cw.WriteLine("return true;"); 242cw.WriteLine("new GeneratedValidatablePropertyInfo("); 244cw.WriteLine($"containingType: typeof({member.ContainingType.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)}),"); 245cw.WriteLine($"propertyType: typeof({member.Type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)}),"); 246cw.WriteLine($"name: \"{member.Name}\","); 247cw.WriteLine($"displayName: \"{member.DisplayName}\""); 249cw.WriteLine("),");
src\Shared\RoslynUtils\CodeWriter.cs (4)
17this.WriteLine("{"); 24this.WriteLine("}"); 30this.WriteLine("},"); 36this.WriteLine("};");
Microsoft.Interop.ComInterfaceGenerator (47)
ComClassGenerator.cs (14)
52writer.WriteLine("// <auto-generated />"); 54writer.WriteLine($"file sealed unsafe class {ClassInfoTypeName} : global::System.Runtime.InteropServices.Marshalling.IComExposedClass"); 57writer.WriteLine("private static volatile global::System.Runtime.InteropServices.ComWrappers.ComInterfaceEntry* s_vtables;"); 59writer.WriteLine("public static global::System.Runtime.InteropServices.ComWrappers.ComInterfaceEntry* GetComInterfaceEntries(out int count)"); 62writer.WriteLine($"count = {implementedInterfaces.Length};"); 63writer.WriteLine("if (s_vtables == null)"); 66writer.WriteLine($"global::System.Runtime.InteropServices.ComWrappers.ComInterfaceEntry* vtables = (global::System.Runtime.InteropServices.ComWrappers.ComInterfaceEntry*)global::System.Runtime.CompilerServices.RuntimeHelpers.AllocateTypeAssociatedMemory(typeof({ClassInfoTypeName}), sizeof(global::System.Runtime.InteropServices.ComWrappers.ComInterfaceEntry) * {implementedInterfaces.Length});"); 67writer.WriteLine("global::System.Runtime.InteropServices.Marshalling.IIUnknownDerivedDetails details;"); 73writer.WriteLine($"details = global::System.Runtime.InteropServices.Marshalling.StrategyBasedComWrappers.DefaultIUnknownInterfaceDetailsStrategy.GetIUnknownDerivedDetails(typeof({ifaceName}).TypeHandle);"); 74writer.WriteLine($"vtables[{i}] = new() {{ IID = details.Iid, Vtable = (nint)details.ManagedVirtualMethodTable }};"); 78writer.WriteLine("s_vtables = vtables;"); 82writer.WriteLine("return s_vtables;"); 92writer.WriteLine($"[global::System.Runtime.InteropServices.Marshalling.ComExposedClassAttribute<{ClassInfoTypeName}>]"); 93writer.WriteLine($"{string.Join(" ", classSyntax.Modifiers)} class {classSyntax.Identifier}{classSyntax.TypeParameters} {{ }}");
ComInterfaceGenerator.cs (33)
138writer.WriteLine("// <auto-generated />"); 139writer.WriteLine("#pragma warning disable CS0612, CS0618, CS0649, CS1591"); // Suppress warnings about [Obsolete], "lack of assignment", and missing XML documentation in generated code. 149writer.WriteLine("#pragma warning disable CA2256"); 471writer.WriteLine("[global::System.Runtime.InteropServices.StructLayoutAttribute(global::System.Runtime.InteropServices.LayoutKind.Sequential)]"); 472writer.WriteLine("file unsafe struct InterfaceImplementationVtable"); 475writer.WriteLine("public delegate* unmanaged[MemberFunction]<void*, global::System.Guid*, void**, int> QueryInterface_0;"); 476writer.WriteLine("public delegate* unmanaged[MemberFunction]<void*, uint> AddRef_1;"); 477writer.WriteLine("public delegate* unmanaged[MemberFunction]<void*, uint> Release_2;"); 486writer.WriteLine($"public {functionPointerType.NormalizeWhitespace()} {inheritedMethod.MethodInfo.MethodName}_{inheritedMethod.GenerationContext.VtableIndexData.Index};"); 498writer.WriteLine($"public {functionPointerType.NormalizeWhitespace()} {declaredMethod.MethodInfo.MethodName}_{declaredMethod.GenerationContext.VtableIndexData.Index};"); 507writer.WriteLine("file unsafe sealed class InterfaceInformation : global::System.Runtime.InteropServices.Marshalling.IIUnknownInterfaceType"); 510writer.WriteLine($"public static global::System.Guid Iid {{ get; }} = new([{string.Join(", ", interfaceInfo.InterfaceId.ToByteArray())}]);"); 511writer.WriteLine($"public static void** ManagedVirtualMethodTable => {(interfaceInfo.Options.HasFlag(ComInterfaceOptions.ManagedObjectWrapper) ? "(void**)global::System.Runtime.CompilerServices.Unsafe.AsPointer(in InterfaceImplementation.Vtable)" : "null")};"); 518writer.WriteLine("[global::System.Runtime.InteropServices.DynamicInterfaceCastableImplementationAttribute]"); 519writer.WriteLine($"file unsafe interface InterfaceImplementation : {data.Interface.Info.Type.FullTypeName}"); 525writer.WriteLine("[global::System.Runtime.CompilerServices.FixedAddressValueTypeAttribute]"); 526writer.WriteLine("public static readonly InterfaceImplementationVtable Vtable;"); 528writer.WriteLine("static InterfaceImplementation()"); 534writer.WriteLine("global::System.Runtime.InteropServices.NativeMemory.Copy("); 536writer.WriteLine($"global::System.Runtime.InteropServices.Marshalling.StrategyBasedComWrappers.DefaultIUnknownInterfaceDetailsStrategy.GetIUnknownDerivedDetails(typeof({baseInterface.Info.Type.FullTypeName}).TypeHandle).ManagedVirtualMethodTable,"); 537writer.WriteLine("global::System.Runtime.CompilerServices.Unsafe.AsPointer(ref Vtable),"); 538writer.WriteLine($"(nuint)(sizeof(void*) * {data.BaseVTableSize}));"); 544writer.WriteLine("global::System.Runtime.InteropServices.ComWrappers.GetIUnknownImpl("); 546writer.WriteLine("out *(nint*)&((InterfaceImplementationVtable*)global::System.Runtime.CompilerServices.Unsafe.AsPointer(ref Vtable))->QueryInterface_0,"); 547writer.WriteLine("out *(nint*)&((InterfaceImplementationVtable*)global::System.Runtime.CompilerServices.Unsafe.AsPointer(ref Vtable))->AddRef_1,"); 548writer.WriteLine("out *(nint*)&((InterfaceImplementationVtable*)global::System.Runtime.CompilerServices.Unsafe.AsPointer(ref Vtable))->Release_2);"); 557writer.WriteLine($"Vtable.{declaredMethodContext.MethodInfo.MethodName}_{declaredMethodContext.GenerationContext.VtableIndexData.Index} = &ABI_{((SourceAvailableIncrementalMethodStubGenerationContext)declaredMethodContext.GenerationContext).StubMethodSyntaxTemplate.Identifier};"); 606writer.WriteLine(" => throw new global::System.Diagnostics.UnreachableException();"); 619writer.WriteLine("[global::System.Runtime.InteropServices.Marshalling.IUnknownDerivedAttribute<InterfaceInformation, InterfaceImplementation>]"); 620writer.WriteLine($"{string.Join(" ", syntax.Modifiers.AddToModifiers(SyntaxKind.UnsafeKeyword))} {syntax.TypeKind.GetDeclarationKeyword()} {syntax.Identifier}{syntax.TypeParameters}"); 631writer.WriteLine(additionalAttr.NormalizeWhitespace().ToString()); 636writer.WriteLine($"[{attrInfo.Type}({string.Join(", ", attrInfo.Arguments)})]"); 642writer.WriteLine($"({string.Join(", ", sigContext.ManagedParameters.Select(mp => $"{(mp.IsByRef ? $"{MarshallerHelpers.GetManagedArgumentRefKindKeyword(mp)} " : "")}{mp.InstanceIdentifier}"))});");
Microsoft.Interop.SourceGeneration (2)
ContainingSyntaxContext.cs (2)
158writer.WriteLine($"namespace {ContainingNamespace}"); 172writer.WriteLine($"{string.Join(" ", syntax.Modifiers.AddToModifiers(SyntaxKind.UnsafeKeyword))} {syntax.TypeKind.GetDeclarationKeyword()} {syntax.Identifier}{syntax.TypeParameters}");
Microsoft.Maui.Controls.BindingSourceGen (1)
BindingCodeWriter.cs (1)
435 private void AppendLine(string line) => _indentedTextWriter.WriteLine(line);
Microsoft.ML.Core (4)
Utilities\CmdIndenter.cs (4)
45itw.WriteLine(tokens[i++]); 58itw.WriteLine("{"); 68itw.WriteLine("}"); 74itw.WriteLine(tokens[i++]);
Microsoft.ML.Maml (7)
HelpCommand.cs (7)
117writer.WriteLine("Listing component kinds so ignoring specified component"); 119writer.WriteLine("Listing component kinds so ignoring specified kind"); 243writer.WriteLine(CmdParser.ArgumentsUsage(_env, args.GetType(), args, false, columns)); 258writer.WriteLine("Available commands:"); 333writer.WriteLine("Available component kinds:"); 337writer.WriteLine(sig); 364writer.WriteLine("Summary:");
Microsoft.ML.Predictor.Tests (7)
CmdLine\CmdIndenterTest.cs (2)
84wrt.WriteLine(CmdIndenter.GetIndentedCommandLine(input)); 89wrt.WriteLine("Unknown Exception!");
CmdLine\CmdLine.cs (5)
102wrt.WriteLine("Usage:"); 103wrt.WriteLine(CmdParser.ArgumentsUsage(env, defaults.GetType(), defaults, false, 200)); 118wrt.WriteLine("*** Failed!"); 129wrt.WriteLine("*** BUG: parsing result of GetSettings failed!"); 391wrt.WriteLine("Unknown Exception!");
Microsoft.ML.Tests (2)
ExpressionLanguageTests\ExpressionLanguageTests.cs (2)
198wrt.WriteLine("Compiling succeeded."); 417wrt.WriteLine(err.GetMessage());
System.CodeDom (23)
Microsoft\CSharp\CSharpCodeGenerator.cs (23)
202private void ContinueOnNewLine(string st) => Output.WriteLine(st); 223Output.WriteLine(" {"); 458Output.WriteLine(e.Value); 1050Output.WriteLine(e.Value); 1100Output.WriteLine("#line default"); 1101Output.WriteLine("#line hidden"); 1482Output.WriteLine("get;"); 1498Output.WriteLine("set;"); 1765Output.WriteLine(" : "); 1777Output.WriteLine(" : "); 1912Output.WriteLine(");"); 2424Output.WriteLine("//------------------------------------------------------------------------------"); 2426Output.WriteLine(SR.AutoGen_Comment_Line1); 2428Output.WriteLine(SR.AutoGen_Comment_Line2); 2429Output.WriteLine("//"); 2431Output.WriteLine(SR.AutoGen_Comment_Line4); 2433Output.WriteLine(SR.AutoGen_Comment_Line5); 2435Output.WriteLine(SR.AutoGen_Comment_Line1); 2436Output.WriteLine("//------------------------------------------------------------------------------"); 2522Output.WriteLine("\""); 2530Output.WriteLine(regionDirective.RegionText); 2534Output.WriteLine("#endregion"); 2882Output.WriteLine(" {");
System.Text.RegularExpressions.Generator (363)
RegexGenerator.cs (20)
177writer.WriteLine(header); 243writer.WriteLine($"namespace {GeneratedNamespace}"); 244writer.WriteLine($"{{"); 249writer.WriteLine($" using System;"); 250writer.WriteLine($" using System.Buffers;"); 251writer.WriteLine($" using System.CodeDom.Compiler;"); 252writer.WriteLine($" using System.Collections;"); 253writer.WriteLine($" using System.ComponentModel;"); 254writer.WriteLine($" using System.Globalization;"); 255writer.WriteLine($" using System.Runtime.CompilerServices;"); 256writer.WriteLine($" using System.Text.RegularExpressions;"); 257writer.WriteLine($" using System.Threading;"); 258writer.WriteLine($""); 287writer.WriteLine($"/// <summary>Helper methods used by generated <see cref=\"Regex\"/>-derived implementations.</summary>"); 288writer.WriteLine($"[{s_generatedCodeAttribute}]"); 289writer.WriteLine($"file static class {HelpersTypeName}"); 290writer.WriteLine($"{{"); 303writer.WriteLine(value); 307writer.WriteLine($"}}"); 311writer.WriteLine($"}}");
RegexGenerator.Emitter.cs (343)
67writer.WriteLine($"namespace {parent.Namespace}"); 68writer.WriteLine("{"); 81writer.WriteLine($"{parentClasses.Pop()}"); 82writer.WriteLine("{"); 87writer.WriteLine($"/// <remarks>"); 88writer.WriteLine($"/// Pattern:<br/>"); 89writer.WriteLine($"/// <code>{EscapeXmlComment(regexMethod.Pattern)}</code><br/>"); 92writer.WriteLine($"/// Options:<br/>"); 93writer.WriteLine($"/// <code>{Literal(regexMethod.Options)}</code><br/>"); 95writer.WriteLine($"/// Explanation:<br/>"); 96writer.WriteLine($"/// <code>"); 98writer.WriteLine($"/// </code>"); 99writer.WriteLine($"/// </remarks>"); 100writer.WriteLine($"[global::System.CodeDom.Compiler.{s_generatedCodeAttribute}]"); 106writer.WriteLine($" => global::{GeneratedNamespace}.{regexMethod.GeneratedName}.Instance;"); 112writer.WriteLine("}"); 124writer.WriteLine($"/// <summary>Caches a <see cref=\"Regex\"/> instance for the {rm.MemberName} method.</summary>"); 129writer.WriteLine($"/// <summary>This class supports generated regexes and should not be used by other code directly.</summary>"); 131writer.WriteLine($"/// <remarks>A custom Regex-derived type could not be generated because {reason}.</remarks>"); 132writer.WriteLine($"[{s_generatedCodeAttribute}]"); 133writer.WriteLine($"{visibility} sealed class {rm.GeneratedName} : Regex"); 134writer.WriteLine($"{{"); 135writer.WriteLine($" /// <summary>Cached, thread-safe singleton instance.</summary>"); 137writer.WriteLine( 141writer.WriteLine($"}}"); 154writer.WriteLine($"/// <summary>Custom <see cref=\"Regex\"/>-derived type for the {rm.MemberName} method.</summary>"); 155writer.WriteLine($"[{s_generatedCodeAttribute}]"); 158writer.WriteLine($"[SkipLocalsInit]"); 160writer.WriteLine($"file sealed class {rm.GeneratedName} : Regex"); 161writer.WriteLine($"{{"); 162writer.WriteLine($" /// <summary>Cached, thread-safe singleton instance.</summary>"); 163writer.WriteLine($" internal static readonly {rm.GeneratedName} Instance = new();"); 164writer.WriteLine($""); 165writer.WriteLine($" /// <summary>Initializes the instance.</summary>"); 166writer.WriteLine($" private {rm.GeneratedName}()"); 167writer.WriteLine($" {{"); 168writer.WriteLine($" base.pattern = {Literal(rm.Pattern)};"); 169writer.WriteLine($" base.roptions = {Literal(rm.Options)};"); 172writer.WriteLine($" base.internalMatchTimeout = {GetTimeoutExpression(rm.MatchTimeout.Value)};"); 176writer.WriteLine($" ValidateMatchTimeout({HelpersTypeName}.{DefaultTimeoutFieldName});"); 177writer.WriteLine($" base.internalMatchTimeout = {HelpersTypeName}.{DefaultTimeoutFieldName};"); 179writer.WriteLine($" base.factory = new RunnerFactory();"); 184writer.WriteLine($" }};"); 190writer.WriteLine($" }};"); 202writer.WriteLine($" }};"); 204writer.WriteLine($" base.capsize = {rm.Tree.CaptureCount};"); 205writer.WriteLine($" }}"); 206writer.WriteLine(runnerFactoryImplementation); 207writer.WriteLine($"}}"); 238writer.WriteLine($"unchecked"); 239writer.WriteLine($"{{"); 249writer.WriteLine($"}}"); 253writer.WriteLine($"/// <summary>Provides a factory for creating <see cref=\"RegexRunner\"/> instances to be used by methods on <see cref=\"Regex\"/>.</summary>"); 254writer.WriteLine($"private sealed class RunnerFactory : RegexRunnerFactory"); 255writer.WriteLine($"{{"); 256writer.WriteLine($" /// <summary>Creates an instance of a <see cref=\"RegexRunner\"/> used by methods on <see cref=\"Regex\"/>.</summary>"); 257writer.WriteLine($" protected override RegexRunner CreateInstance() => new Runner();"); 259writer.WriteLine($" /// <summary>Provides the runner that contains the custom logic implementing the specified regular expression.</summary>"); 260writer.WriteLine($" private sealed class Runner : RegexRunner"); 261writer.WriteLine($" {{"); 282writer.WriteLine($" /// <summary>Scan the <paramref name=\"inputSpan\"/> starting from base.runtextstart for the next match.</summary>"); 283writer.WriteLine($" /// <param name=\"inputSpan\">The text being scanned by the regular expression.</param>"); 284writer.WriteLine($" protected override void Scan(ReadOnlySpan<char> inputSpan)"); 285writer.WriteLine($" {{"); 291writer.WriteLine($" }}"); 295writer.WriteLine($" /// <summary>Search <paramref name=\"inputSpan\"/> starting from base.runtextpos for the next location a match could possibly start.</summary>"); 296writer.WriteLine($" /// <param name=\"inputSpan\">The text being scanned by the regular expression.</param>"); 297writer.WriteLine($" /// <returns>true if a possible match was found; false if no more matches are possible.</returns>"); 298writer.WriteLine($" private bool TryFindNextPossibleStartingPosition(ReadOnlySpan<char> inputSpan)"); 299writer.WriteLine($" {{"); 305writer.WriteLine($" }}"); 310writer.WriteLine($" /// <summary>Determine whether <paramref name=\"inputSpan\"/> at base.runtextpos is a match for the regular expression.</summary>"); 311writer.WriteLine($" /// <param name=\"inputSpan\">The text being scanned by the regular expression.</param>"); 312writer.WriteLine($" /// <returns>true if the regular expression matches at the current position; otherwise, false.</returns>"); 313writer.WriteLine($" private bool TryMatchAtCurrentPosition(ReadOnlySpan<char> inputSpan)"); 314writer.WriteLine($" {{"); 320writer.WriteLine($" }}"); 322writer.WriteLine($" }}"); 323writer.WriteLine($"}}"); 765writer.WriteLine("// The pattern matches the empty string."); 766writer.WriteLine($"int pos = base.runtextpos;"); 767writer.WriteLine($"base.Capture(0, pos, pos);"); 773writer.WriteLine("// The pattern never matches anything."); 782writer.WriteLine("// The search in TryFindNextPossibleStartingPosition performed the entire match."); 783writer.WriteLine($"int start = base.runtextpos;"); 784writer.WriteLine($"int end = base.runtextpos = start {(!rtl ? "+" : "-")} {(root.Kind == RegexNodeKind.Multi ? root.Str!.Length : 1)};"); 785writer.WriteLine($"base.Capture(0, start, end);"); 797writer.WriteLine("// The pattern is anchored. Validate the current position and try to match at it only."); 800writer.WriteLine($"base.runtextpos = {(!rtl ? "inputSpan.Length" : "0")};"); 815writer.WriteLine("// Search until we can't find a valid starting position, we find a match, or we reach the end of the input."); 819writer.WriteLine("TryFindNextPossibleStartingPosition(inputSpan) &&"); 822writer.WriteLine("!TryMatchAtCurrentPosition(inputSpan) &&"); 823writer.WriteLine($" base.runtextpos != {(!rtl ? "inputSpan.Length" : "0")})"); 826writer.WriteLine($"base.runtextpos{(!rtl ? "++" : "--")};"); 850writer.WriteLine("int pos = base.runtextpos;"); 868writer.WriteLine(minRequiredLength == 1 ? 922writer.WriteLine("return true;"); 934writer.WriteLine("// No match found."); 937writer.WriteLine($"{NoMatchFound}:"); 939writer.WriteLine($"base.runtextpos = {(!rtl ? "inputSpan.Length" : "0")};"); 940writer.WriteLine("return false;"); 948void Goto(string label) => writer.WriteLine($"goto {label};"); 964writer.WriteLine($"// The pattern leads with a beginning (\\A) anchor and has a trailing end (\\z) anchor, and any possible match is exactly {minRequiredLength} characters."); 967writer.WriteLine("return true;"); 972writer.WriteLine("// The pattern leads with a beginning (\\A) anchor."); 977writer.WriteLine("return true;"); 988writer.WriteLine("."); 994writer.WriteLine("return true;"); 999writer.WriteLine("// The pattern leads with an end (\\Z) anchor."); 1004writer.WriteLine("base.runtextpos = inputSpan.Length - 1;"); 1006writer.WriteLine("return true;"); 1011writer.WriteLine("// The pattern leads with an end (\\z) anchor."); 1016writer.WriteLine("base.runtextpos = inputSpan.Length;"); 1018writer.WriteLine("return true;"); 1023writer.WriteLine("// The pattern leads with a beginning (\\A) anchor when processed right to left."); 1029writer.WriteLine("base.runtextpos = 0;"); 1031writer.WriteLine("return true;"); 1036writer.WriteLine("// The pattern leads with an end (\\Z) anchor when processed right to left."); 1041writer.WriteLine("return true;"); 1046writer.WriteLine("// The pattern leads with an end (\\z) anchor when processed right to left."); 1051writer.WriteLine("return true;"); 1057writer.WriteLine($"// The pattern has a trailing end (\\Z) anchor, and any possible match is exactly {regexTree.FindOptimizations.MinRequiredLength} characters."); 1060writer.WriteLine($"base.runtextpos = inputSpan.Length - {regexTree.FindOptimizations.MinRequiredLength + 1};"); 1062writer.WriteLine("return true;"); 1068writer.WriteLine($"// The pattern has a trailing end (\\z) anchor, and any possible match is exactly {regexTree.FindOptimizations.MinRequiredLength} characters."); 1071writer.WriteLine($"base.runtextpos = inputSpan.Length - {regexTree.FindOptimizations.MinRequiredLength};"); 1073writer.WriteLine("return true;"); 1087writer.WriteLine($"// The pattern has a leading beginning-of-line anchor."); 1090writer.WriteLine("int newlinePos = inputSpan.Slice(pos).IndexOf('\\n');"); 1096writer.WriteLine("pos += newlinePos + 1;"); 1110writer.WriteLine("base.runtextpos = pos;"); 1119writer.WriteLine($"// The pattern has a trailing end (\\z) anchor, and any possible match is no more than {maxLength} characters."); 1122writer.WriteLine($"pos = inputSpan.Length - {maxLength};"); 1128writer.WriteLine($"// The pattern has a trailing end (\\Z) anchor, and any possible match is no more than {maxLength} characters."); 1131writer.WriteLine($"pos = inputSpan.Length - {maxLength + 1};"); 1192writer.WriteLine($"// The pattern has the literal {Literal(substring)} {offsetDescription}. Find the next occurrence."); 1193writer.WriteLine($"// If it can't be found, there's no match."); 1194writer.WriteLine($"int i = inputSpan.Slice(pos{offset}).IndexOfAny({HelpersTypeName}.{fieldName});"); 1197writer.WriteLine("base.runtextpos = pos + i;"); 1198writer.WriteLine("return true;"); 1249writer.WriteLine($"// The pattern has multiple strings that could begin the match. Search for any of them."); 1250writer.WriteLine($"// If none can be found, there's no match."); 1251writer.WriteLine($"int i = inputSpan.Slice(pos).IndexOfAny({HelpersTypeName}.{fieldName});"); 1254writer.WriteLine("base.runtextpos = pos + i;"); 1255writer.WriteLine("return true;"); 1264writer.WriteLine($"// The pattern begins with a literal {Literal(prefix)}. Find the next occurrence right-to-left."); 1265writer.WriteLine($"// If it can't be found, there's no match."); 1266writer.WriteLine($"pos = inputSpan.Slice(0, pos).LastIndexOf({Literal(prefix)});"); 1269writer.WriteLine($"base.runtextpos = pos + {prefix.Length};"); 1270writer.WriteLine($"return true;"); 1285writer.WriteLine(primarySet.Distance == 0 ? 1288writer.WriteLine($"// Find the next occurrence. If it can't be found, there's no match."); 1304writer.WriteLine("ReadOnlySpan<char> span = inputSpan.Slice(pos);"); 1377writer.WriteLine($"int indexOfPos = {indexOf};"); 1383writer.WriteLine("i += indexOfPos;"); 1398writer.WriteLine($"// The primary set being searched for was found. {numRemainingSets} more set{(numRemainingSets > 1 ? "s" : "")} will be checked so as"); 1399writer.WriteLine($"// to minimize the number of places TryMatchAtCurrentPosition is run unnecessarily."); 1400writer.WriteLine($"// Make sure {(numRemainingSets > 1 ? "they fit" : "it fits")} in the remainder of the input."); 1412writer.WriteLine($"int i = {indexOf};"); 1415writer.WriteLine("base.runtextpos = pos + i;"); 1416writer.WriteLine("return true;"); 1444writer.WriteLine(" &&"); 1448writer.WriteLine(")"); 1454writer.WriteLine("base.runtextpos = pos + i;"); 1455writer.WriteLine("return true;"); 1471writer.WriteLine($"// The pattern begins with {DescribeSet(set.Set)}."); 1472writer.WriteLine($"// Find the next occurrence. If it can't be found, there's no match."); 1477writer.WriteLine($"pos = inputSpan.Slice(0, pos).LastIndexOf({Literal(set.Chars[0])});"); 1480writer.WriteLine("base.runtextpos = pos + 1;"); 1481writer.WriteLine("return true;"); 1490writer.WriteLine("base.runtextpos = pos + 1;"); 1491writer.WriteLine("return true;"); 1510writer.WriteLine( 1514writer.WriteLine($"// Search for the literal, and then walk backwards to the beginning of the loop."); 1526writer.WriteLine($"ReadOnlySpan<char> slice = inputSpan.Slice(pos);"); 1531writer.WriteLine( 1546writer.WriteLine("break;"); 1556writer.WriteLine("int prev = i - 1;"); 1559writer.WriteLine("prev--;"); 1569writer.WriteLine("pos += i + 1;"); 1570writer.WriteLine("continue;"); 1578writer.WriteLine("base.runtextpos = pos + prev + 1;"); 1579writer.WriteLine("base.runtrackpos = pos + i;"); 1580writer.WriteLine("return true;"); 1647writer.WriteLine("int pos = base.runtextpos;"); 1648writer.WriteLine($"int matchStart = pos;"); 1681writer.WriteLine("// The input matched."); 1686writer.WriteLine("base.runtextpos = pos;"); 1687writer.WriteLine("base.Capture(0, matchStart, pos);"); 1688writer.WriteLine("return true;"); 1703writer.WriteLine(line); 1722void MarkLabel(string label, bool emitSemicolon = true) => writer.WriteLine($"{label}:{(emitSemicolon ? ";" : "")}"); 1739writer.WriteLine("return false; // The input didn't match."); 1743writer.WriteLine($"goto {label};"); 1750writer.WriteLine(clause); 1763writer.WriteLine($"{sliceSpan} = inputSpan.Slice(pos);"); 1898writer.WriteLine($"case {string.Join(" or ", setChars.Slice(0, numChars).ToArray().Select(Literal))}:"); 1902writer.WriteLine($"case {Literal(startingLiteralNode.FirstCharOfOneOrMulti())}:"); 1965writer.WriteLine($"break;"); 2000writer.WriteLine($"{startingPos} = pos;"); 2004writer.WriteLine($"int {startingPos} = pos;"); 2035writer.WriteLine($"{startingCapturePos} = base.Crawlpos();"); 2039writer.WriteLine($"int {startingCapturePos} = base.Crawlpos();"); 2110writer.WriteLine($"{currentBranch} = {i};"); 2139writer.WriteLine($"pos = {startingPos};"); 2219writer.WriteLine($"// If the {DescribeCapture(node.M, rm)} hasn't matched, the backreference matches with RegexOptions.ECMAScript rules."); 2227writer.WriteLine($"// If the {DescribeCapture(node.M, rm)} hasn't matched, the backreference doesn't match."); 2238writer.WriteLine("// Get the captured text. If it doesn't match at the current position, the backreference doesn't match."); 2241writer.WriteLine($"matchLength = base.MatchLength({capnum});"); 2247writer.WriteLine($"if ({sliceSpan}.Length < matchLength || "); 2254writer.WriteLine($"pos += matchLength;"); 2258writer.WriteLine($"if (pos < matchLength || "); 2265writer.WriteLine($"pos -= matchLength;"); 2297writer.WriteLine($"// The {DescribeCapture(node.M, rm)} captured a value. Match the first branch."); 2307writer.WriteLine($"// Otherwise, match the second branch."); 2329writer.WriteLine($"int {resumeAt};"); 2355writer.WriteLine($"{resumeAt} = 0;"); 2377writer.WriteLine($"{resumeAt} = 1;"); 2387writer.WriteLine($"{resumeAt} = 2;"); 2480writer.WriteLine($"int {resumeAt} = 0;"); 2493writer.WriteLine($"int {startingCapturePos} = base.Crawlpos();"); 2504writer.WriteLine($"int {startingPos} = pos;"); 2510writer.WriteLine("// Condition:"); 2519writer.WriteLine("// Condition matched:"); 2520writer.WriteLine($"pos = {startingPos};"); 2532writer.WriteLine($"{resumeAt} = 0;"); 2539writer.WriteLine("// Condition did not match:"); 2541writer.WriteLine($"pos = {startingPos};"); 2561writer.WriteLine($"{resumeAt} = 1;"); 2571writer.WriteLine($"{resumeAt} = 2;"); 2639writer.WriteLine($"int {startingPos} = pos;"); 2644writer.WriteLine($"{startingPos} = pos;"); 2658writer.WriteLine($"base.Capture({capnum}, {startingPos}, pos);"); 2668writer.WriteLine($"base.TransferCapture({capnum.ToString(CultureInfo.InvariantCulture)}, {uncapnum}, {startingPos}, pos);"); 2736writer.WriteLine($"int {startingPos} = pos;"); 2752writer.WriteLine($"pos = {startingPos};"); 2780writer.WriteLine($"int {startingPos} = pos;"); 2810writer.WriteLine($"{capturePos} = base.Crawlpos();"); 2825writer.WriteLine("stackpos--;"); 2835writer.WriteLine($"pos = {startingPos};"); 2867writer.WriteLine("// Skip loop already matched in TryFindNextPossibleStartingPosition."); 2868writer.WriteLine("pos = base.runtrackpos;"); 2915writer.WriteLine($"// {DescribeNode(node, rm)}"); 3043writer.WriteLine($"int {startingStackpos} = stackpos;"); 3051writer.WriteLine($"stackpos = {startingStackpos};"); 3065writer.WriteLine("base.runtextpos = pos;"); 3099writer.WriteLine(prevDescription is not null ? $" || // {prevDescription}" : " ||"); 3145writer.WriteLine(prevDescription is not null ? $") // {prevDescription}" : ")"); 3239writer.WriteLine("pos--;"); 3438writer.WriteLine($"{startingPos} = pos;"); 3445writer.WriteLine($"{endingPos} = pos;"); 3495writer.WriteLine($"{endingPos}--;"); 3514writer.WriteLine($"pos = {endingPos};"); 3522writer.WriteLine($"{endingPos} = 0;"); 3526writer.WriteLine($"if ({startingPos} >= {endingPos} ||"); 3537writer.WriteLine($"{endingPos} += {startingPos};"); 3538writer.WriteLine($"pos = {endingPos};"); 3547writer.WriteLine(!rtl ? $"pos = --{endingPos};" : $"pos = ++{endingPos};"); 3571writer.WriteLine($"{capturePos} = base.Crawlpos();"); 3619writer.WriteLine($"{iterationCount} = 0;"); 3634writer.WriteLine($"{startingPos} = pos;"); 3661writer.WriteLine($"{iterationCount}++;"); 3670writer.WriteLine($"pos = {startingPos};"); 3699writer.WriteLine(overlap ? 3706writer.WriteLine((overlap, literal.SetChars.Length) switch 3719writer.WriteLine(overlap ? 3726writer.WriteLine($"{startingPos} = {sliceSpan}.IndexOfAnyInRange({Literal(literal.Range.LowInclusive)}, {Literal(literal.Range.HighInclusive)});"); 3743writer.WriteLine($"pos += {startingPos};"); 3755writer.WriteLine($"{startingPos} = {sliceSpan}.{indexOfExpr};"); 3760writer.WriteLine($"pos += {startingPos};"); 3766writer.WriteLine($"{startingPos} = pos;"); 3779writer.WriteLine($"{capturePos} = base.Crawlpos();"); 3855writer.WriteLine($"{iterationCount} = 0;"); 3868writer.WriteLine($"{startingPos} = {sawEmpty} = 0; // the lazy loop may match empty iterations"); 3904writer.WriteLine($"{startingPos} = pos;"); 3911writer.WriteLine($"{iterationCount}++;"); 3936writer.WriteLine($"// The lazy loop requires a minimum of {minIterations} iterations. If that many haven't yet matched, loop now."); 3947writer.WriteLine("// If the iteration successfully matched zero-length input, record that an empty iteration was seen."); 3950writer.WriteLine($"{sawEmpty} = 1; // true"); 3963writer.WriteLine("// The lazy loop iteration failed to match."); 3969writer.WriteLine($"{iterationCount}--;"); 3988writer.WriteLine(entriesPerIteration > 1 ? 3998writer.WriteLine($"// The lazy loop matched at least one iteration; backtrack into the last one."); 4004writer.WriteLine($"{sawEmpty} = 0; // false"); 4070writer.WriteLine("// If the last iteration matched empty, don't continue lazily iterating. Instead, backtrack."); 4076writer.WriteLine($"// If the upper bound {maxIterations} has already been reached, or if the last"); 4077writer.WriteLine($"// iteration matched empty, don't continue lazily iterating. Instead, backtrack."); 4083writer.WriteLine($"// If the upper bound {maxIterations} has already been reached,"); 4084writer.WriteLine($"// don't continue lazily iterating. Instead, backtrack."); 4106writer.WriteLine($"{sawEmpty} = 0; // false"); 4178writer.WriteLine($"{SpanLengthCheck(iterations)} ||"); 4184writer.WriteLine(" ||"); 4188writer.WriteLine(")"); 4225writer.WriteLine($"ReadOnlySpan<char> {repeaterSpan} = {sliceSpan}.Slice({sliceStaticPos}, {iterations});"); 4276writer.WriteLine($"int {iterationLocal} = pos;"); 4280writer.WriteLine($"int {iterationLocal} = 0;"); 4290writer.WriteLine($"{iterationLocal}++;"); 4301writer.WriteLine($"int {iterationLocal} = inputSpan.Length - pos;"); 4313writer.WriteLine($".{indexOfExpr};"); 4317writer.WriteLine(sliceStaticPos > 0 ? 4340writer.WriteLine($"int {iterationLocal} = {sliceStaticPos};"); 4346writer.WriteLine($"{iterationLocal}++;"); 4366writer.WriteLine($"{sliceSpan} = {sliceSpan}.Slice({iterationLocal});"); 4367writer.WriteLine($"pos += {iterationLocal};"); 4371writer.WriteLine($"pos -= {iterationLocal};"); 4404writer.WriteLine($"{sliceSpan} = {sliceSpan}.Slice(1);"); 4405writer.WriteLine($"pos++;"); 4409writer.WriteLine($"pos--;"); 4485writer.WriteLine($"{startingStackpos} = stackpos;"); 4503writer.WriteLine($"{startingPos} = pos;"); 4509writer.WriteLine($"{iterationCount} = 0;"); 4536writer.WriteLine($"{startingPos} = pos;"); 4543writer.WriteLine($"{iterationCount}++;"); 4567writer.WriteLine("// The loop has no upper bound. Continue iterating greedily."); 4577writer.WriteLine($"// The loop has an upper bound of {maxIterations}. Continue iterating greedily if it hasn't yet been reached."); 4584writer.WriteLine($"// The loop has a lower bound of {minIterations} but no upper bound. Continue iterating greedily"); 4585writer.WriteLine($"// if the last iteration wasn't empty (or if it was, if the lower bound hasn't yet been reached)."); 4591writer.WriteLine($"// The loop has a lower bound of {minIterations} and an upper bound of {maxIterations}. Continue iterating"); 4592writer.WriteLine($"// greedily if the upper bound hasn't yet been reached and either the last iteration was non-empty or the"); 4593writer.WriteLine($"// lower bound hasn't yet been reached."); 4599writer.WriteLine($"// The loop is unbounded. Continue iterating greedily as long as the last iteration wasn't empty."); 4605writer.WriteLine($"// The loop has an upper bound of {maxIterations}. Continue iterating greedily if the upper bound hasn't"); 4606writer.WriteLine($"// yet been reached (as long as the last iteration wasn't empty)."); 4623writer.WriteLine("// The loop iteration failed. Put state back to the way it was before the iteration."); 4630writer.WriteLine("// Unable to match the remainder of the expression after exhausting the loop."); 4652writer.WriteLine("// No iterations have been matched to backtrack into. Fail the loop."); 4665writer.WriteLine($"// All possible iterations have matched, but it's below the required minimum of {minIterations}."); 4666writer.WriteLine($"// Backtrack into the prior iteration."); 4678writer.WriteLine($"// All possible iterations have matched, but it's below the required minimum of {minIterations}. Fail the loop."); 4690writer.WriteLine($"// Ensure any stale backtracking state is removed."); 4691writer.WriteLine($"stackpos = {startingStackpos};"); 4711writer.WriteLine($"stackpos = {startingStackpos}; // Ensure any remaining backtracking state is removed."); 4729writer.WriteLine("// No iterations of the loop remain to backtrack into. Fail the loop."); 4812writer.WriteLine($"{UncaptureUntil}({capturepos});"); 4864writer.WriteLine($"{HelpersTypeName}.{MethodName}(ref base.runstack!, ref stackpos, {string.Join(", ", args)});"); 4874writer.WriteLine($"{args[0]} = {StackPop()};"); 4897writer.WriteLine($"{HelpersTypeName}.{MethodName}(base.runstack!, ref stackpos, out {string.Join(", out ", args)});"); 4928writer.WriteLine($"{StackCookieValidate(stackCookie)};"); 5033writer.WriteLine("base.CheckTimeout();"); 5859writer.WriteLine(clause); 5861writer.WriteLine(faux ? "//{" : "{"); 5873writer.WriteLine( 5891_writer.WriteLine(_faux ? "//}" : "}");