Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(519)

Side by Side Diff: pkg/kernel/lib/binary/ast_from_binary.dart

Issue 2669303002: Support for modular mixin resolution. (Closed)
Patch Set: Fix a bug Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « pkg/kernel/lib/ast.dart ('k') | pkg/kernel/lib/binary/ast_to_binary.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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 }
OLDNEW
« no previous file with comments | « pkg/kernel/lib/ast.dart ('k') | pkg/kernel/lib/binary/ast_to_binary.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698