Index: mojo/public/dart/mojo/lib/src/codec.dart |
diff --git a/mojo/public/dart/mojo/lib/src/codec.dart b/mojo/public/dart/mojo/lib/src/codec.dart |
index 020312b152b1590290221aebadd2ccf42d79364f..0332ef3a3a53e59fcc40f8c0ef510ee056ef997a 100644 |
--- a/mojo/public/dart/mojo/lib/src/codec.dart |
+++ b/mojo/public/dart/mojo/lib/src/codec.dart |
@@ -105,7 +105,8 @@ class Encoder { |
return result; |
} |
- Message get message => new Message(_buffer.trimmed, _buffer.handles); |
+ Message get message => new Message( |
+ _buffer.trimmed, _buffer.handles, _buffer.extent, _buffer.handles.length); |
void encodeStructDataHeader(StructDataHeader dataHeader) { |
_buffer.claimMemory(align(dataHeader.size)); |
@@ -561,8 +562,7 @@ class Decoder { |
Decoder(this._message, [this._base = 0, this._validator = null]) { |
if (_validator == null) { |
- _validator = new _Validator( |
- _message.buffer.lengthInBytes, _message.handles.length); |
+ _validator = new _Validator(_message.dataLength, _message.handlesLength); |
} |
} |
@@ -574,9 +574,13 @@ class Decoder { |
ByteData get _buffer => _message.buffer; |
List<core.MojoHandle> get _handles => _message.handles; |
- List<core.MojoHandle> get excessHandles => new List.from(_message.handles |
- .getRange(_validator._minNextClaimedHandle, _message.handles.length)) |
- ..addAll(_validator._skippedIndices.map((i) => _message.handles[i])); |
+ List<core.MojoHandle> get excessHandles { |
+ if (_message.handlesLength == 0) return null; |
+ var leftAtEnd = _message.handles |
+ .getRange(_validator._minNextClaimedHandle, _message.handlesLength); |
+ var skipped = _validator._skippedIndices.map((i) => _message.handles[i]); |
+ return new List.from(leftAtEnd)..addAll(skipped); |
+ } |
int decodeInt8(int offset) => _buffer.getInt8(_base + offset); |
int decodeUint8(int offset) => _buffer.getUint8(_base + offset); |
@@ -760,7 +764,7 @@ class Decoder { |
var header = d.decodeDataHeaderForArray(elementSize, expectedLength); |
return arrayViewer(d._buffer.buffer, |
d._buffer.offsetInBytes + d._base + ArrayDataHeader.kHeaderSize, |
- header.numElements); |
+ header.numElements).toList(); |
} |
List<int> decodeInt8Array(int offset, int nullability, int expectedLength) => |
@@ -860,16 +864,13 @@ class Decoder { |
(d, o, n) => d.decodeServiceInterface(o, n, clientFactory), offset, |
kSerializedInterfaceSize, nullability, expectedLength); |
- static String _stringOfUtf8(Uint8List bytes) => |
- (const Utf8Decoder()).convert(bytes.toList()); |
- |
String decodeString(int offset, bool nullable) { |
int nullability = nullable ? kArrayNullable : 0; |
var bytes = decodeUint8Array(offset, nullability, kUnspecifiedArrayLength); |
if (bytes == null) { |
return null; |
} |
- return _stringOfUtf8(bytes); |
+ return (const Utf8Decoder()).convert(bytes); |
} |
StructDataHeader decodeDataHeaderForMap() { |