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

Unified Diff: pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart

Issue 2904673003: Remove AstFactory from the front end. (Closed)
Patch Set: Created 3 years, 7 months 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 side-by-side diff with in-line comments
Download patch
Index: pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart
diff --git a/pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart b/pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart
index a530e6138babc2c466a74bbf0f164e5353bb0a08..2118d0e69b9ed6c9461c94629874deef41e9d8c5 100644
--- a/pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/frontend_accessors.dart
@@ -2,11 +2,18 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import 'package:front_end/src/fasta/builder/ast_factory.dart';
-
/// A library to help transform compounds and null-aware accessors into
/// let expressions.
+import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart'
+ show
+ KernelArguments,
+ KernelMethodInvocation,
+ KernelPropertyGet,
+ KernelPropertySet,
+ KernelVariableGet,
+ KernelVariableSet;
+
import 'package:front_end/src/fasta/kernel/utils.dart' show offsetForToken;
import 'package:front_end/src/scanner/token.dart' show Token;
@@ -69,20 +76,14 @@ abstract class Accessor {
Expression buildNullAwareAssignment(Expression value, DartType type,
{bool voidContext: false}) {
if (voidContext) {
- return _finish(new ConditionalExpression(
- buildIsNull(helper.astFactory, _makeRead()),
- _makeWrite(value, false),
- new NullLiteral(),
- type));
+ return _finish(new ConditionalExpression(buildIsNull(_makeRead()),
+ _makeWrite(value, false), new NullLiteral(), type));
}
var tmp = new VariableDeclaration.forValue(_makeRead());
return _finish(makeLet(
tmp,
- new ConditionalExpression(
- buildIsNull(helper.astFactory, new VariableGet(tmp)),
- _makeWrite(value, false),
- new VariableGet(tmp),
- type)));
+ new ConditionalExpression(buildIsNull(new VariableGet(tmp)),
+ _makeWrite(value, false), new VariableGet(tmp), type)));
}
/// Returns an [Expression] representing a compound assignment (e.g. `+=`)
@@ -92,8 +93,8 @@ abstract class Accessor {
bool voidContext: false,
Procedure interfaceTarget}) {
return _finish(_makeWrite(
- builtBinary = makeBinary(helper.astFactory, _makeRead(), binaryOperator,
- interfaceTarget, value,
+ builtBinary = makeBinary(
+ _makeRead(), binaryOperator, interfaceTarget, value,
offset: offset),
voidContext));
}
@@ -123,8 +124,8 @@ abstract class Accessor {
var value = new VariableDeclaration.forValue(_makeRead());
valueAccess() => new VariableGet(value);
var dummy = new VariableDeclaration.forValue(_makeWrite(
- builtBinary = makeBinary(helper.astFactory, valueAccess(),
- binaryOperator, interfaceTarget, new IntLiteral(1),
+ builtBinary = makeBinary(
+ valueAccess(), binaryOperator, interfaceTarget, new IntLiteral(1),
offset: offset),
true));
return _finish(makeLet(value, makeLet(dummy, valueAccess())));
@@ -166,14 +167,15 @@ abstract class VariableAccessor extends Accessor {
var fact = helper.typePromoter
.getFactForAccess(variable, helper.functionNestingLevel);
var scope = helper.typePromoter.currentScope;
- return helper.astFactory.variableGet(variable, fact, scope, token);
+ return new KernelVariableGet(variable, fact, scope)
+ ..fileOffset = offsetForToken(token);
}
Expression _makeWrite(Expression value, bool voidContext) {
helper.typePromoter.mutateVariable(variable, helper.functionNestingLevel);
return variable.isFinal || variable.isConst
? makeInvalidWrite(value)
- : helper.astFactory.variableSet(variable, value)
+ : new KernelVariableSet(variable, value)
..fileOffset = offsetForToken(token);
}
}
@@ -199,12 +201,11 @@ class PropertyAccessor extends Accessor {
this.getter, this.setter, Token token)
: super(helper, token);
- Expression _makeSimpleRead() =>
- helper.astFactory.propertyGet(receiver, name, getter)
- ..fileOffset = offsetForToken(token);
+ Expression _makeSimpleRead() => new KernelPropertyGet(receiver, name, getter)
+ ..fileOffset = offsetForToken(token);
Expression _makeSimpleWrite(Expression value, bool voidContext) {
- return helper.astFactory.propertySet(receiver, name, value, setter)
+ return new KernelPropertySet(receiver, name, value, setter)
..fileOffset = offsetForToken(token);
}
@@ -214,12 +215,12 @@ class PropertyAccessor extends Accessor {
..fileOffset = offsetForToken(token);
}
- Expression _makeRead() => builtGetter = helper.astFactory
- .propertyGet(receiverAccess(), name, getter)
+ Expression _makeRead() =>
+ builtGetter = new KernelPropertyGet(receiverAccess(), name, getter)
..fileOffset = offsetForToken(token);
Expression _makeWrite(Expression value, bool voidContext) {
- return helper.astFactory.propertySet(receiverAccess(), name, value, setter)
+ return new KernelPropertySet(receiverAccess(), name, value, setter)
..fileOffset = offsetForToken(token);
}
@@ -236,14 +237,13 @@ class ThisPropertyAccessor extends Accessor {
BuilderHelper helper, this.name, this.getter, this.setter, Token token)
: super(helper, token);
- Expression _makeRead() => builtGetter = helper.astFactory
- .propertyGet(new ThisExpression(), name, getter)
+ Expression _makeRead() =>
+ builtGetter = new KernelPropertyGet(new ThisExpression(), name, getter)
..fileOffset = offsetForToken(token);
Expression _makeWrite(Expression value, bool voidContext) {
- return helper.astFactory
- .propertySet(new ThisExpression(), name, value, setter)
- ..fileOffset = offsetForToken(token);
+ return new KernelPropertySet(new ThisExpression(), name, value, setter)
+ ..fileOffset = offsetForToken(token);
}
}
@@ -260,20 +260,17 @@ class NullAwarePropertyAccessor extends Accessor {
receiverAccess() => new VariableGet(receiver);
- Expression _makeRead() => builtGetter =
- helper.astFactory.propertyGet(receiverAccess(), name, getter);
+ Expression _makeRead() =>
+ builtGetter = new KernelPropertyGet(receiverAccess(), name, getter);
Expression _makeWrite(Expression value, bool voidContext) {
- return helper.astFactory.propertySet(receiverAccess(), name, value, setter);
+ return new KernelPropertySet(receiverAccess(), name, value, setter);
}
Expression _finish(Expression body) => makeLet(
receiver,
new ConditionalExpression(
- buildIsNull(helper.astFactory, receiverAccess()),
- new NullLiteral(),
- body,
- type));
+ buildIsNull(receiverAccess()), new NullLiteral(), body, type));
}
class SuperPropertyAccessor extends Accessor {
@@ -321,14 +318,14 @@ class IndexAccessor extends Accessor {
this.getter, this.setter, Token token)
: super(helper, token);
- Expression _makeSimpleRead() => helper.astFactory.methodInvocation(receiver,
- indexGetName, helper.astFactory.arguments(<Expression>[index]), getter)
+ Expression _makeSimpleRead() => new KernelMethodInvocation(
+ receiver, indexGetName, new KernelArguments(<Expression>[index]), getter)
..fileOffset = offsetForToken(token);
Expression _makeSimpleWrite(Expression value, bool voidContext) {
if (!voidContext) return _makeWriteAndReturn(value);
- return helper.astFactory.methodInvocation(receiver, indexSetName,
- helper.astFactory.arguments(<Expression>[index, value]), setter)
+ return new KernelMethodInvocation(receiver, indexSetName,
+ new KernelArguments(<Expression>[index, value]), setter)
..fileOffset = offsetForToken(token);
}
@@ -346,18 +343,15 @@ class IndexAccessor extends Accessor {
}
Expression _makeRead() {
- return builtGetter = helper.astFactory.methodInvocation(
- receiverAccess(),
- indexGetName,
- helper.astFactory.arguments(<Expression>[indexAccess()]),
- getter)
+ return builtGetter = new KernelMethodInvocation(receiverAccess(),
+ indexGetName, new KernelArguments(<Expression>[indexAccess()]), getter)
..fileOffset = offsetForToken(token);
}
Expression _makeWrite(Expression value, bool voidContext) {
if (!voidContext) return _makeWriteAndReturn(value);
- return helper.astFactory.methodInvocation(receiverAccess(), indexSetName,
- helper.astFactory.arguments(<Expression>[indexAccess(), value]), setter)
+ return new KernelMethodInvocation(receiverAccess(), indexSetName,
+ new KernelArguments(<Expression>[indexAccess(), value]), setter)
..fileOffset = offsetForToken(token);
}
@@ -367,14 +361,13 @@ class IndexAccessor extends Accessor {
// The call to []= does not return the value like direct-style assignments
// do. We need to bind the value in a let.
var valueVariable = new VariableDeclaration.forValue(value);
- var dummy = new VariableDeclaration.forValue(helper.astFactory
- .methodInvocation(
- receiverAccess(),
- indexSetName,
- helper.astFactory.arguments(
- <Expression>[indexAccess(), new VariableGet(valueVariable)]),
- setter)
- ..fileOffset = offsetForToken(token));
+ var dummy = new VariableDeclaration.forValue(new KernelMethodInvocation(
+ receiverAccess(),
+ indexSetName,
+ new KernelArguments(
+ <Expression>[indexAccess(), new VariableGet(valueVariable)]),
+ setter)
+ ..fileOffset = offsetForToken(token));
return makeLet(
valueVariable, makeLet(dummy, new VariableGet(valueVariable)));
}
@@ -396,17 +389,14 @@ class ThisIndexAccessor extends Accessor {
: super(helper, token);
Expression _makeSimpleRead() {
- return helper.astFactory.methodInvocation(new ThisExpression(),
- indexGetName, helper.astFactory.arguments(<Expression>[index]), getter);
+ return new KernelMethodInvocation(new ThisExpression(), indexGetName,
+ new KernelArguments(<Expression>[index]), getter);
}
Expression _makeSimpleWrite(Expression value, bool voidContext) {
if (!voidContext) return _makeWriteAndReturn(value);
- return helper.astFactory.methodInvocation(
- new ThisExpression(),
- indexSetName,
- helper.astFactory.arguments(<Expression>[index, value]),
- setter);
+ return new KernelMethodInvocation(new ThisExpression(), indexSetName,
+ new KernelArguments(<Expression>[index, value]), setter);
}
indexAccess() {
@@ -414,30 +404,26 @@ class ThisIndexAccessor extends Accessor {
return new VariableGet(indexVariable);
}
- Expression _makeRead() => builtGetter = helper.astFactory.methodInvocation(
+ Expression _makeRead() => builtGetter = new KernelMethodInvocation(
new ThisExpression(),
indexGetName,
- helper.astFactory.arguments(<Expression>[indexAccess()]),
+ new KernelArguments(<Expression>[indexAccess()]),
getter);
Expression _makeWrite(Expression value, bool voidContext) {
if (!voidContext) return _makeWriteAndReturn(value);
- return helper.astFactory.methodInvocation(
- new ThisExpression(),
- indexSetName,
- helper.astFactory.arguments(<Expression>[indexAccess(), value]),
- setter);
+ return new KernelMethodInvocation(new ThisExpression(), indexSetName,
+ new KernelArguments(<Expression>[indexAccess(), value]), setter);
}
_makeWriteAndReturn(Expression value) {
var valueVariable = new VariableDeclaration.forValue(value);
- var dummy = new VariableDeclaration.forValue(helper.astFactory
- .methodInvocation(
- new ThisExpression(),
- indexSetName,
- helper.astFactory.arguments(
- <Expression>[indexAccess(), new VariableGet(valueVariable)]),
- setter));
+ var dummy = new VariableDeclaration.forValue(new KernelMethodInvocation(
+ new ThisExpression(),
+ indexSetName,
+ new KernelArguments(
+ <Expression>[indexAccess(), new VariableGet(valueVariable)]),
+ setter));
return makeLet(
valueVariable, makeLet(dummy, new VariableGet(valueVariable)));
}
@@ -460,32 +446,30 @@ class SuperIndexAccessor extends Accessor {
}
Expression _makeSimpleRead() => new SuperMethodInvocation(
- indexGetName, helper.astFactory.arguments(<Expression>[index]), getter);
+ indexGetName, new KernelArguments(<Expression>[index]), getter);
Expression _makeSimpleWrite(Expression value, bool voidContext) {
if (!voidContext) return _makeWriteAndReturn(value);
- return new SuperMethodInvocation(indexSetName,
- helper.astFactory.arguments(<Expression>[index, value]), setter);
+ return new SuperMethodInvocation(
+ indexSetName, new KernelArguments(<Expression>[index, value]), setter);
}
Expression _makeRead() {
- return builtGetter = new SuperMethodInvocation(indexGetName,
- helper.astFactory.arguments(<Expression>[indexAccess()]), getter);
+ return builtGetter = new SuperMethodInvocation(
+ indexGetName, new KernelArguments(<Expression>[indexAccess()]), getter);
}
Expression _makeWrite(Expression value, bool voidContext) {
if (!voidContext) return _makeWriteAndReturn(value);
- return new SuperMethodInvocation(
- indexSetName,
- helper.astFactory.arguments(<Expression>[indexAccess(), value]),
- setter);
+ return new SuperMethodInvocation(indexSetName,
+ new KernelArguments(<Expression>[indexAccess(), value]), setter);
}
_makeWriteAndReturn(Expression value) {
var valueVariable = new VariableDeclaration.forValue(value);
var dummy = new VariableDeclaration.forValue(new SuperMethodInvocation(
indexSetName,
- helper.astFactory.arguments(
+ new KernelArguments(
<Expression>[indexAccess(), new VariableGet(valueVariable)]),
setter));
return makeLet(
@@ -542,19 +526,18 @@ Expression makeLet(VariableDeclaration variable, Expression body) {
return new Let(variable, body);
}
-Expression makeBinary(AstFactory astFactory, Expression left, Name operator,
- Procedure interfaceTarget, Expression right,
+Expression makeBinary(
+ Expression left, Name operator, Procedure interfaceTarget, Expression right,
{int offset: TreeNode.noOffset}) {
- return astFactory.methodInvocation(left, operator,
- astFactory.arguments(<Expression>[right]), interfaceTarget)
+ return new KernelMethodInvocation(
+ left, operator, new KernelArguments(<Expression>[right]), interfaceTarget)
..fileOffset = offset;
}
final Name _equalOperator = new Name('==');
-Expression buildIsNull(AstFactory astFactory, Expression value,
- {int offset: TreeNode.noOffset}) {
- return makeBinary(astFactory, value, _equalOperator, null, new NullLiteral(),
+Expression buildIsNull(Expression value, {int offset: TreeNode.noOffset}) {
+ return makeBinary(value, _equalOperator, null, new NullLiteral(),
offset: offset);
}

Powered by Google App Engine
This is Rietveld 408576698