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

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

Issue 897243003: dart2js: remove (broken) support for nsm on native classes. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Remove whitespace Created 5 years, 10 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 resolution; 5 part of resolution;
6 6
7 abstract class TreeElements { 7 abstract class TreeElements {
8 AnalyzableElement get analyzedElement; 8 AnalyzableElement get analyzedElement;
9 Iterable<Node> get superUses; 9 Iterable<Node> get superUses;
10 10
(...skipping 512 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 element.asyncMarker.isYielding) { 523 element.asyncMarker.isYielding) {
524 compiler.reportError(asyncModifier, 524 compiler.reportError(asyncModifier,
525 MessageKind.YIELDING_MODIFIER_ON_ARROW_BODY, 525 MessageKind.YIELDING_MODIFIER_ON_ARROW_BODY,
526 {'modifier': element.asyncMarker}); 526 {'modifier': element.asyncMarker});
527 } 527 }
528 } 528 }
529 registry.registerAsyncMarker(element); 529 registry.registerAsyncMarker(element);
530 } 530 }
531 } 531 }
532 532
533 bool _isNativeClassOrExtendsNativeClass(ClassElement classElement) {
534 assert(classElement != null);
535 while (classElement != null) {
536 if (classElement.isNative) return true;
537 classElement = classElement.superclass;
538 }
539 return false;
540 }
541
533 TreeElements resolveMethodElementImplementation( 542 TreeElements resolveMethodElementImplementation(
534 FunctionElement element, FunctionExpression tree) { 543 FunctionElement element, FunctionExpression tree) {
535 return compiler.withCurrentElement(element, () { 544 return compiler.withCurrentElement(element, () {
536 if (element.isExternal && tree.hasBody()) { 545 if (element.isExternal && tree.hasBody()) {
537 compiler.reportError(element, 546 error(element,
538 MessageKind.EXTERNAL_WITH_BODY, 547 MessageKind.EXTERNAL_WITH_BODY,
539 {'functionName': element.name}); 548 {'functionName': element.name});
540 } 549 }
541 if (element.isConstructor) { 550 if (element.isConstructor) {
542 if (tree.returnType != null) { 551 if (tree.returnType != null) {
543 compiler.reportError(tree, MessageKind.CONSTRUCTOR_WITH_RETURN_TYPE); 552 error(tree, MessageKind.CONSTRUCTOR_WITH_RETURN_TYPE);
544 } 553 }
545 if (element.isConst && 554 if (element.isConst &&
546 tree.hasBody() && 555 tree.hasBody() &&
547 !tree.isRedirectingFactory) { 556 !tree.isRedirectingFactory) {
548 compiler.reportError(tree, MessageKind.CONST_CONSTRUCTOR_HAS_BODY); 557 error(tree, MessageKind.CONST_CONSTRUCTOR_HAS_BODY);
549 } 558 }
550 } 559 }
551 560
552 ResolverVisitor visitor = visitorFor(element); 561 ResolverVisitor visitor = visitorFor(element);
553 ResolutionRegistry registry = visitor.registry; 562 ResolutionRegistry registry = visitor.registry;
554 registry.defineFunction(tree, element); 563 registry.defineFunction(tree, element);
555 visitor.setupFunction(tree, element); 564 visitor.setupFunction(tree, element);
556 processAsyncMarker(compiler, element, registry); 565 processAsyncMarker(compiler, element, registry);
557 566
558 if (element.isGenerativeConstructor) { 567 if (element.isGenerativeConstructor) {
(...skipping 24 matching lines...) Expand all
583 ClassElement enclosingClass = element.enclosingClass; 592 ClassElement enclosingClass = element.enclosingClass;
584 if (enclosingClass != null) { 593 if (enclosingClass != null) {
585 // TODO(johnniwinther): Find another way to obtain mixin uses. 594 // TODO(johnniwinther): Find another way to obtain mixin uses.
586 Iterable<MixinApplicationElement> mixinUses = 595 Iterable<MixinApplicationElement> mixinUses =
587 compiler.world.allMixinUsesOf(enclosingClass); 596 compiler.world.allMixinUsesOf(enclosingClass);
588 ClassElement mixin = enclosingClass; 597 ClassElement mixin = enclosingClass;
589 for (MixinApplicationElement mixinApplication in mixinUses) { 598 for (MixinApplicationElement mixinApplication in mixinUses) {
590 checkMixinSuperUses(resolutionTree, mixinApplication, mixin); 599 checkMixinSuperUses(resolutionTree, mixinApplication, mixin);
591 } 600 }
592 } 601 }
602
603 // TODO(9631): support noSuchMethod on native classes.
604 if (Elements.isInstanceMethod(element) &&
605 element.name == Compiler.NO_SUCH_METHOD &&
606 _isNativeClassOrExtendsNativeClass(enclosingClass)) {
607 error(tree, MessageKind.NO_SUCH_METHOD_IN_NATIVE);
608 }
609
593 return resolutionTree; 610 return resolutionTree;
594 }); 611 });
595 612
596 } 613 }
597 614
598 TreeElements resolveMethodElement(FunctionElementX element) { 615 TreeElements resolveMethodElement(FunctionElementX element) {
599 assert(invariant(element, element.isDeclaration)); 616 assert(invariant(element, element.isDeclaration));
600 return compiler.withCurrentElement(element, () { 617 return compiler.withCurrentElement(element, () {
601 if (compiler.enqueuer.resolution.hasBeenResolved(element)) { 618 if (compiler.enqueuer.resolution.hasBeenResolved(element)) {
602 // TODO(karlklose): Remove the check for [isConstructor]. [elememts] 619 // TODO(karlklose): Remove the check for [isConstructor]. [elememts]
(...skipping 4433 matching lines...) Expand 10 before | Expand all | Expand 10 after
5036 } 5053 }
5037 5054
5038 /// The result for the resolution of the `assert` method. 5055 /// The result for the resolution of the `assert` method.
5039 class AssertResult implements ResolutionResult { 5056 class AssertResult implements ResolutionResult {
5040 const AssertResult(); 5057 const AssertResult();
5041 5058
5042 Element get element => null; 5059 Element get element => null;
5043 5060
5044 String toString() => 'AssertResult()'; 5061 String toString() => 'AssertResult()';
5045 } 5062 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_emitter/old_emitter/nsm_emitter.dart ('k') | pkg/compiler/lib/src/warnings.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698