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

Side by Side Diff: pkg/analyzer/lib/src/summary/flat_buffers.dart

Issue 1998833002: Use BufferContext + offset instead of BufferPointer. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 7 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 | « no previous file | pkg/analyzer/lib/src/summary/format.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 4
5 library analyzer.src.summary.flat_buffers; 5 library analyzer.src.summary.flat_buffers;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 import 'dart:convert'; 8 import 'dart:convert';
9 import 'dart:math'; 9 import 'dart:math';
10 import 'dart:typed_data'; 10 import 'dart:typed_data';
11 11
12 /** 12 /**
13 * Reader of lists of boolean values. 13 * Reader of lists of boolean values.
14 * 14 *
15 * The returned unmodifiable lists lazily read values on access. 15 * The returned unmodifiable lists lazily read values on access.
16 */ 16 */
17 class BoolListReader extends Reader<List<bool>> { 17 class BoolListReader extends Reader<List<bool>> {
18 const BoolListReader(); 18 const BoolListReader();
19 19
20 @override 20 @override
21 int get size => 4; 21 int get size => 4;
22 22
23 @override 23 @override
24 List<bool> read(BufferPointer bp) => new _FbBoolList(bp.derefObject()); 24 List<bool> read(BufferContext bc, int offset) =>
25 new _FbBoolList(bc, bc.derefObject(offset));
25 } 26 }
26 27
27 /** 28 /**
28 * The reader of booleans. 29 * The reader of booleans.
29 */ 30 */
30 class BoolReader extends Reader<bool> { 31 class BoolReader extends Reader<bool> {
31 const BoolReader() : super(); 32 const BoolReader() : super();
32 33
33 @override 34 @override
34 int get size => 1; 35 int get size => 1;
35 36
36 @override 37 @override
37 bool read(BufferPointer bp) => bp._getInt8() != 0; 38 bool read(BufferContext bc, int offset) => bc._getInt8(offset) != 0;
38 } 39 }
39 40
40 /** 41 /**
41 * A pointer to some data. 42 * Buffer with data and some context about it.
42 */ 43 */
43 class BufferPointer { 44 class BufferContext {
44 final ByteData _buffer; 45 final ByteData _buffer;
45 final int _offset; 46 final int _offset;
46 47
47 factory BufferPointer.fromBytes(List<int> byteList, [int offset = 0]) { 48 factory BufferContext.fromBytes(List<int> byteList) {
48 Uint8List uint8List = _asUint8List(byteList); 49 Uint8List uint8List = _asUint8List(byteList);
49 ByteData buf = new ByteData.view(uint8List.buffer); 50 ByteData buf = new ByteData.view(uint8List.buffer);
Paul Berry 2016/05/19 22:12:32 I think if we do: ByteData buf = new ByteData.vie
scheglov 2016/05/20 03:08:52 Done.
50 return new BufferPointer._(buf, uint8List.offsetInBytes + offset); 51 return new BufferContext._(buf, uint8List.offsetInBytes);
51 } 52 }
52 53
53 BufferPointer._(this._buffer, this._offset); 54 BufferContext._(this._buffer, this._offset);
54 55
55 BufferPointer derefObject() { 56 int derefObject(int offset) {
56 int uOffset = _getUint32(); 57 return offset + _getUint32(offset);
Paul Berry 2016/05/19 22:12:32 I think this should be: return offset + _getUint3
scheglov 2016/05/20 03:08:52 _getUint32() already applies _offset.
57 return _advance(uOffset);
58 } 58 }
59 59
60 @override 60 Uint8List _asUint8LIst(int offset, int length) =>
61 String toString() => _offset.toString(); 61 _buffer.buffer.asUint8List(_offset + offset, length);
62 62
63 BufferPointer _advance(int delta) { 63 double _getFloat64(int offset) =>
64 return new BufferPointer._(_buffer, _offset + delta); 64 _buffer.getFloat64(_offset + offset, Endianness.LITTLE_ENDIAN);
65 }
66 65
67 double _getFloat64([int delta = 0]) => 66 int _getInt32(int offset) =>
68 _buffer.getFloat64(_offset + delta, Endianness.LITTLE_ENDIAN); 67 _buffer.getInt32(_offset + offset, Endianness.LITTLE_ENDIAN);
69 68
70 int _getInt32([int delta = 0]) => 69 int _getInt8(int offset) => _buffer.getInt8(_offset + offset);
71 _buffer.getInt32(_offset + delta, Endianness.LITTLE_ENDIAN);
72 70
73 int _getInt8([int delta = 0]) => _buffer.getInt8(_offset + delta); 71 int _getUint16(int offset) =>
72 _buffer.getUint16(_offset + offset, Endianness.LITTLE_ENDIAN);
74 73
75 int _getUint16([int delta = 0]) => 74 int _getUint32(int offset) =>
76 _buffer.getUint16(_offset + delta, Endianness.LITTLE_ENDIAN); 75 _buffer.getUint32(_offset + offset, Endianness.LITTLE_ENDIAN);
77 76
78 int _getUint32([int delta = 0]) => 77 int _getUint8(int offset) => _buffer.getUint8(_offset + offset);
79 _buffer.getUint32(_offset + delta, Endianness.LITTLE_ENDIAN);
80
81 int _getUint8([int delta = 0]) => _buffer.getUint8(_offset + delta);
82 78
83 /** 79 /**
84 * If the [byteList] is already a [Uint8List] return it. 80 * If the [byteList] is already a [Uint8List] return it.
85 * Otherwise return a [Uint8List] copy of the [byteList]. 81 * Otherwise return a [Uint8List] copy of the [byteList].
86 */ 82 */
87 static Uint8List _asUint8List(List<int> byteList) { 83 static Uint8List _asUint8List(List<int> byteList) {
88 if (byteList is Uint8List) { 84 if (byteList is Uint8List) {
89 return byteList; 85 return byteList;
90 } else { 86 } else {
91 return new Uint8List.fromList(byteList); 87 return new Uint8List.fromList(byteList);
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 * 552 *
557 * The returned unmodifiable lists lazily read values on access. 553 * The returned unmodifiable lists lazily read values on access.
558 */ 554 */
559 class Float64ListReader extends Reader<List<double>> { 555 class Float64ListReader extends Reader<List<double>> {
560 const Float64ListReader(); 556 const Float64ListReader();
561 557
562 @override 558 @override
563 int get size => 4; 559 int get size => 4;
564 560
565 @override 561 @override
566 List<double> read(BufferPointer bp) => new _FbFloat64List(bp.derefObject()); 562 List<double> read(BufferContext bc, int offset) =>
563 new _FbFloat64List(bc, bc.derefObject(offset));
567 } 564 }
568 565
569 /** 566 /**
570 * The reader of signed 32-bit integers. 567 * The reader of signed 32-bit integers.
571 */ 568 */
572 class Int32Reader extends Reader<int> { 569 class Int32Reader extends Reader<int> {
573 const Int32Reader() : super(); 570 const Int32Reader() : super();
574 571
575 @override 572 @override
576 int get size => 4; 573 int get size => 4;
577 574
578 @override 575 @override
579 int read(BufferPointer bp) => bp._getInt32(); 576 int read(BufferContext bc, int offset) => bc._getInt32(offset);
580 } 577 }
581 578
582 /** 579 /**
583 * The reader of 8-bit signed integers. 580 * The reader of 8-bit signed integers.
584 */ 581 */
585 class Int8Reader extends Reader<int> { 582 class Int8Reader extends Reader<int> {
586 const Int8Reader() : super(); 583 const Int8Reader() : super();
587 584
588 @override 585 @override
589 int get size => 1; 586 int get size => 1;
590 587
591 @override 588 @override
592 int read(BufferPointer bp) => bp._getInt8(); 589 int read(BufferContext bc, int offset) => bc._getInt8(offset);
593 } 590 }
594 591
595 /** 592 /**
596 * The reader of lists of objects. 593 * The reader of lists of objects.
597 * 594 *
598 * The returned unmodifiable lists lazily read objects on access. 595 * The returned unmodifiable lists lazily read objects on access.
599 */ 596 */
600 class ListReader<E> extends Reader<List<E>> { 597 class ListReader<E> extends Reader<List<E>> {
601 final Reader<E> _elementReader; 598 final Reader<E> _elementReader;
602 599
603 const ListReader(this._elementReader); 600 const ListReader(this._elementReader);
604 601
605 @override 602 @override
606 int get size => 4; 603 int get size => 4;
607 604
608 @override 605 @override
609 List<E> read(BufferPointer bp) => 606 List<E> read(BufferContext bc, int offset) =>
610 new _FbGenericList<E>(_elementReader, bp.derefObject()); 607 new _FbGenericList<E>(_elementReader, bc, bc.derefObject(offset));
611 } 608 }
612 609
613 /** 610 /**
614 * The offset from the end of the buffer to a serialized object of the type [T]. 611 * The offset from the end of the buffer to a serialized object of the type [T].
615 */ 612 */
616 class Offset<T> { 613 class Offset<T> {
617 final int _tail; 614 final int _tail;
618 615
619 Offset(this._tail); 616 Offset(this._tail);
620 } 617 }
621 618
622 /** 619 /**
623 * Object that can read a value at a [BufferPointer]. 620 * Object that can read a value at a [BufferContext].
624 */ 621 */
625 abstract class Reader<T> { 622 abstract class Reader<T> {
626 const Reader(); 623 const Reader();
627 624
628 /** 625 /**
629 * The size of the value in bytes. 626 * The size of the value in bytes.
630 */ 627 */
631 int get size; 628 int get size;
632 629
633 /** 630 /**
634 * Read the value at the given pointer. 631 * Read the value at the given [offset] in [bc].
635 */ 632 */
636 T read(BufferPointer bp); 633 T read(BufferContext bc, int offset);
637 634
638 /** 635 /**
639 * Read the value of the given [field] in the given [object]. 636 * Read the value of the given [field] in the given [object].
640 */ 637 */
641 T vTableGet(BufferPointer object, int field, [T defaultValue]) { 638 T vTableGet(BufferContext object, int offset, int field, [T defaultValue]) {
642 int vTableSOffset = object._getInt32(); 639 int vTableSOffset = object._getInt32(offset);
643 BufferPointer vTable = object._advance(-vTableSOffset); 640 int vTableOffset = offset - vTableSOffset;
644 int vTableSize = vTable._getUint16(); 641 int vTableSize = object._getUint16(vTableOffset);
645 int vTableFieldOffset = (1 + 1 + field) * 2; 642 int vTableFieldOffset = (1 + 1 + field) * 2;
646 if (vTableFieldOffset < vTableSize) { 643 if (vTableFieldOffset < vTableSize) {
647 int fieldOffsetInObject = vTable._getUint16(vTableFieldOffset); 644 int fieldOffsetInObject =
645 object._getUint16(vTableOffset + vTableFieldOffset);
648 if (fieldOffsetInObject != 0) { 646 if (fieldOffsetInObject != 0) {
649 BufferPointer fieldPointer = object._advance(fieldOffsetInObject); 647 return read(object, offset + fieldOffsetInObject);
650 return read(fieldPointer);
651 } 648 }
652 } 649 }
653 return defaultValue; 650 return defaultValue;
654 } 651 }
655 } 652 }
656 653
657 /** 654 /**
658 * The reader of string values. 655 * The reader of string values.
659 */ 656 */
660 class StringReader extends Reader<String> { 657 class StringReader extends Reader<String> {
661 const StringReader() : super(); 658 const StringReader() : super();
662 659
663 @override 660 @override
664 int get size => 4; 661 int get size => 4;
665 662
666 @override 663 @override
667 String read(BufferPointer ref) { 664 String read(BufferContext bc, int offset) {
668 BufferPointer object = ref.derefObject(); 665 int strOffset = bc.derefObject(offset);
669 int length = object._getUint32(); 666 int length = bc._getUint32(strOffset);
670 Uint8List bytes = ref._buffer.buffer.asUint8List(object._offset + 4, length) ; 667 Uint8List bytes = bc._asUint8LIst(strOffset + 4, length);
671 if (_isLatin(bytes)) { 668 if (_isLatin(bytes)) {
672 return new String.fromCharCodes(bytes); 669 return new String.fromCharCodes(bytes);
673 } 670 }
674 return UTF8.decode(bytes); 671 return UTF8.decode(bytes);
675 } 672 }
676 673
677 static bool _isLatin(Uint8List bytes) { 674 static bool _isLatin(Uint8List bytes) {
678 int length = bytes.length; 675 int length = bytes.length;
679 for (int i = 0; i < length; i++) { 676 for (int i = 0; i < length; i++) {
680 if (bytes[i] > 127) { 677 if (bytes[i] > 127) {
681 return false; 678 return false;
682 } 679 }
683 } 680 }
684 return true; 681 return true;
685 } 682 }
686 } 683 }
687 684
688 /** 685 /**
689 * An abstract reader for tables. 686 * An abstract reader for tables.
690 */ 687 */
691 abstract class TableReader<T> extends Reader<T> { 688 abstract class TableReader<T> extends Reader<T> {
692 const TableReader(); 689 const TableReader();
693 690
694 @override 691 @override
695 int get size => 4; 692 int get size => 4;
696 693
697 /** 694 /**
698 * Return the object at [bp]. 695 * Return the object at [offset].
699 */ 696 */
700 T createObject(BufferPointer bp); 697 T createObject(BufferContext bc, int offset);
701 698
702 @override 699 @override
703 T read(BufferPointer bp) { 700 T read(BufferContext bp, int offset) {
704 bp = bp.derefObject(); 701 int objectOffset = bp.derefObject(offset);
705 return createObject(bp); 702 return createObject(bp, objectOffset);
706 } 703 }
707 } 704 }
708 705
709 /** 706 /**
710 * Reader of lists of unsigned 32-bit integer values. 707 * Reader of lists of unsigned 32-bit integer values.
711 * 708 *
712 * The returned unmodifiable lists lazily read values on access. 709 * The returned unmodifiable lists lazily read values on access.
713 */ 710 */
714 class Uint32ListReader extends Reader<List<int>> { 711 class Uint32ListReader extends Reader<List<int>> {
715 const Uint32ListReader(); 712 const Uint32ListReader();
716 713
717 @override 714 @override
718 int get size => 4; 715 int get size => 4;
719 716
720 @override 717 @override
721 List<int> read(BufferPointer bp) => new _FbUint32List(bp.derefObject()); 718 List<int> read(BufferContext bc, int offset) =>
719 new _FbUint32List(bc, bc.derefObject(offset));
722 } 720 }
723 721
724 /** 722 /**
725 * The reader of unsigned 32-bit integers. 723 * The reader of unsigned 32-bit integers.
726 */ 724 */
727 class Uint32Reader extends Reader<int> { 725 class Uint32Reader extends Reader<int> {
728 const Uint32Reader() : super(); 726 const Uint32Reader() : super();
729 727
730 @override 728 @override
731 int get size => 4; 729 int get size => 4;
732 730
733 @override 731 @override
734 int read(BufferPointer bp) => bp._getUint32(); 732 int read(BufferContext bc, int offset) => bc._getUint32(offset);
735 } 733 }
736 734
737 /** 735 /**
738 * Reader of lists of unsigned 8-bit integer values. 736 * Reader of lists of unsigned 8-bit integer values.
739 * 737 *
740 * The returned unmodifiable lists lazily read values on access. 738 * The returned unmodifiable lists lazily read values on access.
741 */ 739 */
742 class Uint8ListReader extends Reader<List<int>> { 740 class Uint8ListReader extends Reader<List<int>> {
743 const Uint8ListReader(); 741 const Uint8ListReader();
744 742
745 @override 743 @override
746 int get size => 4; 744 int get size => 4;
747 745
748 @override 746 @override
749 List<int> read(BufferPointer bp) => new _FbUint8List(bp.derefObject()); 747 List<int> read(BufferContext bc, int offset) =>
748 new _FbUint8List(bc, bc.derefObject(offset));
750 } 749 }
751 750
752 /** 751 /**
753 * The reader of unsigned 8-bit integers. 752 * The reader of unsigned 8-bit integers.
754 */ 753 */
755 class Uint8Reader extends Reader<int> { 754 class Uint8Reader extends Reader<int> {
756 const Uint8Reader() : super(); 755 const Uint8Reader() : super();
757 756
758 @override 757 @override
759 int get size => 1; 758 int get size => 1;
760 759
761 @override 760 @override
762 int read(BufferPointer bp) => bp._getUint8(); 761 int read(BufferContext bc, int offset) => bc._getUint8(offset);
763 } 762 }
764 763
765 /** 764 /**
766 * List of booleans backed by 8-bit unsigned integers. 765 * List of booleans backed by 8-bit unsigned integers.
767 */ 766 */
768 class _FbBoolList extends Object with ListMixin<bool> implements List<bool> { 767 class _FbBoolList extends Object with ListMixin<bool> implements List<bool> {
769 final BufferPointer bp; 768 final BufferContext bc;
769 final int offset;
770 int _length; 770 int _length;
771 771
772 _FbBoolList(this.bp); 772 _FbBoolList(this.bc, this.offset);
773 773
774 @override 774 @override
775 int get length { 775 int get length {
776 if (_length == null) { 776 if (_length == null) {
777 int byteLength = bp._getUint32(); 777 int byteLength = bc._getUint32(offset);
778 _length = (byteLength - 1) * 8 - _getByte(byteLength - 1); 778 _length = (byteLength - 1) * 8 - _getByte(byteLength - 1);
779 } 779 }
780 return _length; 780 return _length;
781 } 781 }
782 782
783 @override 783 @override
784 void set length(int i) => 784 void set length(int i) =>
785 throw new StateError('Attempt to modify immutable list'); 785 throw new StateError('Attempt to modify immutable list');
786 786
787 @override 787 @override
788 bool operator [](int i) { 788 bool operator [](int i) {
789 int index = i ~/ 8; 789 int index = i ~/ 8;
790 int mask = 1 << i % 8; 790 int mask = 1 << i % 8;
791 return _getByte(index) & mask != 0; 791 return _getByte(index) & mask != 0;
792 } 792 }
793 793
794 @override 794 @override
795 void operator []=(int i, bool e) => 795 void operator []=(int i, bool e) =>
796 throw new StateError('Attempt to modify immutable list'); 796 throw new StateError('Attempt to modify immutable list');
797 797
798 int _getByte(int index) => bp._getUint8(4 + index); 798 int _getByte(int index) => bc._getUint8(offset + 4 + index);
799 } 799 }
800 800
801 /** 801 /**
802 * The list backed by 64-bit values - Uint64 length and Float64. 802 * The list backed by 64-bit values - Uint64 length and Float64.
803 */ 803 */
804 class _FbFloat64List extends _FbList<double> { 804 class _FbFloat64List extends _FbList<double> {
805 _FbFloat64List(BufferPointer bp) : super(bp); 805 _FbFloat64List(BufferContext bc, int offset) : super(bc, offset);
806 806
807 @override 807 @override
808 double operator [](int i) { 808 double operator [](int i) {
809 return bp._getFloat64(8 + 8 * i); 809 return bc._getFloat64(offset + 8 + 8 * i);
810 } 810 }
811 } 811 }
812 812
813 /** 813 /**
814 * List backed by a generic object which may have any size. 814 * List backed by a generic object which may have any size.
815 */ 815 */
816 class _FbGenericList<E> extends _FbList<E> { 816 class _FbGenericList<E> extends _FbList<E> {
817 final Reader<E> elementReader; 817 final Reader<E> elementReader;
818 818
819 List<E> _items; 819 List<E> _items;
820 820
821 _FbGenericList(this.elementReader, BufferPointer bp) : super(bp); 821 _FbGenericList(this.elementReader, BufferContext bp, int offset)
822 : super(bp, offset);
822 823
823 @override 824 @override
824 E operator [](int i) { 825 E operator [](int i) {
825 _items ??= new List<E>(length); 826 _items ??= new List<E>(length);
826 E item = _items[i]; 827 E item = _items[i];
827 if (item == null) { 828 if (item == null) {
828 BufferPointer ref = bp._advance(4 + elementReader.size * i); 829 item = elementReader.read(bc, offset + 4 + elementReader.size * i);
829 item = elementReader.read(ref);
830 _items[i] = item; 830 _items[i] = item;
831 } 831 }
832 return item; 832 return item;
833 } 833 }
834 } 834 }
835 835
836 /** 836 /**
837 * The base class for immutable lists read from flat buffers. 837 * The base class for immutable lists read from flat buffers.
838 */ 838 */
839 abstract class _FbList<E> extends Object with ListMixin<E> implements List<E> { 839 abstract class _FbList<E> extends Object with ListMixin<E> implements List<E> {
840 final BufferPointer bp; 840 final BufferContext bc;
841 final int offset;
841 int _length; 842 int _length;
842 843
843 _FbList(this.bp); 844 _FbList(this.bc, this.offset);
844 845
845 @override 846 @override
846 int get length { 847 int get length {
847 _length ??= bp._getUint32(); 848 // _length ??= bp._getUint32(offset);
Paul Berry 2016/05/19 22:12:32 Did you forget to delete this?
scheglov 2016/05/20 03:08:52 Don't remember already why made this change at all
849 _length = bc._getUint32(offset);
848 return _length; 850 return _length;
849 } 851 }
850 852
851 @override 853 @override
852 void set length(int i) => 854 void set length(int i) =>
853 throw new StateError('Attempt to modify immutable list'); 855 throw new StateError('Attempt to modify immutable list');
854 856
855 @override 857 @override
856 void operator []=(int i, E e) => 858 void operator []=(int i, E e) =>
857 throw new StateError('Attempt to modify immutable list'); 859 throw new StateError('Attempt to modify immutable list');
858 } 860 }
859 861
860 /** 862 /**
861 * List backed by 32-bit unsigned integers. 863 * List backed by 32-bit unsigned integers.
862 */ 864 */
863 class _FbUint32List extends _FbList<int> { 865 class _FbUint32List extends _FbList<int> {
864 _FbUint32List(BufferPointer bp) : super(bp); 866 _FbUint32List(BufferContext bc, int offset) : super(bc, offset);
865 867
866 @override 868 @override
867 int operator [](int i) { 869 int operator [](int i) {
868 return bp._getUint32(4 + 4 * i); 870 return bc._getUint32(offset + 4 + 4 * i);
869 } 871 }
870 } 872 }
871 873
872 /** 874 /**
873 * List backed by 8-bit unsigned integers. 875 * List backed by 8-bit unsigned integers.
874 */ 876 */
875 class _FbUint8List extends _FbList<int> { 877 class _FbUint8List extends _FbList<int> {
876 _FbUint8List(BufferPointer bp) : super(bp); 878 _FbUint8List(BufferContext bc, int offset) : super(bc, offset);
877 879
878 @override 880 @override
879 int operator [](int i) { 881 int operator [](int i) {
880 return bp._getUint8(4 + i); 882 return bc._getUint8(offset + 4 + i);
881 } 883 }
882 } 884 }
883 885
884 /** 886 /**
885 * Class that describes the structure of a table. 887 * Class that describes the structure of a table.
886 */ 888 */
887 class _VTable { 889 class _VTable {
888 final List<int> fieldTails = <int>[]; 890 final List<int> fieldTails = <int>[];
889 final List<int> fieldOffsets = <int>[]; 891 final List<int> fieldOffsets = <int>[];
890 892
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
948 // Table size. 950 // Table size.
949 buf.setUint16(bufOffset, tableSize, Endianness.LITTLE_ENDIAN); 951 buf.setUint16(bufOffset, tableSize, Endianness.LITTLE_ENDIAN);
950 bufOffset += 2; 952 bufOffset += 2;
951 // Field offsets. 953 // Field offsets.
952 for (int fieldOffset in fieldOffsets) { 954 for (int fieldOffset in fieldOffsets) {
953 buf.setUint16(bufOffset, fieldOffset, Endianness.LITTLE_ENDIAN); 955 buf.setUint16(bufOffset, fieldOffset, Endianness.LITTLE_ENDIAN);
954 bufOffset += 2; 956 bufOffset += 2;
955 } 957 }
956 } 958 }
957 } 959 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/summary/format.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698