mirror of
https://github.com/dart-lang/sdk
synced 2024-10-03 21:21:32 +00:00
Convert SuperIndexAccessor to SuperIndexedAccessGenerator
Change-Id: I0b4b53373b248e88058f0353a293d57a6eae766e Reviewed-on: https://dart-review.googlesource.com/55124 Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
This commit is contained in:
parent
21ae1a0ab7
commit
331d31f56c
|
@ -99,7 +99,7 @@ import 'expression_generator.dart'
|
|||
ReadOnlyAccessor,
|
||||
SendAccessor,
|
||||
StaticAccessor,
|
||||
SuperIndexAccessor,
|
||||
SuperIndexedAccessGenerator,
|
||||
ThisAccessor,
|
||||
ThisPropertyAccessGenerator,
|
||||
TypeDeclarationAccessor,
|
||||
|
@ -2416,7 +2416,7 @@ abstract class BodyBuilder<Expression, Statement, Arguments>
|
|||
Expression index = popForValue();
|
||||
var receiver = pop();
|
||||
if (receiver is ThisAccessor && receiver.isSuper) {
|
||||
push(new SuperIndexAccessor(
|
||||
push(new SuperIndexedAccessGenerator(
|
||||
this,
|
||||
openSquareBracket,
|
||||
toKernelExpression(index),
|
||||
|
|
|
@ -883,15 +883,23 @@ class ThisIndexedAccessGenerator<Arguments> extends Generator<Arguments> {
|
|||
String toString() => "ThisIndexedAccessGenerator()";
|
||||
}
|
||||
|
||||
class _SuperIndexAccessor<Arguments> extends Accessor<Arguments> {
|
||||
kernel.Expression index;
|
||||
VariableDeclaration indexVariable;
|
||||
Member getter, setter;
|
||||
class SuperIndexedAccessGenerator<Arguments> extends Generator<Arguments> {
|
||||
final kernel.Expression index;
|
||||
|
||||
_SuperIndexAccessor(BuilderHelper<dynamic, dynamic, Arguments> helper,
|
||||
this.index, this.getter, this.setter, Token token)
|
||||
final Member getter;
|
||||
|
||||
final Member setter;
|
||||
|
||||
VariableDeclaration indexVariable;
|
||||
|
||||
SuperIndexedAccessGenerator(BuilderHelper<dynamic, dynamic, Arguments> helper,
|
||||
Token token, this.index, this.getter, this.setter)
|
||||
: super(helper, token);
|
||||
|
||||
String get plainNameForRead => "[]";
|
||||
|
||||
String get plainNameForWrite => "[]=";
|
||||
|
||||
indexAccess() {
|
||||
indexVariable ??= new VariableDeclaration.forValue(index);
|
||||
return new VariableGet(indexVariable);
|
||||
|
@ -984,6 +992,18 @@ class _SuperIndexAccessor<Arguments> extends Accessor<Arguments> {
|
|||
kernel.Expression body, ShadowComplexAssignment complexAssignment) {
|
||||
return super._finish(makeLet(indexVariable, body), complexAssignment);
|
||||
}
|
||||
|
||||
kernel.Expression doInvocation(int offset, Arguments arguments) {
|
||||
return helper.buildMethodInvocation(
|
||||
buildSimpleRead(), callName, arguments, offset,
|
||||
isImplicitCall: true);
|
||||
}
|
||||
|
||||
String toString() => "SuperIndexedAccessGenerator()";
|
||||
|
||||
@override
|
||||
ShadowComplexAssignment startComplexAssignment(kernel.Expression rhs) =>
|
||||
new ShadowIndexAssign(null, index, rhs, isSuper: true);
|
||||
}
|
||||
|
||||
class _StaticAccessor<Arguments> extends Accessor<Arguments> {
|
||||
|
|
|
@ -864,29 +864,6 @@ class DeferredAccessor<Arguments> extends _DeferredAccessor<Arguments>
|
|||
}
|
||||
}
|
||||
|
||||
class SuperIndexAccessor<Arguments> extends _SuperIndexAccessor<Arguments>
|
||||
with FastaAccessor<Arguments> {
|
||||
SuperIndexAccessor(BuilderHelper<dynamic, dynamic, Arguments> helper,
|
||||
Token token, kernel.Expression index, Member getter, Member setter)
|
||||
: super(helper, index, getter, setter, token);
|
||||
|
||||
String get plainNameForRead => "[]";
|
||||
|
||||
String get plainNameForWrite => "[]=";
|
||||
|
||||
kernel.Expression doInvocation(int offset, Arguments arguments) {
|
||||
return helper.buildMethodInvocation(
|
||||
buildSimpleRead(), callName, arguments, offset,
|
||||
isImplicitCall: true);
|
||||
}
|
||||
|
||||
toString() => "SuperIndexAccessor()";
|
||||
|
||||
@override
|
||||
ShadowComplexAssignment startComplexAssignment(kernel.Expression rhs) =>
|
||||
new ShadowIndexAssign(null, index, rhs, isSuper: true);
|
||||
}
|
||||
|
||||
int adjustForImplicitCall(String name, int offset) {
|
||||
// Normally the offset is at the start of the token, but in this case,
|
||||
// because we insert a '.call', we want it at the end instead.
|
||||
|
|
Loading…
Reference in a new issue