Skip to content

Commit cd64acb

Browse files
committed
Make a helper method ArrayUtils.getLast generic and use it for translators
1 parent 6769f95 commit cd64acb

File tree

4 files changed

+10
-8
lines changed

4 files changed

+10
-8
lines changed

src/main/java/org/truffleruby/core/array/ArrayUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ public static Object[] append(Object[] array, Object element) {
242242
return newArray;
243243
}
244244

245-
public static Object getLast(Object[] array) {
245+
public static <T> T getLast(T[] array) {
246246
assert array.length >= 1;
247247
return array[array.length - 1];
248248
}

src/main/java/org/truffleruby/language/dispatch/RubyCallNode.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.truffleruby.core.array.ArrayAppendOneNode;
2020
import org.truffleruby.core.array.ArrayConcatNode;
2121
import org.truffleruby.core.array.ArrayLiteralNode;
22+
import org.truffleruby.core.array.ArrayUtils;
2223
import org.truffleruby.core.array.AssignableNode;
2324
import org.truffleruby.core.array.RubyArray;
2425
import org.truffleruby.core.cast.BooleanCastNode;
@@ -184,7 +185,7 @@ public Object doCall(VirtualFrame frame, Object receiverObject, ArgumentsDescrip
184185

185186
final Object returnValue = dispatch.execute(frame, receiverObject, methodName, rubyArgs, dispatchConfig);
186187
if (isAttrAssign) {
187-
final Object value = rubyArgs[rubyArgs.length - 1];
188+
final Object value = ArrayUtils.getLast(rubyArgs);
188189
assert RubyGuards.assertIsValidRubyValue(value);
189190
return value;
190191
} else {
@@ -279,7 +280,7 @@ public RubyNode[] getArguments() {
279280
}
280281

281282
private RubyNode getLastArgumentNode() {
282-
final RubyNode lastArg = RubyNode.unwrapNode(arguments[arguments.length - 1]);
283+
final RubyNode lastArg = RubyNode.unwrapNode(ArrayUtils.getLast(arguments));
283284

284285
// BodyTranslator-specific condition
285286
if (isSplatted && lastArg instanceof ArrayAppendOneNode arrayAppendOneNode) {
@@ -294,13 +295,13 @@ private RubyNode getLastArgumentNode() {
294295
RubyNode[] elements = arrayConcatNode.getElements();
295296
assert elements.length > 0;
296297

297-
RubyNode last = RubyNode.unwrapNode(elements[elements.length - 1]);
298+
RubyNode last = RubyNode.unwrapNode(ArrayUtils.getLast(elements));
298299

299300
if (last instanceof ArrayLiteralNode arrayLiteralNode) {
300301
RubyNode[] values = arrayLiteralNode.getValues();
301302
assert values.length > 0;
302303

303-
return RubyNode.unwrapNode(values[values.length - 1]);
304+
return RubyNode.unwrapNode(ArrayUtils.getLast(values));
304305
} else {
305306
return last;
306307
}

src/main/java/org/truffleruby/parser/YARPBaseTranslator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.prism.Nodes;
1818
import org.truffleruby.RubyLanguage;
1919
import org.truffleruby.core.DummyNode;
20+
import org.truffleruby.core.array.ArrayUtils;
2021
import org.truffleruby.core.encoding.RubyEncoding;
2122
import org.truffleruby.core.encoding.TStringUtils;
2223
import org.truffleruby.language.RubyContextSourceNode;
@@ -179,7 +180,7 @@ protected static void assignPositionOnly(Nodes.Node yarpNode, RubyNode rubyNode)
179180
// assign position based on a list of nodes (arguments list, exception classes list in a rescue section, etc)
180181
protected final void assignPositionOnly(Nodes.Node[] nodes, RubyNode rubyNode) {
181182
final Nodes.Node first = nodes[0];
182-
final Nodes.Node last = nodes[nodes.length - 1];
183+
final Nodes.Node last = ArrayUtils.getLast(nodes);
183184

184185
final int length = last.endOffset() - first.startOffset;
185186
rubyNode.unsafeSetSourceSection(first.startOffset, length);

src/main/java/org/truffleruby/parser/YARPTranslator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -771,7 +771,7 @@ private ArgumentsDescriptor getKeywordArgumentsDescriptor(Nodes.Node[] arguments
771771
}
772772

773773
// consider there are keyword arguments if the last argument is either ... or a Hash
774-
Nodes.Node last = arguments[arguments.length - 1];
774+
Nodes.Node last = ArrayUtils.getLast(arguments);
775775

776776
// a(...) means there are potentially forwarded keyword arguments
777777
if (last instanceof Nodes.ForwardingArgumentsNode) {
@@ -2400,7 +2400,7 @@ private static Nodes.StringNode concatStringNodes(Nodes.InterpolatedStringNode n
24002400
}
24012401

24022402
int start = parts[0].startOffset;
2403-
var last = parts[parts.length - 1];
2403+
var last = ArrayUtils.getLast(parts);
24042404
int length = last.endOffset() - start;
24052405
return new Nodes.StringNode(NO_FLAGS, concatenated, start, length);
24062406
}

0 commit comments

Comments
 (0)