Prechádzať zdrojové kódy

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

Marko Lahma 3 rokov pred
rodič
commit
d932de757e

+ 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;