Title: [151284] trunk/Source/_javascript_Core
Revision
151284
Author
[email protected]
Date
2013-06-06 12:58:30 -0700 (Thu, 06 Jun 2013)

Log Message

DFG CFA shouldn't filter ArrayModes with ALL_NON_ARRAY_ARRAY_MODES if the speculated type is not SpecArray
https://bugs.webkit.org/show_bug.cgi?id=117279
<rdar://problem/14078025>        

Reviewed by Mark Hahnenberg.

* dfg/DFGAbstractValue.h:
(JSC::DFG::AbstractValue::filterArrayModesByType):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (151283 => 151284)


--- trunk/Source/_javascript_Core/ChangeLog	2013-06-06 18:45:54 UTC (rev 151283)
+++ trunk/Source/_javascript_Core/ChangeLog	2013-06-06 19:58:30 UTC (rev 151284)
@@ -1,3 +1,14 @@
+2013-06-05  Filip Pizlo  <[email protected]>
+
+        DFG CFA shouldn't filter ArrayModes with ALL_NON_ARRAY_ARRAY_MODES if the speculated type is not SpecArray
+        https://bugs.webkit.org/show_bug.cgi?id=117279
+        <rdar://problem/14078025>        
+
+        Reviewed by Mark Hahnenberg.
+
+        * dfg/DFGAbstractValue.h:
+        (JSC::DFG::AbstractValue::filterArrayModesByType):
+
 2013-06-05  Michael Saboff  <[email protected]>
 
         JSC: Crash beneath cti_op_div @ http://gmailblog.blogspot.com

Modified: trunk/Source/_javascript_Core/dfg/DFGAbstractValue.h (151283 => 151284)


--- trunk/Source/_javascript_Core/dfg/DFGAbstractValue.h	2013-06-06 18:45:54 UTC (rev 151283)
+++ trunk/Source/_javascript_Core/dfg/DFGAbstractValue.h	2013-06-06 19:58:30 UTC (rev 151284)
@@ -525,8 +525,17 @@
             m_arrayModes = 0;
         else if (!(m_type & ~SpecArray))
             m_arrayModes &= ALL_ARRAY_ARRAY_MODES;
-        else if (!(m_type & SpecArray))
-            m_arrayModes &= ALL_NON_ARRAY_ARRAY_MODES;
+
+        // NOTE: If m_type doesn't have SpecArray set, that doesn't mean that the
+        // array modes have to be a subset of ALL_NON_ARRAY_ARRAY_MODES, since
+        // in the speculated type type-system, RegExpMatchesArry and ArrayPrototype
+        // are Otherobj (since they are not *exactly* JSArray) but in the ArrayModes
+        // type system they are arrays (since they expose the magical length
+        // property and are otherwise allocated using array allocation). Hence the
+        // following would be wrong:
+        //
+        // if (!(m_type & SpecArray))
+        //    m_arrayModes &= ALL_NON_ARRAY_ARRAY_MODES;
     }
 };
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to