OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 | 46 |
47 | 47 |
48 // Calling (call, Function.prototype.call, Function.prototype.apply, | 48 // Calling (call, Function.prototype.call, Function.prototype.apply, |
49 // Function.prototype.bind). | 49 // Function.prototype.bind). |
50 | 50 |
51 var global_object = this | 51 var global_object = this |
52 var receiver | 52 var receiver |
53 | 53 |
54 function TestCall(isStrict, callTrap) { | 54 function TestCall(isStrict, callTrap) { |
55 assertEquals(42, callTrap(5, 37)) | 55 assertEquals(42, callTrap(5, 37)) |
56 // TODO(rossberg): strict mode seems to be broken on x64... | 56 assertSame(isStrict ? undefined : global_object, receiver) |
57 // assertSame(isStrict ? undefined : global_object, receiver) | |
58 | 57 |
59 var handler = { | 58 var handler = { |
60 get: function(r, k) { | 59 get: function(r, k) { |
61 return k == "length" ? 2 : Function.prototype[k] | 60 return k == "length" ? 2 : Function.prototype[k] |
62 } | 61 } |
63 } | 62 } |
64 var f = Proxy.createFunction(handler, callTrap) | 63 var f = Proxy.createFunction(handler, callTrap) |
65 var o = {f: f} | 64 var o = {f: f} |
66 global_object.f = f | 65 global_object.f = f |
67 | 66 |
68 receiver = 333 | 67 receiver = 333 |
69 assertEquals(42, f(11, 31)) | 68 assertEquals(42, f(11, 31)) |
70 // TODO(rossberg): strict mode seems to be broken on x64... | 69 assertSame(isStrict ? undefined : global_object, receiver) |
71 // assertSame(isStrict ? undefined : global_object, receiver) | |
72 receiver = 333 | 70 receiver = 333 |
73 assertEquals(42, o.f(10, 32)) | 71 assertEquals(42, o.f(10, 32)) |
74 assertSame(o, receiver) | 72 assertSame(o, receiver) |
75 receiver = 333 | 73 receiver = 333 |
76 assertEquals(42, o["f"](9, 33)) | 74 assertEquals(42, o["f"](9, 33)) |
77 assertSame(o, receiver) | 75 assertSame(o, receiver) |
78 receiver = 333 | 76 receiver = 333 |
79 assertEquals(42, (1, o).f(8, 34)) | 77 assertEquals(42, (1, o).f(8, 34)) |
80 assertSame(o, receiver) | 78 assertSame(o, receiver) |
81 receiver = 333 | 79 receiver = 333 |
(...skipping 657 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
739 } | 737 } |
740 } | 738 } |
741 } | 739 } |
742 } | 740 } |
743 } | 741 } |
744 } | 742 } |
745 } | 743 } |
746 | 744 |
747 TestCalls() | 745 TestCalls() |
748 */ | 746 */ |
| 747 |
| 748 var realms = [Realm.create(), Realm.create()]; |
| 749 Realm.shared = {}; |
| 750 |
| 751 Realm.eval(realms[0], "function f() { return this; };"); |
| 752 Realm.eval(realms[0], "Realm.shared.f = f;"); |
| 753 Realm.eval(realms[0], "Realm.shared.fg = this;"); |
| 754 Realm.eval(realms[1], "function g() { return this; };"); |
| 755 Realm.eval(realms[1], "Realm.shared.g = g;"); |
| 756 Realm.eval(realms[1], "Realm.shared.gg = this;"); |
| 757 |
| 758 var fp = Proxy.createFunction({}, Realm.shared.f); |
| 759 var gp = Proxy.createFunction({}, Realm.shared.g); |
| 760 |
| 761 for (var i = 0; i < 10; i++) { |
| 762 assertEquals(Realm.shared.fg, fp()); |
| 763 assertEquals(Realm.shared.gg, gp()); |
| 764 |
| 765 with (this) { |
| 766 assertEquals(Realm.shared.fg, fp()); |
| 767 assertEquals(Realm.shared.gg, gp()); |
| 768 } |
| 769 |
| 770 with ({}) { |
| 771 assertEquals(Realm.shared.fg, fp()); |
| 772 assertEquals(Realm.shared.gg, gp()); |
| 773 } |
| 774 } |
OLD | NEW |