|
|
@ -5,9 +5,9 @@ const kMaxLength = smalloc.kMaxLength; |
|
|
|
const util = require('util'); |
|
|
|
|
|
|
|
exports.alloc = alloc; |
|
|
|
exports.copyOnto = smalloc.copyOnto; |
|
|
|
exports.copyOnto = copyOnto; |
|
|
|
exports.dispose = dispose; |
|
|
|
exports.hasExternalData = smalloc.hasExternalData; |
|
|
|
exports.hasExternalData = hasExternalData; |
|
|
|
|
|
|
|
// don't allow kMaxLength to accidentally be overwritten. it's a lot less
|
|
|
|
// apparent when a primitive is accidentally changed.
|
|
|
@ -50,13 +50,21 @@ function alloc(n, obj, type) { |
|
|
|
throw new TypeError('obj must be an Object'); |
|
|
|
} |
|
|
|
|
|
|
|
if (Array.isArray(obj)) |
|
|
|
throw new TypeError('obj cannot be an array'); |
|
|
|
if (obj instanceof Buffer) |
|
|
|
throw new TypeError('obj cannot be a Buffer'); |
|
|
|
if (smalloc.isTypedArray(obj)) |
|
|
|
throw new TypeError('obj cannot be a typed array'); |
|
|
|
if (smalloc.hasExternalData(obj)) |
|
|
|
throw new TypeError('object already has external array data'); |
|
|
|
|
|
|
|
// 1 == v8::kExternalUint8Array, 9 == v8::kExternalUint8ClampedArray
|
|
|
|
if (type < 1 || type > 9) |
|
|
|
throw new TypeError('unknown external array type: ' + type); |
|
|
|
if (Array.isArray(obj)) |
|
|
|
throw new TypeError('Arrays are not supported'); |
|
|
|
if (n > kMaxLength) |
|
|
|
throw new RangeError('n > kMaxLength'); |
|
|
|
throw new RangeError('Attempt to allocate array larger than maximum ' + |
|
|
|
'size: 0x' + kMaxLength.toString(16) + ' elements'); |
|
|
|
|
|
|
|
return smalloc.alloc(obj, n, type); |
|
|
|
} |
|
|
@ -70,7 +78,29 @@ function dispose(obj) { |
|
|
|
if (smalloc.isTypedArray(obj)) |
|
|
|
throw new TypeError('obj cannot be a typed array'); |
|
|
|
if (!smalloc.hasExternalData(obj)) |
|
|
|
throw new Error('obj has no external array data'); |
|
|
|
throw new TypeError('obj has no external array data'); |
|
|
|
|
|
|
|
smalloc.dispose(obj); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function copyOnto(source, sourceStart, dest, destStart, copyLength) { |
|
|
|
if (util.isPrimitive(source)) |
|
|
|
throw new TypeError('source must be an Object'); |
|
|
|
if (util.isPrimitive(dest)) |
|
|
|
throw new TypeError('dest must be an Object'); |
|
|
|
if (!smalloc.hasExternalData(source)) |
|
|
|
throw new TypeError('source has no external array data'); |
|
|
|
if (!smalloc.hasExternalData(dest)) |
|
|
|
throw new TypeError('dest has no external array data'); |
|
|
|
|
|
|
|
return smalloc.copyOnto(source, sourceStart, dest, destStart, copyLength); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function hasExternalData(obj) { |
|
|
|
if (util.isPrimitive(obj)) |
|
|
|
return false; |
|
|
|
|
|
|
|
return smalloc.hasExternalData(obj); |
|
|
|
} |
|
|
|