OLD | NEW |
| (Empty) |
1 // 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: --strong-mode --allow-natives-syntax | |
6 // Flags: --harmony-arrow-functions --harmony-rest-parameters | |
7 | |
8 | |
9 (function WeakObjectLiterals() { | |
10 assertTrue(!%IsStrong({})); | |
11 assertTrue(!%IsStrong({a: 0, b: 0})); | |
12 assertTrue(!%IsStrong({f: function(){}})); | |
13 assertTrue(!%IsStrong(Realm.eval(Realm.current(), | |
14 "({f: function(){}})"))); | |
15 })(); | |
16 | |
17 (function StrongObjectLiterals() { | |
18 'use strong'; | |
19 assertTrue(%IsStrong({})); | |
20 assertTrue(%IsStrong({a: 0, b: 0})); | |
21 assertTrue(%IsStrong({__proto__: {}, get a() {}, set b(x) {}})); | |
22 assertTrue(%IsStrong({[Date() + ""]: 0, [Symbol()]: 0})); | |
23 // TODO(rossberg): super does not work yet | |
24 // assertTrue(%IsStrong({m() { super.m() }})); | |
25 // Object literals with constant functions are treated specially, | |
26 // but currently only on the toplevel. | |
27 assertTrue(%IsStrong({f: function(){}})); | |
28 // TODO(rossberg): implement strong object literals with functions | |
29 // assertTrue(%IsStrong(Realm.eval(Realm.current(), | |
30 // "'use strong'; ({f: function(){}})"))); | |
31 })(); | |
32 | |
33 (function WeakArrayLiterals(...args) { | |
34 assertTrue(!%IsStrong(args)); | |
35 assertTrue(!%IsStrong([])); | |
36 assertTrue(!%IsStrong([1, 2, 3])); | |
37 Array.prototype = {} | |
38 assertTrue(!%IsStrong([])); | |
39 assertTrue(!%IsStrong([1, 2, 3])); | |
40 })(); | |
41 | |
42 (function StrongArrayLiterals(...args) { | |
43 'use strong'; | |
44 // TODO(rossberg): implement strong array literals | |
45 // assertTrue(%IsStrong(args)); | |
46 // assertTrue(%IsStrong([])); | |
47 // assertTrue(%IsStrong([1, 2, 3])); | |
48 // Array.prototype = {} | |
49 // assertTrue(%IsStrong([])); | |
50 // assertTrue(%IsStrong([1, 2, 3])); | |
51 })(0); // TODO(arv): drop dummy | |
52 | |
53 (function WeakFunctionLiterals() { | |
54 function f() {} | |
55 assertTrue(!%IsStrong(f)); | |
56 assertTrue(!%IsStrong(function(){})); | |
57 assertTrue(!%IsStrong(() => {})); | |
58 assertTrue(!%IsStrong(x => x)); | |
59 })(); | |
60 | |
61 (function StrongFunctionLiterals(g) { | |
62 'use strong'; | |
63 function f() {} | |
64 assertTrue(%IsStrong(f)); | |
65 assertTrue(%IsStrong(g)); | |
66 assertTrue(%IsStrong(function(){})); | |
67 assertTrue(%IsStrong(() => {})); | |
68 assertTrue(%IsStrong(x => x)); | |
69 })(function() { 'use strong' }); | |
70 | |
71 (function WeakRegExpLiterals() { | |
72 assertTrue(!%IsStrong(/abc/)); | |
73 })(); | |
74 | |
75 (function StrongRegExpLiterals() { | |
76 'use strong'; | |
77 // TODO(rossberg): implement strong regexp literals | |
78 // assertTrue(%IsStrong(/abc/)); | |
79 })(); | |
OLD | NEW |