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

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

Issue 2626613002: More offsets in kernel (Closed)
Patch Set: Removed debugging stuff Created 3 years, 11 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
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 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 break; 314 break;
315 case Tag.MixinClass: 315 case Tag.MixinClass:
316 readMixinClass(node); 316 readMixinClass(node);
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 int flags = readByte(); 325 int flags = readByte();
325 node.isAbstract = flags & 0x1 != 0; 326 node.isAbstract = flags & 0x1 != 0;
326 node.level = _currentLibrary.isExternal 327 node.level = _currentLibrary.isExternal
327 ? (flags & 0x2 != 0) ? ClassLevel.Type : ClassLevel.Hierarchy 328 ? (flags & 0x2 != 0) ? ClassLevel.Type : ClassLevel.Hierarchy
328 : ClassLevel.Body; 329 : ClassLevel.Body;
329 node.name = readStringOrNullIfEmpty(); 330 node.name = readStringOrNullIfEmpty();
330 node.fileUri = readUriReference(); 331 node.fileUri = readUriReference();
331 node.annotations = readAnnotationList(node); 332 node.annotations = readAnnotationList(node);
332 debugPath.add(node.name ?? 'normal-class'); 333 debugPath.add(node.name ?? 'normal-class');
333 readAndPushTypeParameterList(node.typeParameters, node); 334 readAndPushTypeParameterList(node.typeParameters, node);
334 node.supertype = readSupertypeOption(); 335 node.supertype = readSupertypeOption();
335 _fillNonTreeNodeList(node.implementedTypes, readSupertype); 336 _fillNonTreeNodeList(node.implementedTypes, readSupertype);
336 _fillLazilyLoadedList(node.fields, (int tag, int index) { 337 _fillLazilyLoadedList(node.fields, (int tag, int index) {
337 readField(loader.getClassMemberReference(node, tag, index), tag); 338 readField(loader.getClassMemberReference(node, tag, index), tag);
338 }); 339 });
339 _fillLazilyLoadedList(node.constructors, (int tag, int index) { 340 _fillLazilyLoadedList(node.constructors, (int tag, int index) {
340 readConstructor(loader.getClassMemberReference(node, tag, index), tag); 341 readConstructor(loader.getClassMemberReference(node, tag, index), tag);
341 }); 342 });
342 _fillLazilyLoadedList(node.procedures, (int tag, int index) { 343 _fillLazilyLoadedList(node.procedures, (int tag, int index) {
343 readProcedure(loader.getClassMemberReference(node, tag, index), tag); 344 readProcedure(loader.getClassMemberReference(node, tag, index), tag);
344 }); 345 });
345 typeParameterStack.length = 0; 346 typeParameterStack.length = 0;
346 debugPath.removeLast(); 347 debugPath.removeLast();
347 } 348 }
348 349
349 void readMixinClass(Class node) { 350 void readMixinClass(Class node) {
351 node.fileOffset = readOffset();
350 int flags = readByte(); 352 int flags = readByte();
351 node.isAbstract = flags & 0x1 != 0; 353 node.isAbstract = flags & 0x1 != 0;
352 node.level = _currentLibrary.isExternal 354 node.level = _currentLibrary.isExternal
353 ? (flags & 0x2 != 0) ? ClassLevel.Type : ClassLevel.Hierarchy 355 ? (flags & 0x2 != 0) ? ClassLevel.Type : ClassLevel.Hierarchy
354 : ClassLevel.Body; 356 : ClassLevel.Body;
355 node.name = readStringOrNullIfEmpty(); 357 node.name = readStringOrNullIfEmpty();
356 node.fileUri = readUriReference(); 358 node.fileUri = readUriReference();
357 node.annotations = readAnnotationList(node); 359 node.annotations = readAnnotationList(node);
358 debugPath.add(node.name ?? 'mixin-class'); 360 debugPath.add(node.name ?? 'mixin-class');
359 readAndPushTypeParameterList(node.typeParameters, node); 361 readAndPushTypeParameterList(node.typeParameters, node);
(...skipping 17 matching lines...) Expand all
377 void addTransformerFlag(int flags) { 379 void addTransformerFlag(int flags) {
378 _transformerFlags |= flags; 380 _transformerFlags |= flags;
379 } 381 }
380 382
381 void readField(Field node, int tag) { 383 void readField(Field node, int tag) {
382 // Note: as with readProcedure and readConstructor, the tag parameter 384 // Note: as with readProcedure and readConstructor, the tag parameter
383 // is unused, but we pass it in to clarify that the tag has already been 385 // is unused, but we pass it in to clarify that the tag has already been
384 // consumed from the input. 386 // consumed from the input.
385 assert(tag == Tag.Field); 387 assert(tag == Tag.Field);
386 node.fileOffset = readOffset(); 388 node.fileOffset = readOffset();
389 node.fileEndOffset = readOffset();
387 node.flags = readByte(); 390 node.flags = readByte();
388 node.name = readName(); 391 node.name = readName();
389 node.fileUri = readUriReference(); 392 node.fileUri = readUriReference();
390 node.annotations = readAnnotationList(node); 393 node.annotations = readAnnotationList(node);
391 debugPath.add(node.name?.name ?? 'field'); 394 debugPath.add(node.name?.name ?? 'field');
392 node.type = readDartType(); 395 node.type = readDartType();
393 node.inferredValue = readOptionalInferredValue(); 396 node.inferredValue = readOptionalInferredValue();
394 node.initializer = readExpressionOption(); 397 node.initializer = readExpressionOption();
395 node.initializer?.parent = node; 398 node.initializer?.parent = node;
396 node.transformerFlags = getAndResetTransformerFlags(); 399 node.transformerFlags = getAndResetTransformerFlags();
397 debugPath.removeLast(); 400 debugPath.removeLast();
398 } 401 }
399 402
400 void readConstructor(Constructor node, int tag) { 403 void readConstructor(Constructor node, int tag) {
401 assert(tag == Tag.Constructor); 404 assert(tag == Tag.Constructor);
405 node.fileOffset = readOffset();
406 node.fileEndOffset = readOffset();
402 node.flags = readByte(); 407 node.flags = readByte();
403 node.name = readName(); 408 node.name = readName();
404 node.annotations = readAnnotationList(node); 409 node.annotations = readAnnotationList(node);
405 debugPath.add(node.name?.name ?? 'constructor'); 410 debugPath.add(node.name?.name ?? 'constructor');
406 node.function = readFunctionNode()..parent = node; 411 node.function = readFunctionNode()..parent = node;
407 pushVariableDeclarations(node.function.positionalParameters); 412 pushVariableDeclarations(node.function.positionalParameters);
408 pushVariableDeclarations(node.function.namedParameters); 413 pushVariableDeclarations(node.function.namedParameters);
409 _fillTreeNodeList(node.initializers, readInitializer, node); 414 _fillTreeNodeList(node.initializers, readInitializer, node);
410 variableStack.length = 0; 415 variableStack.length = 0;
411 node.transformerFlags = getAndResetTransformerFlags(); 416 node.transformerFlags = getAndResetTransformerFlags();
412 debugPath.removeLast(); 417 debugPath.removeLast();
413 } 418 }
414 419
415 void readProcedure(Procedure node, int tag) { 420 void readProcedure(Procedure node, int tag) {
416 assert(tag == Tag.Procedure); 421 assert(tag == Tag.Procedure);
422 node.fileOffset = readOffset();
423 node.fileEndOffset = readOffset();
417 int kindIndex = readByte(); 424 int kindIndex = readByte();
418 node.kind = ProcedureKind.values[kindIndex]; 425 node.kind = ProcedureKind.values[kindIndex];
419 node.flags = readByte(); 426 node.flags = readByte();
420 node.name = readName(); 427 node.name = readName();
421 node.fileUri = readUriReference(); 428 node.fileUri = readUriReference();
422 node.annotations = readAnnotationList(node); 429 node.annotations = readAnnotationList(node);
423 debugPath.add(node.name?.name ?? 'procedure'); 430 debugPath.add(node.name?.name ?? 'procedure');
424 node.function = readFunctionNodeOption(); 431 node.function = readFunctionNodeOption();
425 node.function?.parent = node; 432 node.function?.parent = node;
426 node.transformerFlags = getAndResetTransformerFlags(); 433 node.transformerFlags = getAndResetTransformerFlags();
(...skipping 17 matching lines...) Expand all
444 default: 451 default:
445 throw fail('Invalid initializer tag: $tag'); 452 throw fail('Invalid initializer tag: $tag');
446 } 453 }
447 } 454 }
448 455
449 FunctionNode readFunctionNodeOption() { 456 FunctionNode readFunctionNodeOption() {
450 return readAndCheckOptionTag() ? readFunctionNode() : null; 457 return readAndCheckOptionTag() ? readFunctionNode() : null;
451 } 458 }
452 459
453 FunctionNode readFunctionNode() { 460 FunctionNode readFunctionNode() {
461 int offset = readOffset();
462 int endOffset = readOffset();
454 AsyncMarker asyncMarker = AsyncMarker.values[readByte()]; 463 AsyncMarker asyncMarker = AsyncMarker.values[readByte()];
464 bool debuggable = readByte() == 1 ? true : false;
455 int typeParameterStackHeight = typeParameterStack.length; 465 int typeParameterStackHeight = typeParameterStack.length;
456 var typeParameters = readAndPushTypeParameterList(); 466 var typeParameters = readAndPushTypeParameterList();
457 var requiredParameterCount = readUInt(); 467 var requiredParameterCount = readUInt();
458 int variableStackHeight = variableStack.length; 468 int variableStackHeight = variableStack.length;
459 var positional = readAndPushVariableDeclarationList(); 469 var positional = readAndPushVariableDeclarationList();
460 var named = readAndPushVariableDeclarationList(); 470 var named = readAndPushVariableDeclarationList();
461 var returnType = readDartType(); 471 var returnType = readDartType();
462 var inferredReturnValue = readOptionalInferredValue(); 472 var inferredReturnValue = readOptionalInferredValue();
463 int oldLabelStackBase = labelStackBase; 473 int oldLabelStackBase = labelStackBase;
464 labelStackBase = labelStack.length; 474 labelStackBase = labelStack.length;
465 var body = readStatementOption(); 475 var body = readStatementOption();
466 labelStackBase = oldLabelStackBase; 476 labelStackBase = oldLabelStackBase;
467 variableStack.length = variableStackHeight; 477 variableStack.length = variableStackHeight;
468 typeParameterStack.length = typeParameterStackHeight; 478 typeParameterStack.length = typeParameterStackHeight;
469 return new FunctionNode(body, 479 return new FunctionNode(body,
470 typeParameters: typeParameters, 480 typeParameters: typeParameters,
471 requiredParameterCount: requiredParameterCount, 481 requiredParameterCount: requiredParameterCount,
472 positionalParameters: positional, 482 positionalParameters: positional,
473 namedParameters: named, 483 namedParameters: named,
474 returnType: returnType, 484 returnType: returnType,
475 inferredReturnValue: inferredReturnValue, 485 inferredReturnValue: inferredReturnValue,
476 asyncMarker: asyncMarker); 486 asyncMarker: asyncMarker)
487 ..fileOffset = offset
488 ..fileEndOffset = endOffset
489 ..debuggable = debuggable;
477 } 490 }
478 491
479 void pushVariableDeclaration(VariableDeclaration variable) { 492 void pushVariableDeclaration(VariableDeclaration variable) {
480 variableStack.add(variable); 493 variableStack.add(variable);
481 } 494 }
482 495
483 void pushVariableDeclarations(List<VariableDeclaration> variables) { 496 void pushVariableDeclarations(List<VariableDeclaration> variables) {
484 variableStack.addAll(variables); 497 variableStack.addAll(variables);
485 } 498 }
486 499
(...skipping 26 matching lines...) Expand all
513 526
514 Expression readExpression() { 527 Expression readExpression() {
515 int tagByte = readByte(); 528 int tagByte = readByte();
516 int tag = tagByte & Tag.SpecializedTagHighBit == 0 529 int tag = tagByte & Tag.SpecializedTagHighBit == 0
517 ? tagByte 530 ? tagByte
518 : (tagByte & Tag.SpecializedTagMask); 531 : (tagByte & Tag.SpecializedTagMask);
519 switch (tag) { 532 switch (tag) {
520 case Tag.InvalidExpression: 533 case Tag.InvalidExpression:
521 return new InvalidExpression(); 534 return new InvalidExpression();
522 case Tag.VariableGet: 535 case Tag.VariableGet:
523 return new VariableGet(readVariableReference(), readDartTypeOption()); 536 int offset = readOffset();
537 return new VariableGet(readVariableReference(), readDartTypeOption())
538 ..fileOffset = offset;
524 case Tag.SpecializedVariableGet: 539 case Tag.SpecializedVariableGet:
525 int index = tagByte & Tag.SpecializedPayloadMask; 540 int index = tagByte & Tag.SpecializedPayloadMask;
526 return new VariableGet(variableStack[index]); 541 int offset = readOffset();
542 return new VariableGet(variableStack[index])..fileOffset = offset;
527 case Tag.VariableSet: 543 case Tag.VariableSet:
528 return new VariableSet(readVariableReference(), readExpression()); 544 int offset = readOffset();
545 return new VariableSet(readVariableReference(), readExpression())
546 ..fileOffset = offset;
529 case Tag.SpecializedVariableSet: 547 case Tag.SpecializedVariableSet:
530 int index = tagByte & Tag.SpecializedPayloadMask; 548 int index = tagByte & Tag.SpecializedPayloadMask;
531 return new VariableSet(variableStack[index], readExpression()); 549 int offset = readOffset();
550 return new VariableSet(variableStack[index], readExpression())
551 ..fileOffset = offset;
532 case Tag.PropertyGet: 552 case Tag.PropertyGet:
533 int offset = readOffset(); 553 int offset = readOffset();
534 return new PropertyGet( 554 return new PropertyGet(
535 readExpression(), readName(), readMemberReference(allowNull: true)) 555 readExpression(), readName(), readMemberReference(allowNull: true))
536 ..fileOffset = offset; 556 ..fileOffset = offset;
537 case Tag.PropertySet: 557 case Tag.PropertySet:
538 int offset = readOffset(); 558 int offset = readOffset();
539 return new PropertySet(readExpression(), readName(), readExpression(), 559 return new PropertySet(readExpression(), readName(), readExpression(),
540 readMemberReference(allowNull: true))..fileOffset = offset; 560 readMemberReference(allowNull: true))..fileOffset = offset;
541 case Tag.SuperPropertyGet: 561 case Tag.SuperPropertyGet:
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
590 isConst: true)..fileOffset = offset; 610 isConst: true)..fileOffset = offset;
591 case Tag.Not: 611 case Tag.Not:
592 return new Not(readExpression()); 612 return new Not(readExpression());
593 case Tag.LogicalExpression: 613 case Tag.LogicalExpression:
594 return new LogicalExpression(readExpression(), 614 return new LogicalExpression(readExpression(),
595 logicalOperatorToString(readByte()), readExpression()); 615 logicalOperatorToString(readByte()), readExpression());
596 case Tag.ConditionalExpression: 616 case Tag.ConditionalExpression:
597 return new ConditionalExpression(readExpression(), readExpression(), 617 return new ConditionalExpression(readExpression(), readExpression(),
598 readExpression(), readDartTypeOption()); 618 readExpression(), readDartTypeOption());
599 case Tag.StringConcatenation: 619 case Tag.StringConcatenation:
600 return new StringConcatenation(readExpressionList()); 620 int offset = readOffset();
621 return new StringConcatenation(readExpressionList())
622 ..fileOffset = offset;
601 case Tag.IsExpression: 623 case Tag.IsExpression:
602 return new IsExpression(readExpression(), readDartType()); 624 int offset = readOffset();
625 return new IsExpression(readExpression(), readDartType())
626 ..fileOffset = offset;
603 case Tag.AsExpression: 627 case Tag.AsExpression:
604 return new AsExpression(readExpression(), readDartType()); 628 return new AsExpression(readExpression(), readDartType());
605 case Tag.StringLiteral: 629 case Tag.StringLiteral:
606 return new StringLiteral(readStringReference()); 630 return new StringLiteral(readStringReference());
607 case Tag.SpecializedIntLiteral: 631 case Tag.SpecializedIntLiteral:
608 int biasedValue = tagByte & Tag.SpecializedPayloadMask; 632 int biasedValue = tagByte & Tag.SpecializedPayloadMask;
609 return new IntLiteral(biasedValue - Tag.SpecializedIntLiteralBias); 633 return new IntLiteral(biasedValue - Tag.SpecializedIntLiteralBias);
610 case Tag.PositiveIntLiteral: 634 case Tag.PositiveIntLiteral:
611 return new IntLiteral(readUInt()); 635 return new IntLiteral(readUInt());
612 case Tag.NegativeIntLiteral: 636 case Tag.NegativeIntLiteral:
(...skipping 21 matching lines...) Expand all
634 return new Throw(readExpression())..fileOffset = offset; 658 return new Throw(readExpression())..fileOffset = offset;
635 case Tag.ListLiteral: 659 case Tag.ListLiteral:
636 var typeArgument = readDartType(); 660 var typeArgument = readDartType();
637 return new ListLiteral(readExpressionList(), 661 return new ListLiteral(readExpressionList(),
638 typeArgument: typeArgument, isConst: false); 662 typeArgument: typeArgument, isConst: false);
639 case Tag.ConstListLiteral: 663 case Tag.ConstListLiteral:
640 var typeArgument = readDartType(); 664 var typeArgument = readDartType();
641 return new ListLiteral(readExpressionList(), 665 return new ListLiteral(readExpressionList(),
642 typeArgument: typeArgument, isConst: true); 666 typeArgument: typeArgument, isConst: true);
643 case Tag.MapLiteral: 667 case Tag.MapLiteral:
668 int offset = readOffset();
644 var keyType = readDartType(); 669 var keyType = readDartType();
645 var valueType = readDartType(); 670 var valueType = readDartType();
646 return new MapLiteral(readMapEntryList(), 671 return new MapLiteral(readMapEntryList(),
647 keyType: keyType, valueType: valueType, isConst: false); 672 keyType: keyType,
673 valueType: valueType,
674 isConst: false)..fileOffset = offset;
648 case Tag.ConstMapLiteral: 675 case Tag.ConstMapLiteral:
676 int offset = readOffset();
649 var keyType = readDartType(); 677 var keyType = readDartType();
650 var valueType = readDartType(); 678 var valueType = readDartType();
651 return new MapLiteral(readMapEntryList(), 679 return new MapLiteral(readMapEntryList(),
652 keyType: keyType, valueType: valueType, isConst: true); 680 keyType: keyType,
681 valueType: valueType,
682 isConst: true)..fileOffset = offset;
653 case Tag.AwaitExpression: 683 case Tag.AwaitExpression:
654 return new AwaitExpression(readExpression()); 684 return new AwaitExpression(readExpression());
655 case Tag.FunctionExpression: 685 case Tag.FunctionExpression:
656 return new FunctionExpression(readFunctionNode()); 686 return new FunctionExpression(readFunctionNode());
657 case Tag.Let: 687 case Tag.Let:
658 var variable = readVariableDeclaration(); 688 var variable = readVariableDeclaration();
659 int stackHeight = variableStack.length; 689 int stackHeight = variableStack.length;
660 pushVariableDeclaration(variable); 690 pushVariableDeclaration(variable);
661 var body = readExpression(); 691 var body = readExpression();
662 variableStack.length = stackHeight; 692 variableStack.length = stackHeight;
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
748 } 778 }
749 switchCaseStack.length -= count; 779 switchCaseStack.length -= count;
750 return new SwitchStatement(expression, cases); 780 return new SwitchStatement(expression, cases);
751 case Tag.ContinueSwitchStatement: 781 case Tag.ContinueSwitchStatement:
752 int index = readUInt(); 782 int index = readUInt();
753 return new ContinueSwitchStatement(switchCaseStack[index]); 783 return new ContinueSwitchStatement(switchCaseStack[index]);
754 case Tag.IfStatement: 784 case Tag.IfStatement:
755 return new IfStatement( 785 return new IfStatement(
756 readExpression(), readStatement(), readStatementOrNullIfEmpty()); 786 readExpression(), readStatement(), readStatementOrNullIfEmpty());
757 case Tag.ReturnStatement: 787 case Tag.ReturnStatement:
758 return new ReturnStatement(readExpressionOption()); 788 int offset = readOffset();
789 return new ReturnStatement(readExpressionOption())..fileOffset = offset;
759 case Tag.TryCatch: 790 case Tag.TryCatch:
760 return new TryCatch(readStatement(), readCatchList()); 791 return new TryCatch(readStatement(), readCatchList());
761 case Tag.TryFinally: 792 case Tag.TryFinally:
762 return new TryFinally(readStatement(), readStatement()); 793 return new TryFinally(readStatement(), readStatement());
763 case Tag.YieldStatement: 794 case Tag.YieldStatement:
795 int offset = readOffset();
764 int flags = readByte(); 796 int flags = readByte();
765 return new YieldStatement(readExpression(), 797 return new YieldStatement(readExpression(),
766 isYieldStar: flags & YieldStatement.FlagYieldStar != 0, 798 isYieldStar: flags & YieldStatement.FlagYieldStar != 0,
767 isNative: flags & YieldStatement.FlagNative != 0); 799 isNative: flags & YieldStatement.FlagNative != 0)
800 ..fileOffset = offset;
768 case Tag.VariableDeclaration: 801 case Tag.VariableDeclaration:
769 var variable = readVariableDeclaration(); 802 var variable = readVariableDeclaration();
770 variableStack.add(variable); // Will be popped by the enclosing scope. 803 variableStack.add(variable); // Will be popped by the enclosing scope.
771 return variable; 804 return variable;
772 case Tag.FunctionDeclaration: 805 case Tag.FunctionDeclaration:
806 int offset = readOffset();
773 var variable = readVariableDeclaration(); 807 var variable = readVariableDeclaration();
774 variableStack.add(variable); // Will be popped by the enclosing scope. 808 variableStack.add(variable); // Will be popped by the enclosing scope.
775 var function = readFunctionNode(); 809 var function = readFunctionNode();
776 return new FunctionDeclaration(variable, function); 810 return new FunctionDeclaration(variable, function)..fileOffset = offset;
777 default: 811 default:
778 throw fail('Invalid statement tag: $tag'); 812 throw fail('Invalid statement tag: $tag');
779 } 813 }
780 } 814 }
781 815
782 List<Catch> readCatchList() { 816 List<Catch> readCatchList() {
783 return new List<Catch>.generate(readUInt(), (i) => readCatch()); 817 return new List<Catch>.generate(readUInt(), (i) => readCatch());
784 } 818 }
785 819
786 Catch readCatch() { 820 Catch readCatch() {
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
918 return readAndCheckOptionTag() ? readAndPushVariableDeclaration() : null; 952 return readAndCheckOptionTag() ? readAndPushVariableDeclaration() : null;
919 } 953 }
920 954
921 VariableDeclaration readAndPushVariableDeclaration() { 955 VariableDeclaration readAndPushVariableDeclaration() {
922 var variable = readVariableDeclaration(); 956 var variable = readVariableDeclaration();
923 variableStack.add(variable); 957 variableStack.add(variable);
924 return variable; 958 return variable;
925 } 959 }
926 960
927 VariableDeclaration readVariableDeclaration() { 961 VariableDeclaration readVariableDeclaration() {
962 int offset = readOffset();
928 int flags = readByte(); 963 int flags = readByte();
929 return new VariableDeclaration(readStringOrNullIfEmpty(), 964 return new VariableDeclaration(readStringOrNullIfEmpty(),
930 type: readDartType(), 965 type: readDartType(),
931 inferredValue: readOptionalInferredValue(), 966 inferredValue: readOptionalInferredValue(),
932 initializer: readExpressionOption(), 967 initializer: readExpressionOption(),
933 isFinal: flags & 0x1 != 0, 968 isFinal: flags & 0x1 != 0,
934 isConst: flags & 0x2 != 0); 969 isConst: flags & 0x2 != 0)..fileOffset = offset;
935 } 970 }
936 971
937 int readOffset() { 972 int readOffset() {
938 // Offset is saved as unsigned, 973 // Offset is saved as unsigned,
939 // but actually ranges from -1 and up (thus the -1) 974 // but actually ranges from -1 and up (thus the -1)
940 return readUInt() - 1; 975 return readUInt() - 1;
941 } 976 }
942 } 977 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698