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

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

Issue 1161823004: Handle .fromEnvironment and incompatible constructor invocations (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Change handling of incompatible redirecting factories. Created 5 years, 6 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
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 // TODO(johnniwinther): Temporarily copied from analyzer2dart. Merge when 5 // TODO(johnniwinther): Temporarily copied from analyzer2dart. Merge when
6 // we shared code with the analyzer and this semantic visitor is complete. 6 // we shared code with the analyzer and this semantic visitor is complete.
7 7
8 /** 8 /**
9 * Code for classifying the semantics of identifiers appearing in a Dart file. 9 * Code for classifying the semantics of identifiers appearing in a Dart file.
10 */ 10 */
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 467
468 /// An invocation of an ill-defined redirecting factory constructor. 468 /// An invocation of an ill-defined redirecting factory constructor.
469 /// 469 ///
470 /// For instance 470 /// For instance
471 /// class C { 471 /// class C {
472 /// factory C() = Unresolved; 472 /// factory C() = Unresolved;
473 /// } 473 /// }
474 /// m() => new C(); 474 /// m() => new C();
475 /// 475 ///
476 ERRONEOUS_REDIRECTING_FACTORY, 476 ERRONEOUS_REDIRECTING_FACTORY,
477
478
479 /// An invocation of a constructor with incompatible arguments.
480 ///
481 /// For instance
482 /// class C {
483 /// C();
484 /// }
485 /// m() => new C(true);
486 ///
487 INCOMPATIBLE,
477 } 488 }
478 489
479 /// Data structure used to classify the semantics of a constructor invocation. 490 /// Data structure used to classify the semantics of a constructor invocation.
480 class ConstructorAccessSemantics { 491 class ConstructorAccessSemantics {
481 /// The kind of constructor invocation. 492 /// The kind of constructor invocation.
482 final ConstructorAccessKind kind; 493 final ConstructorAccessKind kind;
483 494
484 /// The invoked constructor. 495 /// The invoked constructor.
485 final Element element; 496 final Element element;
486 497
487 /// The type on which the constructor is invoked. 498 /// The type on which the constructor is invoked.
488 final DartType type; 499 final DartType type;
489 500
490 ConstructorAccessSemantics(this.kind, this.element, this.type); 501 ConstructorAccessSemantics(this.kind, this.element, this.type);
491 502
492 /// The effect target of the access. Used to defined redirecting factory 503 /// The effect target of the access. Used to defined redirecting factory
493 /// constructor invocations. 504 /// constructor invocations.
494 ConstructorAccessSemantics get effectiveTargetSemantics => this; 505 ConstructorAccessSemantics get effectiveTargetSemantics => this;
495 506
496 /// `true` if this invocation is erroneous. 507 /// `true` if this invocation is erroneous.
497 bool get isErroneous { 508 bool get isErroneous {
498 return kind == ConstructorAccessKind.ABSTRACT || 509 return kind == ConstructorAccessKind.ABSTRACT ||
499 kind == ConstructorAccessKind.UNRESOLVED_TYPE || 510 kind == ConstructorAccessKind.UNRESOLVED_TYPE ||
500 kind == ConstructorAccessKind.UNRESOLVED_CONSTRUCTOR || 511 kind == ConstructorAccessKind.UNRESOLVED_CONSTRUCTOR ||
501 kind == ConstructorAccessKind.NON_CONSTANT_CONSTRUCTOR || 512 kind == ConstructorAccessKind.NON_CONSTANT_CONSTRUCTOR ||
502 kind == ConstructorAccessKind.ERRONEOUS_REDIRECTING_FACTORY; 513 kind == ConstructorAccessKind.ERRONEOUS_REDIRECTING_FACTORY ||
514 kind == ConstructorAccessKind.INCOMPATIBLE;
503 } 515 }
516
517 String toString() => 'ConstructorAccessSemantics($kind, $element, $type)';
504 } 518 }
505 519
506 /// Data structure used to classify the semantics of a redirecting factory 520 /// Data structure used to classify the semantics of a redirecting factory
507 /// constructor invocation. 521 /// constructor invocation.
508 class RedirectingFactoryConstructorAccessSemantics 522 class RedirectingFactoryConstructorAccessSemantics
509 extends ConstructorAccessSemantics { 523 extends ConstructorAccessSemantics {
510 final ConstructorAccessSemantics effectiveTargetSemantics; 524 final ConstructorAccessSemantics effectiveTargetSemantics;
511 525
512 RedirectingFactoryConstructorAccessSemantics( 526 RedirectingFactoryConstructorAccessSemantics(
513 ConstructorAccessKind kind, 527 ConstructorAccessKind kind,
514 Element element, 528 Element element,
515 DartType type, 529 DartType type,
516 this.effectiveTargetSemantics) 530 this.effectiveTargetSemantics)
517 : super(kind, element, type); 531 : super(kind, element, type);
518 } 532 }
519 533
520 534
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart ('k') | pkg/compiler/lib/src/resolution/semantic_visitor.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698