Skip to content

Commit 09840c0

Browse files
committed
Add Truffle::Interop#read_buffer to expose InteropLibrary#readBuffer
1 parent 0596ba2 commit 09840c0

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

src/main/java/org/truffleruby/interop/InteropNodes.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2262,6 +2262,27 @@ static long getBufferSize(Object receiver,
22622262

22632263
}
22642264

2265+
@CoreMethod(names = "read_buffer", onSingleton = true, required = 3, lowerFixnum = { 2, 3 })
2266+
public abstract static class ReadBufferNode extends CoreMethodArrayArgumentsNode {
2267+
2268+
@Specialization(limit = "getInteropCacheLimit()")
2269+
static RubyString readBuffer(Object receiver, long byteOffset, int length,
2270+
@CachedLibrary("receiver") InteropLibrary interop,
2271+
@Cached TranslateInteropExceptionNode translateInteropException,
2272+
@Cached TruffleString.FromByteArrayNode fromByteArrayNode,
2273+
@Bind("this") Node node) {
2274+
byte[] bytes = new byte[length];
2275+
try {
2276+
interop.readBuffer(receiver, byteOffset, bytes, 0, length);
2277+
} catch (InteropException e) {
2278+
throw translateInteropException.execute(node, e);
2279+
}
2280+
2281+
return createString(node, fromByteArrayNode, bytes, Encodings.BINARY);
2282+
}
2283+
2284+
}
2285+
22652286
@CoreMethod(names = "read_buffer_byte", onSingleton = true, required = 2)
22662287
public abstract static class ReadBufferByteNode extends CoreMethodArrayArgumentsNode {
22672288

0 commit comments

Comments
 (0)