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 9b304e488f675c3b6fcc619d83f7e83b90c576de..07d30ce2306e05649c086688368f1f0c4623ed6b 100644 |
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart |
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart |
@@ -236,8 +236,13 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
Block popBlock(int count) { |
- List<Statement> statements = popList(count) ?? <Statement>[]; |
- List<Statement> copy; |
+ List statements = popList(count) ?? <Statement>[]; |
+ // TODO(sigmund): should be List<Statement>. In strong mode the .addAll |
+ // below shows an error (and will fail at runtime). The core issue is that |
+ // `statements` is a List< Statement or List<Statement>>, but we expect that |
+ // some of the nested lists will have a reified type of List not |
+ // List<Statement>. |
ahe
2017/02/07 11:03:07
How about:
List<dynamic /* Statement | List<State
Siggi Cherem (dart-lang)
2017/02/07 21:59:25
Done. added the comment on the type, but had to do
|
+ List copy; |
ahe
2017/02/07 11:03:07
This should be List<Statement>.
Siggi Cherem (dart-lang)
2017/02/07 21:59:25
Done. Sorry for the confusion - the TODO was refer
|
for (int i = 0; i < statements.length; i++) { |
var statement = statements[i]; |
if (statement is List) { |
@@ -505,7 +510,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
void endSend(Token token) { |
debugEvent("Send"); |
Arguments arguments = pop(); |
- List typeArguments = pop(); |
+ List<DartType> typeArguments = pop(); |
Object receiver = pop(); |
if (arguments != null && typeArguments != null) { |
arguments.types.addAll(typeArguments); |
@@ -993,7 +998,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
assert(conditionStatement is EmptyStatement); |
} |
List<VariableDeclaration> variables = <VariableDeclaration>[]; |
- var variableOrExpression = pop(); |
+ dynamic variableOrExpression = pop(); |
Statement begin; |
if (variableOrExpression is BuilderAccessor) { |
variableOrExpression = variableOrExpression.buildForEffect(); |
@@ -1001,7 +1006,9 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
if (variableOrExpression is VariableDeclaration) { |
variables.add(variableOrExpression); |
} else if (variableOrExpression is List) { |
- variables.addAll(variableOrExpression); |
+ // TODO(sigmund): remove this assignment (see issue #28651) |
+ Iterable vars = variableOrExpression; |
+ variables.addAll(vars); |
} else if (variableOrExpression == null) { |
// Do nothing. |
} else if (variableOrExpression is Expression) { |
@@ -1161,7 +1168,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
// TODO(ahe): The scope is wrong for return types of generic functions. |
debugEvent("Type"); |
List<DartType> arguments = pop(); |
- var name = pop(); |
+ dynamic name = pop(); |
if (name is List) { |
if (name.length != 2) { |
return internalError("Unexpected: $name.length"); |
@@ -1281,7 +1288,8 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
name.fileOffset); |
} |
if (thisKeyword == null) { |
- variable = builder.build(); |
+ KernelFormalParameterBuilder formalBuilder = builder; |
ahe
2017/02/07 11:03:08
Remove this.
Siggi Cherem (dart-lang)
2017/02/07 21:59:25
Done.
|
+ variable = formalBuilder.build(); |
variable.initializer = name.initializer; |
} else if (builder.isField && builder.parent == classBuilder) { |
FieldBuilder field = builder; |
@@ -1504,7 +1512,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
Identifier suffix = popIfNotNull(periodBeforeName); |
Identifier identifier; |
List<DartType> typeArguments = pop(); |
- var type = pop(); |
+ dynamic type = pop(); |
if (type is List) { |
var prefix = type[0]; |
identifier = type[1]; |
@@ -1621,7 +1629,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
debugEvent("NewExpression"); |
Arguments arguments = pop(); |
String name = pop(); |
- List typeArguments = pop(); |
+ List<DartType> typeArguments = pop(); |
var type = pop(); |
if (typeArguments != null) { |
@@ -1630,7 +1638,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
String errorName; |
- if (type is ClassBuilder) { |
+ if (type is KernelClassBuilder) { |
ahe
2017/02/07 11:03:07
Change this back.
Siggi Cherem (dart-lang)
2017/02/07 21:59:25
Sorry, I totally meant to ask you a follow up ques
ahe
2017/02/08 19:59:23
I don't think it can happen currently, but I'd lik
Siggi Cherem (dart-lang)
2017/02/09 04:44:02
Done.
|
Builder b = type.findConstructorOrFactory(name); |
Member target; |
if (b == null) { |
@@ -1743,7 +1751,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
exitLocalScope(); |
} |
FormalParameters formals = pop(); |
- List typeParameters = pop(); |
+ List<TypeParameter> typeParameters = pop(); |
push(formals.addToFunction(new FunctionNode(body, |
typeParameters: typeParameters, asyncMarker: asyncModifier))); |
functionNestingLevel--; |
@@ -1769,7 +1777,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
AsyncMarker asyncModifier = pop(); |
exitLocalScope(); |
FormalParameters formals = pop(); |
- List typeParameters = pop(); |
+ List<TypeParameter> typeParameters = pop(); |
FunctionNode function = formals.addToFunction(new FunctionNode(body, |
typeParameters: typeParameters, asyncMarker: asyncModifier)); |
push(new FunctionExpression(function)); |