Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(196)

Side by Side Diff: test/mjsunit/strong/class-literals.js

Issue 1347243004: [strong] Implement revised strong class semantics (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: \cl feedback Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/runtime/runtime-classes.cc ('k') | test/mjsunit/strong/class-object-frozen.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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
7 'use strict';
8
9 function assertWeakClassWeakInstances(x) {
10 assertFalse(%IsStrong(x));
11 assertFalse(%IsStrong(x.prototype));
12 assertFalse(%IsStrong(new x));
13 }
14
15 function assertWeakClassStrongInstances(x) {
16 assertFalse(%IsStrong(x));
17 assertFalse(%IsStrong(x.prototype));
18 assertTrue(%IsStrong(new x));
19 }
20
21 function assertStrongClassWeakInstances(x) {
22 assertTrue(%IsStrong(x));
23 assertTrue(%IsStrong(x.prototype));
24 assertFalse(%IsStrong(new x));
25 }
26
27 function assertStrongClassStrongInstances(x) {
28 assertTrue(%IsStrong(x));
29 assertTrue(%IsStrong(x.prototype));
30 assertTrue(%IsStrong(new x));
31 }
32
33 function getWeakClass() {
34 return (class {});
35 }
36
37 function getWeakClassExtends(x) {
38 return (class extends x {});
39 }
40
41 function getStrongClass() {
42 "use strong";
43 return (class {});
44 }
45
46 function getStrongClassExtends(x) {
47 "use strong";
48 return (class extends x {});
49 }
50
51 (function SimpleWeakClassLiterals() {
52 class C {};
53 class D extends C {};
54 class E extends Object {};
55
56 assertWeakClassWeakInstances(C);
57 assertWeakClassWeakInstances(D);
58 assertWeakClassWeakInstances(E);
59
60 assertWeakClassWeakInstances(class {});
61 assertWeakClassWeakInstances(class extends Object {});
62 assertWeakClassWeakInstances(class extends C {});
63 assertWeakClassWeakInstances(class extends class {} {});
64 })();
65
66 (function SimpleStrongClassLiterals() {
67 'use strong';
68 class C {};
69 class D extends C {};
70
71 assertStrongClassStrongInstances(C);
72 assertStrongClassStrongInstances(D);
73
74 assertStrongClassStrongInstances(class {});
75 assertStrongClassStrongInstances(class extends C {});
76 assertStrongClassStrongInstances(class extends class {} {});
77 })();
78
79 (function MixedWeakClassLiterals() {
80 class C extends getStrongClass() {};
81 class D extends getStrongClassExtends((class {})) {};
82 class E extends getStrongClassExtends(C) {};
83
84 assertWeakClassStrongInstances(C);
85 assertWeakClassStrongInstances(class extends getStrongClass() {});
86
87 assertWeakClassWeakInstances(D);
88 assertWeakClassWeakInstances(
89 class extends getStrongClassExtends((class {})) {});
90
91 assertWeakClassStrongInstances(E);
92 assertWeakClassStrongInstances(
93 class extends getStrongClassExtends(class extends getStrongClass() {}) {});
94 })();
95
96 (function MixedStrongClassLiterals() {
97 'use strong';
98 class C extends getWeakClass() {};
99 class D extends getWeakClassExtends((class {})) {};
100 class E extends getWeakClassExtends(C) {};
101 class F extends Object {};
102
103 assertStrongClassWeakInstances(C);
104 assertStrongClassWeakInstances(class extends getWeakClass() {});
105
106 assertStrongClassStrongInstances(D);
107 assertStrongClassStrongInstances(
108 class extends getWeakClassExtends((class {})) {});
109
110 assertStrongClassWeakInstances(E);
111 assertStrongClassWeakInstances(
112 class extends getWeakClassExtends(class extends getWeakClass() {}) {});
113
114 assertStrongClassWeakInstances(F);
115 assertStrongClassWeakInstances(class extends Object {});
116 })();
117
118 (function WeakMonkeyPatchedClassLiterals() {
119 class C {};
120 assertWeakClassWeakInstances(C);
121 C.__proto__ = getStrongClass();
122 // C's default constructor doesn't call super.
123 assertWeakClassWeakInstances(C);
124
125 class D extends Object {};
126 assertWeakClassWeakInstances(D);
127 D.__proto__ = getStrongClass();
128 // D is a derived class, so its default constructor calls super.
129 assertWeakClassStrongInstances(D);
130
131 class E extends (class {}) {};
132 E.__proto__ = C;
133 assertWeakClassWeakInstances(E);
134
135 class F extends (class {}) {};
136 F.__proto__ = D;
137 assertWeakClassStrongInstances(F);
138
139 class G extends getStrongClass() {};
140 G.__proto__ = getWeakClass();
141 assertWeakClassWeakInstances(G);
142 })();
143
144 (function StrongMonkeyPatchedClassLiterals() {
145 let C = getStrongClassExtends(getWeakClassExtends(getStrongClass()));
146 let D = getStrongClassExtends(getWeakClassExtends(getWeakClass()));
147
148 assertStrongClassStrongInstances(C);
149 C.__proto__.__proto__ = getWeakClass();
150 assertStrongClassWeakInstances(C);
151 C.__proto__.__proto__ = getStrongClass();
152 assertStrongClassStrongInstances(C);
153
154 assertStrongClassWeakInstances(D);
155 D.__proto__.__proto__ = getStrongClass();
156 assertStrongClassStrongInstances(D);
157 D.__proto__.__proto__ = getWeakClass();
158 assertStrongClassWeakInstances(D);
159 })();
OLDNEW
« no previous file with comments | « src/runtime/runtime-classes.cc ('k') | test/mjsunit/strong/class-object-frozen.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698