| 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 |