12
12
import java .io .IOException ;
13
13
import java .lang .reflect .Method ;
14
14
import java .lang .reflect .Modifier ;
15
- import java .nio .ByteOrder ;
16
15
import java .util .ArrayList ;
17
16
import java .util .List ;
18
17
import java .util .Map ;
62
61
import com .oracle .truffle .api .TruffleLanguage ;
63
62
import com .oracle .truffle .api .dsl .Cached ;
64
63
import com .oracle .truffle .api .dsl .Cached .Shared ;
65
- import com .oracle .truffle .api .dsl .CreateCast ;
66
64
import com .oracle .truffle .api .dsl .GenerateUncached ;
67
65
import com .oracle .truffle .api .dsl .ImportStatic ;
68
66
import com .oracle .truffle .api .dsl .NodeChild ;
@@ -2237,16 +2235,14 @@ protected Object writeBufferByte(Object receiver, long byteOffset, Object value,
2237
2235
@ NodeChild (value = "byteOffset" , type = RubyNode .class )
2238
2236
public abstract static class ReadBufferShortNode extends CoreMethodNode {
2239
2237
2240
- @ CreateCast ("byteOrder" )
2241
- protected RubyNode coerceSymbolToByteOrder (RubyNode byteOrder ) {
2242
- return SymbolToByteOrderNode .create (byteOrder );
2243
- }
2244
-
2245
2238
@ Specialization (limit = "getInteropCacheLimit()" )
2246
- protected short readBufferShort (Object receiver , ByteOrder byteOrder , long byteOffset ,
2239
+ protected static short readBufferShort (Object receiver , Object byteOrderObject , long byteOffset ,
2247
2240
@ CachedLibrary ("receiver" ) InteropLibrary interop ,
2248
- @ Cached TranslateInteropExceptionNode translateInteropException ) {
2241
+ @ Cached SymbolToByteOrderNode symbolToByteOrderNode ,
2242
+ @ Cached TranslateInteropExceptionNode translateInteropException ,
2243
+ @ Bind ("this" ) Node node ) {
2249
2244
try {
2245
+ final var byteOrder = symbolToByteOrderNode .execute (node , byteOrderObject );
2250
2246
return interop .readBufferShort (receiver , byteOrder , byteOffset );
2251
2247
} catch (InteropException e ) {
2252
2248
throw translateInteropException .execute (e );
@@ -2262,17 +2258,15 @@ protected short readBufferShort(Object receiver, ByteOrder byteOrder, long byteO
2262
2258
@ NodeChild (value = "value" , type = RubyNode .class )
2263
2259
public abstract static class WriteBufferShortNode extends CoreMethodNode {
2264
2260
2265
- @ CreateCast ("byteOrder" )
2266
- protected RubyNode coerceSymbolToByteOrder (RubyNode byteOrder ) {
2267
- return SymbolToByteOrderNode .create (byteOrder );
2268
- }
2269
-
2270
2261
@ Specialization (limit = "getInteropCacheLimit()" , guards = "interopValue.fitsInShort(value)" )
2271
- protected Object writeBufferShort (Object receiver , ByteOrder byteOrder , long byteOffset , Object value ,
2262
+ protected static Object writeBufferShort (Object receiver , Object byteOrderObject , long byteOffset , Object value ,
2272
2263
@ CachedLibrary ("receiver" ) InteropLibrary interop ,
2273
2264
@ CachedLibrary ("value" ) InteropLibrary interopValue ,
2274
- @ Cached TranslateInteropExceptionNode translateInteropException ) {
2265
+ @ Cached SymbolToByteOrderNode symbolToByteOrderNode ,
2266
+ @ Cached TranslateInteropExceptionNode translateInteropException ,
2267
+ @ Bind ("this" ) Node node ) {
2275
2268
try {
2269
+ final var byteOrder = symbolToByteOrderNode .execute (node , byteOrderObject );
2276
2270
final short shortValue = interopValue .asShort (value );
2277
2271
interop .writeBufferShort (receiver , byteOrder , byteOffset , shortValue );
2278
2272
} catch (InteropException e ) {
@@ -2289,16 +2283,14 @@ protected Object writeBufferShort(Object receiver, ByteOrder byteOrder, long byt
2289
2283
@ NodeChild (value = "byteOffset" , type = RubyNode .class )
2290
2284
public abstract static class ReadBufferIntNode extends CoreMethodNode {
2291
2285
2292
- @ CreateCast ("byteOrder" )
2293
- protected RubyNode coerceSymbolToByteOrder (RubyNode byteOrder ) {
2294
- return SymbolToByteOrderNode .create (byteOrder );
2295
- }
2296
-
2297
2286
@ Specialization (limit = "getInteropCacheLimit()" )
2298
- protected int readBufferInt (Object receiver , ByteOrder byteOrder , long byteOffset ,
2287
+ protected static int readBufferInt (Object receiver , Object byteOrderObject , long byteOffset ,
2299
2288
@ CachedLibrary ("receiver" ) InteropLibrary interop ,
2300
- @ Cached TranslateInteropExceptionNode translateInteropException ) {
2289
+ @ Cached SymbolToByteOrderNode symbolToByteOrderNode ,
2290
+ @ Cached TranslateInteropExceptionNode translateInteropException ,
2291
+ @ Bind ("this" ) Node node ) {
2301
2292
try {
2293
+ final var byteOrder = symbolToByteOrderNode .execute (node , byteOrderObject );
2302
2294
return interop .readBufferInt (receiver , byteOrder , byteOffset );
2303
2295
} catch (InteropException e ) {
2304
2296
throw translateInteropException .execute (e );
@@ -2314,17 +2306,15 @@ protected int readBufferInt(Object receiver, ByteOrder byteOrder, long byteOffse
2314
2306
@ NodeChild (value = "value" , type = RubyNode .class )
2315
2307
public abstract static class WriteBufferIntNode extends CoreMethodNode {
2316
2308
2317
- @ CreateCast ("byteOrder" )
2318
- protected RubyNode coerceSymbolToByteOrder (RubyNode byteOrder ) {
2319
- return SymbolToByteOrderNode .create (byteOrder );
2320
- }
2321
-
2322
2309
@ Specialization (limit = "getInteropCacheLimit()" , guards = "interopValue.fitsInInt(value)" )
2323
- protected Object writeBufferInt (Object receiver , ByteOrder order , long byteOffset , Object value ,
2310
+ protected static Object writeBufferInt (Object receiver , Object orderObject , long byteOffset , Object value ,
2324
2311
@ CachedLibrary ("receiver" ) InteropLibrary interop ,
2325
2312
@ CachedLibrary ("value" ) InteropLibrary interopValue ,
2326
- @ Cached TranslateInteropExceptionNode translateInteropException ) {
2313
+ @ Cached SymbolToByteOrderNode symbolToByteOrderNode ,
2314
+ @ Cached TranslateInteropExceptionNode translateInteropException ,
2315
+ @ Bind ("this" ) Node node ) {
2327
2316
try {
2317
+ final var order = symbolToByteOrderNode .execute (node , orderObject );
2328
2318
final int intValue = interopValue .asInt (value );
2329
2319
interop .writeBufferInt (receiver , order , byteOffset , intValue );
2330
2320
} catch (InteropException e ) {
@@ -2341,16 +2331,14 @@ protected Object writeBufferInt(Object receiver, ByteOrder order, long byteOffse
2341
2331
@ NodeChild (value = "byteOffset" , type = RubyNode .class )
2342
2332
public abstract static class ReadBufferLongNode extends CoreMethodNode {
2343
2333
2344
- @ CreateCast ("byteOrder" )
2345
- protected RubyNode coerceSymbolToByteOrder (RubyNode byteOrder ) {
2346
- return SymbolToByteOrderNode .create (byteOrder );
2347
- }
2348
-
2349
2334
@ Specialization (limit = "getInteropCacheLimit()" )
2350
- protected long readBufferLong (Object receiver , ByteOrder byteOrder , long byteOffset ,
2335
+ protected static long readBufferLong (Object receiver , Object byteOrderObject , long byteOffset ,
2351
2336
@ CachedLibrary ("receiver" ) InteropLibrary interop ,
2352
- @ Cached TranslateInteropExceptionNode translateInteropException ) {
2337
+ @ Cached SymbolToByteOrderNode symbolToByteOrderNode ,
2338
+ @ Cached TranslateInteropExceptionNode translateInteropException ,
2339
+ @ Bind ("this" ) Node node ) {
2353
2340
try {
2341
+ final var byteOrder = symbolToByteOrderNode .execute (node , byteOrderObject );
2354
2342
return interop .readBufferLong (receiver , byteOrder , byteOffset );
2355
2343
} catch (InteropException e ) {
2356
2344
throw translateInteropException .execute (e );
@@ -2366,17 +2354,15 @@ protected long readBufferLong(Object receiver, ByteOrder byteOrder, long byteOff
2366
2354
@ NodeChild (value = "value" , type = RubyNode .class )
2367
2355
public abstract static class WriteBufferLongNode extends CoreMethodNode {
2368
2356
2369
- @ CreateCast ("byteOrder" )
2370
- protected RubyNode coerceSymbolToByteOrder (RubyNode byteOrder ) {
2371
- return SymbolToByteOrderNode .create (byteOrder );
2372
- }
2373
-
2374
2357
@ Specialization (limit = "getInteropCacheLimit()" , guards = "interopValue.fitsInLong(value)" )
2375
- protected Object writeBufferLong (Object receiver , ByteOrder order , long byteOffset , Object value ,
2358
+ protected static Object writeBufferLong (Object receiver , Object orderObject , long byteOffset , Object value ,
2376
2359
@ CachedLibrary ("receiver" ) InteropLibrary interop ,
2377
2360
@ CachedLibrary ("value" ) InteropLibrary interopValue ,
2378
- @ Cached TranslateInteropExceptionNode translateInteropException ) {
2361
+ @ Cached SymbolToByteOrderNode symbolToByteOrderNode ,
2362
+ @ Cached TranslateInteropExceptionNode translateInteropException ,
2363
+ @ Bind ("this" ) Node node ) {
2379
2364
try {
2365
+ final var order = symbolToByteOrderNode .execute (node , orderObject );
2380
2366
final long longValue = interopValue .asLong (value );
2381
2367
interop .writeBufferLong (receiver , order , byteOffset , longValue );
2382
2368
} catch (InteropException e ) {
@@ -2393,17 +2379,15 @@ protected Object writeBufferLong(Object receiver, ByteOrder order, long byteOffs
2393
2379
@ NodeChild (value = "byteOffset" , type = RubyNode .class )
2394
2380
public abstract static class ReadBufferFloatNode extends CoreMethodNode {
2395
2381
2396
- @ CreateCast ("byteOrder" )
2397
- protected RubyNode coerceSymbolToByteOrder (RubyNode byteOrder ) {
2398
- return SymbolToByteOrderNode .create (byteOrder );
2399
- }
2400
-
2401
2382
// must return double so Ruby nodes can deal with it
2402
2383
@ Specialization (limit = "getInteropCacheLimit()" )
2403
- protected double readBufferFloat (Object receiver , ByteOrder byteOrder , long byteOffset ,
2384
+ protected static double readBufferFloat (Object receiver , Object byteOrderObject , long byteOffset ,
2404
2385
@ CachedLibrary ("receiver" ) InteropLibrary interop ,
2405
- @ Cached TranslateInteropExceptionNode translateInteropException ) {
2386
+ @ Cached SymbolToByteOrderNode symbolToByteOrderNode ,
2387
+ @ Cached TranslateInteropExceptionNode translateInteropException ,
2388
+ @ Bind ("this" ) Node node ) {
2406
2389
try {
2390
+ final var byteOrder = symbolToByteOrderNode .execute (node , byteOrderObject );
2407
2391
return interop .readBufferFloat (receiver , byteOrder , byteOffset );
2408
2392
} catch (InteropException e ) {
2409
2393
throw translateInteropException .execute (e );
@@ -2419,17 +2403,15 @@ protected double readBufferFloat(Object receiver, ByteOrder byteOrder, long byte
2419
2403
@ NodeChild (value = "value" , type = RubyNode .class )
2420
2404
public abstract static class WriteBufferFloatNode extends CoreMethodNode {
2421
2405
2422
- @ CreateCast ("byteOrder" )
2423
- protected RubyNode coerceSymbolToByteOrder (RubyNode byteOrder ) {
2424
- return SymbolToByteOrderNode .create (byteOrder );
2425
- }
2426
-
2427
2406
@ Specialization (limit = "getInteropCacheLimit()" , guards = "interopValue.fitsInDouble(value)" )
2428
- protected Object writeBufferFloat (Object receiver , ByteOrder order , long byteOffset , Object value ,
2407
+ protected static Object writeBufferFloat (Object receiver , Object orderObject , long byteOffset , Object value ,
2429
2408
@ CachedLibrary ("receiver" ) InteropLibrary interop ,
2430
2409
@ CachedLibrary ("value" ) InteropLibrary interopValue ,
2431
- @ Cached TranslateInteropExceptionNode translateInteropException ) {
2410
+ @ Cached SymbolToByteOrderNode symbolToByteOrderNode ,
2411
+ @ Cached TranslateInteropExceptionNode translateInteropException ,
2412
+ @ Bind ("this" ) Node node ) {
2432
2413
try {
2414
+ final var order = symbolToByteOrderNode .execute (node , orderObject );
2433
2415
final float floatValue = (float ) interopValue .asDouble (value );
2434
2416
interop .writeBufferFloat (receiver , order , byteOffset , floatValue );
2435
2417
} catch (InteropException e ) {
@@ -2446,16 +2428,14 @@ protected Object writeBufferFloat(Object receiver, ByteOrder order, long byteOff
2446
2428
@ NodeChild (value = "byteOffset" , type = RubyNode .class )
2447
2429
public abstract static class ReadBufferDoubleNode extends CoreMethodNode {
2448
2430
2449
- @ CreateCast ("byteOrder" )
2450
- protected RubyNode coerceSymbolToByteOrder (RubyNode byteOrder ) {
2451
- return SymbolToByteOrderNode .create (byteOrder );
2452
- }
2453
-
2454
2431
@ Specialization (limit = "getInteropCacheLimit()" )
2455
- protected double readBufferDouble (Object receiver , ByteOrder byteOrder , long byteOffset ,
2432
+ protected static double readBufferDouble (Object receiver , Object byteOrderObject , long byteOffset ,
2456
2433
@ CachedLibrary ("receiver" ) InteropLibrary interop ,
2457
- @ Cached TranslateInteropExceptionNode translateInteropException ) {
2434
+ @ Cached SymbolToByteOrderNode symbolToByteOrderNode ,
2435
+ @ Cached TranslateInteropExceptionNode translateInteropException ,
2436
+ @ Bind ("this" ) Node node ) {
2458
2437
try {
2438
+ final var byteOrder = symbolToByteOrderNode .execute (node , byteOrderObject );
2459
2439
return interop .readBufferDouble (receiver , byteOrder , byteOffset );
2460
2440
} catch (InteropException e ) {
2461
2441
throw translateInteropException .execute (e );
@@ -2471,17 +2451,15 @@ protected double readBufferDouble(Object receiver, ByteOrder byteOrder, long byt
2471
2451
@ NodeChild (value = "value" , type = RubyNode .class )
2472
2452
public abstract static class WriteBufferDoubleNode extends CoreMethodNode {
2473
2453
2474
- @ CreateCast ("byteOrder" )
2475
- protected RubyNode coerceSymbolToByteOrder (RubyNode byteOrder ) {
2476
- return SymbolToByteOrderNode .create (byteOrder );
2477
- }
2478
-
2479
2454
@ Specialization (limit = "getInteropCacheLimit()" , guards = "interopValue.fitsInDouble(value)" )
2480
- protected Object writeBufferDouble (Object receiver , ByteOrder order , long byteOffset , Object value ,
2455
+ protected static Object writeBufferDouble (Object receiver , Object orderObject , long byteOffset , Object value ,
2481
2456
@ CachedLibrary ("receiver" ) InteropLibrary interop ,
2482
2457
@ CachedLibrary ("value" ) InteropLibrary interopValue ,
2483
- @ Cached TranslateInteropExceptionNode translateInteropException ) {
2458
+ @ Cached SymbolToByteOrderNode symbolToByteOrderNode ,
2459
+ @ Cached TranslateInteropExceptionNode translateInteropException ,
2460
+ @ Bind ("this" ) Node node ) {
2484
2461
try {
2462
+ final var order = symbolToByteOrderNode .execute (node , orderObject );
2485
2463
final double doubleValue = interopValue .asDouble (value );
2486
2464
interop .writeBufferDouble (receiver , order , byteOffset , doubleValue );
2487
2465
} catch (InteropException e ) {
0 commit comments