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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart

Issue 14907008: Remove support for interface in dart2js. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Rebased Created 7 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) 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 dart_backend; 5 part of dart_backend;
6 6
7 class LocalPlaceholder { 7 class LocalPlaceholder {
8 final String identifier; 8 final String identifier;
9 final Set<Node> nodes; 9 final Set<Node> nodes;
10 LocalPlaceholder(this.identifier) : nodes = new Set<Node>(); 10 LocalPlaceholder(this.identifier) : nodes = new Set<Node>();
(...skipping 554 matching lines...) Expand 10 before | Expand all | Expand 10 after
565 makeOmitDeclarationTypePlaceholder( 565 makeOmitDeclarationTypePlaceholder(
566 parameter.asVariableDefinitions().type); 566 parameter.asVariableDefinitions().type);
567 } 567 }
568 } 568 }
569 } 569 }
570 570
571 visitClassNode(ClassNode node) { 571 visitClassNode(ClassNode node) {
572 ClassElement classElement = currentElement; 572 ClassElement classElement = currentElement;
573 makeElementPlaceholder(node.name, classElement); 573 makeElementPlaceholder(node.name, classElement);
574 node.visitChildren(this); 574 node.visitChildren(this);
575 if (node.defaultClause != null) {
576 // Can't just visit class node's default clause because of the bug in the
577 // resolver, it just crashes when it meets type variable.
578 DartType defaultType = classElement.defaultClass;
579 assert(defaultType != null);
580 makeTypePlaceholder(node.defaultClause.typeName, defaultType);
581 visit(node.defaultClause.typeArguments);
582 }
583 } 575 }
584 576
585 visitNamedMixinApplication(NamedMixinApplication node) { 577 visitNamedMixinApplication(NamedMixinApplication node) {
586 ClassElement classElement = currentElement; 578 ClassElement classElement = currentElement;
587 makeElementPlaceholder(node.name, classElement); 579 makeElementPlaceholder(node.name, classElement);
588 node.visitChildren(this); 580 node.visitChildren(this);
589 } 581 }
590 582
591 bool tryResolveAndCollectTypeVariable( 583 bool tryResolveAndCollectTypeVariable(
592 TypeDeclarationElement typeDeclaration, Identifier name) { 584 TypeDeclarationElement typeDeclaration, Identifier name) {
593 // Hack for case when interface and default class are in different
594 // libraries, try to resolve type variable to default class type arg.
595 // Example:
596 // lib1: interface I<K> default C<K> {...}
597 // lib2: class C<K> {...}
598 if (typeDeclaration is ClassElement
599 && (typeDeclaration as ClassElement).defaultClass != null) {
600 typeDeclaration = (typeDeclaration as ClassElement).defaultClass.element;
601 }
602 // Another poor man type resolution. 585 // Another poor man type resolution.
603 // Find this variable in enclosing type declaration parameters. 586 // Find this variable in enclosing type declaration parameters.
604 for (DartType type in typeDeclaration.typeVariables) { 587 for (DartType type in typeDeclaration.typeVariables) {
605 if (type.name.slowToString() == name.source.slowToString()) { 588 if (type.name.slowToString() == name.source.slowToString()) {
606 makeTypePlaceholder(name, type); 589 makeTypePlaceholder(name, type);
607 return true; 590 return true;
608 } 591 }
609 } 592 }
610 return false; 593 return false;
611 } 594 }
(...skipping 14 matching lines...) Expand all
626 609
627 visitBlock(Block node) { 610 visitBlock(Block node) {
628 for (Node statement in node.statements.nodes) { 611 for (Node statement in node.statements.nodes) {
629 if (statement is VariableDefinitions) { 612 if (statement is VariableDefinitions) {
630 makeVarDeclarationTypePlaceholder(statement); 613 makeVarDeclarationTypePlaceholder(statement);
631 } 614 }
632 } 615 }
633 node.visitChildren(this); 616 node.visitChildren(this);
634 } 617 }
635 } 618 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698