Index: pkg/front_end/lib/src/fasta/kernel/shadow_ast.dart |
diff --git a/pkg/front_end/lib/src/fasta/kernel/shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/shadow_ast.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1d7778573b7cb04fc5b7eb2ee8a1debf7e61e3f1 |
--- /dev/null |
+++ b/pkg/front_end/lib/src/fasta/kernel/shadow_ast.dart |
@@ -0,0 +1,142 @@ |
+import 'package:kernel/ast.dart' as kernel; |
+import '../builder/shadow_ast.dart' as builder; |
+import 'package:kernel/ast.dart' show DartType; |
+ |
+class Block extends kernel.Block with builder.Block implements Statement { |
+ Block(List<Statement> statements) : super(statements); |
+ |
+ @override |
+ List<Statement> get shadowStatements => statements; |
+} |
+ |
+abstract class Expression implements kernel.Expression, builder.Expression {} |
+ |
+class FunctionExpression extends kernel.FunctionExpression |
+ with builder.FunctionExpression |
+ implements Expression { |
+ FunctionExpression(kernel.FunctionNode function) : super(function); |
+ |
+ @override |
+ Statement get shadowBody => function.body; |
+ |
+ @override |
+ set shadowInferredReturnType(DartType type) { |
+ function.returnType = type; |
+ } |
+ |
+ @override |
+ bool get shadowIsAsync { |
+ // TODO(paulberry): is there a helper function in kernel that does this? |
+ var asyncMarker = function.asyncMarker; |
+ return asyncMarker == kernel.AsyncMarker.Async || |
+ asyncMarker == kernel.AsyncMarker.AsyncStar; |
+ } |
+ |
+ @override |
+ bool get shadowIsExpressionFunction => |
+ function.body is kernel.ReturnStatement; |
+ |
+ @override |
+ bool get shadowIsGenerator { |
+ // TODO(paulberry): is there a helper function in kernel that does this? |
+ var asyncMarker = function.asyncMarker; |
+ return asyncMarker == kernel.AsyncMarker.SyncStar || |
+ asyncMarker == kernel.AsyncMarker.AsyncStar; |
+ } |
+ |
+ @override |
+ DartType shadowMakeFunctionType() { |
+ return function.functionType; |
+ } |
+} |
+ |
+class IntLiteral extends kernel.IntLiteral |
+ with builder.IntLiteral |
+ implements Expression { |
+ IntLiteral(int value) : super(value); |
+} |
+ |
+class ListLiteral extends kernel.ListLiteral |
+ with builder.ListLiteral |
+ implements Expression { |
+ DartType _declaredTypeArgument; |
+ |
+ ListLiteral(List<Expression> expressions, |
+ {DartType typeArgument, bool isConst: false}) |
+ : _declaredTypeArgument = typeArgument, |
+ super.forMixin( |
+ expressions, typeArgument ?? const kernel.DynamicType(), isConst); |
+ @override |
+ kernel.DartType get declaredTypeArgumentForInference => _declaredTypeArgument; |
+ |
+ @override |
+ Iterable<Expression> get expressionsForInference { |
+ List<Expression> shadowExpressions = expressions; |
+ return shadowExpressions; |
+ } |
+ |
+ @override |
+ set inferredTypeArgument(kernel.DartType type) { |
+ typeArgument = type; |
+ } |
+} |
+ |
+class NullLiteral extends kernel.NullLiteral |
+ with builder.NullLiteral |
+ implements Expression {} |
+ |
+class ReturnStatement extends kernel.ReturnStatement |
+ with builder.ReturnStatement |
+ implements Statement { |
+ ReturnStatement([Expression expression]) : super.forMixin(expression); |
+ |
+ @override |
+ Expression get expressionForInference => expression; |
+} |
+ |
+abstract class Statement extends kernel.Statement implements builder.Statement { |
+} |
+ |
+class VariableDeclaration extends kernel.VariableDeclaration |
+ with builder.VariableDeclaration |
+ implements Statement { |
+ DartType _declaredType; |
+ |
+ VariableDeclaration(String name, |
+ {Expression initializer, |
+ DartType type, |
+ bool isFinal: false, |
+ bool isConst: false}) |
+ : _declaredType = type, |
+ super.forMixin(name, initializer, type ?? const kernel.DynamicType(), |
+ null, isFinal, isConst); |
+ |
+ @override |
+ DartType get shadowDeclaredType => _declaredType; |
+ |
+ @override |
+ kernel.DartType get shadowInferredType => type; |
+ |
+ @override |
+ set shadowInferredType(kernel.DartType type) { |
+ super.type = type; |
+ } |
+ |
+ @override |
+ Expression get shadowInitializer => initializer; |
+ |
+ @override |
+ set type(kernel.DartType type) { |
+ super.type = _declaredType = type; |
+ } |
+} |
+ |
+class VariableGet extends kernel.VariableGet |
+ with builder.VariableGet |
+ implements Expression { |
+ VariableGet(kernel.VariableDeclaration variable, [DartType promotedType]) |
+ : super.forMixin(variable, promotedType); |
+ |
+ @override |
+ VariableDeclaration get shadowDeclaration => variable; |
+} |