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

Side by Side Diff: pkg/compiler/lib/src/resolution/send_resolver.dart

Issue 1108783003: Refactor SsaBuilder.visitSuperSend. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Updated cf. comments. Created 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 dart2js.semantics_visitor; 5 part of dart2js.semantics_visitor;
6 6
7 enum SendStructureKind { 7 enum SendStructureKind {
8 GET, 8 GET,
9 SET, 9 SET,
10 INVOKE, 10 INVOKE,
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 if (semantics == null) { 227 if (semantics == null) {
228 return internalError(node, 'No semantics for $node'); 228 return internalError(node, 'No semantics for $node');
229 } 229 }
230 Selector selector = elements.getSelector(node); 230 Selector selector = elements.getSelector(node);
231 switch (kind) { 231 switch (kind) {
232 case SendStructureKind.GET: 232 case SendStructureKind.GET:
233 return new GetStructure(semantics, selector); 233 return new GetStructure(semantics, selector);
234 case SendStructureKind.SET: 234 case SendStructureKind.SET:
235 return new SetStructure(semantics, selector); 235 return new SetStructure(semantics, selector);
236 case SendStructureKind.INVOKE: 236 case SendStructureKind.INVOKE:
237 if (semantics.kind == AccessKind.SUPER_METHOD) {
238 // TODO(johnniwinther): Find all statically resolved case that should
239 // go here (top level, static, local, ...).
240 if (!selector.callStructure.signatureApplies(semantics.element)) {
241 return new IncompatibleInvokeStructure(semantics, selector);
242 }
243 }
237 return new InvokeStructure(semantics, selector); 244 return new InvokeStructure(semantics, selector);
238 case SendStructureKind.UNARY: 245 case SendStructureKind.UNARY:
239 return new UnaryStructure(semantics, unaryOperator, selector); 246 return new UnaryStructure(semantics, unaryOperator, selector);
240 case SendStructureKind.NOT: 247 case SendStructureKind.NOT:
241 assert(selector == null); 248 assert(selector == null);
242 return new NotStructure(semantics, selector); 249 return new NotStructure(semantics, selector);
243 case SendStructureKind.BINARY: 250 case SendStructureKind.BINARY:
244 return new BinaryStructure(semantics, binaryOperator, selector); 251 return new BinaryStructure(semantics, binaryOperator, selector);
245 case SendStructureKind.INDEX: 252 case SendStructureKind.INDEX:
246 return new IndexStructure(semantics, selector); 253 return new IndexStructure(semantics, selector);
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 return new ConstantAccess.typedefTypeLiteral(constant); 328 return new ConstantAccess.typedefTypeLiteral(constant);
322 case TypeKind.TYPE_VARIABLE: 329 case TypeKind.TYPE_VARIABLE:
323 return new StaticAccess.typeParameterTypeLiteral(dartType.element); 330 return new StaticAccess.typeParameterTypeLiteral(dartType.element);
324 case TypeKind.DYNAMIC: 331 case TypeKind.DYNAMIC:
325 return new ConstantAccess.dynamicTypeLiteral(constant); 332 return new ConstantAccess.dynamicTypeLiteral(constant);
326 default: 333 default:
327 return internalError(node, "Unexpected type literal type: $dartType"); 334 return internalError(node, "Unexpected type literal type: $dartType");
328 } 335 }
329 } else if (node.isSuperCall) { 336 } else if (node.isSuperCall) {
330 if (Elements.isUnresolved(element)) { 337 if (Elements.isUnresolved(element)) {
331 return new StaticAccess.unresolved(element); 338 return new StaticAccess.unresolvedSuper(element);
332 } else if (isCompound && Elements.isUnresolved(getter)) { 339 } else if (isCompound && Elements.isUnresolved(getter)) {
333 // TODO(johnniwinther): Ensure that [getter] is not null. This happens 340 // TODO(johnniwinther): Ensure that [getter] is not null. This happens
334 // in the case of missing super getter. 341 // in the case of missing super getter.
335 return new StaticAccess.unresolved(getter); 342 return new StaticAccess.unresolved(getter);
336 } else if (element.isField) { 343 } else if (element.isField) {
337 if (getter != null && getter != element) { 344 if (getter != null && getter != element) {
338 CompoundAccessKind accessKind; 345 CompoundAccessKind accessKind;
339 if (getter.isField) { 346 if (getter.isField) {
340 accessKind = CompoundAccessKind.SUPER_FIELD_FIELD; 347 accessKind = CompoundAccessKind.SUPER_FIELD_FIELD;
341 } else if (getter.isGetter) { 348 } else if (getter.isGetter) {
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after
778 return internalError(node, "Unexpected variable $element."); 785 return internalError(node, "Unexpected variable $element.");
779 } 786 }
780 if (element.isConst) { 787 if (element.isConst) {
781 ConstantExpression constant = elements.getConstant(element.initializer); 788 ConstantExpression constant = elements.getConstant(element.initializer);
782 return new ConstantVariableStructure(kind, node, element, constant); 789 return new ConstantVariableStructure(kind, node, element, constant);
783 } else { 790 } else {
784 return new NonConstantVariableStructure(kind, node, element); 791 return new NonConstantVariableStructure(kind, node, element);
785 } 792 }
786 } 793 }
787 } 794 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart ('k') | pkg/compiler/lib/src/resolution/send_structure.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698