OLD | NEW |
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 library dart2js.typechecker; | 5 library dart2js.typechecker; |
6 | 6 |
7 import 'common/names.dart' show Identifiers; | 7 import 'common/names.dart' show Identifiers; |
8 import 'common/resolution.dart' show Resolution; | 8 import 'common/resolution.dart' show Resolution; |
9 import 'common/tasks.dart' show CompilerTask; | 9 import 'common/tasks.dart' show CompilerTask; |
10 import 'common.dart'; | 10 import 'common.dart'; |
11 import 'compiler.dart' show Compiler; | 11 import 'compiler.dart' show Compiler; |
12 import 'constants/expressions.dart'; | 12 import 'constants/expressions.dart'; |
13 import 'constants/values.dart'; | 13 import 'constants/values.dart'; |
14 import 'common_elements.dart'; | 14 import 'common_elements.dart'; |
15 import 'elements/resolution_types.dart'; | 15 import 'elements/resolution_types.dart'; |
16 import 'elements/elements.dart' | 16 import 'elements/elements.dart' |
17 show | 17 show |
18 AbstractFieldElement, | 18 AbstractFieldElement, |
19 AstElement, | 19 AstElement, |
20 ClassElement, | 20 ClassElement, |
21 ConstructorElement, | 21 ConstructorElement, |
22 Element, | 22 Element, |
23 Elements, | 23 Elements, |
24 EnumClassElement, | 24 EnumClassElement, |
25 EnumConstantElement, | 25 EnumConstantElement, |
26 ExecutableElement, | 26 ExecutableElement, |
27 FieldElement, | 27 FieldElement, |
| 28 FormalElement, |
28 FunctionElement, | 29 FunctionElement, |
29 GetterElement, | 30 GetterElement, |
30 InitializingFormalElement, | 31 InitializingFormalElement, |
31 LibraryElement, | 32 LibraryElement, |
32 MemberSignature, | 33 MemberSignature, |
33 ParameterElement, | |
34 ResolvedAst, | 34 ResolvedAst, |
35 SetterElement, | 35 SetterElement, |
36 TypeDeclarationElement, | 36 TypeDeclarationElement, |
37 TypedElement, | 37 TypedElement, |
38 VariableElement; | 38 VariableElement; |
39 import 'elements/entities.dart' show AsyncMarker; | 39 import 'elements/entities.dart' show AsyncMarker; |
40 import 'elements/names.dart'; | 40 import 'elements/names.dart'; |
41 import 'enqueue.dart' show DeferredAction; | 41 import 'enqueue.dart' show DeferredAction; |
42 import 'resolution/class_members.dart' show MembersCreator, ErroneousMember; | 42 import 'resolution/class_members.dart' show MembersCreator, ErroneousMember; |
43 import 'resolution/tree_elements.dart' show TreeElements; | 43 import 'resolution/tree_elements.dart' show TreeElements; |
(...skipping 603 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
647 ResolutionDartType type; | 647 ResolutionDartType type; |
648 ResolutionDartType returnType; | 648 ResolutionDartType returnType; |
649 final FunctionElement element = elements.getFunctionDefinition(node); | 649 final FunctionElement element = elements.getFunctionDefinition(node); |
650 assert( | 650 assert( |
651 element != null, failedAt(node, 'FunctionExpression with no element')); | 651 element != null, failedAt(node, 'FunctionExpression with no element')); |
652 if (Elements.isUnresolved(element)) return const ResolutionDynamicType(); | 652 if (Elements.isUnresolved(element)) return const ResolutionDynamicType(); |
653 if (element.isGenerativeConstructor) { | 653 if (element.isGenerativeConstructor) { |
654 type = const ResolutionDynamicType(); | 654 type = const ResolutionDynamicType(); |
655 returnType = const ResolutionVoidType(); | 655 returnType = const ResolutionVoidType(); |
656 | 656 |
657 element.functionSignature.forEachParameter((ParameterElement parameter) { | 657 element.functionSignature.forEachParameter((FormalElement parameter) { |
658 if (parameter.isInitializingFormal) { | 658 if (parameter.isInitializingFormal) { |
659 InitializingFormalElement fieldParameter = parameter; | 659 InitializingFormalElement fieldParameter = parameter; |
660 checkAssignable(parameter, parameter.type, | 660 checkAssignable(parameter, parameter.type, |
661 fieldParameter.fieldElement.computeType(resolution)); | 661 fieldParameter.fieldElement.computeType(resolution)); |
662 } | 662 } |
663 }); | 663 }); |
664 if (node.initializers != null) { | 664 if (node.initializers != null) { |
665 analyzeUntyped(node.initializers, inInitializer: true); | 665 analyzeUntyped(node.initializers, inInitializer: true); |
666 } | 666 } |
667 } else { | 667 } else { |
(...skipping 1010 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1678 // of a subtype. | 1678 // of a subtype. |
1679 } | 1679 } |
1680 | 1680 |
1681 visitRethrow(Rethrow node) { | 1681 visitRethrow(Rethrow node) { |
1682 // Nothing to do here. | 1682 // Nothing to do here. |
1683 } | 1683 } |
1684 | 1684 |
1685 /** Dart Programming Language Specification: 11.10 Return */ | 1685 /** Dart Programming Language Specification: 11.10 Return */ |
1686 visitReturn(Return node) { | 1686 visitReturn(Return node) { |
1687 if (identical(node.beginToken.stringValue, 'native')) { | 1687 if (identical(node.beginToken.stringValue, 'native')) { |
1688 return; | 1688 return null; |
1689 } | 1689 } |
1690 | 1690 |
1691 final Node expression = node.expression; | 1691 final Node expression = node.expression; |
1692 | 1692 |
1693 // Executing a return statement return e; [...] It is a static type warning | 1693 // Executing a return statement return e; [...] It is a static type warning |
1694 // if the type of e may not be assigned to the declared return type of the | 1694 // if the type of e may not be assigned to the declared return type of the |
1695 // immediately enclosing function. | 1695 // immediately enclosing function. |
1696 if (expression != null) { | 1696 if (expression != null) { |
1697 ResolutionDartType expressionType = analyze(expression); | 1697 ResolutionDartType expressionType = analyze(expression); |
1698 if (executableContext.isGenerativeConstructor) { | 1698 if (executableContext.isGenerativeConstructor) { |
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2055 | 2055 |
2056 visitTypedef(Typedef node) { | 2056 visitTypedef(Typedef node) { |
2057 // Do not typecheck [Typedef] nodes. | 2057 // Do not typecheck [Typedef] nodes. |
2058 } | 2058 } |
2059 | 2059 |
2060 visitNode(Node node) { | 2060 visitNode(Node node) { |
2061 reporter.internalError(node, | 2061 reporter.internalError(node, |
2062 'Unexpected node ${node.getObjectDescription()} in the type checker.'); | 2062 'Unexpected node ${node.getObjectDescription()} in the type checker.'); |
2063 } | 2063 } |
2064 } | 2064 } |
OLD | NEW |