// Copyright 2019 the V8 project authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style license that can be | |
// found in the LICENSE file. | |
var count = 0; | |
function load(a) { | |
var prop = { | |
toString: function() { | |
count++; | |
return 'z'; | |
} | |
}; | |
a[prop] ^= 1; | |
} | |
function f(null_or_undefined) { | |
// Turn the LoadIC megamorphic | |
load({a0:1, z:2}); | |
load({a1:1, z:2}); | |
load({a2:1, z:2}); | |
load({a3:1, z:2}); | |
load({a4:1, z:2}); | |
// Now try null to check if generic IC handles this correctly. | |
// It shouldn't call prop.toString. | |
load(null_or_undefined); | |
} | |
try { | |
f(null); | |
} catch(error) { | |
assertInstanceof(error, TypeError); | |
assertSame(10, count); | |
} | |
try { | |
count = 0; | |
f(undefined); | |
} catch(error) { | |
assertInstanceof(error, TypeError); | |
assertSame(10, count); | |
} |