Index: pkg/analyzer/lib/src/summary/flat_buffers.dart |
diff --git a/pkg/analyzer/lib/src/summary/flat_buffers.dart b/pkg/analyzer/lib/src/summary/flat_buffers.dart |
index ba2c2ef3419150f7fb162905e95b8c757cb4f7f0..0464127939e6d806f17a551f37f774db1d676f9e 100644 |
--- a/pkg/analyzer/lib/src/summary/flat_buffers.dart |
+++ b/pkg/analyzer/lib/src/summary/flat_buffers.dart |
@@ -736,16 +736,16 @@ class Uint8Reader extends Reader<int> { |
* List of booleans backed by 8-bit unsigned integers. |
*/ |
class _FbBoolList extends Object with ListMixin<bool> implements List<bool> { |
- final List<int> uint8List; |
+ final BufferPointer bp; |
int _length; |
- _FbBoolList(BufferPointer bp) |
- : uint8List = new _FbGenericList<int>(const Uint8Reader(), bp); |
+ _FbBoolList(this.bp); |
@override |
int get length { |
if (_length == null) { |
- _length = (uint8List.length - 1) * 8 - uint8List.last; |
+ int byteLength = bp._getUint32(); |
+ _length = (byteLength - 1) * 8 - _getByte(byteLength - 1); |
} |
return _length; |
} |
@@ -758,32 +758,25 @@ class _FbBoolList extends Object with ListMixin<bool> implements List<bool> { |
bool operator [](int i) { |
int index = i ~/ 8; |
int mask = 1 << i % 8; |
- return uint8List[index] & mask != 0; |
+ return _getByte(index) & mask != 0; |
} |
@override |
void operator []=(int i, bool e) => |
throw new StateError('Attempt to modify immutable list'); |
+ |
+ int _getByte(int index) => bp._getUint8(4 + index); |
} |
/** |
* The list backed by 64-bit values - Uint64 length and Float64. |
*/ |
class _FbFloat64List extends _FbList<double> { |
- List<double> _items; |
- |
_FbFloat64List(BufferPointer bp) : super(bp); |
@override |
double operator [](int i) { |
- _items ??= new List<double>(length); |
- double item = _items[i]; |
- if (item == null) { |
- BufferPointer ref = bp._advance(8 + 8 * i); |
- item = ref._getFloat64(); |
- _items[i] = item; |
- } |
- return item; |
+ return bp._getFloat64(8 + 8 * i); |
} |
} |
@@ -838,19 +831,11 @@ abstract class _FbList<E> extends Object with ListMixin<E> implements List<E> { |
* List backed by 32-bit unsigned integers. |
*/ |
class _FbUint32List extends _FbList<int> { |
- List<int> _items; |
- |
_FbUint32List(BufferPointer bp) : super(bp); |
@override |
int operator [](int i) { |
- _items ??= new List<int>(length); |
- int item = _items[i]; |
- if (item == null) { |
- item = bp._getUint32(4 + 4 * i); |
- _items[i] = item; |
- } |
- return item; |
+ return bp._getUint32(4 + 4 * i); |
} |
} |