@@ -1335,7 +1335,7 @@ public abstract static class InjectNode extends YieldingCoreMethodNode {
1335
1335
1336
1336
@ Child private DispatchNode dispatch = DispatchNode .create (PUBLIC );
1337
1337
1338
- // With block
1338
+ // Uses block
1339
1339
1340
1340
@ Specialization (guards = { "isEmptyArray(array)" , "wasProvided(initialOrSymbol)" })
1341
1341
@ ReportPolymorphism .Exclude
@@ -1392,15 +1392,7 @@ public Object injectBlockHelper(ArrayStoreLibrary stores, RubyArray array,
1392
1392
return accumulator ;
1393
1393
}
1394
1394
1395
- // With Symbol
1396
-
1397
- @ Specialization (
1398
- guards = {
1399
- "isEmptyArray(array)" ,
1400
- "wasProvided(initialOrSymbol)" })
1401
- protected Object injectSymbolEmptyArray (RubyArray array , Object initialOrSymbol , RubySymbol symbol , Nil block ) {
1402
- return initialOrSymbol ;
1403
- }
1395
+ // Uses Symbol
1404
1396
1405
1397
@ Specialization (guards = { "isEmptyArray(array)" })
1406
1398
protected Object injectSymbolEmptyArrayNoInitial (
@@ -1410,11 +1402,18 @@ protected Object injectSymbolEmptyArrayNoInitial(
1410
1402
1411
1403
@ Specialization (
1412
1404
guards = {
1413
- "!isEmptyArray(array)" ,
1414
- "wasProvided(initialOrSymbol)" },
1405
+ "isEmptyArray(array)" ,
1406
+ "wasProvided(initialOrSymbol)" })
1407
+ protected Object injectSymbolEmptyArray (
1408
+ RubyArray array , Object initialOrSymbol , RubySymbol symbol , Object maybeBlock ) {
1409
+ return initialOrSymbol ;
1410
+ }
1411
+
1412
+ @ Specialization (
1413
+ guards = { "!isEmptyArray(array)" },
1415
1414
limit = "storageStrategyLimit()" )
1416
- protected Object injectSymbolWithInitial (
1417
- VirtualFrame frame , RubyArray array , Object initialOrSymbol , RubySymbol symbol , Nil block ,
1415
+ protected Object injectSymbolNoInitial (
1416
+ VirtualFrame frame , RubyArray array , RubySymbol initialOrSymbol , NotProvided symbol , Nil block ,
1418
1417
@ Bind ("array.store" ) Object store ,
1419
1418
@ CachedLibrary ("store" ) ArrayStoreLibrary stores ,
1420
1419
@ Cached IntValueProfile arraySizeProfile ,
@@ -1423,20 +1422,22 @@ protected Object injectSymbolWithInitial(
1423
1422
return injectSymbolHelper (
1424
1423
frame ,
1425
1424
array ,
1426
- toJavaString .executeToJavaString (symbol ),
1425
+ toJavaString .executeToJavaString (initialOrSymbol ),
1427
1426
stores ,
1428
1427
store ,
1429
- initialOrSymbol ,
1430
- 0 ,
1428
+ stores . read ( store , 0 ) ,
1429
+ 1 ,
1431
1430
arraySizeProfile ,
1432
1431
loopProfile );
1433
1432
}
1434
1433
1435
1434
@ Specialization (
1436
- guards = { "!isEmptyArray(array)" },
1435
+ guards = {
1436
+ "!isEmptyArray(array)" ,
1437
+ "wasProvided(initialOrSymbol)" },
1437
1438
limit = "storageStrategyLimit()" )
1438
- protected Object injectSymbolNoInitial (
1439
- VirtualFrame frame , RubyArray array , RubySymbol initialOrSymbol , NotProvided symbol , Nil block ,
1439
+ protected Object injectSymbolWithInitial (
1440
+ VirtualFrame frame , RubyArray array , Object initialOrSymbol , RubySymbol symbol , Object block ,
1440
1441
@ Bind ("array.store" ) Object store ,
1441
1442
@ CachedLibrary ("store" ) ArrayStoreLibrary stores ,
1442
1443
@ Cached IntValueProfile arraySizeProfile ,
@@ -1445,15 +1446,17 @@ protected Object injectSymbolNoInitial(
1445
1446
return injectSymbolHelper (
1446
1447
frame ,
1447
1448
array ,
1448
- toJavaString .executeToJavaString (initialOrSymbol ),
1449
+ toJavaString .executeToJavaString (symbol ),
1449
1450
stores ,
1450
1451
store ,
1451
- stores . read ( store , 0 ) ,
1452
- 1 ,
1452
+ initialOrSymbol ,
1453
+ 0 ,
1453
1454
arraySizeProfile ,
1454
1455
loopProfile );
1455
1456
}
1456
1457
1458
+ // No Symbol or Block
1459
+
1457
1460
@ Specialization
1458
1461
protected Object injectNoSymbolNonEmptyArrayNoInitial (
1459
1462
RubyArray array , NotProvided initialOrSymbol , NotProvided symbol , Nil block ) {
0 commit comments