mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Core: add workaround for iOS JIT error in isArrayLike
Fixes gh-2145
This commit is contained in:
parent
ab40725879
commit
1541664582
@ -432,7 +432,12 @@ function(i, name) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
function isArraylike( obj ) {
|
function isArraylike( obj ) {
|
||||||
var length = obj.length,
|
|
||||||
|
// Support: iOS 8.2 (not reproducible in simulator)
|
||||||
|
// `in` check used to prevent JIT error (gh-2145)
|
||||||
|
// hasOwn isn't used here due to false negatives
|
||||||
|
// regarding Nodelist length in IE
|
||||||
|
var length = "length" in obj && obj.length,
|
||||||
type = jQuery.type( obj );
|
type = jQuery.type( obj );
|
||||||
|
|
||||||
if ( type === "function" || jQuery.isWindow( obj ) ) {
|
if ( type === "function" || jQuery.isWindow( obj ) ) {
|
||||||
|
@ -1202,6 +1202,27 @@ test("jQuery.each(Object,Function)", function() {
|
|||||||
equal( i, document.styleSheets.length, "Iteration over document.styleSheets" );
|
equal( i, document.styleSheets.length, "Iteration over document.styleSheets" );
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test( "JIT compilation does not interfere with length retrieval (gh-2145)", function() {
|
||||||
|
expect( 4 );
|
||||||
|
|
||||||
|
var i;
|
||||||
|
|
||||||
|
// Trigger JIT compilation of jQuery.each – and therefore isArraylike – in iOS.
|
||||||
|
// Convince JSC to use one of its optimizing compilers
|
||||||
|
// by providing code which can be LICM'd into nothing.
|
||||||
|
for ( i = 0; i < 1000; i++ ) {
|
||||||
|
jQuery.each( [] );
|
||||||
|
}
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
jQuery.each( { 1: "1", 2: "2", 3: "3" }, function( index ) {
|
||||||
|
equal( ++i, index, "Iteration over object with solely " +
|
||||||
|
"numeric indices (gh-2145 JIT iOS 8 bug)" );
|
||||||
|
});
|
||||||
|
equal( i, 3, "Iteration over object with solely " +
|
||||||
|
"numeric indices (gh-2145 JIT iOS 8 bug)" );
|
||||||
|
});
|
||||||
|
|
||||||
test("jQuery.makeArray", function(){
|
test("jQuery.makeArray", function(){
|
||||||
expect(15);
|
expect(15);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user