Skip to content

Commit d262d07

Browse files
authored
Remove Lookup usage to improve performance (#725)
1 parent c6d92c8 commit d262d07

File tree

4 files changed

+21
-10
lines changed

4 files changed

+21
-10
lines changed

.editorconfig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@ csharp_style_prefer_range_operator = false
8989
dotnet_diagnostic.IDE1006.severity = silent
9090
csharp_prefer_system_threading_lock = true:suggestion
9191

92+
# IDE0078: Use pattern matching
93+
dotnet_diagnostic.IDE0078.severity = silent
94+
9295
[*.{cs,vb}]
9396
#### Naming styles ####
9497

Directory.Packages.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<PackageVersion Include="System.Reflection.Emit.Lightweight" Version="4.7.0" />
1717

1818
<!-- Common to all TFMs -->
19-
<PackageVersion Include="Parlot" Version="1.2.1" />
19+
<PackageVersion Include="Parlot" Version="1.2.2" />
2020
<PackageVersion Include="TimeZoneConverter" Version="6.1.0" />
2121

2222
<!-- Benchmarks -->

Fluid.Benchmarks/FluidBenchmarks.cs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
using BenchmarkDotNet.Attributes;
1+
using BenchmarkDotNet.Attributes;
22

33
namespace Fluid.Benchmarks
44
{
5-
[MemoryDiagnoser, ShortRunJob]
5+
[MemoryDiagnoser]
66
public class FluidBenchmarks : BaseBenchmarks
77
{
88
private readonly TemplateOptions _options = new TemplateOptions();
99
private readonly FluidParser _parser = new FluidParser();
1010
private readonly IFluidTemplate _fluidTemplate;
11+
private readonly FluidParser _compiledParser = new FluidParser().Compile();
1112

1213
public FluidBenchmarks()
1314
{
@@ -28,6 +29,18 @@ public override object ParseBig()
2829
return _parser.Parse(BlogPostTemplate);
2930
}
3031

32+
[Benchmark]
33+
public object ParseCompiled()
34+
{
35+
return _compiledParser.Parse(ProductTemplate);
36+
}
37+
38+
[Benchmark]
39+
public object ParseBigCompiled()
40+
{
41+
return _compiledParser.Parse(BlogPostTemplate);
42+
}
43+
3144
[Benchmark]
3245
public override string Render()
3346
{

Fluid/FluidParser.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
using Fluid.Values;
55
using Parlot;
66
using Parlot.Fluent;
7-
using Parlot.Rewriting;
87
using System.Globalization;
98
using System.Runtime.CompilerServices;
109
using System.Text.Encodings.Web;
@@ -52,8 +51,7 @@ public class FluidParser
5251
protected readonly Parser<IReadOnlyList<FunctionCallArgument>> FunctionCallArgumentsList;
5352
protected readonly Parser<Expression> LogicalExpression;
5453
protected readonly Parser<Expression> CombinatoryExpression; // and | or
55-
protected readonly Parser<Expression> Primary;
56-
protected readonly Deferred<Expression> PrimaryInternal = Deferred<Expression>();
54+
protected readonly Deferred<Expression> Primary = Deferred<Expression>();
5755
protected readonly Deferred<Expression> FilterExpression = Deferred<Expression>();
5856
protected readonly Deferred<IReadOnlyList<Statement>> KnownTagsList = Deferred<IReadOnlyList<Statement>>();
5957
protected readonly Deferred<IReadOnlyList<Statement>> AnyTagsList = Deferred<IReadOnlyList<Statement>>();
@@ -78,9 +76,6 @@ public FluidParser(FluidParserOptions parserOptions)
7876
String.Name = "String";
7977
Number.Name = "Number";
8078

81-
// Build lookup for String/Member/Number/Range
82-
Primary = PrimaryInternal.Lookup((ISeekable)String, (ISeekable)new IdentifierParser(), (ISeekable)Number, (ISeekable)LParen);
83-
8479
var Integer = Terms.Integer().Then<Expression>(x => new LiteralExpression(NumberValue.Create(x)));
8580
Integer.Name = "Integer";
8681

@@ -128,7 +123,7 @@ public FluidParser(FluidParserOptions parserOptions)
128123
Range.Name = "Range";
129124

130125
// primary => NUMBER | STRING | property
131-
PrimaryInternal.Parser =
126+
Primary.Parser =
132127
String.Then<Expression>(x => new LiteralExpression(StringValue.Create(x)))
133128
.Or(Member.Then<Expression>(static x =>
134129
{

0 commit comments

Comments
 (0)