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

Unified Diff: sdk/lib/_internal/compiler/implementation/resolution/members.dart

Issue 11348294: Follow-up to https://chromiumcodereview.appspot.com/11416144/. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: dt -> dartType Created 8 years, 1 month 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
Index: sdk/lib/_internal/compiler/implementation/resolution/members.dart
diff --git a/sdk/lib/_internal/compiler/implementation/resolution/members.dart b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
index 9e1e01859bf7060e6ed1ec4c7da2d56d676a1fc5..ef596315f328ad6a9aaafbb125ec98075dff2f87 100644
--- a/sdk/lib/_internal/compiler/implementation/resolution/members.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
@@ -1038,7 +1038,7 @@ class TypeResolver {
TypeResolver(this.compiler);
- bool anyMalformedTypesInThere(Link<DartType> list) {
+ bool anyMalformedTypes(Link<DartType> list) {
for (Link<DartType> link = list;
!link.isEmpty;
link = link.tail) {
@@ -1136,11 +1136,24 @@ class TypeResolver {
// Use the canonical type if it has no type parameters.
type = cls.computeType(compiler);
} else {
- // In checked mode malformed-ness of the type argument bubbles up.
- if (anyMalformedTypesInThere(arguments) &&
- compiler.enableTypeAssertions) {
- type = new MalformedType(
- new MalformedTypeElement(node, element));
+ if (anyMalformedTypes(arguments)) {
+ // Build interface type(with malformed arguments in it) and
+ // map it to this constructor invocation node(that's what
ngeoffray 2012/11/29 09:02:26 missing space after node.
aam-me 2012/11/30 06:27:47 Done.
+ // whenResolved does), so that ssaBuilder visitNewSend
ngeoffray 2012/11/29 09:02:26 you can write [SsaBuilder.visitNewSend]
aam-me 2012/11/30 06:27:47 Done.
+ // can figure out which constructor to call.
+ type = new InterfaceType(cls.declaration, arguments);
ngeoffray 2012/11/29 09:02:26 I wouldn't re-use the 'type' variable here, it mak
aam-me 2012/11/30 06:27:47 Done.
+ whenResolved(node, type);
+ // However return malformed type element so that
+ // ConstructorResolver.visitTypeAnnotation gets [:MalformedType:]
ngeoffray 2012/11/29 09:02:26 [ConstructorResolver.visitTypeAnnotation]
aam-me 2012/11/30 06:27:47 Done.
+ // and decorates new expression with this malformed type.
ngeoffray 2012/11/29 09:02:26 What means 'decorates' here?
aam-me 2012/11/30 06:27:47 I meant "maps new expression to malformed type". F
+ // The fact that new expression has malformed type is picked up
+ // by ssaBuilder visitNewExpression, but doesn't affect ssaBuilder
ngeoffray 2012/11/29 09:02:26 [SsaBuilder..]
aam-me 2012/11/30 06:27:47 Done.
+ // [:visitNewSend:] (important not to affect it in production mode)
ngeoffray 2012/11/29 09:02:26 [SsaBuilder.visitNewSend].
+ // since it doesn't use type we create below, but follows the
ngeoffray 2012/11/29 09:02:26 use the type we created below
+ // mapping we created above from Send node element
ngeoffray 2012/11/29 09:02:26 what's 'from Send node element' ? Is that the elem
aam-me 2012/11/30 06:27:47 "Send node" is a parameter to [SsaBuilder.visitNew
+ // to InterfaceType.
+ type = new MalformedType(new MalformedTypeElement(node, element));
+ return type;
} else {
if (arguments.isEmpty) {
// Use the canonical raw type if the class is generic.

Powered by Google App Engine
This is Rietveld 408576698