Преглед изворни кода

Fix assert when building newly rooted path type

Paul Leathers пре 7 година
родитељ
комит
a653bc9024
3 измењених фајлова са 381 додато и 359 уклоњено
  1. 6 1
      lib/Runtime/Types/PathTypeHandler.cpp
  2. 12 0
      test/es5/objlitgetset3.js
  3. 363 358
      test/es5/rlexe.xml

+ 6 - 1
lib/Runtime/Types/PathTypeHandler.cpp

@@ -2695,7 +2695,12 @@ namespace Js
             newTypeHandler = PathTypeHandlerBase::FromTypeHandler(type->GetTypeHandler());
             if (attr == ObjectSlotAttr_Setter)
             {
-                newTypeHandler->SetSetterSlot(newTypeHandler->GetTypePath()->LookupInline(propertyId, newTypeHandler->GetPathLength()), (PathTypeSetterSlotIndex)(newTypeHandler->GetPathLength() - 1));
+                PropertyIndex getterIndex = newTypeHandler->GetTypePath()->LookupInline(propertyId, newTypeHandler->GetPathLength());
+                Assert(getterIndex != Constants::NoSlot);
+                if (attributes[getterIndex] & ObjectSlotAttr_Accessor)
+                {
+                    newTypeHandler->SetSetterSlot(getterIndex, (PathTypeSetterSlotIndex)(newTypeHandler->GetPathLength() - 1));
+                }
             }
         }
         Assert(newTypeHandler->GetPathLength() == GetPathLength());

+ 12 - 0
test/es5/objlitgetset3.js

@@ -0,0 +1,12 @@
+var v_8184 = {
+    d: "vEH1gs5LChZC6hiytm4BhQY6D1BvBbSR",
+    set d(x) { this.d = x + 0x1337; },
+    f: undefined,
+    d: -0,
+    m: 794.4080805517691,
+    get a() { return 1337; }
+};
+
+v_8184.__proto__ = {};
+if (v_8184.d === -0)
+    WScript.Echo('pass');

+ 363 - 358
test/es5/rlexe.xml

@@ -1,358 +1,363 @@
-<?xml version="1.0" encoding="utf-8"?>
-<regress-exe>
-  <test>
-    <default>
-      <files>reservedWords.js</files>
-      <baseline>reservedWords.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <compile-flags>-ES6Unicode-</compile-flags>
-      <files>Lex_u3.js</files>
-      <baseline>Lex_u3.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>array_every.js</files>
-      <baseline>array_every.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>array_some.js</files>
-      <baseline>array_some.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>array_forEach.js</files>
-      <baseline>array_forEach.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>array_map.js</files>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>array_filter.js</files>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>array_reduce.js</files>
-      <baseline>array_reduce.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>array_reduceright.js</files>
-      <baseline>array_reduceright.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>DateGetSet9.js</files>
-      <baseline>DateGetSet9.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>SemicolonAfterBlockEs5.js</files>
-      <baseline>SemicolonAfterBlockEs5.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>exceptions.js</files>
-      <baseline>exceptions3.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>ObjLitGetSet.js</files>
-      <baseline>ObjLitGetSet.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>ObjLitGetSet2.js</files>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>ObjLitGetSetParseOnly.js</files>
-      <baseline>ObjLitGetSetParseOnly.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <compile-flags>-Force:Deferparse</compile-flags>
-      <files>ObjLitGetSetParseOnly.js</files>
-      <baseline>ObjLitGetSetParseOnlyFdp.baseline</baseline>
-      <tags>exclude_test</tags>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>ObjLitInitFld.js</files>
-      <baseline>ObjLitInitFld.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>seal.js</files>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>freeze.js</files>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>extensible.js</files>
-      <baseline>extensible.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>array_length.js</files>
-      <baseline>array_length.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <compile-flags>-ForceES5Array</compile-flags>
-      <tags>exclude_test</tags>
-      <files>array_length.js</files>
-      <baseline>array_length.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>ES5ArrayIndexList.js</files>
-      <tags>exclude_debug,Slow</tags>
-      <timeout>900</timeout>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>createdp.js</files>
-      <baseline>createdp.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>defineProperty.js</files>
-      <baseline>defineProperty.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <compile-flags>-Serialized</compile-flags>
-      <files>defineProperty.js</files>
-      <baseline>defineProperty.baseline</baseline>
-      <tags>exclude_forceserialized</tags>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>defineIndexProperty.js</files>
-      <baseline>defineIndexProperty.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <compile-flags>-Serialized</compile-flags>
-      <files>defineIndexProperty.js</files>
-      <baseline>defineIndexProperty.baseline</baseline>
-      <tags>exclude_forceserialized</tags>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>enumerable.js</files>
-      <baseline>enumerable.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>hasItem.js</files>
-      <baseline>hasItem.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>regexSpace.js</files>
-      <baseline>regexSpace.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>EnumeratingWithES5.js</files>
-      <baseline>EnumeratingWithES5.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>InsufficientArguments.js</files>
-      <baseline>InsufficientArguments.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>recursivesetter.js</files>
-      <baseline>recursivesetter.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>valueof.js</files>
-      <baseline>valueof5.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>tostring_override.js</files>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>valueof_override.js</files>
-    </default>
-  </test>
-  <test>
-    <default>
-      <compile-flags>-ForceStringKeyedSimpleDictionaryTypeHandler</compile-flags>
-      <files>tostring_override.js</files>
-    </default>
-  </test>
-  <test>
-    <default>
-      <compile-flags>-ForceStringKeyedSimpleDictionaryTypeHandler</compile-flags>
-      <files>valueof_override.js</files>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>TypeConversions.js</files>
-      <baseline>TypeConversions.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>RegExpStrictDelete.js</files>
-      <baseline>RegExpStrictDelete.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>settersArguments.js</files>
-      <baseline>settersArguments.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <compile-flags>-Force:Deferparse</compile-flags>
-      <files>settersArguments.js</files>
-      <baseline>settersArguments.baseline</baseline>
-      <tags>exclude_test</tags>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>augmentPrimitive.js</files>
-      <baseline>augmentPrimitive.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>setget.js</files>
-      <baseline>setget.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>es5array_objproto.js</files>
-      <baseline>es5array_objproto.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>es5array_objproto_builtin.js</files>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>es5array_arrayproto.js</files>
-      <baseline>es5array_arrayproto.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>es5array_arrayproto_opt.js</files>
-      <baseline>es5array_arrayproto_opt.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>es5array_arrayproto_crosssite.js</files>
-      <baseline>es5array_arrayproto_crosssite.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>es5array_protoarr.js</files>
-      <baseline>es5array_proto.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>es5array_protoobj.js</files>
-      <baseline>es5array_proto.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>es5array_protoobj_crosssite.js</files>
-      <baseline>es5array_protoobj_crosssite.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>es5array_replaceprotoarr.js</files>
-      <baseline>es5array_proto.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>es5array_replaceprotoobj.js</files>
-      <baseline>es5array_proto.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>resetproperty.js</files>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>es5array_enum_edit.js</files>
-      <baseline>es5array_enum_edit.baseline</baseline>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>es5_defineProperty_arrayLength.js</files>
-    </default>
-  </test>
-  <test>
-    <default>
-      <files>strictdefaultsetter.js</files>
-    </default>
-  </test>
-</regress-exe>
+<?xml version="1.0" encoding="utf-8"?>
+<regress-exe>
+  <test>
+    <default>
+      <files>reservedWords.js</files>
+      <baseline>reservedWords.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <compile-flags>-ES6Unicode-</compile-flags>
+      <files>Lex_u3.js</files>
+      <baseline>Lex_u3.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>array_every.js</files>
+      <baseline>array_every.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>array_some.js</files>
+      <baseline>array_some.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>array_forEach.js</files>
+      <baseline>array_forEach.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>array_map.js</files>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>array_filter.js</files>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>array_reduce.js</files>
+      <baseline>array_reduce.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>array_reduceright.js</files>
+      <baseline>array_reduceright.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>DateGetSet9.js</files>
+      <baseline>DateGetSet9.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>SemicolonAfterBlockEs5.js</files>
+      <baseline>SemicolonAfterBlockEs5.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>exceptions.js</files>
+      <baseline>exceptions3.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>ObjLitGetSet.js</files>
+      <baseline>ObjLitGetSet.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>ObjLitGetSet2.js</files>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>ObjLitGetSet3.js</files>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>ObjLitGetSetParseOnly.js</files>
+      <baseline>ObjLitGetSetParseOnly.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <compile-flags>-Force:Deferparse</compile-flags>
+      <files>ObjLitGetSetParseOnly.js</files>
+      <baseline>ObjLitGetSetParseOnlyFdp.baseline</baseline>
+      <tags>exclude_test</tags>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>ObjLitInitFld.js</files>
+      <baseline>ObjLitInitFld.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>seal.js</files>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>freeze.js</files>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>extensible.js</files>
+      <baseline>extensible.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>array_length.js</files>
+      <baseline>array_length.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <compile-flags>-ForceES5Array</compile-flags>
+      <tags>exclude_test</tags>
+      <files>array_length.js</files>
+      <baseline>array_length.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>ES5ArrayIndexList.js</files>
+      <tags>exclude_debug,Slow</tags>
+      <timeout>900</timeout>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>createdp.js</files>
+      <baseline>createdp.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>defineProperty.js</files>
+      <baseline>defineProperty.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <compile-flags>-Serialized</compile-flags>
+      <files>defineProperty.js</files>
+      <baseline>defineProperty.baseline</baseline>
+      <tags>exclude_forceserialized</tags>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>defineIndexProperty.js</files>
+      <baseline>defineIndexProperty.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <compile-flags>-Serialized</compile-flags>
+      <files>defineIndexProperty.js</files>
+      <baseline>defineIndexProperty.baseline</baseline>
+      <tags>exclude_forceserialized</tags>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>enumerable.js</files>
+      <baseline>enumerable.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>hasItem.js</files>
+      <baseline>hasItem.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>regexSpace.js</files>
+      <baseline>regexSpace.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>EnumeratingWithES5.js</files>
+      <baseline>EnumeratingWithES5.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>InsufficientArguments.js</files>
+      <baseline>InsufficientArguments.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>recursivesetter.js</files>
+      <baseline>recursivesetter.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>valueof.js</files>
+      <baseline>valueof5.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>tostring_override.js</files>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>valueof_override.js</files>
+    </default>
+  </test>
+  <test>
+    <default>
+      <compile-flags>-ForceStringKeyedSimpleDictionaryTypeHandler</compile-flags>
+      <files>tostring_override.js</files>
+    </default>
+  </test>
+  <test>
+    <default>
+      <compile-flags>-ForceStringKeyedSimpleDictionaryTypeHandler</compile-flags>
+      <files>valueof_override.js</files>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>TypeConversions.js</files>
+      <baseline>TypeConversions.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>RegExpStrictDelete.js</files>
+      <baseline>RegExpStrictDelete.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>settersArguments.js</files>
+      <baseline>settersArguments.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <compile-flags>-Force:Deferparse</compile-flags>
+      <files>settersArguments.js</files>
+      <baseline>settersArguments.baseline</baseline>
+      <tags>exclude_test</tags>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>augmentPrimitive.js</files>
+      <baseline>augmentPrimitive.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>setget.js</files>
+      <baseline>setget.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>es5array_objproto.js</files>
+      <baseline>es5array_objproto.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>es5array_objproto_builtin.js</files>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>es5array_arrayproto.js</files>
+      <baseline>es5array_arrayproto.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>es5array_arrayproto_opt.js</files>
+      <baseline>es5array_arrayproto_opt.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>es5array_arrayproto_crosssite.js</files>
+      <baseline>es5array_arrayproto_crosssite.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>es5array_protoarr.js</files>
+      <baseline>es5array_proto.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>es5array_protoobj.js</files>
+      <baseline>es5array_proto.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>es5array_protoobj_crosssite.js</files>
+      <baseline>es5array_protoobj_crosssite.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>es5array_replaceprotoarr.js</files>
+      <baseline>es5array_proto.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>es5array_replaceprotoobj.js</files>
+      <baseline>es5array_proto.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>resetproperty.js</files>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>es5array_enum_edit.js</files>
+      <baseline>es5array_enum_edit.baseline</baseline>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>es5_defineProperty_arrayLength.js</files>
+    </default>
+  </test>
+  <test>
+    <default>
+      <files>strictdefaultsetter.js</files>
+    </default>
+  </test>
+</regress-exe>