1// Copyright 2014 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Flags: --allow-natives-syntax
6
7function foo(x) {
8  var k = "value";
9  return x[k] = 1;
10}
11var obj = {};
12Object.defineProperty(obj, "value", {set: function(x) { throw "nope"; }});
13try { foo(obj); } catch(e) {}
14try { foo(obj); } catch(e) {}
15%OptimizeFunctionOnNextCall(foo);
16try { foo(obj); } catch(e) {}
17
18function bar(x) {
19  var k = "value";
20  return (x[k] = 1) ? "ok" : "nope";
21}
22var obj2 = {};
23Object.defineProperty(obj2, "value",
24    {set: function(x) { throw "nope"; return true; } });
25
26try { bar(obj2); } catch(e) {}
27try { bar(obj2); } catch(e) {}
28%OptimizeFunctionOnNextCall(bar);
29try { bar(obj2); } catch(e) {}
30