// This tests that we don't fast path intrinsics when they should not be fast pathed. Currently, | |
// that means that we don't inline length, byteLength, and byteOffset when they are called | |
// from a non-TypedArray. | |
(function body() { | |
function foo(a) { | |
return a.length + a.byteLength + a.byteOffset; | |
} | |
noInline(foo); | |
let proto = { } | |
let properties = ["length", "byteLength", "byteOffset"]; | |
properties.map(function(name) { | |
let getter = Int32Array.prototype.__lookupGetter__(name); | |
Object.defineProperty(proto, name, { get : getter }); | |
}); | |
function Bar() { | |
return this; | |
} | |
Bar.prototype = proto; | |
let bar = new Bar(); | |
let noThrow = false; | |
for (let i = 0; i < 100000; i++) { | |
try { | |
foo(bar); | |
noThrow = true | |
} catch (e) { | |
} | |
if (noThrow) | |
throw "broken"; | |
} | |
})(); |