| // Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'dart:io'; |
| import 'dart:typed_data'; |
| |
| import 'package:kernel/binary/ast_from_binary.dart'; |
| import 'package:kernel/kernel.dart'; |
| |
| import 'find_sdk_dills.dart'; |
| |
| void main() { |
| List<File> dills = findSdkDills(); |
| print("Found ${dills.length} dills!"); |
| |
| List<File> errors = []; |
| for (File dill in dills) { |
| if (!canRead(dill)) { |
| errors.add(dill); |
| } |
| } |
| if (errors.isEmpty) { |
| print("Read all OK."); |
| } else { |
| print("Errors when reading:"); |
| for (File error in errors) { |
| print(error); |
| } |
| exitCode = 1; |
| } |
| } |
| |
| bool canRead(File dill) { |
| print("Reading $dill"); |
| Uint8List bytes = dill.readAsBytesSync(); |
| |
| try { |
| Component component = new Component(); |
| new BinaryBuilderWithMetadata(bytes).readComponent(component); |
| int libs = component.libraries.length; |
| |
| component = new Component(); |
| new BinaryBuilderWithMetadata(bytes).readComponentSource(component); |
| |
| component = new Component(); |
| new BinaryBuilder(bytes).readComponent(component); |
| if (libs != component.libraries.length) { |
| throw "Didn't get the same number of libraries: $libs when reading with " |
| "BinaryBuilderWithMetadata and ${component.libraries.length} " |
| "when reading with BinaryBuilder"; |
| } |
| |
| component = new Component(); |
| new BinaryBuilder(bytes).readComponentSource(component); |
| |
| return true; |
| } catch (e, st) { |
| print("Error for $dill:"); |
| print(e); |
| print(st); |
| print(""); |
| print("--------------------"); |
| print(""); |
| return false; |
| } |
| } |