| Index: pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
|
| diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
|
| index eb7246198956a9c125e7719c82ab4fa147fb61a5..8f05a215a28aa2a1992ccb27dd85847a5df730a4 100644
|
| --- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
|
| +++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
|
| @@ -3,7 +3,8 @@
|
| // BSD-style license that can be found in the LICENSE file.
|
|
|
| /// This file declares a "shadow hierarchy" of concrete classes which extend
|
| -/// the kernel class hierarchy using mixins from `builder/shadow_ast.dart`.
|
| +/// the kernel class hierarchy, adding methods and fields needed by the
|
| +/// BodyBuilder.
|
| ///
|
| /// Instances of these classes may be created using the factory methods in
|
| /// `ast_factory.dart`.
|
| @@ -18,188 +19,53 @@
|
| /// with the same kind of root node.
|
| import 'package:kernel/ast.dart';
|
|
|
| -import '../builder/shadow_ast.dart';
|
| -
|
| /// Concrete shadow object representing a statement block in kernel form.
|
| -class KernelBlock extends Block with ShadowBlock implements KernelStatement {
|
| +class KernelBlock extends Block implements KernelStatement {
|
| KernelBlock(List<KernelStatement> statements) : super(statements);
|
| -
|
| - @override
|
| - List<KernelStatement> get shadowStatements => statements;
|
| }
|
|
|
| /// Common base class for shadow objects representing expressions in kernel
|
| /// form.
|
| -abstract class KernelExpression implements Expression, ShadowExpression {}
|
| +abstract class KernelExpression implements Expression {}
|
|
|
| /// Concrete shadow object representing a function expression in kernel form.
|
| class KernelFunctionExpression extends FunctionExpression
|
| - with ShadowFunctionExpression
|
| implements KernelExpression {
|
| KernelFunctionExpression(FunctionNode function) : super(function);
|
| -
|
| - @override
|
| - KernelStatement get shadowBody => function.body;
|
| -
|
| - @override
|
| - DartType get shadowFunctionType {
|
| - return function.functionType;
|
| - }
|
| -
|
| - @override
|
| - bool get shadowIsAsync {
|
| - // TODO(paulberry): is there a helper function in kernel that does this?
|
| - var asyncMarker = function.asyncMarker;
|
| - return asyncMarker == AsyncMarker.Async ||
|
| - asyncMarker == AsyncMarker.AsyncStar;
|
| - }
|
| -
|
| - @override
|
| - bool get shadowIsExpressionFunction => function.body is ReturnStatement;
|
| -
|
| - @override
|
| - bool get shadowIsGenerator {
|
| - // TODO(paulberry): is there a helper function in kernel that does this?
|
| - var asyncMarker = function.asyncMarker;
|
| - return asyncMarker == AsyncMarker.SyncStar ||
|
| - asyncMarker == AsyncMarker.AsyncStar;
|
| - }
|
| -
|
| - @override
|
| - set shadowReturnType(DartType type) {
|
| - function.returnType = type;
|
| - }
|
| }
|
|
|
| /// Concrete shadow object representing an integer literal in kernel form.
|
| -class KernelIntLiteral extends IntLiteral
|
| - with ShadowIntLiteral
|
| - implements KernelExpression {
|
| +class KernelIntLiteral extends IntLiteral implements KernelExpression {
|
| KernelIntLiteral(int value) : super(value);
|
| }
|
|
|
| /// Concrete shadow object representing a list literal in kernel form.
|
| -class KernelListLiteral extends _KernelListLiteral
|
| - with ShadowListLiteral
|
| - implements KernelExpression {
|
| - /// TODO(paulberry): see if we can eliminate the need for this by allowing
|
| - /// `null` to be stored in [ListLiteral] prior to type inference.
|
| - DartType _declaredTypeArgument;
|
| -
|
| +class KernelListLiteral extends ListLiteral implements KernelExpression {
|
| KernelListLiteral(List<KernelExpression> expressions,
|
| {DartType typeArgument, bool isConst: false})
|
| - : _declaredTypeArgument = typeArgument,
|
| - super(expressions, typeArgument ?? const DynamicType(), isConst);
|
| -
|
| - @override
|
| - Iterable<KernelExpression> get shadowExpressions {
|
| - List<KernelExpression> shadowExpressions = expressions;
|
| - return shadowExpressions;
|
| - }
|
| -
|
| - @override
|
| - DartType get shadowTypeArgument => _declaredTypeArgument;
|
| -
|
| - @override
|
| - set shadowTypeArgument(DartType type) {
|
| - typeArgument = type;
|
| - }
|
| + : super(expressions, typeArgument: typeArgument, isConst: isConst);
|
| }
|
|
|
| /// Concrete shadow object representing a null literal in kernel form.
|
| -class KernelNullLiteral extends NullLiteral
|
| - with ShadowNullLiteral
|
| - implements KernelExpression {}
|
| +class KernelNullLiteral extends NullLiteral implements KernelExpression {}
|
|
|
| /// Concrete shadow object representing a return statement in kernel form.
|
| -class KernelReturnStatement extends _KernelReturnStatement
|
| - with ShadowReturnStatement
|
| - implements KernelStatement {
|
| +class KernelReturnStatement extends ReturnStatement implements KernelStatement {
|
| KernelReturnStatement([KernelExpression expression]) : super(expression);
|
| -
|
| - @override
|
| - KernelExpression get shadowExpression => expression;
|
| }
|
|
|
| /// Common base class for shadow objects representing statements in kernel
|
| /// form.
|
| -abstract class KernelStatement extends Statement implements ShadowStatement {}
|
| +abstract class KernelStatement extends Statement {}
|
|
|
| /// Concrete shadow object representing a variable declaration in kernel form.
|
| -class KernelVariableDeclaration extends _KernelVariableDeclaration
|
| - with ShadowVariableDeclaration
|
| +class KernelVariableDeclaration extends VariableDeclaration
|
| implements KernelStatement {
|
| - /// TODO(paulberry): see if we can eliminate the need for this by allowing
|
| - /// `null` to be stored in [VariableDeclaration] prior to type
|
| - /// inference. Alternative: create a subclass of DynamicType which represents
|
| - /// implicit dynamic ("MissingType" or "ImplicitDynamicType" perhaps).
|
| - DartType _declaredType;
|
| -
|
| KernelVariableDeclaration(String name,
|
| {KernelExpression initializer,
|
| DartType type,
|
| bool isFinal: false,
|
| bool isConst: false})
|
| - : _declaredType = type,
|
| - super(name, initializer, type ?? const DynamicType(), isFinal, isConst);
|
| -
|
| - @override
|
| - KernelExpression get shadowInitializer => initializer;
|
| -
|
| - @override
|
| - DartType get shadowType => _declaredType;
|
| -
|
| - @override
|
| - set shadowType(DartType type) {
|
| - this.type = type;
|
| - }
|
| -
|
| - @override
|
| - set type(DartType type) {
|
| - super.type = _declaredType = type;
|
| - }
|
| -}
|
| -
|
| -/// Concrete shadow object representing a read from a variable in kernel form.
|
| -class KernelVariableGet extends _KernelVariableGet
|
| - with ShadowVariableGet
|
| - implements KernelExpression {
|
| - KernelVariableGet(VariableDeclaration variable, [DartType promotedType])
|
| - : super(variable, promotedType);
|
| -
|
| - @override
|
| - KernelVariableDeclaration get shadowDeclaration => variable;
|
| -}
|
| -
|
| -/// Adaptor class allowing [ListLiteral] to be extended with a mixin.
|
| -///
|
| -/// TODO(paulberry): see if we can eliminate the need for this class by adding
|
| -/// a named constructor to [ListLiteral] in which all arguments are
|
| -/// required.
|
| -class _KernelListLiteral extends ListLiteral {
|
| - _KernelListLiteral(
|
| - List<Expression> expressions, DartType typeArgument, bool isConst)
|
| - : super(expressions, typeArgument: typeArgument, isConst: isConst);
|
| -}
|
| -
|
| -/// Adaptor class allowing [ReturnStatement] to be extended with a mixin.
|
| -///
|
| -/// TODO(paulberry): see if we can eliminate the need for this class by adding
|
| -/// a named constructor to [ReturnStatement] in which all arguments are
|
| -/// required.
|
| -class _KernelReturnStatement extends ReturnStatement {
|
| - _KernelReturnStatement(KernelExpression expression) : super(expression);
|
| -}
|
| -
|
| -/// Adaptor class allowing [VariableDeclaration] to be extended with a
|
| -/// mixin.
|
| -///
|
| -/// TODO(paulberry): see if we can eliminate the need for this class by adding
|
| -/// a named constructor to [VariableDeclaration] in which all arguments
|
| -/// are required.
|
| -class _KernelVariableDeclaration extends VariableDeclaration {
|
| - _KernelVariableDeclaration(String name, Expression initializer, DartType type,
|
| - bool isFinal, bool isConst)
|
| : super(name,
|
| initializer: initializer,
|
| type: type,
|
| @@ -207,12 +73,8 @@ class _KernelVariableDeclaration extends VariableDeclaration {
|
| isConst: isConst);
|
| }
|
|
|
| -/// Adaptor class allowing [VariableGet] to be extended with a mixin.
|
| -///
|
| -/// TODO(paulberry): see if we can eliminate the need for this class by adding
|
| -/// a named constructor to [VariableGet] in which all arguments are
|
| -/// required.
|
| -class _KernelVariableGet extends VariableGet {
|
| - _KernelVariableGet(VariableDeclaration variable, DartType promotedType)
|
| +/// Concrete shadow object representing a read from a variable in kernel form.
|
| +class KernelVariableGet extends VariableGet implements KernelExpression {
|
| + KernelVariableGet(VariableDeclaration variable, [DartType promotedType])
|
| : super(variable, promotedType);
|
| }
|
|
|