| 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 // Note: copied from package:kernel at revision 7346348. | 5 // Note: copied from package:kernel at revision 7346348. |
| 6 | 6 |
| 7 /// A library to help transform compounds and null-aware accessors into | 7 /// A library to help transform compounds and null-aware accessors into |
| 8 /// let expressions. | 8 /// let expressions. |
| 9 library kernel.frontend.accessors; | 9 library kernel.frontend.accessors; |
| 10 | 10 |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 class PropertyAccessor extends Accessor { | 140 class PropertyAccessor extends Accessor { |
| 141 VariableDeclaration _receiverVariable; | 141 VariableDeclaration _receiverVariable; |
| 142 Expression receiver; | 142 Expression receiver; |
| 143 Name name; | 143 Name name; |
| 144 Member getter, setter; | 144 Member getter, setter; |
| 145 int charOffset; | 145 int charOffset; |
| 146 | 146 |
| 147 static Accessor make(Expression receiver, Name name, Member getter, | 147 static Accessor make(Expression receiver, Name name, Member getter, |
| 148 Member setter, int charOffset) { | 148 Member setter, int charOffset) { |
| 149 if (receiver is ThisExpression) { | 149 if (receiver is ThisExpression) { |
| 150 return new ThisPropertyAccessor(name, getter, setter); | 150 return new ThisPropertyAccessor(name, getter, setter, charOffset); |
| 151 } else { | 151 } else { |
| 152 return new PropertyAccessor.internal( | 152 return new PropertyAccessor.internal( |
| 153 receiver, name, getter, setter, charOffset); | 153 receiver, name, getter, setter, charOffset); |
| 154 } | 154 } |
| 155 } | 155 } |
| 156 | 156 |
| 157 PropertyAccessor.internal( | 157 PropertyAccessor.internal( |
| 158 this.receiver, this.name, this.getter, this.setter, this.charOffset); | 158 this.receiver, this.name, this.getter, this.setter, this.charOffset); |
| 159 | 159 |
| 160 _makeSimpleRead() => | 160 _makeSimpleRead() => |
| (...skipping 17 matching lines...) Expand all Loading... |
| 178 } | 178 } |
| 179 | 179 |
| 180 _finish(Expression body) => makeLet(_receiverVariable, body); | 180 _finish(Expression body) => makeLet(_receiverVariable, body); |
| 181 } | 181 } |
| 182 | 182 |
| 183 /// Special case of [PropertyAccessor] to avoid creating an indirect access to | 183 /// Special case of [PropertyAccessor] to avoid creating an indirect access to |
| 184 /// 'this'. | 184 /// 'this'. |
| 185 class ThisPropertyAccessor extends Accessor { | 185 class ThisPropertyAccessor extends Accessor { |
| 186 Name name; | 186 Name name; |
| 187 Member getter, setter; | 187 Member getter, setter; |
| 188 final int charOffset; |
| 188 | 189 |
| 189 ThisPropertyAccessor(this.name, this.getter, this.setter); | 190 ThisPropertyAccessor(this.name, this.getter, this.setter, this.charOffset); |
| 190 | 191 |
| 191 _makeRead() => new PropertyGet(new ThisExpression(), name, getter); | 192 _makeRead() => new PropertyGet(new ThisExpression(), name, getter) |
| 193 ..fileOffset = charOffset; |
| 192 | 194 |
| 193 _makeWrite(Expression value, bool voidContext) { | 195 _makeWrite(Expression value, bool voidContext) { |
| 194 return new PropertySet(new ThisExpression(), name, value, setter); | 196 return new PropertySet(new ThisExpression(), name, value, setter) |
| 197 ..fileOffset = charOffset; |
| 195 } | 198 } |
| 196 } | 199 } |
| 197 | 200 |
| 198 class NullAwarePropertyAccessor extends Accessor { | 201 class NullAwarePropertyAccessor extends Accessor { |
| 199 VariableDeclaration receiver; | 202 VariableDeclaration receiver; |
| 200 Name name; | 203 Name name; |
| 201 Member getter, setter; | 204 Member getter, setter; |
| 202 DartType type; | 205 DartType type; |
| 203 | 206 |
| 204 NullAwarePropertyAccessor( | 207 NullAwarePropertyAccessor( |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 419 } | 422 } |
| 420 | 423 |
| 421 Expression _finish(Expression body) { | 424 Expression _finish(Expression body) { |
| 422 return makeLet(indexVariable, body); | 425 return makeLet(indexVariable, body); |
| 423 } | 426 } |
| 424 } | 427 } |
| 425 | 428 |
| 426 class StaticAccessor extends Accessor { | 429 class StaticAccessor extends Accessor { |
| 427 Member readTarget; | 430 Member readTarget; |
| 428 Member writeTarget; | 431 Member writeTarget; |
| 432 int charOffset; |
| 429 | 433 |
| 430 StaticAccessor(this.readTarget, this.writeTarget); | 434 StaticAccessor(this.readTarget, this.writeTarget, this.charOffset); |
| 431 | 435 |
| 432 _makeRead() => | 436 _makeRead() => |
| 433 readTarget == null ? makeInvalidRead() : new StaticGet(readTarget); | 437 readTarget == null ? makeInvalidRead() : new StaticGet(readTarget) |
| 438 ..fileOffset = charOffset; |
| 434 | 439 |
| 435 _makeWrite(Expression value, bool voidContext) { | 440 _makeWrite(Expression value, bool voidContext) { |
| 436 return writeTarget == null | 441 return writeTarget == null |
| 437 ? makeInvalidWrite(value) | 442 ? makeInvalidWrite(value) |
| 438 : new StaticSet(writeTarget, value); | 443 : new StaticSet(writeTarget, value)..fileOffset = charOffset; |
| 439 } | 444 } |
| 440 } | 445 } |
| 441 | 446 |
| 442 class ReadOnlyAccessor extends Accessor { | 447 class ReadOnlyAccessor extends Accessor { |
| 443 Expression expression; | 448 Expression expression; |
| 444 VariableDeclaration value; | 449 VariableDeclaration value; |
| 445 | 450 |
| 446 ReadOnlyAccessor(this.expression); | 451 ReadOnlyAccessor(this.expression); |
| 447 | 452 |
| 448 _makeSimpleRead() => expression; | 453 _makeSimpleRead() => expression; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 478 | 483 |
| 479 VariableDeclaration makeOrReuseVariable(Expression value) { | 484 VariableDeclaration makeOrReuseVariable(Expression value) { |
| 480 // TODO: Devise a way to remember if a variable declaration was reused | 485 // TODO: Devise a way to remember if a variable declaration was reused |
| 481 // or is fresh (hence needs a let binding). | 486 // or is fresh (hence needs a let binding). |
| 482 return new VariableDeclaration.forValue(value); | 487 return new VariableDeclaration.forValue(value); |
| 483 } | 488 } |
| 484 | 489 |
| 485 Expression wrapInvalid(Expression e) { | 490 Expression wrapInvalid(Expression e) { |
| 486 return new Let(new VariableDeclaration.forValue(e), new InvalidExpression()); | 491 return new Let(new VariableDeclaration.forValue(e), new InvalidExpression()); |
| 487 } | 492 } |
| OLD | NEW |