diff --git a/src/Cottle.Test/Parsers/OptimizeParserTester.cs b/src/Cottle.Test/Parsers/OptimizeParserTester.cs index 0ef43188..484555fd 100644 --- a/src/Cottle.Test/Parsers/OptimizeParserTester.cs +++ b/src/Cottle.Test/Parsers/OptimizeParserTester.cs @@ -61,7 +61,7 @@ public void Parse_OptimizeAccess_SkipWhenNonPureIndices() new[] { new ExpressionElement(Expression.CreateConstant(0), - Expression.CreateInvoke(OptimizeParserTester.ImpureFunction, Array.Empty())), + Expression.CreateSymbol("AAA")), new ExpressionElement(Expression.CreateConstant(1), Expression.CreateSymbol("BBB")), new ExpressionElement(Expression.CreateSymbol("x"), diff --git a/src/Cottle/Parsers/Optimize/Optimizers/RecursiveOptimizer.cs b/src/Cottle/Parsers/Optimize/Optimizers/RecursiveOptimizer.cs index 465f37ef..b1bfb3ca 100644 --- a/src/Cottle/Parsers/Optimize/Optimizers/RecursiveOptimizer.cs +++ b/src/Cottle/Parsers/Optimize/Optimizers/RecursiveOptimizer.cs @@ -27,18 +27,18 @@ internal class RecursiveOptimizer : IOptimizer return Expression.CreateConstant(source.Value.Fields[subscript]); case ExpressionType.Map: - var impure = false; + var unsure = false; var value = Expression.Void; foreach (var element in source.Elements) { - if (!RecursiveOptimizer.IsPure(element.Key) || !RecursiveOptimizer.IsPure(element.Value)) - impure = true; - else if (element.Key.Type == ExpressionType.Constant && element.Key.Value == subscript) + if (element.Key.Type != ExpressionType.Constant || !RecursiveOptimizer.IsPure(element.Value)) + unsure = true; + else if (element.Key.Value == subscript) value = element.Value; } - return impure ? expression : value; + return unsure ? expression : value; default: return expression;