@@ -2262,6 +2262,27 @@ static long getBufferSize(Object receiver,
2262
2262
2263
2263
}
2264
2264
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
+
2265
2286
@ CoreMethod (names = "read_buffer_byte" , onSingleton = true , required = 2 )
2266
2287
public abstract static class ReadBufferByteNode extends CoreMethodArrayArgumentsNode {
2267
2288
0 commit comments