| OLD | NEW |
| 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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 import 'package:analyzer/dart/ast/ast.dart'; | 5 import 'package:analyzer/dart/ast/ast.dart'; |
| 6 import 'package:analyzer/dart/element/element.dart'; | 6 import 'package:analyzer/dart/element/element.dart'; |
| 7 import 'package:analyzer/error/error.dart'; | 7 import 'package:analyzer/error/error.dart'; |
| 8 import 'package:front_end/src/fasta/analyzer/ast_builder.dart'; | 8 import 'package:front_end/src/fasta/analyzer/ast_builder.dart'; |
| 9 import 'package:front_end/src/fasta/analyzer/element_store.dart'; | 9 import 'package:front_end/src/fasta/analyzer/element_store.dart'; |
| 10 import 'package:front_end/src/fasta/builder/scope.dart'; | 10 import 'package:front_end/src/fasta/builder/scope.dart'; |
| 11 import 'package:front_end/src/fasta/kernel/kernel_builder.dart'; | 11 import 'package:front_end/src/fasta/kernel/kernel_builder.dart'; |
| 12 import 'package:front_end/src/fasta/kernel/kernel_library_builder.dart'; | 12 import 'package:front_end/src/fasta/kernel/kernel_library_builder.dart'; |
| 13 import 'package:front_end/src/fasta/parser/parser.dart'; | 13 import 'package:front_end/src/fasta/parser/parser.dart'; |
| 14 import 'package:front_end/src/fasta/scanner/string_scanner.dart'; | 14 import 'package:front_end/src/fasta/scanner/string_scanner.dart'; |
| 15 import 'package:front_end/src/fasta/scanner/token.dart'; |
| 15 import 'package:test/test.dart'; | 16 import 'package:test/test.dart'; |
| 16 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 17 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| 17 | 18 |
| 18 import 'parser_test.dart'; | 19 import 'parser_test.dart'; |
| 19 | 20 |
| 20 main() { | 21 main() { |
| 21 defineReflectiveSuite(() { | 22 defineReflectiveSuite(() { |
| 22 defineReflectiveTests(ComplexParserTest_Fasta); | 23 defineReflectiveTests(ComplexParserTest_Fasta); |
| 23 }); | 24 }); |
| 24 } | 25 } |
| 25 | 26 |
| 26 /** | 27 /** |
| 28 * Type of the "parse..." methods defined in the Fasta parser. |
| 29 */ |
| 30 typedef Token ParseFunction(Token token); |
| 31 |
| 32 /** |
| 27 * Proxy implementation of [Builder] used by Fasta parser tests. | 33 * Proxy implementation of [Builder] used by Fasta parser tests. |
| 28 * | 34 * |
| 29 * All undeclared identifiers are presumed to resolve via an instance of this | 35 * All undeclared identifiers are presumed to resolve via an instance of this |
| 30 * class. | 36 * class. |
| 31 */ | 37 */ |
| 32 class BuilderProxy implements Builder { | 38 class BuilderProxy implements Builder { |
| 33 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); | 39 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
| 34 } | 40 } |
| 35 | 41 |
| 36 /** | 42 /** |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 | 142 |
| 137 @override | 143 @override |
| 138 @failingTest | 144 @failingTest |
| 139 void test_conditionalExpression_precedence_nullableType_is() { | 145 void test_conditionalExpression_precedence_nullableType_is() { |
| 140 // TODO(paulberry,ahe): Fasta doesn't support NNBD syntax yet. | 146 // TODO(paulberry,ahe): Fasta doesn't support NNBD syntax yet. |
| 141 super.test_conditionalExpression_precedence_nullableType_is(); | 147 super.test_conditionalExpression_precedence_nullableType_is(); |
| 142 } | 148 } |
| 143 | 149 |
| 144 @override | 150 @override |
| 145 @failingTest | 151 @failingTest |
| 152 void test_constructor_initializer_withParenthesizedExpression() { |
| 153 // TODO(paulberry): Implement parseCompilationUnitWithOptions |
| 154 super.test_constructor_initializer_withParenthesizedExpression(); |
| 155 } |
| 156 |
| 157 @override |
| 158 @failingTest |
| 146 void test_equalityExpression_normal() { | 159 void test_equalityExpression_normal() { |
| 147 // TODO(paulberry,ahe): bad error recovery | 160 // TODO(paulberry,ahe): bad error recovery |
| 148 super.test_equalityExpression_normal(); | 161 super.test_equalityExpression_normal(); |
| 149 } | 162 } |
| 150 | 163 |
| 151 @override | 164 @override |
| 152 @failingTest | 165 @failingTest |
| 153 void test_equalityExpression_super() { | 166 void test_equalityExpression_super() { |
| 154 // TODO(paulberry,ahe): AstBuilder doesn't implement | 167 // TODO(paulberry,ahe): AstBuilder doesn't implement |
| 155 // handleSuperExpression(). | 168 // handleSuperExpression(). |
| 156 super.test_equalityExpression_super(); | 169 super.test_equalityExpression_super(); |
| 157 } | 170 } |
| 158 | 171 |
| 159 @override | 172 @override |
| 160 @failingTest | 173 @failingTest |
| 161 void test_logicalAndExpression_precedence_nullableType() { | 174 void test_logicalAndExpression_precedence_nullableType() { |
| 162 // TODO(paulberry,ahe): Fasta doesn't support NNBD syntax yet. | 175 // TODO(paulberry,ahe): Fasta doesn't support NNBD syntax yet. |
| 163 super.test_logicalAndExpression_precedence_nullableType(); | 176 super.test_logicalAndExpression_precedence_nullableType(); |
| 164 } | 177 } |
| 165 | 178 |
| 166 @override | 179 @override |
| 167 @failingTest | 180 @failingTest |
| 168 void test_logicalOrExpression_precedence_nullableType() { | 181 void test_logicalOrExpression_precedence_nullableType() { |
| 169 // TODO(paulberry,ahe): Fasta doesn't support NNBD syntax yet. | 182 // TODO(paulberry,ahe): Fasta doesn't support NNBD syntax yet. |
| 170 super.test_logicalOrExpression_precedence_nullableType(); | 183 super.test_logicalOrExpression_precedence_nullableType(); |
| 171 } | 184 } |
| 172 | 185 |
| 173 @override | 186 @override |
| 174 @failingTest | 187 @failingTest |
| 188 void test_multipleLabels_statement() { |
| 189 // TODO(paulberry,ahe): AstBuilder doesn't implement handleLabel(). |
| 190 super.test_multipleLabels_statement(); |
| 191 } |
| 192 |
| 193 @override |
| 194 @failingTest |
| 175 void test_multiplicativeExpression_super() { | 195 void test_multiplicativeExpression_super() { |
| 176 // TODO(paulberry,ahe): AstBuilder doesn't implement | 196 // TODO(paulberry,ahe): AstBuilder doesn't implement |
| 177 // handleSuperExpression(). | 197 // handleSuperExpression(). |
| 178 super.test_multiplicativeExpression_super(); | 198 super.test_multiplicativeExpression_super(); |
| 179 } | 199 } |
| 180 | 200 |
| 181 @override | 201 @override |
| 182 @failingTest | 202 @failingTest |
| 183 void test_shiftExpression_super() { | 203 void test_shiftExpression_super() { |
| 184 // TODO(paulberry,ahe): AstBuilder doesn't implement | 204 // TODO(paulberry,ahe): AstBuilder doesn't implement |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 240 @override | 260 @override |
| 241 set enableNnbd(bool value) { | 261 set enableNnbd(bool value) { |
| 242 if (value == true) { | 262 if (value == true) { |
| 243 // TODO(paulberry,ahe): non-null-by-default syntax is not supported by | 263 // TODO(paulberry,ahe): non-null-by-default syntax is not supported by |
| 244 // Fasta. | 264 // Fasta. |
| 245 throw new UnimplementedError(); | 265 throw new UnimplementedError(); |
| 246 } | 266 } |
| 247 } | 267 } |
| 248 | 268 |
| 249 @override | 269 @override |
| 270 CompilationUnit parseCompilationUnit(String source, |
| 271 [List<ErrorCode> errorCodes = const <ErrorCode>[]]) { |
| 272 // TODO(paulberry): implement parseCompilationUnit |
| 273 throw new UnimplementedError(); |
| 274 } |
| 275 |
| 276 @override |
| 250 CompilationUnit parseCompilationUnitWithOptions(String source, | 277 CompilationUnit parseCompilationUnitWithOptions(String source, |
| 251 [List<ErrorCode> errorCodes = const <ErrorCode>[]]) { | 278 [List<ErrorCode> errorCodes = const <ErrorCode>[]]) { |
| 252 // TODO(paulberry): implement parseCompilationUnitWithOptions | 279 // TODO(paulberry): implement parseCompilationUnitWithOptions |
| 253 throw new UnimplementedError(); | 280 throw new UnimplementedError(); |
| 254 } | 281 } |
| 255 | 282 |
| 256 @override | 283 @override |
| 257 Expression parseExpression(String source, | 284 Expression parseExpression(String source, |
| 258 [List<ErrorCode> errorCodes = const <ErrorCode>[]]) { | 285 [List<ErrorCode> errorCodes = const <ErrorCode>[]]) { |
| 286 return _runParser(source, (parser) => parser.parseExpression, errorCodes); |
| 287 } |
| 288 |
| 289 @override |
| 290 Statement parseStatement(String source, |
| 291 [List<ErrorCode> errorCodes = const <ErrorCode>[], |
| 292 bool enableLazyAssignmentOperators]) { |
| 293 return _runParser(source, (parser) => parser.parseStatement, errorCodes); |
| 294 } |
| 295 |
| 296 Object _runParser(String source, ParseFunction getParseFuction(Parser parser), |
| 297 [List<ErrorCode> errorCodes = const <ErrorCode>[]]) { |
| 298 if (errorCodes.isNotEmpty) { |
| 299 // TODO(paulberry): Check that the parser generates the proper errors. |
| 300 throw new UnimplementedError(); |
| 301 } |
| 259 var scanner = new StringScanner(source); | 302 var scanner = new StringScanner(source); |
| 260 var token = scanner.tokenize(); | 303 var token = scanner.tokenize(); |
| 261 var library = new KernelLibraryBuilderProxy(); | 304 var library = new KernelLibraryBuilderProxy(); |
| 262 var member = new BuilderProxy(); | 305 var member = new BuilderProxy(); |
| 263 var elementStore = new ElementStoreProxy(); | 306 var elementStore = new ElementStoreProxy(); |
| 264 var scope = new ScopeProxy(); | 307 var scope = new ScopeProxy(); |
| 265 var astBuilder = new AstBuilder(library, member, elementStore, scope); | 308 var astBuilder = new AstBuilder(library, member, elementStore, scope); |
| 266 var parser = new Parser(astBuilder); | 309 var parser = new Parser(astBuilder); |
| 267 var endToken = parser.parseExpression(token); | 310 var parseFunction = getParseFuction(parser); |
| 311 var endToken = parseFunction(token); |
| 268 expect(endToken.isEof, isTrue); | 312 expect(endToken.isEof, isTrue); |
| 269 expect(astBuilder.stack, hasLength(1)); | 313 expect(astBuilder.stack, hasLength(1)); |
| 270 var expression = astBuilder.pop() as Expression; | 314 return astBuilder.pop(); |
| 271 return expression; | |
| 272 } | 315 } |
| 273 } | 316 } |
| 274 | 317 |
| 275 /** | 318 /** |
| 276 * Proxy implementation of [KernelClassElement] used by Fasta parser tests. | 319 * Proxy implementation of [KernelClassElement] used by Fasta parser tests. |
| 277 * | 320 * |
| 278 * Any element used as a type name is presumed to refer to an instance of this | 321 * Any element used as a type name is presumed to refer to an instance of this |
| 279 * class. | 322 * class. |
| 280 */ | 323 */ |
| 281 class InterfaceTypeProxy implements KernelInterfaceType { | 324 class InterfaceTypeProxy implements KernelInterfaceType { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 300 * [BuilderProxy]. | 343 * [BuilderProxy]. |
| 301 */ | 344 */ |
| 302 class ScopeProxy implements Scope { | 345 class ScopeProxy implements Scope { |
| 303 final _locals = <String, Builder>{}; | 346 final _locals = <String, Builder>{}; |
| 304 | 347 |
| 305 Builder lookup(String name) => | 348 Builder lookup(String name) => |
| 306 _locals.putIfAbsent(name, () => new BuilderProxy()); | 349 _locals.putIfAbsent(name, () => new BuilderProxy()); |
| 307 | 350 |
| 308 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); | 351 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
| 309 } | 352 } |
| OLD | NEW |