| 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 fc6476d6a6edce75691183cfd8dd7f80a504044f..925d2ec01e97661ee2466be2dcacbfe9df6fd7c4 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
|
| @@ -24,10 +24,13 @@ import 'package:front_end/src/fasta/type_inference/type_inferrer.dart';
|
| import 'package:front_end/src/fasta/type_inference/type_promotion.dart';
|
| import 'package:front_end/src/fasta/type_inference/type_schema.dart';
|
| import 'package:front_end/src/fasta/type_inference/type_schema_elimination.dart';
|
| -import 'package:kernel/ast.dart';
|
| +import 'package:kernel/ast.dart'
|
| + hide InvalidExpression, InvalidInitializer, InvalidStatement;
|
| import 'package:kernel/frontend/accessors.dart';
|
| import 'package:kernel/type_algebra.dart';
|
|
|
| +import '../errors.dart' show internalError;
|
| +
|
| /// Computes the return type of a (possibly factory) constructor.
|
| InterfaceType computeConstructorReturnType(Member constructor) {
|
| if (constructor is Constructor) {
|
| @@ -181,7 +184,7 @@ class KernelCascadeExpression extends Let implements KernelExpression {
|
| KernelCascadeExpression(KernelVariableDeclaration variable)
|
| : super(
|
| variable,
|
| - makeLet(new VariableDeclaration.forValue(new InvalidExpression()),
|
| + makeLet(new VariableDeclaration.forValue(new _UnfinishedCascade()),
|
| new VariableGet(variable))) {
|
| nextCascade = body;
|
| }
|
| @@ -189,9 +192,9 @@ class KernelCascadeExpression extends Let implements KernelExpression {
|
| /// Adds a new unfinalized section to the end of the cascade. Should be
|
| /// called after the previous cascade section has been finalized.
|
| void extend() {
|
| - assert(nextCascade.variable.initializer is! InvalidExpression);
|
| + assert(nextCascade.variable.initializer is! _UnfinishedCascade);
|
| Let newCascade = makeLet(
|
| - new VariableDeclaration.forValue(new InvalidExpression()),
|
| + new VariableDeclaration.forValue(new _UnfinishedCascade()),
|
| nextCascade.body);
|
| nextCascade.body = newCascade;
|
| newCascade.parent = nextCascade;
|
| @@ -200,7 +203,7 @@ class KernelCascadeExpression extends Let implements KernelExpression {
|
|
|
| /// Finalizes the last cascade section with the given [expression].
|
| void finalize(Expression expression) {
|
| - assert(nextCascade.variable.initializer is InvalidExpression);
|
| + assert(nextCascade.variable.initializer is _UnfinishedCascade);
|
| nextCascade.variable.initializer = expression;
|
| expression.parent = nextCascade.variable;
|
| }
|
| @@ -1542,3 +1545,25 @@ class KernelYieldStatement extends YieldStatement implements KernelStatement {
|
| inferrer.listener.yieldStatementExit(this);
|
| }
|
| }
|
| +
|
| +class _UnfinishedCascade extends Expression {
|
| + getStaticType(types) {
|
| + return internalError("Internal error: Unsupported operation.");
|
| + }
|
| +
|
| + accept(v) {
|
| + return internalError("Internal error: Unsupported operation.");
|
| + }
|
| +
|
| + accept1(v, arg) {
|
| + return internalError("Internal error: Unsupported operation.");
|
| + }
|
| +
|
| + visitChildren(v) {
|
| + return internalError("Internal error: Unsupported operation.");
|
| + }
|
| +
|
| + transformChildren(v) {
|
| + return internalError("Internal error: Unsupported operation.");
|
| + }
|
| +}
|
|
|