OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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.md file. | 3 // BSD-style license that can be found in the LICENSE.md file. |
4 | 4 |
5 import 'dart:async'; | 5 import 'dart:async'; |
6 import 'dart:collection' show Queue; | 6 import 'dart:collection' show Queue; |
7 | 7 |
8 import 'package:kernel/ast.dart' as ir; | 8 import 'package:kernel/ast.dart' as ir; |
9 import 'package:kernel/checks.dart' show CheckParentPointers; | 9 import 'package:kernel/checks.dart' show CheckParentPointers; |
10 | 10 |
| 11 import '../common.dart'; |
| 12 import '../common/names.dart'; |
11 import '../compiler.dart' show Compiler; | 13 import '../compiler.dart' show Compiler; |
12 import '../constants/expressions.dart' show TypeConstantExpression; | 14 import '../constants/expressions.dart' show TypeConstantExpression; |
13 import '../dart_types.dart' | 15 import '../dart_types.dart' |
14 show DartType, FunctionType, InterfaceType, TypeKind, TypeVariableType; | 16 show DartType, FunctionType, InterfaceType, TypeKind, TypeVariableType; |
15 import '../diagnostics/messages.dart' show MessageKind; | 17 import '../diagnostics/messages.dart' show MessageKind; |
16 import '../diagnostics/spannable.dart' show Spannable; | 18 import '../diagnostics/spannable.dart' show Spannable; |
17 import '../elements/elements.dart' | 19 import '../elements/elements.dart' |
18 show | 20 show |
19 ClassElement, | 21 ClassElement, |
20 ConstructorElement, | 22 ConstructorElement, |
(...skipping 563 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
584 /// method body that is [ir.InvalidStatement]. | 586 /// method body that is [ir.InvalidStatement]. |
585 bool isSyntheticError(Element element) { | 587 bool isSyntheticError(Element element) { |
586 if (element.isAmbiguous) return true; | 588 if (element.isAmbiguous) return true; |
587 if (element.isError) return true; | 589 if (element.isError) return true; |
588 if (element.isField && element is ErroneousFieldElementX) { | 590 if (element.isField && element is ErroneousFieldElementX) { |
589 return true; | 591 return true; |
590 } | 592 } |
591 return false; | 593 return false; |
592 } | 594 } |
593 | 595 |
| 596 ir.Constructor getDartCoreConstructor( |
| 597 String className, String constructorName) { |
| 598 LibraryElement library = |
| 599 compiler.libraryLoader.lookupLibrary(Uris.dart_core); |
| 600 ClassElement cls = library.implementation.localLookup(className); |
| 601 assert(invariant(CURRENT_ELEMENT_SPANNABLE, cls != null, |
| 602 message: 'dart:core class $className not found.')); |
| 603 ConstructorElement constructor = cls.lookupConstructor(constructorName); |
| 604 assert(invariant(CURRENT_ELEMENT_SPANNABLE, constructor != null, |
| 605 message: "Constructor '$constructorName' not found " |
| 606 "in class '$className'.")); |
| 607 return functionToIr(constructor); |
| 608 } |
| 609 |
594 ir.Procedure getDartCoreMethod(String name) { | 610 ir.Procedure getDartCoreMethod(String name) { |
595 LibraryElement library = | 611 LibraryElement library = |
596 compiler.libraryLoader.lookupLibrary(Uri.parse("dart:core")); | 612 compiler.libraryLoader.lookupLibrary(Uris.dart_core); |
597 Element function = library.implementation.localLookup(name); | 613 Element function = library.implementation.localLookup(name); |
| 614 assert(invariant(CURRENT_ELEMENT_SPANNABLE, function != null, |
| 615 message: "dart:core method '$name' not found.")); |
598 return functionToIr(function); | 616 return functionToIr(function); |
599 } | 617 } |
600 | 618 |
601 ir.Procedure getMalformedTypeErrorBuilder() { | 619 ir.Procedure getMalformedTypeErrorBuilder() { |
602 return getDartCoreMethod('_malformedTypeError'); | 620 return getDartCoreMethod('_malformedTypeError'); |
603 } | 621 } |
604 | 622 |
605 ir.Procedure getUnresolvedConstructorBuilder() { | 623 ir.Procedure getUnresolvedConstructorBuilder() { |
606 return getDartCoreMethod('_unresolvedConstructorError'); | 624 return getDartCoreMethod('_unresolvedConstructorError'); |
607 } | 625 } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
639 } | 657 } |
640 | 658 |
641 ir.Procedure getUnresolvedSuperMethodBuilder() { | 659 ir.Procedure getUnresolvedSuperMethodBuilder() { |
642 return getDartCoreMethod('_unresolvedSuperMethodError'); | 660 return getDartCoreMethod('_unresolvedSuperMethodError'); |
643 } | 661 } |
644 | 662 |
645 ir.Procedure getGenericNoSuchMethodBuilder() { | 663 ir.Procedure getGenericNoSuchMethodBuilder() { |
646 return getDartCoreMethod('_genericNoSuchMethod'); | 664 return getDartCoreMethod('_genericNoSuchMethod'); |
647 } | 665 } |
648 | 666 |
649 ir.Procedure getFallThroughErrorBuilder() { | 667 ir.Constructor getFallThroughErrorConstructor() { |
650 return getDartCoreMethod('_fallThroughError'); | 668 return getDartCoreConstructor('FallThroughError', ''); |
651 } | 669 } |
652 } | 670 } |
653 | 671 |
654 class ConstructorTarget { | 672 class ConstructorTarget { |
655 final ConstructorElement element; | 673 final ConstructorElement element; |
656 final DartType type; | 674 final DartType type; |
657 | 675 |
658 ConstructorTarget(this.element, this.type); | 676 ConstructorTarget(this.element, this.type); |
659 | 677 |
660 String toString() => "ConstructorTarget($element, $type)"; | 678 String toString() => "ConstructorTarget($element, $type)"; |
661 } | 679 } |
OLD | NEW |