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

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

Issue 2903243002: Add type inference logic for cascade expressions. (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
« no previous file with comments | « no previous file | pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/front_end/lib/src/fasta/kernel/body_builder.dart
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 73b8638cb7a360b6e3bcfe84264a0eda8bd6082a..d35c905321abff1b6534df74f28bdc536c3a6991 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -638,14 +638,14 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
void beginCascade(Token token) {
debugEvent("beginCascade");
Expression expression = popForValue();
- if (expression is CascadeReceiver) {
+ if (expression is KernelCascadeExpression) {
push(expression);
push(new VariableAccessor(this, token, expression.variable));
expression.extend();
} else {
- VariableDeclaration variable =
- new VariableDeclaration.forValue(expression);
- push(new CascadeReceiver(variable));
+ VariableDeclaration variable = new KernelVariableDeclaration.forValue(
+ expression, functionNestingLevel);
+ push(new KernelCascadeExpression(variable));
push(new VariableAccessor(this, token, variable));
}
}
@@ -654,7 +654,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
void endCascade() {
debugEvent("endCascade");
Expression expression = popForEffect();
- CascadeReceiver cascadeReceiver = pop();
+ KernelCascadeExpression cascadeReceiver = pop();
cascadeReceiver.finalize(expression);
push(cascadeReceiver);
}
@@ -2753,34 +2753,6 @@ class Label extends InvalidExpression {
String toString() => "label($name)";
}
-class CascadeReceiver extends Let {
- Let nextCascade;
-
- CascadeReceiver(VariableDeclaration variable)
- : super(
- variable,
- makeLet(new VariableDeclaration.forValue(new InvalidExpression()),
- new VariableGet(variable))) {
- nextCascade = body;
- }
-
- void extend() {
- assert(nextCascade.variable.initializer is! InvalidExpression);
- Let newCascade = makeLet(
- new VariableDeclaration.forValue(new InvalidExpression()),
- nextCascade.body);
- nextCascade.body = newCascade;
- newCascade.parent = nextCascade;
- nextCascade = newCascade;
- }
-
- void finalize(Expression expression) {
- assert(nextCascade.variable.initializer is InvalidExpression);
- nextCascade.variable.initializer = expression;
- expression.parent = nextCascade.variable;
- }
-}
-
abstract class ContextAccessor extends FastaAccessor {
final BuilderHelper helper;
« no previous file with comments | « no previous file | pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698