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

Side by Side 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 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of resolution; 5 part of resolution;
6 6
7 abstract class TreeElements { 7 abstract class TreeElements {
8 Element operator[](Node node); 8 Element operator[](Node node);
9 Selector getSelector(Send send); 9 Selector getSelector(Send send);
10 DartType getType(Node node); 10 DartType getType(Node node);
(...skipping 1020 matching lines...) Expand 10 before | Expand all | Expand 10 after
1031 breakTargetStack = breakTargetStack.tail; 1031 breakTargetStack = breakTargetStack.tail;
1032 labels = labels.outer; 1032 labels = labels.outer;
1033 } 1033 }
1034 } 1034 }
1035 1035
1036 class TypeResolver { 1036 class TypeResolver {
1037 final Compiler compiler; 1037 final Compiler compiler;
1038 1038
1039 TypeResolver(this.compiler); 1039 TypeResolver(this.compiler);
1040 1040
1041 bool anyMalformedTypesInThere(Link<DartType> list) { 1041 bool anyMalformedTypes(Link<DartType> list) {
1042 for (Link<DartType> link = list; 1042 for (Link<DartType> link = list;
1043 !link.isEmpty; 1043 !link.isEmpty;
1044 link = link.tail) { 1044 link = link.tail) {
1045 DartType dtype = link.head; 1045 DartType dtype = link.head;
1046 if (dtype is MalformedType) { 1046 if (dtype is MalformedType) {
1047 return true; 1047 return true;
1048 } 1048 }
1049 } 1049 }
1050 return false; 1050 return false;
1051 } 1051 }
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1129 ClassElement cls = element; 1129 ClassElement cls = element;
1130 cls.ensureResolved(compiler); 1130 cls.ensureResolved(compiler);
1131 Link<DartType> arguments = 1131 Link<DartType> arguments =
1132 resolveTypeArguments(node, cls.typeVariables, 1132 resolveTypeArguments(node, cls.typeVariables,
1133 inStaticContext, scope, 1133 inStaticContext, scope,
1134 onFailure, whenResolved); 1134 onFailure, whenResolved);
1135 if (cls.typeVariables.isEmpty && arguments.isEmpty) { 1135 if (cls.typeVariables.isEmpty && arguments.isEmpty) {
1136 // Use the canonical type if it has no type parameters. 1136 // Use the canonical type if it has no type parameters.
1137 type = cls.computeType(compiler); 1137 type = cls.computeType(compiler);
1138 } else { 1138 } else {
1139 // In checked mode malformed-ness of the type argument bubbles up. 1139 if (anyMalformedTypes(arguments)) {
1140 if (anyMalformedTypesInThere(arguments) && 1140 // Build interface type(with malformed arguments in it) and
1141 compiler.enableTypeAssertions) { 1141 // 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.
1142 type = new MalformedType( 1142 // 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.
1143 new MalformedTypeElement(node, element)); 1143 // can figure out which constructor to call.
1144 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.
1145 whenResolved(node, type);
1146 // However return malformed type element so that
1147 // ConstructorResolver.visitTypeAnnotation gets [:MalformedType:]
ngeoffray 2012/11/29 09:02:26 [ConstructorResolver.visitTypeAnnotation]
aam-me 2012/11/30 06:27:47 Done.
1148 // 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
1149 // The fact that new expression has malformed type is picked up
1150 // 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.
1151 // [:visitNewSend:] (important not to affect it in production mode)
ngeoffray 2012/11/29 09:02:26 [SsaBuilder.visitNewSend].
1152 // 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
1153 // 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
1154 // to InterfaceType.
1155 type = new MalformedType(new MalformedTypeElement(node, element));
1156 return type;
1144 } else { 1157 } else {
1145 if (arguments.isEmpty) { 1158 if (arguments.isEmpty) {
1146 // Use the canonical raw type if the class is generic. 1159 // Use the canonical raw type if the class is generic.
1147 type = cls.rawType; 1160 type = cls.rawType;
1148 } else { 1161 } else {
1149 type = new InterfaceType(cls.declaration, arguments); 1162 type = new InterfaceType(cls.declaration, arguments);
1150 } 1163 }
1151 } 1164 }
1152 } 1165 }
1153 } else if (element.isTypedef()) { 1166 } else if (element.isTypedef()) {
(...skipping 2005 matching lines...) Expand 10 before | Expand all | Expand 10 after
3159 return e; 3172 return e;
3160 } 3173 }
3161 3174
3162 /// Assumed to be called by [resolveRedirectingFactory]. 3175 /// Assumed to be called by [resolveRedirectingFactory].
3163 Element visitReturn(Return node) { 3176 Element visitReturn(Return node) {
3164 Node expression = node.expression; 3177 Node expression = node.expression;
3165 return finishConstructorReference(visit(expression), 3178 return finishConstructorReference(visit(expression),
3166 expression, expression); 3179 expression, expression);
3167 } 3180 }
3168 } 3181 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698