Title: [201315] trunk/Source/_javascript_Core
Revision
201315
Author
[email protected]
Date
2016-05-23 20:27:45 -0700 (Mon, 23 May 2016)

Log Message

REGRESSION (196374): deleting a global property is expensive
https://bugs.webkit.org/show_bug.cgi?id=158005

Reviewed by Chris Dumez.

* runtime/JSObject.cpp:
(JSC::JSObject::deleteProperty): We only need to reify static properties
if the name being deleted matches a static property. Otherwise, we can
be sure that delete won't observe any static properties.

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (201314 => 201315)


--- trunk/Source/_javascript_Core/ChangeLog	2016-05-24 02:10:16 UTC (rev 201314)
+++ trunk/Source/_javascript_Core/ChangeLog	2016-05-24 03:27:45 UTC (rev 201315)
@@ -1,3 +1,15 @@
+2016-05-23  Geoffrey Garen  <[email protected]>
+
+        REGRESSION (196374): deleting a global property is expensive
+        https://bugs.webkit.org/show_bug.cgi?id=158005
+
+        Reviewed by Chris Dumez.
+
+        * runtime/JSObject.cpp:
+        (JSC::JSObject::deleteProperty): We only need to reify static properties
+        if the name being deleted matches a static property. Otherwise, we can
+        be sure that delete won't observe any static properties.
+
 2016-05-23  Saam barati  <[email protected]>
 
         The baseline JIT crashes when compiling "(1,1)/1"

Modified: trunk/Source/_javascript_Core/runtime/JSObject.cpp (201314 => 201315)


--- trunk/Source/_javascript_Core/runtime/JSObject.cpp	2016-05-24 02:10:16 UTC (rev 201314)
+++ trunk/Source/_javascript_Core/runtime/JSObject.cpp	2016-05-24 03:27:45 UTC (rev 201315)
@@ -1495,8 +1495,13 @@
     if (Optional<uint32_t> index = parseIndex(propertyName))
         return thisObject->methodTable(vm)->deletePropertyByIndex(thisObject, exec, index.value());
 
-    if (!thisObject->staticFunctionsReified())
-        thisObject->reifyAllStaticProperties(exec);
+    if (!thisObject->staticFunctionsReified()) {
+        if (auto* entry = thisObject->findPropertyHashEntry(propertyName)) {
+            if (entry->attributes() & DontDelete)
+                return false;
+            thisObject->reifyAllStaticProperties(exec);
+        }
+    }
 
     unsigned attributes;
     if (isValidOffset(thisObject->structure(vm)->get(vm, propertyName, attributes))) {
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to