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 file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library fasta.body_builder; | 5 library fasta.body_builder; |
6 | 6 |
7 import 'package:kernel/ast.dart' | 7 import 'package:kernel/ast.dart' |
8 hide InvalidExpression, InvalidInitializer, InvalidStatement; | 8 hide InvalidExpression, InvalidInitializer, InvalidStatement; |
9 | 9 |
10 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy; | 10 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy; |
(...skipping 897 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
908 } | 908 } |
909 | 909 |
910 @override | 910 @override |
911 Expression toSuperMethodInvocation(MethodInvocation node) { | 911 Expression toSuperMethodInvocation(MethodInvocation node) { |
912 Member target = lookupSuperMember(node.name); | 912 Member target = lookupSuperMember(node.name); |
913 if (target == null || (target is Procedure && !target.isAccessor)) { | 913 if (target == null || (target is Procedure && !target.isAccessor)) { |
914 if (target == null) { | 914 if (target == null) { |
915 warnUnresolvedSuperMethod(node.name, node.fileOffset); | 915 warnUnresolvedSuperMethod(node.name, node.fileOffset); |
916 } else if (!areArgumentsCompatible(target.function, node.arguments)) { | 916 } else if (!areArgumentsCompatible(target.function, node.arguments)) { |
917 target = null; | 917 target = null; |
918 deprecated_warning( | 918 warning( |
919 "Super class doesn't have a method named '${node.name.name}' " | 919 fasta.templateSuperclassMethodArgumentMismatch |
920 "with matching arguments.", | 920 .withArguments(node.name.name), |
921 node.fileOffset); | 921 node.fileOffset); |
922 } | 922 } |
923 Expression result; | 923 Expression result; |
924 if (target != null) { | 924 if (target != null) { |
925 result = new KernelDirectMethodInvocation( | 925 result = new KernelDirectMethodInvocation( |
926 new KernelThisExpression()..fileOffset = node.fileOffset, | 926 new KernelThisExpression()..fileOffset = node.fileOffset, |
927 target, | 927 target, |
928 node.arguments); | 928 node.arguments); |
929 } | 929 } |
930 // TODO(ahe): Use [DirectMethodInvocation] when possible, that is, | 930 // TODO(ahe): Use [DirectMethodInvocation] when possible, that is, |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
980 isSetter: isSetter, | 980 isSetter: isSetter, |
981 isStatic: isStatic, | 981 isStatic: isStatic, |
982 isTopLevel: !isStatic && !isSuper); | 982 isTopLevel: !isStatic && !isSuper); |
983 warning(message, charOffset); | 983 warning(message, charOffset); |
984 return new KernelSyntheticExpression(new Throw(error)); | 984 return new KernelSyntheticExpression(new Throw(error)); |
985 } | 985 } |
986 } | 986 } |
987 | 987 |
988 @override | 988 @override |
989 void warnUnresolvedSuperGet(Name name, int charOffset) { | 989 void warnUnresolvedSuperGet(Name name, int charOffset) { |
990 deprecated_warning( | 990 warning(fasta.templateSuperclassHasNoGetter.withArguments(name.name), |
991 "Super class has no getter named '${name.name}'.", charOffset); | 991 charOffset); |
992 } | 992 } |
993 | 993 |
994 @override | 994 @override |
995 void warnUnresolvedSuperSet(Name name, int charOffset) { | 995 void warnUnresolvedSuperSet(Name name, int charOffset) { |
996 deprecated_warning( | 996 warning(fasta.templateSuperclassHasNoSetter.withArguments(name.name), |
997 "Super class has no setter named '${name.name}'.", charOffset); | 997 charOffset); |
998 } | 998 } |
999 | 999 |
1000 @override | 1000 @override |
1001 void warnUnresolvedSuperMethod(Name name, int charOffset) { | 1001 void warnUnresolvedSuperMethod(Name name, int charOffset) { |
1002 deprecated_warning( | 1002 warning(fasta.templateSuperclassHasNoMethod.withArguments(name.name), |
1003 "Super class has no method named '${name.name}'.", charOffset); | 1003 charOffset); |
1004 } | 1004 } |
1005 | 1005 |
1006 @override | 1006 @override |
1007 Member lookupSuperMember(Name name, {bool isSetter: false}) { | 1007 Member lookupSuperMember(Name name, {bool isSetter: false}) { |
1008 Class superclass = classBuilder.cls.superclass; | 1008 Class superclass = classBuilder.cls.superclass; |
1009 return superclass == null | 1009 return superclass == null |
1010 ? null | 1010 ? null |
1011 : hierarchy.getDispatchTarget(superclass, name, setter: isSetter); | 1011 : hierarchy.getDispatchTarget(superclass, name, setter: isSetter); |
1012 } | 1012 } |
1013 | 1013 |
(...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1628 } | 1628 } |
1629 } | 1629 } |
1630 push( | 1630 push( |
1631 new KernelSymbolLiteral(value)..fileOffset = offsetForToken(hashToken)); | 1631 new KernelSymbolLiteral(value)..fileOffset = offsetForToken(hashToken)); |
1632 } | 1632 } |
1633 | 1633 |
1634 DartType kernelTypeFromString( | 1634 DartType kernelTypeFromString( |
1635 String name, List<DartType> arguments, int charOffset) { | 1635 String name, List<DartType> arguments, int charOffset) { |
1636 Builder builder = scope.lookup(name, charOffset, uri); | 1636 Builder builder = scope.lookup(name, charOffset, uri); |
1637 if (builder == null) { | 1637 if (builder == null) { |
1638 deprecated_warning("Type not found: '$name'.", charOffset); | 1638 warning(fasta.templateTypeNotFound.withArguments(name), charOffset); |
1639 return const InvalidType(); | 1639 return const InvalidType(); |
1640 } else { | 1640 } else { |
1641 return kernelTypeFromBuilder(builder, arguments, charOffset); | 1641 return kernelTypeFromBuilder(builder, arguments, charOffset); |
1642 } | 1642 } |
1643 } | 1643 } |
1644 | 1644 |
1645 DartType kernelTypeFromBuilder( | 1645 DartType kernelTypeFromBuilder( |
1646 Builder builder, List<DartType> arguments, int charOffset) { | 1646 Builder builder, List<DartType> arguments, int charOffset) { |
1647 if (constantExpressionRequired && builder is TypeVariableBuilder) { | 1647 if (constantExpressionRequired && builder is TypeVariableBuilder) { |
1648 deprecated_addCompileTimeError(charOffset, "Not a constant expression."); | 1648 deprecated_addCompileTimeError(charOffset, "Not a constant expression."); |
(...skipping 1618 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3267 if (member.isNative) { | 3267 if (member.isNative) { |
3268 push(NullValue.FunctionBody); | 3268 push(NullValue.FunctionBody); |
3269 } else { | 3269 } else { |
3270 push(new Block(<Statement>[ | 3270 push(new Block(<Statement>[ |
3271 deprecated_buildCompileTimeErrorStatement( | 3271 deprecated_buildCompileTimeErrorStatement( |
3272 "Expected '{'.", token.charOffset) | 3272 "Expected '{'.", token.charOffset) |
3273 ])); | 3273 ])); |
3274 } | 3274 } |
3275 } | 3275 } |
3276 | 3276 |
3277 @override | |
3278 void deprecated_warning(String message, [int charOffset = -1]) { | |
3279 if (constantExpressionRequired) { | |
3280 deprecated_addCompileTimeError(charOffset, message); | |
3281 } else { | |
3282 super.deprecated_warning(message, charOffset); | |
3283 } | |
3284 } | |
3285 | |
3286 void warningNotError(Message message, int charOffset) { | 3277 void warningNotError(Message message, int charOffset) { |
3287 super.warning(message, charOffset); | 3278 super.warning(message, charOffset); |
3288 } | 3279 } |
3289 | 3280 |
3290 @override | 3281 @override |
3291 DartType validatedTypeVariableUse( | 3282 DartType validatedTypeVariableUse( |
3292 TypeParameterType type, int offset, bool nonInstanceAccessIsError) { | 3283 TypeParameterType type, int offset, bool nonInstanceAccessIsError) { |
3293 if (!isInstanceContext && type.parameter.parent is Class) { | 3284 if (!isInstanceContext && type.parameter.parent is Class) { |
3294 String message = "Type variables can't be used in static members."; | 3285 Message message = fasta.messageTypeVariableInStaticContext; |
3295 if (nonInstanceAccessIsError) { | 3286 if (nonInstanceAccessIsError) { |
3296 deprecated_addCompileTimeError(offset, message); | 3287 addCompileTimeError(message, offset); |
3297 } else { | 3288 } else { |
3298 deprecated_warning(message, offset); | 3289 warning(message, offset); |
3299 } | 3290 } |
3300 return const InvalidType(); | 3291 return const InvalidType(); |
3301 } else if (constantExpressionRequired) { | 3292 } else if (constantExpressionRequired) { |
3302 deprecated_addCompileTimeError( | 3293 deprecated_addCompileTimeError( |
3303 offset, | 3294 offset, |
3304 "Type variable '${type.parameter.name}' can't be used as a constant " | 3295 "Type variable '${type.parameter.name}' can't be used as a constant " |
3305 "expression $type."); | 3296 "expression $type."); |
3306 } | 3297 } |
3307 return type; | 3298 return type; |
3308 } | 3299 } |
(...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3826 return AsyncMarker.Async; | 3817 return AsyncMarker.Async; |
3827 } else { | 3818 } else { |
3828 assert(identical(starToken.stringValue, "*")); | 3819 assert(identical(starToken.stringValue, "*")); |
3829 return AsyncMarker.AsyncStar; | 3820 return AsyncMarker.AsyncStar; |
3830 } | 3821 } |
3831 } else { | 3822 } else { |
3832 return unhandled(asyncToken.lexeme, "asyncMarkerFromTokens", | 3823 return unhandled(asyncToken.lexeme, "asyncMarkerFromTokens", |
3833 asyncToken.charOffset, null); | 3824 asyncToken.charOffset, null); |
3834 } | 3825 } |
3835 } | 3826 } |
OLD | NEW |