| OLD | NEW |
| 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 | 7 |
| 8 import 'package:front_end/src/fasta/kernel/fasta_accessors.dart' |
| 9 show BuilderHelper; |
| 10 |
| 8 import 'package:kernel/ast.dart'; | 11 import 'package:kernel/ast.dart'; |
| 9 | 12 |
| 10 final Name indexGetName = new Name("[]"); | 13 final Name indexGetName = new Name("[]"); |
| 11 | 14 |
| 12 final Name indexSetName = new Name("[]="); | 15 final Name indexSetName = new Name("[]="); |
| 13 | 16 |
| 14 /// An [Accessor] represents a subexpression for which we can't yet build a | 17 /// An [Accessor] represents a subexpression for which we can't yet build a |
| 15 /// kernel [Expression] because we don't yet know the context in which it is | 18 /// kernel [Expression] because we don't yet know the context in which it is |
| 16 /// used. | 19 /// used. |
| 17 /// | 20 /// |
| (...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 441 return makeLet( | 444 return makeLet( |
| 442 valueVariable, makeLet(dummy, new VariableGet(valueVariable))); | 445 valueVariable, makeLet(dummy, new VariableGet(valueVariable))); |
| 443 } | 446 } |
| 444 | 447 |
| 445 Expression _finish(Expression body) { | 448 Expression _finish(Expression body) { |
| 446 return makeLet(indexVariable, body); | 449 return makeLet(indexVariable, body); |
| 447 } | 450 } |
| 448 } | 451 } |
| 449 | 452 |
| 450 class StaticAccessor extends Accessor { | 453 class StaticAccessor extends Accessor { |
| 454 final BuilderHelper helper; |
| 451 Member readTarget; | 455 Member readTarget; |
| 452 Member writeTarget; | 456 Member writeTarget; |
| 453 | 457 |
| 454 StaticAccessor(this.readTarget, this.writeTarget, int offset) : super(offset); | 458 StaticAccessor(this.helper, this.readTarget, this.writeTarget, int offset) |
| 459 : super(offset); |
| 455 | 460 |
| 456 Expression _makeRead() => builtGetter = | 461 Expression _makeRead() => builtGetter = readTarget == null |
| 457 readTarget == null ? makeInvalidRead() : new StaticGet(readTarget) | 462 ? makeInvalidRead() |
| 458 ..fileOffset = offset; | 463 : helper.makeStaticGet(readTarget, offset); |
| 459 | 464 |
| 460 Expression _makeWrite(Expression value, bool voidContext) { | 465 Expression _makeWrite(Expression value, bool voidContext) { |
| 461 return writeTarget == null | 466 return writeTarget == null |
| 462 ? makeInvalidWrite(value) | 467 ? makeInvalidWrite(value) |
| 463 : new StaticSet(writeTarget, value) | 468 : new StaticSet(writeTarget, value) |
| 464 ..fileOffset = offset; | 469 ..fileOffset = offset; |
| 465 } | 470 } |
| 466 } | 471 } |
| 467 | 472 |
| 468 class ReadOnlyAccessor extends Accessor { | 473 class ReadOnlyAccessor extends Accessor { |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 506 | 511 |
| 507 VariableDeclaration makeOrReuseVariable(Expression value) { | 512 VariableDeclaration makeOrReuseVariable(Expression value) { |
| 508 // TODO: Devise a way to remember if a variable declaration was reused | 513 // TODO: Devise a way to remember if a variable declaration was reused |
| 509 // or is fresh (hence needs a let binding). | 514 // or is fresh (hence needs a let binding). |
| 510 return new VariableDeclaration.forValue(value); | 515 return new VariableDeclaration.forValue(value); |
| 511 } | 516 } |
| 512 | 517 |
| 513 Expression wrapInvalid(Expression e) { | 518 Expression wrapInvalid(Expression e) { |
| 514 return new Let(new VariableDeclaration.forValue(e), new InvalidExpression()); | 519 return new Let(new VariableDeclaration.forValue(e), new InvalidExpression()); |
| 515 } | 520 } |
| OLD | NEW |