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

Side by Side Diff: pkg/kernel/lib/frontend/accessors.dart

Issue 2561843002: dart2js-kernel: associate more compound assignment inner nodes (Closed)
Patch Set: move voidContext deeper Created 4 years 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 | « pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart ('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 (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /// A library to help transform compounds and null-aware accessors into 5 /// A library to help transform compounds and null-aware accessors into
6 /// let expressions. 6 /// let expressions.
7 library kernel.frontend.accessors; 7 library kernel.frontend.accessors;
8 8
9 import '../ast.dart'; 9 import '../ast.dart';
10 10
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 new ConditionalExpression( 178 new ConditionalExpression(
179 buildIsNull(receiverAccess()), new NullLiteral(), body, type)); 179 buildIsNull(receiverAccess()), new NullLiteral(), body, type));
180 } 180 }
181 181
182 class SuperPropertyAccessor extends Accessor { 182 class SuperPropertyAccessor extends Accessor {
183 Name name; 183 Name name;
184 Member getter, setter; 184 Member getter, setter;
185 185
186 SuperPropertyAccessor(this.name, this.getter, this.setter); 186 SuperPropertyAccessor(this.name, this.getter, this.setter);
187 187
188 _makeRead() => new SuperPropertyGet(name, getter); 188 _makeRead() => builtGetter = new SuperPropertyGet(name, getter);
189 189
190 _makeWrite(Expression value, bool voidContext) { 190 _makeWrite(Expression value, bool voidContext) {
191 return new SuperPropertySet(name, value, setter); 191 return new SuperPropertySet(name, value, setter);
192 } 192 }
193 } 193 }
194 194
195 final Name _indexGet = new Name('[]'); 195 final Name _indexGet = new Name('[]');
196 final Name _indexSet = new Name('[]='); 196 final Name _indexSet = new Name('[]=');
197 197
198 class IndexAccessor extends Accessor { 198 class IndexAccessor extends Accessor {
(...skipping 29 matching lines...) Expand all
228 receiverVariable ??= new VariableDeclaration.forValue(receiver); 228 receiverVariable ??= new VariableDeclaration.forValue(receiver);
229 return new VariableGet(receiverVariable); 229 return new VariableGet(receiverVariable);
230 } 230 }
231 231
232 indexAccess() { 232 indexAccess() {
233 indexVariable ??= new VariableDeclaration.forValue(index); 233 indexVariable ??= new VariableDeclaration.forValue(index);
234 return new VariableGet(indexVariable); 234 return new VariableGet(indexVariable);
235 } 235 }
236 236
237 _makeRead() { 237 _makeRead() {
238 return new MethodInvocation(receiverAccess(), _indexGet, 238 return builtGetter = new MethodInvocation(receiverAccess(), _indexGet,
239 new Arguments(<Expression>[indexAccess()]), getter); 239 new Arguments(<Expression>[indexAccess()]), getter);
240 } 240 }
241 241
242 _makeWrite(Expression value, bool voidContext) { 242 _makeWrite(Expression value, bool voidContext) {
243 if (!voidContext) return _makeWriteAndReturn(value); 243 if (!voidContext) return _makeWriteAndReturn(value);
244 return new MethodInvocation(receiverAccess(), _indexSet, 244 return new MethodInvocation(receiverAccess(), _indexSet,
245 new Arguments(<Expression>[indexAccess(), value]), setter); 245 new Arguments(<Expression>[indexAccess(), value]), setter);
246 } 246 }
247 247
248 _makeWriteAndReturn(Expression value) { 248 _makeWriteAndReturn(Expression value) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 if (!voidContext) return _makeWriteAndReturn(value); 282 if (!voidContext) return _makeWriteAndReturn(value);
283 return new MethodInvocation(new ThisExpression(), _indexSet, 283 return new MethodInvocation(new ThisExpression(), _indexSet,
284 new Arguments(<Expression>[index, value]), setter); 284 new Arguments(<Expression>[index, value]), setter);
285 } 285 }
286 286
287 indexAccess() { 287 indexAccess() {
288 indexVariable ??= new VariableDeclaration.forValue(index); 288 indexVariable ??= new VariableDeclaration.forValue(index);
289 return new VariableGet(indexVariable); 289 return new VariableGet(indexVariable);
290 } 290 }
291 291
292 _makeRead() => new MethodInvocation(new ThisExpression(), _indexGet, 292 _makeRead() => builtGetter = new MethodInvocation(new ThisExpression(),
293 new Arguments(<Expression>[indexAccess()]), getter); 293 _indexGet, new Arguments(<Expression>[indexAccess()]), getter);
294 294
295 _makeWrite(Expression value, bool voidContext) { 295 _makeWrite(Expression value, bool voidContext) {
296 if (!voidContext) return _makeWriteAndReturn(value); 296 if (!voidContext) return _makeWriteAndReturn(value);
297 return new MethodInvocation(new ThisExpression(), _indexSet, 297 return new MethodInvocation(new ThisExpression(), _indexSet,
298 new Arguments(<Expression>[indexAccess(), value]), setter); 298 new Arguments(<Expression>[indexAccess(), value]), setter);
299 } 299 }
300 300
301 _makeWriteAndReturn(Expression value) { 301 _makeWriteAndReturn(Expression value) {
302 var valueVariable = new VariableDeclaration.forValue(value); 302 var valueVariable = new VariableDeclaration.forValue(value);
303 var dummy = new VariableDeclaration.forValue(new MethodInvocation( 303 var dummy = new VariableDeclaration.forValue(new MethodInvocation(
(...skipping 24 matching lines...) Expand all
328 _makeSimpleRead() => new SuperMethodInvocation( 328 _makeSimpleRead() => new SuperMethodInvocation(
329 _indexGet, new Arguments(<Expression>[index]), getter); 329 _indexGet, new Arguments(<Expression>[index]), getter);
330 330
331 _makeSimpleWrite(Expression value, bool voidContext) { 331 _makeSimpleWrite(Expression value, bool voidContext) {
332 if (!voidContext) return _makeWriteAndReturn(value); 332 if (!voidContext) return _makeWriteAndReturn(value);
333 return new SuperMethodInvocation( 333 return new SuperMethodInvocation(
334 _indexSet, new Arguments(<Expression>[index, value]), setter); 334 _indexSet, new Arguments(<Expression>[index, value]), setter);
335 } 335 }
336 336
337 _makeRead() { 337 _makeRead() {
338 return new SuperMethodInvocation( 338 return builtGetter = new SuperMethodInvocation(
339 _indexGet, new Arguments(<Expression>[indexAccess()]), getter); 339 _indexGet, new Arguments(<Expression>[indexAccess()]), getter);
340 } 340 }
341 341
342 _makeWrite(Expression value, bool voidContext) { 342 _makeWrite(Expression value, bool voidContext) {
343 if (!voidContext) return _makeWriteAndReturn(value); 343 if (!voidContext) return _makeWriteAndReturn(value);
344 return new SuperMethodInvocation( 344 return new SuperMethodInvocation(
345 _indexSet, new Arguments(<Expression>[indexAccess(), value]), setter); 345 _indexSet, new Arguments(<Expression>[indexAccess(), value]), setter);
346 } 346 }
347 347
348 _makeWriteAndReturn(Expression value) { 348 _makeWriteAndReturn(Expression value) {
(...skipping 11 matching lines...) Expand all
360 return makeLet(indexVariable, body); 360 return makeLet(indexVariable, body);
361 } 361 }
362 } 362 }
363 363
364 class StaticAccessor extends Accessor { 364 class StaticAccessor extends Accessor {
365 Member readTarget; 365 Member readTarget;
366 Member writeTarget; 366 Member writeTarget;
367 367
368 StaticAccessor(this.readTarget, this.writeTarget); 368 StaticAccessor(this.readTarget, this.writeTarget);
369 369
370 _makeRead() => 370 _makeRead() => builtGetter =
371 readTarget == null ? makeInvalidRead() : new StaticGet(readTarget); 371 readTarget == null ? makeInvalidRead() : new StaticGet(readTarget);
372 372
373 _makeWrite(Expression value, bool voidContext) { 373 _makeWrite(Expression value, bool voidContext) {
374 return writeTarget == null 374 return writeTarget == null
375 ? makeInvalidWrite(value) 375 ? makeInvalidWrite(value)
376 : new StaticSet(writeTarget, value); 376 : new StaticSet(writeTarget, value);
377 } 377 }
378 } 378 }
379 379
380 class ReadOnlyAccessor extends Accessor { 380 class ReadOnlyAccessor extends Accessor {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 414
415 VariableDeclaration makeOrReuseVariable(Expression value) { 415 VariableDeclaration makeOrReuseVariable(Expression value) {
416 // TODO: Devise a way to remember if a variable declaration was reused 416 // TODO: Devise a way to remember if a variable declaration was reused
417 // or is fresh (hence needs a let binding). 417 // or is fresh (hence needs a let binding).
418 return new VariableDeclaration.forValue(value); 418 return new VariableDeclaration.forValue(value);
419 } 419 }
420 420
421 Expression wrapInvalid(Expression e) { 421 Expression wrapInvalid(Expression e) {
422 return new Let(new VariableDeclaration.forValue(e), new InvalidExpression()); 422 return new Let(new VariableDeclaration.forValue(e), new InvalidExpression());
423 } 423 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698