| 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 library kernel.ast_from_binary; | 4 library kernel.ast_from_binary; |
| 5 | 5 |
| 6 import '../ast.dart'; | 6 import '../ast.dart'; |
| 7 import 'tag.dart'; | 7 import 'tag.dart'; |
| 8 import 'loader.dart'; | 8 import 'loader.dart'; |
| 9 import 'dart:convert'; | 9 import 'dart:convert'; |
| 10 import 'package:kernel/transformations/flags.dart'; | 10 import 'package:kernel/transformations/flags.dart'; |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 317 break; | 317 break; |
| 318 default: | 318 default: |
| 319 throw fail('Invalid class tag: $tag'); | 319 throw fail('Invalid class tag: $tag'); |
| 320 } | 320 } |
| 321 } | 321 } |
| 322 | 322 |
| 323 void readNormalClass(Class node) { | 323 void readNormalClass(Class node) { |
| 324 node.fileOffset = readOffset(); | 324 node.fileOffset = readOffset(); |
| 325 int flags = readByte(); | 325 int flags = readByte(); |
| 326 node.isAbstract = flags & 0x1 != 0; | 326 node.isAbstract = flags & 0x1 != 0; |
| 327 node.level = _currentLibrary.isExternal | 327 int levelIndex = (flags >> 1) & 0x3; |
| 328 ? (flags & 0x2 != 0) ? ClassLevel.Type : ClassLevel.Hierarchy | 328 node.level = ClassLevel.values[levelIndex + 1]; |
| 329 : ClassLevel.Body; | |
| 330 node.name = readStringOrNullIfEmpty(); | 329 node.name = readStringOrNullIfEmpty(); |
| 331 node.fileUri = readUriReference(); | 330 node.fileUri = readUriReference(); |
| 332 node.annotations = readAnnotationList(node); | 331 node.annotations = readAnnotationList(node); |
| 333 debugPath.add(node.name ?? 'normal-class'); | 332 debugPath.add(node.name ?? 'normal-class'); |
| 334 readAndPushTypeParameterList(node.typeParameters, node); | 333 readAndPushTypeParameterList(node.typeParameters, node); |
| 335 node.supertype = readSupertypeOption(); | 334 node.supertype = readSupertypeOption(); |
| 336 _fillNonTreeNodeList(node.implementedTypes, readSupertype); | 335 _fillNonTreeNodeList(node.implementedTypes, readSupertype); |
| 337 _fillLazilyLoadedList(node.fields, (int tag, int index) { | 336 _fillLazilyLoadedList(node.fields, (int tag, int index) { |
| 338 readField(loader.getClassMemberReference(node, tag, index), tag); | 337 readField(loader.getClassMemberReference(node, tag, index), tag); |
| 339 }); | 338 }); |
| 340 _fillLazilyLoadedList(node.constructors, (int tag, int index) { | 339 _fillLazilyLoadedList(node.constructors, (int tag, int index) { |
| 341 readConstructor(loader.getClassMemberReference(node, tag, index), tag); | 340 readConstructor(loader.getClassMemberReference(node, tag, index), tag); |
| 342 }); | 341 }); |
| 343 _fillLazilyLoadedList(node.procedures, (int tag, int index) { | 342 _fillLazilyLoadedList(node.procedures, (int tag, int index) { |
| 344 readProcedure(loader.getClassMemberReference(node, tag, index), tag); | 343 readProcedure(loader.getClassMemberReference(node, tag, index), tag); |
| 345 }); | 344 }); |
| 346 typeParameterStack.length = 0; | 345 typeParameterStack.length = 0; |
| 347 debugPath.removeLast(); | 346 debugPath.removeLast(); |
| 348 } | 347 } |
| 349 | 348 |
| 350 void readMixinClass(Class node) { | 349 void readMixinClass(Class node) { |
| 351 node.fileOffset = readOffset(); | 350 node.fileOffset = readOffset(); |
| 352 int flags = readByte(); | 351 int flags = readByte(); |
| 353 node.isAbstract = flags & 0x1 != 0; | 352 node.isAbstract = flags & 0x1 != 0; |
| 354 node.level = _currentLibrary.isExternal | 353 int levelIndex = (flags >> 1) & 0x3; |
| 355 ? (flags & 0x2 != 0) ? ClassLevel.Type : ClassLevel.Hierarchy | 354 node.level = ClassLevel.values[levelIndex]; |
| 356 : ClassLevel.Body; | |
| 357 node.name = readStringOrNullIfEmpty(); | 355 node.name = readStringOrNullIfEmpty(); |
| 358 node.fileUri = readUriReference(); | 356 node.fileUri = readUriReference(); |
| 359 node.annotations = readAnnotationList(node); | 357 node.annotations = readAnnotationList(node); |
| 360 debugPath.add(node.name ?? 'mixin-class'); | 358 debugPath.add(node.name ?? 'mixin-class'); |
| 361 readAndPushTypeParameterList(node.typeParameters, node); | 359 readAndPushTypeParameterList(node.typeParameters, node); |
| 362 node.supertype = readSupertype(); | 360 node.supertype = readSupertype(); |
| 363 node.mixedInType = readSupertype(); | 361 node.mixedInType = readSupertype(); |
| 364 _fillNonTreeNodeList(node.implementedTypes, readDartType); | 362 _fillNonTreeNodeList(node.implementedTypes, readDartType); |
| 365 _fillLazilyLoadedList(node.constructors, (int tag, int index) { | 363 _fillLazilyLoadedList(node.constructors, (int tag, int index) { |
| 366 readConstructor(loader.getClassMemberReference(node, tag, index), tag); | 364 readConstructor(loader.getClassMemberReference(node, tag, index), tag); |
| (...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 968 isFinal: flags & 0x1 != 0, | 966 isFinal: flags & 0x1 != 0, |
| 969 isConst: flags & 0x2 != 0)..fileOffset = offset; | 967 isConst: flags & 0x2 != 0)..fileOffset = offset; |
| 970 } | 968 } |
| 971 | 969 |
| 972 int readOffset() { | 970 int readOffset() { |
| 973 // Offset is saved as unsigned, | 971 // Offset is saved as unsigned, |
| 974 // but actually ranges from -1 and up (thus the -1) | 972 // but actually ranges from -1 and up (thus the -1) |
| 975 return readUInt() - 1; | 973 return readUInt() - 1; |
| 976 } | 974 } |
| 977 } | 975 } |
| OLD | NEW |