Browse Source

Fix handling of member expression as object property key (#975)

Marko Lahma 3 years ago
parent
commit
d932de757e
2 changed files with 26 additions and 1 deletions
  1. 25 0
      Jint.Tests/Runtime/EngineTests.cs
  2. 1 1
      Jint/EsprimaExtensions.cs

+ 25 - 0
Jint.Tests/Runtime/EngineTests.cs

@@ -2744,6 +2744,31 @@ x.test = {
             Assert.Equal(1389, result);
         }
 
+        [Fact]
+        public void MemberExpressionInObjectProperty()
+        {
+            var engine = new Engine();
+            dynamic result = engine.Evaluate(@"
+                const colorMap = {
+                    Red: ""red"",
+                    Orange: ""orange"",
+                    White: ""white"",
+                };
+
+                Object
+                    .keys(colorMap)
+                    .reduce((agg, next) => {
+                          return {...agg, ...{ [colorMap[next]]: next } };
+                    },
+                    {});
+                ")
+                .ToObject();
+
+            Assert.Equal("Red", result.red);
+            Assert.Equal("Orange", result.orange);
+            Assert.Equal("White", result.white);
+        }
+
         private class Wrapper
         {
             public Testificate Test { get; set; }

+ 1 - 1
Jint/EsprimaExtensions.cs

@@ -48,7 +48,7 @@ namespace Jint
                 or Nodes.UpdateExpression
                 or Nodes.AssignmentExpression
                 or Nodes.UnaryExpression
-                || expression is StaticMemberExpression)
+                or Nodes.MemberExpression)
             {
                 propertyKey = TypeConverter.ToPropertyKey(JintExpression.Build(engine, expression).GetValue());
                 return true;