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

Side by Side Diff: test/mjsunit/harmony/classes-experimental.js

Issue 918603004: new classes: implement correct check for uninitialized this in 'super()' (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix Created 5 years, 10 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/x64/full-codegen-x64.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 // 4 //
5 // Flags: --experimental-classes --harmony-classes 5 // Flags: --experimental-classes --harmony-classes
6 6
7 'use strict'; 7 'use strict';
8 (function TestArgumentsAccess() { 8 (function TestArgumentsAccess() {
9 class Base { 9 class Base {
10 constructor() { 10 constructor() {
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 82
83 if (x < 0) return; 83 if (x < 0) return;
84 84
85 let called = false; 85 let called = false;
86 function tmp() { called = true; return 3; } 86 function tmp() { called = true; return 3; }
87 var exn = null; 87 var exn = null;
88 try { 88 try {
89 super(tmp(),4); 89 super(tmp(),4);
90 } catch (e) { exn = e; } 90 } catch (e) { exn = e; }
91 assertTrue(exn instanceof ReferenceError); 91 assertTrue(exn instanceof ReferenceError);
92 // TODO(dslomov): should be 'true'. 92 assertTrue(called);
93 assertFalse(called);
94 } 93 }
95 } 94 }
96 95
97 var s2 = new Subclass2(1); 96 var s2 = new Subclass2(1);
98 assertSame(3, s2.prp); 97 assertSame(3, s2.prp);
99 98
100 var s3 = new Subclass2(-1); 99 var s3 = new Subclass2(-1);
101 assertSame(3, s3.prp); 100 assertSame(3, s3.prp);
102 101
103 assertThrows(function() { Subclass.call(new Object(), 1, 2); }, TypeError); 102 assertThrows(function() { Subclass.call(new Object(), 1, 2); }, TypeError);
104 assertThrows(function() { Base.call(new Object(), 1, 2); }, TypeError); 103 assertThrows(function() { Base.call(new Object(), 1, 2); }, TypeError);
105 104
106 class BadSubclass extends Base { 105 class BadSubclass extends Base {
107 constructor() {} 106 constructor() {}
108 } 107 }
109 108
110 assertThrows(function() { new BadSubclass(); }, ReferenceError); 109 assertThrows(function() { new BadSubclass(); }, ReferenceError);
111 }()); 110 }());
112 111
112 (function TestThisCheckOrdering() {
113 let baseCalled = 0;
114 class Base {
115 constructor() { baseCalled++ }
116 }
117
118 let fCalled = 0;
119 function f() { fCalled++; return 3; }
120
121 class Subclass1 extends Base {
122 constructor() {
123 baseCalled = 0;
124 super();
125 assertEquals(1, baseCalled);
126 let obj = this;
127
128 let exn = null;
129 baseCalled = 0;
130 fCalled = 0;
131 try {
132 super(f());
133 } catch (e) { exn = e; }
134 assertTrue(exn instanceof ReferenceError);
135 assertEquals(1, fCalled);
136 assertEquals(1, baseCalled);
137 assertSame(obj, this);
138
139 exn = null;
140 baseCalled = 0;
141 fCalled = 0;
142 try {
143 super(super(), f());
144 } catch (e) { exn = e; }
145 assertTrue(exn instanceof ReferenceError);
146 assertEquals(0, fCalled);
147 assertEquals(1, baseCalled);
148 assertSame(obj, this);
149
150 exn = null;
151 baseCalled = 0;
152 fCalled = 0;
153 try {
154 super(f(), super());
155 } catch (e) { exn = e; }
156 assertTrue(exn instanceof ReferenceError);
157 assertEquals(1, fCalled);
158 assertEquals(1, baseCalled);
159 assertSame(obj, this);
160 }
161 }
162
163 new Subclass1();
164 }());
165
166
113 (function TestPrototypeWiring() { 167 (function TestPrototypeWiring() {
114 class Base { 168 class Base {
115 constructor(x) { 169 constructor(x) {
116 this.foobar = x; 170 this.foobar = x;
117 } 171 }
118 } 172 }
119 173
120 class Subclass extends Base { 174 class Subclass extends Base {
121 constructor(x) { 175 constructor(x) {
122 super(x); 176 super(x);
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 var eua = new ExtendedUint8Array(10); 330 var eua = new ExtendedUint8Array(10);
277 assertEquals(10, eua.length); 331 assertEquals(10, eua.length);
278 assertEquals(10, eua.byteLength); 332 assertEquals(10, eua.byteLength);
279 eua[0] = 0xFF; 333 eua[0] = 0xFF;
280 eua[1] = 0xFFA; 334 eua[1] = 0xFFA;
281 assertEquals(0xFF, eua[0]); 335 assertEquals(0xFF, eua[0]);
282 assertEquals(0xFA, eua[1]); 336 assertEquals(0xFA, eua[1]);
283 assertSame(ExtendedUint8Array.prototype, eua.__proto__); 337 assertSame(ExtendedUint8Array.prototype, eua.__proto__);
284 assertEquals("[object Uint8Array]", Object.prototype.toString.call(eua)); 338 assertEquals("[object Uint8Array]", Object.prototype.toString.call(eua));
285 }()); 339 }());
OLDNEW
« no previous file with comments | « src/x64/full-codegen-x64.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698