Skip to content

Commit 0c1a63f

Browse files
Compiler: Reduce allocations in tag helper matching (#12134)
This change simplifies and reduces allocations during tag helper matching in `DefaultRazorIntermediateNodeLoweringPhase`. In addition, a handful of related intermediate nodes have been cleaned up somewhat, reducing the number of fields and making things a bit lazier. I recommend reviewing commit-by-commit as each commit has a descriptive message. ---- CI Build: https://dev.azure.com/dnceng/internal/_build/results?buildId=2777461&view=results Test Insertion: https://dev.azure.com/devdiv/DevDiv/_git/VS/pullrequest/663965 Toolset Run: https://dev.azure.com/dnceng/internal/_build/results?buildId=2777462&view=results
2 parents 296d344 + 4968ee9 commit 0c1a63f

22 files changed

+535
-545
lines changed

src/Compiler/Microsoft.AspNetCore.Mvc.Razor.Extensions.Version2_X/test/InstrumentationPassTest.cs

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,17 @@ public void InstrumentationPass_SkipsCSharpExpression_InsideTagHelperAttribute()
147147

148148
var builder = IntermediateNodeBuilder.Create(documentNode);
149149

150-
builder.Push(new TagHelperIntermediateNode());
150+
builder.Push(new TagHelperIntermediateNode()
151+
{
152+
TagMode = 0,
153+
TagName = "Test"
154+
});
151155

152-
builder.Push(new TagHelperHtmlAttributeIntermediateNode());
156+
builder.Push(new TagHelperHtmlAttributeIntermediateNode()
157+
{
158+
AttributeName = "Test",
159+
AttributeStructure = 0
160+
});
153161

154162
builder.Push(new CSharpExpressionIntermediateNode()
155163
{
@@ -188,9 +196,17 @@ public void InstrumentationPass_SkipsCSharpExpression_InsideTagHelperProperty()
188196

189197
var builder = IntermediateNodeBuilder.Create(documentNode);
190198

191-
builder.Push(new TagHelperIntermediateNode());
199+
builder.Push(new TagHelperIntermediateNode()
200+
{
201+
TagMode = 0,
202+
TagName = "Test"
203+
});
192204

193-
builder.Push(new TagHelperPropertyIntermediateNode());
205+
builder.Push(new TagHelperPropertyIntermediateNode(match: default)
206+
{
207+
AttributeName = "Test",
208+
AttributeStructure = 0
209+
});
194210

195211
builder.Push(new CSharpExpressionIntermediateNode()
196212
{
@@ -231,6 +247,8 @@ public void InstrumentationPass_InstrumentsTagHelper()
231247

232248
builder.Add(new TagHelperIntermediateNode()
233249
{
250+
TagMode = 0,
251+
TagName = "Test",
234252
Source = CreateSource(3)
235253
});
236254

@@ -254,7 +272,11 @@ public void InstrumentationPass_SkipsTagHelper_WithoutLocation()
254272

255273
var builder = IntermediateNodeBuilder.Create(documentNode);
256274

257-
builder.Push(new TagHelperIntermediateNode());
275+
builder.Push(new TagHelperIntermediateNode()
276+
{
277+
TagMode = 0,
278+
TagName = "Test"
279+
});
258280

259281
// Act
260282
ProjectEngine.ExecutePass<InstrumentationPass>(codeDocument, documentNode);

0 commit comments

Comments
 (0)