// Copyright 2015 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(a, b) { var bname = "b"; this["a"] = a; this[bname] = b; this.x = this.a + this.b; } var f1 = new Foo(3, 4); assertEquals(7, f1.x); // SMIs for (var i = 0; i < 6; i++) { var f = new Foo(i, i + 2); assertEquals(i + i + 2, f.x); } // derbles for (var i = 0.25; i < 6.25; i++) { var f = new Foo(i, i + 2); assertEquals(i + i + 2, f.x); } // stirngs for (var i = 0; i < 6; i++) { var f = new Foo(i + '', i + 2 + ''); assertEquals(i + '' + (i + 2 + ''), f.x); } { function Global(i) { this.bla = i; }; %PrepareFunctionForOptimization(Global); Global(0); Global(1); %OptimizeFunctionOnNextCall(Global); Global(2); assertEquals(bla, 2); } { function access(obj) { obj.bla = 42; } access({a: 0}); access({b: 0}); access({c: 0}); access({d: 0}); access({e: 0}); var global = this; function foo() { access(global); }; %PrepareFunctionForOptimization(foo); ; foo(); foo(); %OptimizeFunctionOnNextCall(foo); foo(); }