|
59 | 59 | import org.truffleruby.core.numeric.FixnumLowerNode;
|
60 | 60 | import org.truffleruby.core.proc.RubyProc;
|
61 | 61 | import org.truffleruby.core.range.RangeNodes.NormalizedStartLengthNode;
|
62 |
| -import org.truffleruby.core.range.RubyIntRange; |
63 |
| -import org.truffleruby.core.range.RubyLongRange; |
64 |
| -import org.truffleruby.core.range.RubyObjectRange; |
65 | 62 | import org.truffleruby.core.rope.Rope;
|
66 | 63 | import org.truffleruby.core.rope.RopeNodes;
|
67 | 64 | import org.truffleruby.core.rope.RopeOperations;
|
|
104 | 101 | import com.oracle.truffle.api.dsl.NodeChild;
|
105 | 102 | import com.oracle.truffle.api.dsl.ReportPolymorphism;
|
106 | 103 | import com.oracle.truffle.api.dsl.Specialization;
|
107 |
| -import com.oracle.truffle.api.dsl.Cached.Shared; |
108 | 104 | import com.oracle.truffle.api.frame.VirtualFrame;
|
109 | 105 | import com.oracle.truffle.api.library.CachedLibrary;
|
110 | 106 | import com.oracle.truffle.api.nodes.DirectCallNode;
|
@@ -279,29 +275,10 @@ protected Object index(RubyArray array, int index, NotProvided length,
|
279 | 275 | return readNode.executeRead(array, index);
|
280 | 276 | }
|
281 | 277 |
|
282 |
| - @Specialization |
283 |
| - protected Object indexRange(RubyArray array, RubyObjectRange range, NotProvided length, |
284 |
| - @Cached @Shared("starting") NormalizedStartLengthNode startLengthNode, |
285 |
| - @Cached @Shared("ending") ReadSliceNormalizedNode readSlice) { |
286 |
| - return readRange(array, range, startLengthNode, readSlice); |
287 |
| - } |
288 |
| - |
289 |
| - @Specialization |
290 |
| - protected Object indexIntRange(RubyArray array, RubyIntRange range, NotProvided length, |
291 |
| - @Cached @Shared("starting") NormalizedStartLengthNode startLengthNode, |
292 |
| - @Cached @Shared("ending") ReadSliceNormalizedNode readSlice) { |
293 |
| - return readRange(array, range, startLengthNode, readSlice); |
294 |
| - } |
295 |
| - |
296 |
| - @Specialization |
297 |
| - protected Object indexLongRange(RubyArray array, RubyLongRange range, NotProvided length, |
298 |
| - @Cached @Shared("starting") NormalizedStartLengthNode startLengthNode, |
299 |
| - @Cached @Shared("ending") ReadSliceNormalizedNode readSlice) { |
300 |
| - return readRange(array, range, startLengthNode, readSlice); |
301 |
| - } |
302 |
| - |
303 |
| - private Object readRange(RubyArray array, Object range, NormalizedStartLengthNode startLengthNode, |
304 |
| - ReadSliceNormalizedNode readSlice) { |
| 278 | + @Specialization(guards = "isRubyRange(range)") |
| 279 | + protected Object indexRange(RubyArray array, Object range, NotProvided length, |
| 280 | + @Cached NormalizedStartLengthNode startLengthNode, |
| 281 | + @Cached ReadSliceNormalizedNode readSlice) { |
305 | 282 | final int[] startLength = startLengthNode.execute(range, array.size);
|
306 | 283 | final int len = Math.max(startLength[1], 0); // negative range ending maps to zero length
|
307 | 284 | return readSlice.executeReadSlice(array, startLength[0], len);
|
@@ -382,29 +359,10 @@ protected Object set(RubyArray array, int index, Object value, NotProvided unuse
|
382 | 359 | return writeNode.executeWrite(array, nIndex, value);
|
383 | 360 | }
|
384 | 361 |
|
385 |
| - @Specialization |
386 |
| - protected Object setRange(RubyArray array, RubyObjectRange range, Object value, NotProvided unused, |
387 |
| - @Cached @Shared("startLength") NormalizedStartLengthNode normalizedStartLength, |
388 |
| - @Cached @Shared("nagativeStart") BranchProfile negativeStart) { |
389 |
| - return setRangeInternal(array, range, value, normalizedStartLength, negativeStart); |
390 |
| - } |
391 |
| - |
392 |
| - @Specialization |
393 |
| - protected Object setIngRange(RubyArray array, RubyIntRange range, Object value, NotProvided unused, |
394 |
| - @Cached @Shared("startLength") NormalizedStartLengthNode normalizedStartLength, |
395 |
| - @Cached @Shared("nagativeStart") BranchProfile negativeStart) { |
396 |
| - return setRangeInternal(array, range, value, normalizedStartLength, negativeStart); |
397 |
| - } |
398 |
| - |
399 |
| - @Specialization |
400 |
| - protected Object setLongRange(RubyArray array, RubyLongRange range, Object value, NotProvided unused, |
401 |
| - @Cached @Shared("startLength") NormalizedStartLengthNode normalizedStartLength, |
402 |
| - @Cached @Shared("nagativeStart") BranchProfile negativeStart) { |
403 |
| - return setRangeInternal(array, range, value, normalizedStartLength, negativeStart); |
404 |
| - } |
405 |
| - |
406 |
| - private Object setRangeInternal(RubyArray array, Object range, Object value, |
407 |
| - NormalizedStartLengthNode normalizedStartLength, BranchProfile negativeStart) { |
| 362 | + @Specialization(guards = "isRubyRange(range)") |
| 363 | + protected Object setRange(RubyArray array, Object range, Object value, NotProvided unused, |
| 364 | + @Cached NormalizedStartLengthNode normalizedStartLength, |
| 365 | + @Cached BranchProfile negativeStart) { |
408 | 366 | final int[] startLength = normalizedStartLength.execute(range, array.size);
|
409 | 367 | final int start = startLength[0];
|
410 | 368 | if (start < 0) {
|
|
0 commit comments