// Copyright 2014 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. // Flags: --allow-natives-syntax function foo(x) { var k = "value"; return x[k] = 1; }; %PrepareFunctionForOptimization(foo); var obj = {}; Object.defineProperty(obj, 'value', { set: function(x) { throw 'nope'; } }); try { foo(obj); } catch (e) { } try { foo(obj); } catch (e) { } %OptimizeFunctionOnNextCall(foo); try { foo(obj); } catch (e) { } function bar(x) { var k = "value"; return (x[k] = 1) ? "ok" : "nope"; }; %PrepareFunctionForOptimization(bar); var obj2 = {}; Object.defineProperty(obj2, 'value', { set: function(x) { throw 'nope'; return true; } }); try { bar(obj2); } catch (e) { } try { bar(obj2); } catch (e) { } %OptimizeFunctionOnNextCall(bar); try { bar(obj2); } catch (e) { }