mirror of
https://github.com/dart-lang/sdk
synced 2024-10-03 21:33:03 +00:00
Convert IndexAccessor to IndexedAccessGenerator
Change-Id: Ib5c1ef8b78543a0d9e0a98e10d6c1315409d9246 Reviewed-on: https://dart-review.googlesource.com/55122 Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
This commit is contained in:
parent
fbb9f525be
commit
7e7c795919
|
@ -92,7 +92,7 @@ import 'expression_generator.dart'
|
|||
IncompleteError,
|
||||
IncompletePropertyAccessor,
|
||||
IncompleteSend,
|
||||
IndexAccessor,
|
||||
IndexedAccessGenerator,
|
||||
LargeIntAccessor,
|
||||
LoadLibraryAccessor,
|
||||
ParenthesizedExpression,
|
||||
|
@ -2423,7 +2423,7 @@ abstract class BodyBuilder<Expression, Statement, Arguments>
|
|||
lookupInstanceMember(indexGetName, isSuper: true),
|
||||
lookupInstanceMember(indexSetName, isSuper: true)));
|
||||
} else {
|
||||
push(IndexAccessor.make<Arguments>(
|
||||
push(IndexedAccessGenerator.make<Arguments>(
|
||||
this,
|
||||
openSquareBracket,
|
||||
toKernelExpression(toValue(receiver)),
|
||||
|
|
|
@ -626,31 +626,46 @@ class SuperPropertyAccessGenerator<Arguments> extends Generator<Arguments> {
|
|||
String toString() => "SuperPropertyAccessGenerator()";
|
||||
}
|
||||
|
||||
class _IndexAccessor<Arguments> extends Accessor<Arguments> {
|
||||
kernel.Expression receiver;
|
||||
kernel.Expression index;
|
||||
VariableDeclaration receiverVariable;
|
||||
VariableDeclaration indexVariable;
|
||||
Procedure getter, setter;
|
||||
class IndexedAccessGenerator<Arguments> extends Generator<Arguments> {
|
||||
final kernel.Expression receiver;
|
||||
|
||||
static Accessor<Arguments> make<Arguments>(
|
||||
final kernel.Expression index;
|
||||
|
||||
final Procedure getter;
|
||||
|
||||
final Procedure setter;
|
||||
|
||||
VariableDeclaration receiverVariable;
|
||||
|
||||
VariableDeclaration indexVariable;
|
||||
|
||||
IndexedAccessGenerator.internal(
|
||||
BuilderHelper<dynamic, dynamic, Arguments> helper,
|
||||
Token token,
|
||||
this.receiver,
|
||||
this.index,
|
||||
this.getter,
|
||||
this.setter)
|
||||
: super(helper, token);
|
||||
|
||||
static FastaAccessor<Arguments> make<Arguments>(
|
||||
BuilderHelper<dynamic, dynamic, Arguments> helper,
|
||||
Token token,
|
||||
kernel.Expression receiver,
|
||||
kernel.Expression index,
|
||||
Procedure getter,
|
||||
Procedure setter,
|
||||
{Token token}) {
|
||||
Procedure setter) {
|
||||
if (helper.forest.isThisExpression(receiver)) {
|
||||
return new _ThisIndexAccessor(helper, index, getter, setter, token);
|
||||
return new ThisIndexAccessor(helper, token, index, getter, setter);
|
||||
} else {
|
||||
return new _IndexAccessor.internal(
|
||||
helper, receiver, index, getter, setter, token);
|
||||
return new IndexedAccessGenerator.internal(
|
||||
helper, token, receiver, index, getter, setter);
|
||||
}
|
||||
}
|
||||
|
||||
_IndexAccessor.internal(BuilderHelper<dynamic, dynamic, Arguments> helper,
|
||||
this.receiver, this.index, this.getter, this.setter, Token token)
|
||||
: super(helper, token);
|
||||
String get plainNameForRead => "[]";
|
||||
|
||||
String get plainNameForWrite => "[]=";
|
||||
|
||||
kernel.Expression _makeSimpleRead() {
|
||||
var read = new ShadowMethodInvocation(
|
||||
|
@ -744,6 +759,18 @@ class _IndexAccessor<Arguments> extends Accessor<Arguments> {
|
|||
makeLet(receiverVariable, makeLet(indexVariable, body)),
|
||||
complexAssignment);
|
||||
}
|
||||
|
||||
kernel.Expression doInvocation(int offset, Arguments arguments) {
|
||||
return helper.buildMethodInvocation(
|
||||
buildSimpleRead(), callName, arguments, forest.readOffset(arguments),
|
||||
isImplicitCall: true);
|
||||
}
|
||||
|
||||
@override
|
||||
ShadowComplexAssignment startComplexAssignment(kernel.Expression rhs) =>
|
||||
new ShadowIndexAssign(receiver, index, rhs);
|
||||
|
||||
String toString() => "IndexedAccessGenerator()";
|
||||
}
|
||||
|
||||
/// Special case of [_IndexAccessor] to avoid creating an indirect access to
|
||||
|
|
|
@ -741,46 +741,6 @@ class IncompletePropertyAccessor<Arguments> extends IncompleteSend<Arguments> {
|
|||
}
|
||||
}
|
||||
|
||||
class IndexAccessor<Arguments> extends _IndexAccessor<Arguments>
|
||||
with FastaAccessor<Arguments> {
|
||||
final BuilderHelper<dynamic, dynamic, Arguments> helper;
|
||||
|
||||
IndexAccessor.internal(this.helper, Token token, kernel.Expression receiver,
|
||||
kernel.Expression index, Procedure getter, Procedure setter)
|
||||
: super.internal(helper, receiver, index, getter, setter, token);
|
||||
|
||||
String get plainNameForRead => "[]";
|
||||
|
||||
String get plainNameForWrite => "[]=";
|
||||
|
||||
kernel.Expression doInvocation(int offset, Arguments arguments) {
|
||||
return helper.buildMethodInvocation(
|
||||
buildSimpleRead(), callName, arguments, forest.readOffset(arguments),
|
||||
isImplicitCall: true);
|
||||
}
|
||||
|
||||
toString() => "IndexAccessor()";
|
||||
|
||||
static FastaAccessor<Arguments> make<Arguments>(
|
||||
BuilderHelper<dynamic, dynamic, Arguments> helper,
|
||||
Token token,
|
||||
kernel.Expression receiver,
|
||||
kernel.Expression index,
|
||||
Procedure getter,
|
||||
Procedure setter) {
|
||||
if (helper.forest.isThisExpression(receiver)) {
|
||||
return new ThisIndexAccessor(helper, token, index, getter, setter);
|
||||
} else {
|
||||
return new IndexAccessor.internal(
|
||||
helper, token, receiver, index, getter, setter);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
ShadowComplexAssignment startComplexAssignment(kernel.Expression rhs) =>
|
||||
new ShadowIndexAssign(receiver, index, rhs);
|
||||
}
|
||||
|
||||
class StaticAccessor<Arguments> extends _StaticAccessor<Arguments>
|
||||
with FastaAccessor<Arguments> {
|
||||
StaticAccessor(BuilderHelper<dynamic, dynamic, Arguments> helper, Token token,
|
||||
|
|
Loading…
Reference in a new issue