| 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.analyzer.ast_builder; | 5 library fasta.analyzer.ast_builder; |
| 6 | 6 |
| 7 import 'package:analyzer/analyzer.dart'; | 7 import 'package:analyzer/analyzer.dart'; |
| 8 import 'package:analyzer/dart/ast/ast_factory.dart' show AstFactory; | 8 import 'package:analyzer/dart/ast/ast_factory.dart' show AstFactory; |
| 9 import 'package:analyzer/dart/ast/standard_ast_factory.dart' as standard; | 9 import 'package:analyzer/dart/ast/standard_ast_factory.dart' as standard; |
| 10 import 'package:analyzer/dart/ast/token.dart' as analyzer show Token; | 10 import 'package:analyzer/dart/ast/token.dart' as analyzer show Token; |
| (...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 437 components[i] = identifier.token; | 437 components[i] = identifier.token; |
| 438 } | 438 } |
| 439 push(ast.symbolLiteral(toAnalyzerToken(hashToken), components)); | 439 push(ast.symbolLiteral(toAnalyzerToken(hashToken), components)); |
| 440 } | 440 } |
| 441 | 441 |
| 442 void endType(Token beginToken, Token endToken) { | 442 void endType(Token beginToken, Token endToken) { |
| 443 debugEvent("Type"); | 443 debugEvent("Type"); |
| 444 TypeArgumentList arguments = pop(); | 444 TypeArgumentList arguments = pop(); |
| 445 Identifier name = pop(); | 445 Identifier name = pop(); |
| 446 // TODO(paulberry,ahe): what if the type doesn't resolve to a class | 446 // TODO(paulberry,ahe): what if the type doesn't resolve to a class |
| 447 // element? | 447 // element? Try to share code with BodyBuilder.builderToFirstExpression. |
| 448 KernelClassElement cls = name.staticElement; | 448 KernelClassElement cls = name.staticElement; |
| 449 if (cls == null) { | 449 if (cls == null) { |
| 450 // TODO(paulberry): This is a kludge. Ideally we should already have | 450 // TODO(paulberry): This is a kludge. Ideally we should already have |
| 451 // set the static element at the time that handleIdentifier was called. | 451 // set the static element at the time that handleIdentifier was called. |
| 452 Builder builder = scope.lookup(name.name, beginToken.charOffset, uri); | 452 Builder builder = scope.lookup(name.name, beginToken.charOffset, uri); |
| 453 if (builder == null) { | 453 if (builder == null) { |
| 454 internalError("Undefined name: $name"); | 454 internalError("Undefined name: $name"); |
| 455 } | 455 } |
| 456 cls = elementStore[builder]; | 456 cls = elementStore[builder]; |
| 457 assert(cls != null); | 457 assert(cls != null); |
| (...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 910 @override | 910 @override |
| 911 void handleQualified(Token period) { | 911 void handleQualified(Token period) { |
| 912 SimpleIdentifier identifier = pop(); | 912 SimpleIdentifier identifier = pop(); |
| 913 if (accumulateIdentifierComponents) { | 913 if (accumulateIdentifierComponents) { |
| 914 List<SimpleIdentifier> list = pop(); | 914 List<SimpleIdentifier> list = pop(); |
| 915 list.add(identifier); | 915 list.add(identifier); |
| 916 push(list); | 916 push(list); |
| 917 } else { | 917 } else { |
| 918 var prefix = pop(); | 918 var prefix = pop(); |
| 919 if (prefix is SimpleIdentifier) { | 919 if (prefix is SimpleIdentifier) { |
| 920 // TODO(paulberry): resolve [identifier]. | 920 // TODO(paulberry): resolve [identifier]. Note that BodyBuilder handles |
| 921 // this situation using SendAccessor. |
| 921 push(ast.prefixedIdentifier( | 922 push(ast.prefixedIdentifier( |
| 922 prefix, toAnalyzerToken(period), identifier)); | 923 prefix, toAnalyzerToken(period), identifier)); |
| 923 } else { | 924 } else { |
| 924 // TODO(paulberry): implement. | 925 // TODO(paulberry): implement. |
| 925 logEvent('Qualified with >1 dot'); | 926 logEvent('Qualified with >1 dot'); |
| 926 } | 927 } |
| 927 } | 928 } |
| 928 } | 929 } |
| 929 | 930 |
| 930 @override | 931 @override |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1027 } | 1028 } |
| 1028 | 1029 |
| 1029 @override | 1030 @override |
| 1030 void endMethod(Token getOrSet, Token beginToken, Token endToken) { | 1031 void endMethod(Token getOrSet, Token beginToken, Token endToken) { |
| 1031 debugEvent("Method"); | 1032 debugEvent("Method"); |
| 1032 FunctionBody body = _endFunctionBody(); | 1033 FunctionBody body = _endFunctionBody(); |
| 1033 ConstructorName redirectedConstructor = null; // TODO(paulberry) | 1034 ConstructorName redirectedConstructor = null; // TODO(paulberry) |
| 1034 List<ConstructorInitializer> initializers = null; // TODO(paulberry) | 1035 List<ConstructorInitializer> initializers = null; // TODO(paulberry) |
| 1035 Token separator = null; // TODO(paulberry) | 1036 Token separator = null; // TODO(paulberry) |
| 1036 FormalParameterList parameters = pop(); | 1037 FormalParameterList parameters = pop(); |
| 1037 TypeParameterList typeParameters = pop(); | 1038 /* TypeParameterList typeParameters = */ pop(); // TODO(paulberry) |
| 1038 var name = pop(); | 1039 var name = pop(); |
| 1039 analyzer.Token propertyKeyword = toAnalyzerToken(getOrSet); | 1040 // TODO(paulberry) |
| 1040 TypeAnnotation returnType = pop(); | 1041 // analyzer.Token propertyKeyword = toAnalyzerToken(getOrSet); |
| 1042 /* TypeAnnotation returnType = */ pop(); // TODO(paulberry) |
| 1041 | 1043 |
| 1042 Token externalKeyword = null; | 1044 Token externalKeyword = null; |
| 1043 Token constKeyword = null; | 1045 Token constKeyword = null; |
| 1044 Token factoryKeyword = null; | 1046 Token factoryKeyword = null; |
| 1045 List<Token> modifiers = pop(); | 1047 List<Token> modifiers = pop(); |
| 1046 for (Token modifier in modifiers) { | 1048 for (Token modifier in modifiers) { |
| 1047 String value = modifier.stringValue; | 1049 String value = modifier.stringValue; |
| 1048 if (identical('external', value)) { | 1050 if (identical('external', value)) { |
| 1049 // TODO(scheglov): Check the order and uniqueness. | 1051 // TODO(scheglov): Check the order and uniqueness. |
| 1050 externalKeyword = modifier; | 1052 externalKeyword = modifier; |
| 1051 } else if (identical('const', value)) { | 1053 } else if (identical('const', value)) { |
| 1052 // TODO(scheglov): Check the order and uniqueness. | 1054 // TODO(scheglov): Check the order and uniqueness. |
| 1053 constKeyword = modifier; | 1055 constKeyword = modifier; |
| 1054 } else if (identical('factory', value)) { | 1056 } else if (identical('factory', value)) { |
| 1055 // TODO(scheglov): Check the order and uniqueness. | 1057 // TODO(scheglov): Check the order and uniqueness. |
| 1056 factoryKeyword = modifier; | 1058 factoryKeyword = modifier; |
| 1057 } else { | 1059 } else { |
| 1058 // TODO(scheglov): Report error. | 1060 // TODO(scheglov): Report error. |
| 1059 internalError("Invalid modifier. Report an error."); | 1061 internalError("Invalid modifier. Report an error."); |
| 1060 } | 1062 } |
| 1061 } | 1063 } |
| 1062 | 1064 |
| 1063 List<Annotation> metadata = pop(); | 1065 List<Annotation> metadata = pop(); |
| 1064 // TODO(paulberry): capture doc comments. See dartbug.com/28851. | 1066 // TODO(paulberry): capture doc comments. See dartbug.com/28851. |
| 1065 Comment comment = null; | 1067 Comment comment = null; |
| 1066 SimpleIdentifier returnType2; | 1068 SimpleIdentifier returnType2; |
| 1067 Token period; | 1069 Token period; |
| 1068 SimpleIdentifier name2; | 1070 SimpleIdentifier name2; |
| 1069 if (name is SimpleIdentifier) { | 1071 if (name is SimpleIdentifier) { |
| 1070 SimpleIdentifier returnType2 = name; | 1072 returnType2 = name; |
| 1071 } | 1073 } |
| 1072 push(ast.constructorDeclaration( | 1074 push(ast.constructorDeclaration( |
| 1073 comment, | 1075 comment, |
| 1074 metadata, | 1076 metadata, |
| 1075 toAnalyzerToken(externalKeyword), | 1077 toAnalyzerToken(externalKeyword), |
| 1076 toAnalyzerToken(constKeyword), | 1078 toAnalyzerToken(constKeyword), |
| 1077 toAnalyzerToken(factoryKeyword), | 1079 toAnalyzerToken(factoryKeyword), |
| 1078 returnType2, | 1080 returnType2, |
| 1079 toAnalyzerToken(period), | 1081 toAnalyzerToken(period), |
| 1080 name2, | 1082 name2, |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1163 /// [ClassDeclaration] or [ClassTypeAlias] object. | 1165 /// [ClassDeclaration] or [ClassTypeAlias] object. |
| 1164 class _MixinApplication { | 1166 class _MixinApplication { |
| 1165 final TypeName supertype; | 1167 final TypeName supertype; |
| 1166 | 1168 |
| 1167 final Token withKeyword; | 1169 final Token withKeyword; |
| 1168 | 1170 |
| 1169 final List<TypeName> mixinTypes; | 1171 final List<TypeName> mixinTypes; |
| 1170 | 1172 |
| 1171 _MixinApplication(this.supertype, this.withKeyword, this.mixinTypes); | 1173 _MixinApplication(this.supertype, this.withKeyword, this.mixinTypes); |
| 1172 } | 1174 } |
| OLD | NEW |