blob: 9a707e8a08caa28dcc929f4d73224cc04cb6f072 [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// Copyright 2015 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 test1(s) {
8 return s.toString;
9}
10assertSame(test1(Symbol()), Symbol.prototype.toString);
11assertSame(test1(Symbol()), Symbol.prototype.toString);
12%OptimizeFunctionOnNextCall(test1);
13assertSame(test1(Symbol()), Symbol.prototype.toString);
14
15function test2(s) {
16 return s.valueOf;
17}
18assertSame(test2(Symbol()), Symbol.prototype.valueOf);
19assertSame(test2(Symbol()), Symbol.prototype.valueOf);
20%OptimizeFunctionOnNextCall(test2);
21assertSame(test2(Symbol()), Symbol.prototype.valueOf);
22
23Symbol.prototype.foo = 1;
24function test3(s) {
25 return s["foo"];
26}
27assertEquals(test3(Symbol()), 1);
28assertEquals(test3(Symbol()), 1);
29%OptimizeFunctionOnNextCall(test3);
30assertEquals(test3(Symbol()), 1);
31
32Symbol.prototype.bar = function() { "use strict"; return this; }
33function test4(s) {
34 return s.bar();
35}
36var s = Symbol("foo");
37assertEquals(test4(s), s);
38assertEquals(test4(s), s);
39%OptimizeFunctionOnNextCall(test4);
40assertEquals(test4(s), s);