| 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 part of resolution; |     5 part of resolution; | 
|     6  |     6  | 
|     7 abstract class TreeElements { |     7 abstract class TreeElements { | 
|     8   Element get currentElement; |     8   Element get currentElement; | 
|     9   Setlet<Node> get superUses; |     9   Setlet<Node> get superUses; | 
|    10  |    10  | 
| (...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   350       if (originParameterText != patchParameterText |   350       if (originParameterText != patchParameterText | 
|   351           // We special case the list constructor because of the |   351           // We special case the list constructor because of the | 
|   352           // optional parameter. |   352           // optional parameter. | 
|   353           && origin != compiler.unnamedListConstructor) { |   353           && origin != compiler.unnamedListConstructor) { | 
|   354         compiler.reportError( |   354         compiler.reportError( | 
|   355             originParameter.parseNode(compiler), |   355             originParameter.parseNode(compiler), | 
|   356             MessageKind.PATCH_PARAMETER_MISMATCH, |   356             MessageKind.PATCH_PARAMETER_MISMATCH, | 
|   357             {'methodName': origin.name, |   357             {'methodName': origin.name, | 
|   358              'originParameter': originParameterText, |   358              'originParameter': originParameterText, | 
|   359              'patchParameter': patchParameterText}); |   359              'patchParameter': patchParameterText}); | 
|   360         compiler.reportMessage( |   360         compiler.reportInfo(patchParameter, | 
|   361             compiler.spanFromSpannable(patchParameter), |   361             MessageKind.PATCH_POINT_TO_PARAMETER, | 
|   362             MessageKind.PATCH_POINT_TO_PARAMETER.error( |   362             {'parameterName': patchParameter.name}); | 
|   363                 {'parameterName': patchParameter.name}), |  | 
|   364             Diagnostic.INFO); |  | 
|   365       } |   363       } | 
|   366       DartType originParameterType = originParameter.computeType(compiler); |   364       DartType originParameterType = originParameter.computeType(compiler); | 
|   367       DartType patchParameterType = patchParameter.computeType(compiler); |   365       DartType patchParameterType = patchParameter.computeType(compiler); | 
|   368       if (originParameterType != patchParameterType) { |   366       if (originParameterType != patchParameterType) { | 
|   369         compiler.reportError( |   367         compiler.reportError( | 
|   370             originParameter.parseNode(compiler), |   368             originParameter.parseNode(compiler), | 
|   371             MessageKind.PATCH_PARAMETER_TYPE_MISMATCH, |   369             MessageKind.PATCH_PARAMETER_TYPE_MISMATCH, | 
|   372             {'methodName': origin.name, |   370             {'methodName': origin.name, | 
|   373              'parameterName': originParameter.name, |   371              'parameterName': originParameter.name, | 
|   374              'originParameterType': originParameterType, |   372              'originParameterType': originParameterType, | 
|   375              'patchParameterType': patchParameterType}); |   373              'patchParameterType': patchParameterType}); | 
|   376         compiler.reportMessage( |   374         compiler.reportInfo(patchParameter, | 
|   377             compiler.spanFromSpannable(patchParameter), |   375             MessageKind.PATCH_POINT_TO_PARAMETER, | 
|   378             MessageKind.PATCH_POINT_TO_PARAMETER.error( |   376             {'parameterName': patchParameter.name}); | 
|   379                 {'parameterName': patchParameter.name}), |  | 
|   380             Diagnostic.INFO); |  | 
|   381       } |   377       } | 
|   382  |   378  | 
|   383       originParameters = originParameters.tail; |   379       originParameters = originParameters.tail; | 
|   384       patchParameters = patchParameters.tail; |   380       patchParameters = patchParameters.tail; | 
|   385     } |   381     } | 
|   386   } |   382   } | 
|   387  |   383  | 
|   388   void checkMatchingPatchSignatures(FunctionElement origin, |   384   void checkMatchingPatchSignatures(FunctionElement origin, | 
|   389                                     FunctionElement patch) { |   385                                     FunctionElement patch) { | 
|   390     // TODO(johnniwinther): Show both origin and patch locations on errors. |   386     // TODO(johnniwinther): Show both origin and patch locations on errors. | 
| (...skipping 1154 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1545  |  1541  | 
|  1546   R visitEmptyStatement(Node node) => null; |  1542   R visitEmptyStatement(Node node) => null; | 
|  1547  |  1543  | 
|  1548   /** Convenience method for visiting nodes that may be null. */ |  1544   /** Convenience method for visiting nodes that may be null. */ | 
|  1549   R visit(Node node) => (node == null) ? null : node.accept(this); |  1545   R visit(Node node) => (node == null) ? null : node.accept(this); | 
|  1550  |  1546  | 
|  1551   void error(Spannable node, MessageKind kind, [Map arguments = const {}]) { |  1547   void error(Spannable node, MessageKind kind, [Map arguments = const {}]) { | 
|  1552     compiler.reportFatalError(node, kind, arguments); |  1548     compiler.reportFatalError(node, kind, arguments); | 
|  1553   } |  1549   } | 
|  1554  |  1550  | 
|  1555   void warning(Node node, MessageKind kind, [Map arguments = const {}]) { |  1551   void warning(Spannable node, MessageKind kind, [Map arguments = const {}]) { | 
|  1556     ResolutionWarning message = |  1552     compiler.reportWarning(node, kind, arguments); | 
|  1557         new ResolutionWarning(kind, arguments, compiler.terseDiagnostics); |  | 
|  1558     compiler.reportWarning(node, message); |  | 
|  1559   } |  1553   } | 
|  1560  |  1554  | 
|  1561   void cancel(Node node, String message) { |  1555   void cancel(Node node, String message) { | 
|  1562     compiler.cancel(message, node: node); |  1556     compiler.cancel(message, node: node); | 
|  1563   } |  1557   } | 
|  1564  |  1558  | 
|  1565   void internalError(Node node, String message) { |  1559   void internalError(Node node, String message) { | 
|  1566     compiler.internalError(message, node: node); |  1560     compiler.internalError(message, node: node); | 
|  1567   } |  1561   } | 
|  1568  |  1562  | 
| (...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1836   } |  1830   } | 
|  1837  |  1831  | 
|  1838   /// Checks the type arguments of [type] against the type variable bounds. |  1832   /// Checks the type arguments of [type] against the type variable bounds. | 
|  1839   void checkTypeVariableBounds(TreeElements elements, |  1833   void checkTypeVariableBounds(TreeElements elements, | 
|  1840                                TypeAnnotation node, GenericType type) { |  1834                                TypeAnnotation node, GenericType type) { | 
|  1841     void checkTypeVariableBound(_, DartType typeArgument, |  1835     void checkTypeVariableBound(_, DartType typeArgument, | 
|  1842                                    TypeVariableType typeVariable, |  1836                                    TypeVariableType typeVariable, | 
|  1843                                    DartType bound) { |  1837                                    DartType bound) { | 
|  1844       compiler.backend.registerTypeVariableBoundCheck(elements); |  1838       compiler.backend.registerTypeVariableBoundCheck(elements); | 
|  1845       if (!compiler.types.isSubtype(typeArgument, bound)) { |  1839       if (!compiler.types.isSubtype(typeArgument, bound)) { | 
|  1846         compiler.reportWarningCode(node, |  1840         compiler.reportWarning(node, | 
|  1847             MessageKind.INVALID_TYPE_VARIABLE_BOUND, |  1841             MessageKind.INVALID_TYPE_VARIABLE_BOUND, | 
|  1848             {'typeVariable': typeVariable, |  1842             {'typeVariable': typeVariable, | 
|  1849              'bound': bound, |  1843              'bound': bound, | 
|  1850              'typeArgument': typeArgument, |  1844              'typeArgument': typeArgument, | 
|  1851              'thisType': type.element.thisType}); |  1845              'thisType': type.element.thisType}); | 
|  1852       } |  1846       } | 
|  1853     }; |  1847     }; | 
|  1854  |  1848  | 
|  1855     compiler.types.checkTypeVariableBounds(type, checkTypeVariableBound); |  1849     compiler.types.checkTypeVariableBounds(type, checkTypeVariableBound); | 
|  1856   } |  1850   } | 
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1931       if (existing != element) { |  1925       if (existing != element) { | 
|  1932         reportDuplicateDefinition(node, element, existing); |  1926         reportDuplicateDefinition(node, element, existing); | 
|  1933       } |  1927       } | 
|  1934     } |  1928     } | 
|  1935     return element; |  1929     return element; | 
|  1936   } |  1930   } | 
|  1937  |  1931  | 
|  1938   void reportDuplicateDefinition(/*Node|String*/ name, |  1932   void reportDuplicateDefinition(/*Node|String*/ name, | 
|  1939                                  Spannable definition, |  1933                                  Spannable definition, | 
|  1940                                  Spannable existing) { |  1934                                  Spannable existing) { | 
|  1941     compiler.reportError( |  1935     compiler.reportError(definition, | 
|  1942         definition, |  | 
|  1943         MessageKind.DUPLICATE_DEFINITION, {'name': name}); |  1936         MessageKind.DUPLICATE_DEFINITION, {'name': name}); | 
|  1944     compiler.reportMessage( |  1937     compiler.reportInfo(existing, | 
|  1945         compiler.spanFromSpannable(existing), |  1938         MessageKind.EXISTING_DEFINITION, {'name': name}); | 
|  1946         MessageKind.EXISTING_DEFINITION.error({'name': name}), |  | 
|  1947         Diagnostic.INFO); |  | 
|  1948   } |  1939   } | 
|  1949 } |  1940 } | 
|  1950  |  1941  | 
|  1951 /** |  1942 /** | 
|  1952  * Core implementation of resolution. |  1943  * Core implementation of resolution. | 
|  1953  * |  1944  * | 
|  1954  * Do not subclass or instantiate this class outside this library |  1945  * Do not subclass or instantiate this class outside this library | 
|  1955  * except for testing. |  1946  * except for testing. | 
|  1956  */ |  1947  */ | 
|  1957 class ResolverVisitor extends MappingVisitor<Element> { |  1948 class ResolverVisitor extends MappingVisitor<Element> { | 
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2099   } |  2090   } | 
|  2100  |  2091  | 
|  2101   visitInStaticContext(Node node) { |  2092   visitInStaticContext(Node node) { | 
|  2102     inStaticContext(() => visit(node)); |  2093     inStaticContext(() => visit(node)); | 
|  2103   } |  2094   } | 
|  2104  |  2095  | 
|  2105   ErroneousElement warnAndCreateErroneousElement(Node node, |  2096   ErroneousElement warnAndCreateErroneousElement(Node node, | 
|  2106                                                  String name, |  2097                                                  String name, | 
|  2107                                                  DualKind kind, |  2098                                                  DualKind kind, | 
|  2108                                                  [Map arguments = const {}]) { |  2099                                                  [Map arguments = const {}]) { | 
|  2109     ResolutionWarning warning = new ResolutionWarning( |  2100     compiler.reportWarning(node, kind.warning, arguments); | 
|  2110         kind.warning, arguments, compiler.terseDiagnostics); |  | 
|  2111     compiler.reportWarning(node, warning); |  | 
|  2112     return new ErroneousElementX(kind.error, arguments, name, enclosingElement); |  2101     return new ErroneousElementX(kind.error, arguments, name, enclosingElement); | 
|  2113   } |  2102   } | 
|  2114  |  2103  | 
|  2115   Element visitIdentifier(Identifier node) { |  2104   Element visitIdentifier(Identifier node) { | 
|  2116     if (node.isThis()) { |  2105     if (node.isThis()) { | 
|  2117       if (!inInstanceContext) { |  2106       if (!inInstanceContext) { | 
|  2118         error(node, MessageKind.NO_INSTANCE_AVAILABLE, {'name': node}); |  2107         error(node, MessageKind.NO_INSTANCE_AVAILABLE, {'name': node}); | 
|  2119       } |  2108       } | 
|  2120       return null; |  2109       return null; | 
|  2121     } else if (node.isSuper()) { |  2110     } else if (node.isSuper()) { | 
| (...skipping 1355 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  3477           compiler.reportError( |  3466           compiler.reportError( | 
|  3478               label, |  3467               label, | 
|  3479               MessageKind.DUPLICATE_LABEL.error, {'labelName': labelName}); |  3468               MessageKind.DUPLICATE_LABEL.error, {'labelName': labelName}); | 
|  3480           compiler.reportInfo( |  3469           compiler.reportInfo( | 
|  3481               existingElement.label, |  3470               existingElement.label, | 
|  3482               MessageKind.EXISTING_LABEL, {'labelName': labelName}); |  3471               MessageKind.EXISTING_LABEL, {'labelName': labelName}); | 
|  3483         } else { |  3472         } else { | 
|  3484           // It's only a warning if it shadows another label. |  3473           // It's only a warning if it shadows another label. | 
|  3485           existingElement = statementScope.lookupLabel(labelName); |  3474           existingElement = statementScope.lookupLabel(labelName); | 
|  3486           if (existingElement != null) { |  3475           if (existingElement != null) { | 
|  3487             compiler.reportWarningCode( |  3476             compiler.reportWarning( | 
|  3488                 label, |  3477                 label, | 
|  3489                 MessageKind.DUPLICATE_LABEL.warning, {'labelName': labelName}); |  3478                 MessageKind.DUPLICATE_LABEL.warning, {'labelName': labelName}); | 
|  3490             compiler.reportInfo( |  3479             compiler.reportInfo( | 
|  3491                 existingElement.label, |  3480                 existingElement.label, | 
|  3492                 MessageKind.EXISTING_LABEL, {'labelName': labelName}); |  3481                 MessageKind.EXISTING_LABEL, {'labelName': labelName}); | 
|  3493           } |  3482           } | 
|  3494         } |  3483         } | 
|  3495  |  3484  | 
|  3496         TargetElement targetElement = getOrCreateTargetElement(switchCase); |  3485         TargetElement targetElement = getOrCreateTargetElement(switchCase); | 
|  3497         LabelElement labelElement = targetElement.addLabel(label, labelName); |  3486         LabelElement labelElement = targetElement.addLabel(label, labelName); | 
| (...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  3921   } |  3910   } | 
|  3922  |  3911  | 
|  3923   DartType visitNamedMixinApplication(NamedMixinApplication node) { |  3912   DartType visitNamedMixinApplication(NamedMixinApplication node) { | 
|  3924     invariant(node, element != null); |  3913     invariant(node, element != null); | 
|  3925     invariant(element, element.resolutionState == STATE_STARTED, |  3914     invariant(element, element.resolutionState == STATE_STARTED, | 
|  3926         message: () => 'cyclic resolution of class $element'); |  3915         message: () => 'cyclic resolution of class $element'); | 
|  3927  |  3916  | 
|  3928     if (identical(node.classKeyword.stringValue, 'typedef')) { |  3917     if (identical(node.classKeyword.stringValue, 'typedef')) { | 
|  3929       // TODO(aprelev@gmail.com): Remove this deprecation diagnostic |  3918       // TODO(aprelev@gmail.com): Remove this deprecation diagnostic | 
|  3930       // together with corresponding TODO in parser.dart. |  3919       // together with corresponding TODO in parser.dart. | 
|  3931       compiler.reportWarningCode(node.classKeyword, |  3920       compiler.reportWarning(node.classKeyword, | 
|  3932           MessageKind.DEPRECATED_TYPEDEF_MIXIN_SYNTAX); |  3921           MessageKind.DEPRECATED_TYPEDEF_MIXIN_SYNTAX); | 
|  3933     } |  3922     } | 
|  3934  |  3923  | 
|  3935     InterfaceType type = element.computeType(compiler); |  3924     InterfaceType type = element.computeType(compiler); | 
|  3936     scope = new TypeDeclarationScope(scope, element); |  3925     scope = new TypeDeclarationScope(scope, element); | 
|  3937     resolveTypeVariableBounds(node.typeParameters); |  3926     resolveTypeVariableBounds(node.typeParameters); | 
|  3938  |  3927  | 
|  3939     // Generate anonymous mixin application elements for the |  3928     // Generate anonymous mixin application elements for the | 
|  3940     // intermediate mixin applications (excluding the last). |  3929     // intermediate mixin applications (excluding the last). | 
|  3941     DartType supertype = resolveSupertype(element, node.superclass); |  3930     DartType supertype = resolveSupertype(element, node.superclass); | 
| (...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  4380                                String targetName, DualKind kind, |  4369                                String targetName, DualKind kind, | 
|  4381                                Map arguments) { |  4370                                Map arguments) { | 
|  4382     if (kind == MessageKind.CANNOT_FIND_CONSTRUCTOR) { |  4371     if (kind == MessageKind.CANNOT_FIND_CONSTRUCTOR) { | 
|  4383       compiler.backend.registerThrowNoSuchMethod(resolver.mapping); |  4372       compiler.backend.registerThrowNoSuchMethod(resolver.mapping); | 
|  4384     } else { |  4373     } else { | 
|  4385       compiler.backend.registerThrowRuntimeError(resolver.mapping); |  4374       compiler.backend.registerThrowRuntimeError(resolver.mapping); | 
|  4386     } |  4375     } | 
|  4387     if (inConstContext) { |  4376     if (inConstContext) { | 
|  4388       compiler.reportError(diagnosticNode, kind.error, arguments); |  4377       compiler.reportError(diagnosticNode, kind.error, arguments); | 
|  4389     } else { |  4378     } else { | 
|  4390       ResolutionWarning warning  = |  4379       compiler.reportWarning(diagnosticNode, kind.warning, arguments); | 
|  4391           new ResolutionWarning( |  | 
|  4392               kind.warning, arguments, compiler.terseDiagnostics); |  | 
|  4393       compiler.reportWarning(diagnosticNode, warning); |  | 
|  4394     } |  4380     } | 
|  4395     return new ErroneousElementX( |  4381     return new ErroneousElementX( | 
|  4396         kind.error, arguments, targetName, enclosing); |  4382         kind.error, arguments, targetName, enclosing); | 
|  4397   } |  4383   } | 
|  4398  |  4384  | 
|  4399   Selector createConstructorSelector(String constructorName) { |  4385   Selector createConstructorSelector(String constructorName) { | 
|  4400     return constructorName == '' |  4386     return constructorName == '' | 
|  4401         ? new Selector.callDefaultConstructor( |  4387         ? new Selector.callDefaultConstructor( | 
|  4402             resolver.enclosingElement.getLibrary()) |  4388             resolver.enclosingElement.getLibrary()) | 
|  4403         : new Selector.callConstructor( |  4389         : new Selector.callConstructor( | 
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  4537     return finishConstructorReference(visit(expression), |  4523     return finishConstructorReference(visit(expression), | 
|  4538                                       expression, expression); |  4524                                       expression, expression); | 
|  4539   } |  4525   } | 
|  4540 } |  4526 } | 
|  4541  |  4527  | 
|  4542 /// Looks up [name] in [scope] and unwraps the result. |  4528 /// Looks up [name] in [scope] and unwraps the result. | 
|  4543 Element lookupInScope(Compiler compiler, Node node, |  4529 Element lookupInScope(Compiler compiler, Node node, | 
|  4544                       Scope scope, String name) { |  4530                       Scope scope, String name) { | 
|  4545   return Elements.unwrap(scope.lookup(name), compiler, node); |  4531   return Elements.unwrap(scope.lookup(name), compiler, node); | 
|  4546 } |  4532 } | 
| OLD | NEW |