Index: runtime/lib/byte_array.dart |
diff --git a/runtime/lib/byte_array.dart b/runtime/lib/byte_array.dart |
index b714087b76272b9f26083d0653cdca5f66649557..393b31159345d6b097b4852858247f92a8fb40d9 100644 |
--- a/runtime/lib/byte_array.dart |
+++ b/runtime/lib/byte_array.dart |
@@ -167,11 +167,47 @@ class _ByteArrayBase { |
// Implementation |
+ int _toInt(int value, int mask) { |
+ int result = value & mask; |
+ return result > (mask >> 1) ? (result - mask) : result; |
+ } |
+ |
+ int _toInt8(int value) { |
+ return _toInt(value, (1 << 8) - 1); |
+ } |
+ |
+ int _toUint8(int value) { |
+ return value & ((1 << 8) - 1); |
+ } |
+ |
+ int _toInt16(int value) { |
+ return _toInt(value, (1 << 16) - 1); |
+ } |
+ |
+ int _toUint16(int value) { |
+ return value & ((1 << 16) - 1); |
+ } |
+ |
+ int _toInt32(int value) { |
+ return _toInt(value, (1 << 32) - 1); |
+ } |
+ |
+ int _toUint32(int value) { |
+ return value & ((1 << 32) - 1); |
+ } |
+ |
+ int _toInt64(int value) { |
+ return _toInt(value, (1 << 64) - 1); |
+ } |
+ |
+ int _toUint64(int value) { |
+ return value & ((1 << 64) - 1); |
+ } |
+ |
int _length() native "ByteArray_getLength"; |
void _setRange(int start, int length, ByteArray from, int startFrom) |
native "ByteArray_setRange"; |
- |
} |
@@ -212,7 +248,7 @@ class _InternalByteArray extends _ByteArrayBase implements ByteArray { |
} |
void setInt8(int byteOffset, int value) { |
- _setInt8(byteOffset, value); |
+ _setInt8(byteOffset, _toInt8(value)); |
} |
int getUint8(int byteOffset) { |
@@ -220,7 +256,7 @@ class _InternalByteArray extends _ByteArrayBase implements ByteArray { |
} |
void setUint8(int byteOffset, int value) { |
- _setUint8(byteOffset, value); |
+ _setUint8(byteOffset, _toUint8(value)); |
} |
int getInt16(int byteOffset) { |
@@ -228,7 +264,7 @@ class _InternalByteArray extends _ByteArrayBase implements ByteArray { |
} |
void setInt16(int byteOffset, int value) { |
- _setInt16(byteOffset, value); |
+ _setInt16(byteOffset, _toInt16(value)); |
} |
int getUint16(int byteOffset) { |
@@ -236,7 +272,7 @@ class _InternalByteArray extends _ByteArrayBase implements ByteArray { |
} |
void setUint16(int byteOffset, int value) { |
- _setUint16(byteOffset, value); |
+ _setUint16(byteOffset, _toUint16(value)); |
} |
int getInt32(int byteOffset) { |
@@ -244,7 +280,7 @@ class _InternalByteArray extends _ByteArrayBase implements ByteArray { |
} |
void setInt32(int byteOffset, int value) { |
- _setInt32(byteOffset, value); |
+ _setInt32(byteOffset, _toInt32(value)); |
} |
int getUint32(int byteOffset) { |
@@ -252,7 +288,7 @@ class _InternalByteArray extends _ByteArrayBase implements ByteArray { |
} |
void setUint32(int byteOffset, int value) { |
- _setUint32(byteOffset, value); |
+ _setUint32(byteOffset, _toUint32(value)); |
} |
int getInt64(int byteOffset) { |
@@ -260,7 +296,7 @@ class _InternalByteArray extends _ByteArrayBase implements ByteArray { |
} |
void setInt64(int byteOffset, int value) { |
- _setInt64(byteOffset, value); |
+ _setInt64(byteOffset, _toInt64(value)); |
} |
int getUint64(int byteOffset) { |
@@ -268,7 +304,7 @@ class _InternalByteArray extends _ByteArrayBase implements ByteArray { |
} |
void setUint64(int byteOffset, int value) { |
- _setUint64(byteOffset, value); |
+ _setUint64(byteOffset, _toUint64(value)); |
} |
double getFloat32(int byteOffset) { |
@@ -378,7 +414,7 @@ class _ExternalByteArray extends _ByteArrayBase implements ByteArray { |
} |
void setInt8(int byteOffset, int value) { |
- _setInt8(byteOffset, value); |
+ _setInt8(byteOffset, _toInt8(value)); |
} |
int getUint8(int byteOffset) { |
@@ -386,7 +422,7 @@ class _ExternalByteArray extends _ByteArrayBase implements ByteArray { |
} |
void setUint8(int byteOffset, int value) { |
- _setUint8(byteOffset, value); |
+ _setUint8(byteOffset, _toUint8(value)); |
} |
int getInt16(int byteOffset) { |
@@ -394,7 +430,7 @@ class _ExternalByteArray extends _ByteArrayBase implements ByteArray { |
} |
void setInt16(int byteOffset, int value) { |
- _setInt16(byteOffset, value); |
+ _setInt16(byteOffset, _toInt16(value)); |
} |
int getUint16(int byteOffset) { |
@@ -402,7 +438,7 @@ class _ExternalByteArray extends _ByteArrayBase implements ByteArray { |
} |
void setUint16(int byteOffset, int value) { |
- _setUint16(byteOffset, value); |
+ _setUint16(byteOffset, _toUint16(value)); |
} |
int getInt32(int byteOffset) { |
@@ -410,7 +446,7 @@ class _ExternalByteArray extends _ByteArrayBase implements ByteArray { |
} |
void setInt32(int byteOffset, int value) { |
- _setInt32(byteOffset, value); |
+ _setInt32(byteOffset, _toInt32(value)); |
} |
int getUint32(int byteOffset) { |
@@ -418,7 +454,7 @@ class _ExternalByteArray extends _ByteArrayBase implements ByteArray { |
} |
void setUint32(int byteOffset, int value) { |
- _setUint32(byteOffset, value); |
+ _setUint32(byteOffset, _toUint32(value)); |
} |
int getInt64(int byteOffset) { |
@@ -426,7 +462,7 @@ class _ExternalByteArray extends _ByteArrayBase implements ByteArray { |
} |
void setInt64(int byteOffset, int value) { |
- _setInt64(byteOffset, value); |
+ _setInt64(byteOffset, _toInt64(value)); |
} |
int getUint64(int byteOffset) { |
@@ -434,7 +470,7 @@ class _ExternalByteArray extends _ByteArrayBase implements ByteArray { |
} |
void setUint64(int byteOffset, int value) { |
- _setUint64(byteOffset, value); |
+ _setUint64(byteOffset, _toUint64(value)); |
} |
double getFloat32(int byteOffset) { |