| function assert(b, m = "Bad!") { |
| if (!b) { |
| throw new Error(m); |
| } |
| } |
| |
| function test(f, iters = 1000) { |
| for (let i = 0; i < iters; i++) |
| f(i); |
| } |
| |
| function func(x) { |
| return x; |
| } |
| noInline(func); |
| |
| function check(index, arr, B) |
| { |
| for (let i = 0; i < 1000; i++) |
| assert(arr[i] instanceof B); |
| } |
| noInline(check); |
| |
| test(function body(index) { |
| class A { |
| constructor(x, f = func) |
| { |
| this._value = x; |
| this._func = f; |
| } |
| } |
| |
| class B extends A { |
| } |
| |
| let arr = []; |
| for (let i = 0; i < 1000; i++) |
| arr.push(new B(20)); |
| |
| check(index, arr, B); |
| }, 8); |