зеркало из https://github.com/mozilla/pluotsorbet.git
Override ByteArrayOutputStream::write(byte[],int,int). Fixes #322.
This commit is contained in:
Родитель
f3e7e6dbe2
Коммит
893b6a11c7
25
override.js
25
override.js
|
@ -39,3 +39,28 @@ Override["java/lang/Math.min.(II)I"] = function(ctx, stack) {
|
|||
var b = stack.pop(), a = stack.pop();
|
||||
stack.push(a <= b ? a : b);
|
||||
}
|
||||
|
||||
Override["java/io/ByteArrayOutputStream.write.([BII)V"] = function(ctx, stack) {
|
||||
var len = stack.pop(), off = stack.pop(), b = stack.pop(), _this = stack.pop();
|
||||
|
||||
if ((off < 0) || (off > b.length) || (len < 0) ||
|
||||
((off + len) > b.length) || ((off + len) < 0)) {
|
||||
ctx.raiseExceptionAndYield("java/lang/IndexOutOfBoundsException");
|
||||
} else if (len == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
var count = _this.class.getField("count", "I").get(_this);
|
||||
var buf = _this.class.getField("buf", "[B").get(_this);
|
||||
|
||||
var newcount = count + len;
|
||||
if (newcount > buf.length) {
|
||||
var newbuf = ctx.newPrimitiveArray("B", Math.max(buf.length << 1, newcount));
|
||||
newbuf.set(buf);
|
||||
buf = newbuf;
|
||||
_this.class.getField("buf", "[B").set(_this, buf);
|
||||
}
|
||||
|
||||
buf.set(b.subarray(off, off + len), count);
|
||||
_this.class.getField("count", "I").set(_this, newcount);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче