Chromium Code Reviews| 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 'dart:async'; | 5 import 'dart:async'; |
| 6 | 6 |
| 7 import 'package:front_end/compiler_options.dart'; | 7 import 'package:front_end/compiler_options.dart'; |
| 8 import 'package:front_end/incremental_kernel_generator.dart'; | 8 import 'package:front_end/incremental_kernel_generator.dart'; |
| 9 import 'package:front_end/memory_file_system.dart'; | 9 import 'package:front_end/memory_file_system.dart'; |
| 10 import 'package:front_end/src/incremental/byte_store.dart'; | 10 import 'package:front_end/src/incremental/byte_store.dart'; |
| 11 import '../../kernel/lib/binary/limited_ast_to_binary.dart'; | |
|
ahe
2017/05/24 08:36:00
You probably want to use a package URI here.
scheglov
2017/05/25 17:44:09
Fixed.
Thanks.
| |
| 12 import 'package:front_end/src/incremental_kernel_generator_impl.dart'; | |
| 11 import 'package:kernel/ast.dart'; | 13 import 'package:kernel/ast.dart'; |
| 14 import 'package:kernel/binary/ast_from_binary.dart'; | |
| 12 import 'package:kernel/text/ast_to_text.dart'; | 15 import 'package:kernel/text/ast_to_text.dart'; |
| 16 import 'package:kernel/verifier.dart'; | |
| 13 import 'package:test/test.dart'; | 17 import 'package:test/test.dart'; |
| 14 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 18 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| 15 | 19 |
| 16 import 'src/incremental/mock_sdk.dart'; | 20 import 'src/incremental/mock_sdk.dart'; |
| 17 | 21 |
| 18 main() { | 22 main() { |
| 19 defineReflectiveSuite(() { | 23 defineReflectiveSuite(() { |
| 20 defineReflectiveTests(IncrementalKernelGeneratorTest); | 24 defineReflectiveTests(IncrementalKernelGeneratorTest); |
| 21 }); | 25 }); |
| 22 } | 26 } |
| (...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 309 _getLibraryText(library), | 313 _getLibraryText(library), |
| 310 r''' | 314 r''' |
| 311 library; | 315 library; |
| 312 import self as self; | 316 import self as self; |
| 313 import "dart:core" as core; | 317 import "dart:core" as core; |
| 314 | 318 |
| 315 static field (core::String) → core::int f; | 319 static field (core::String) → core::int f; |
| 316 '''); | 320 '''); |
| 317 } | 321 } |
| 318 | 322 |
| 323 test_limited_ast_to_binary() async { | |
| 324 writeFile('/test/.packages', 'test:lib/'); | |
| 325 String aPath = '/test/lib/a.dart'; | |
| 326 String bPath = '/test/lib/b.dart'; | |
| 327 writeFile( | |
| 328 aPath, | |
| 329 r''' | |
| 330 int topField = 0; | |
| 331 int get topGetter => 0; | |
| 332 int topFunction({p}) => 0; | |
| 333 | |
| 334 class A { | |
| 335 static int staticField; | |
| 336 static int get staticGetter => 0; | |
| 337 static int staticMethod() => 0; | |
| 338 | |
| 339 int instanceField; | |
| 340 int get instanceGetter => 0; | |
| 341 int instanceMethod() => 0; | |
| 342 | |
| 343 A(); | |
| 344 A.named(); | |
| 345 } | |
| 346 '''); | |
| 347 Uri bUri = writeFile( | |
| 348 bPath, | |
| 349 r''' | |
| 350 import 'a.dart'; | |
| 351 | |
| 352 class B extends A { | |
| 353 B() : super(); | |
| 354 B.named() : super.named(); | |
| 355 | |
| 356 void foo() { | |
| 357 super.instanceMethod(); | |
| 358 instanceMethod(); | |
| 359 } | |
| 360 | |
| 361 int instanceMethod() => 0; | |
| 362 } | |
| 363 | |
| 364 main() { | |
| 365 topField; | |
| 366 topField = 0; | |
| 367 var v1 = topGetter; | |
| 368 var v2 = topFunction(p: 0); | |
| 369 | |
| 370 A.staticField; | |
| 371 A.staticField = 0; | |
| 372 var v3 = A.staticGetter; | |
| 373 var v4 = A.staticMethod(); | |
| 374 | |
| 375 var a = new A(); | |
| 376 a.instanceField; | |
| 377 a.instanceField = 0; | |
| 378 var v5 = a.instanceGetter; | |
| 379 var v6 = a.instanceMethod(); | |
| 380 } | |
| 381 '''); | |
| 382 | |
| 383 Program program = await getInitialState(bUri); | |
| 384 | |
| 385 String initialKernelText; | |
| 386 List<int> bytes; | |
| 387 { | |
| 388 Library initialLibrary = _getLibrary(program, bUri); | |
| 389 initialKernelText = _getLibraryText(initialLibrary); | |
| 390 | |
| 391 var byteSink = new ByteSink(); | |
| 392 var printer = new LimitedBinaryPrinter( | |
| 393 byteSink, (library) => library.importUri == bUri); | |
| 394 printer.writeProgramFile(program); | |
| 395 bytes = byteSink.builder.takeBytes(); | |
| 396 | |
| 397 // Remove b.dart from the program. | |
| 398 // So, the program is now ready for re-adding the library. | |
| 399 program.libraries.remove(initialLibrary); | |
| 400 program.root.removeChild(initialLibrary.importUri.toString()); | |
| 401 } | |
| 402 | |
| 403 // Load b.dart from bytes using the initial name root, so that | |
| 404 // serialized canonical names can be linked to corresponding nodes. | |
| 405 Library loadedLibrary; | |
| 406 { | |
| 407 var programForLoading = new Program(nameRoot: program.root); | |
| 408 var reader = new BinaryBuilder(bytes); | |
| 409 reader.readProgram(programForLoading); | |
| 410 loadedLibrary = _getLibrary(programForLoading, bUri); | |
| 411 } | |
| 412 | |
| 413 // Add the library into the program. | |
| 414 program.libraries.add(loadedLibrary); | |
| 415 loadedLibrary.parent = program; | |
| 416 | |
| 417 expect(_getLibraryText(loadedLibrary), initialKernelText); | |
| 418 verifyProgram(program); | |
| 419 } | |
| 420 | |
| 319 test_updateEntryPoint() async { | 421 test_updateEntryPoint() async { |
| 320 writeFile('/test/.packages', 'test:lib/'); | 422 writeFile('/test/.packages', 'test:lib/'); |
| 321 String path = '/test/lib/test.dart'; | 423 String path = '/test/lib/test.dart'; |
| 322 Uri uri = writeFile( | 424 Uri uri = writeFile( |
| 323 path, | 425 path, |
| 324 r''' | 426 r''' |
| 325 main() { | 427 main() { |
| 326 var v = 1; | 428 var v = 1; |
| 327 } | 429 } |
| 328 '''); | 430 '''); |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 507 throw fail('No library found with URI "$uri"'); | 609 throw fail('No library found with URI "$uri"'); |
| 508 } | 610 } |
| 509 | 611 |
| 510 String _getLibraryText(Library library) { | 612 String _getLibraryText(Library library) { |
| 511 StringBuffer buffer = new StringBuffer(); | 613 StringBuffer buffer = new StringBuffer(); |
| 512 new Printer(buffer, syntheticNames: new NameSystem()) | 614 new Printer(buffer, syntheticNames: new NameSystem()) |
| 513 .writeLibraryFile(library); | 615 .writeLibraryFile(library); |
| 514 return buffer.toString(); | 616 return buffer.toString(); |
| 515 } | 617 } |
| 516 } | 618 } |
| OLD | NEW |