Skip to content

Commit 4a48b87

Browse files
committed
Change sequence() to take a RubyNode... instead of a List<RubyNode>
* More concise and less noisy. * More efficient to access in flatten().
1 parent d39e8cf commit 4a48b87

8 files changed

+70
-82
lines changed

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

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
package org.truffleruby.parser;
1111

1212
import java.util.ArrayList;
13-
import java.util.Arrays;
1413
import java.util.List;
1514
import java.util.Objects;
1615

@@ -194,7 +193,7 @@ protected final void copyNewlineFlag(Nodes.Node yarpNode, RubyNode rubyNode) {
194193
}
195194
}
196195

197-
protected static RubyNode sequence(Nodes.Node yarpNode, List<RubyNode> sequence) {
196+
protected static RubyNode sequence(Nodes.Node yarpNode, RubyNode... sequence) {
198197
assert !yarpNode.hasNewLineFlag() : "Expected node passed to sequence() to not have a newline flag";
199198

200199
RubyNode sequenceNode = sequence(sequence);
@@ -206,7 +205,7 @@ protected static RubyNode sequence(Nodes.Node yarpNode, List<RubyNode> sequence)
206205
return sequenceNode;
207206
}
208207

209-
protected static RubyNode sequence(List<RubyNode> sequence) {
208+
protected static RubyNode sequence(RubyNode... sequence) {
210209
final List<RubyNode> flattened = flatten(sequence);
211210

212211
if (flattened.isEmpty()) {
@@ -219,23 +218,23 @@ protected static RubyNode sequence(List<RubyNode> sequence) {
219218
}
220219
}
221220

222-
private static List<RubyNode> flatten(List<RubyNode> sequence) {
221+
private static List<RubyNode> flatten(RubyNode[] sequence) {
223222
return flattenFromN(sequence, 0);
224223
}
225224

226-
private static List<RubyNode> flattenFromN(List<RubyNode> sequence, int n) {
225+
private static List<RubyNode> flattenFromN(RubyNode[] sequence, int n) {
227226
final List<RubyNode> flattened = new ArrayList<>();
228227

229-
for (; n < sequence.size(); n++) {
230-
final boolean lastNode = n == sequence.size() - 1;
231-
final RubyNode node = sequence.get(n);
228+
for (; n < sequence.length; n++) {
229+
final boolean lastNode = n == sequence.length - 1;
230+
final RubyNode node = sequence[n];
232231

233232
if (node == null) {
234233
continue;
235234
}
236235

237236
if (node instanceof SequenceNode) {
238-
flattened.addAll(flatten(Arrays.asList(((SequenceNode) node).getSequence())));
237+
flattened.addAll(flatten(((SequenceNode) node).getSequence()));
239238
} else if (node.canSubsumeFollowing() && !lastNode) {
240239
List<RubyNode> rest = flattenFromN(sequence, n + 1);
241240
if (rest.size() == 1) {

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

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
import org.truffleruby.language.methods.Arity;
3939
import org.truffleruby.language.methods.BlockDefinitionNodeGen;
4040

41-
import java.util.Arrays;
4241
import java.util.function.Supplier;
4342

4443
public final class YARPBlockNodeTranslator extends YARPTranslator {
@@ -162,10 +161,8 @@ private RubyNode preludeProc(
162161
final RubyNode newDestructureArguments = translator.translate();
163162

164163
final RubyNode arrayWasNotNil = YARPTranslator.sequence(
165-
Arrays.asList(
166-
writeArrayNode,
167-
NotNodeGen.create(
168-
new IsNilNode(readArrayNode))));
164+
writeArrayNode,
165+
NotNodeGen.create(new IsNilNode(readArrayNode)));
169166

170167
final RubyNode shouldDestructureAndArrayWasNotNil = AndNodeGen.create(
171168
new ShouldDestructureNode(arity.acceptsKeywords()),
@@ -292,10 +289,10 @@ private static Supplier<RootCallTarget> lambdaCompiler(
292289
}
293290

294291
private static RubyNode composeBody(TranslatorEnvironment environment, RubyNode prelude, RubyNode body) {
295-
body = YARPTranslator.sequence(Arrays.asList(prelude, body));
292+
body = YARPTranslator.sequence(prelude, body);
296293

297294
if (environment.getFlipFlopStates().size() > 0) {
298-
body = YARPTranslator.sequence(Arrays.asList(YARPTranslator.initFlipFlopStates(environment), body));
295+
body = YARPTranslator.sequence(YARPTranslator.initFlipFlopStates(environment), body);
299296
}
300297

301298
return body;

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
*/
1010
package org.truffleruby.parser;
1111

12-
import java.util.Arrays;
13-
1412
import org.truffleruby.RubyLanguage;
1513
import org.truffleruby.annotations.Split;
1614
import org.truffleruby.language.RubyMethodRootNode;
@@ -50,10 +48,10 @@ private RubyNode compileMethodBody(Nodes.DefNode node, Nodes.ParametersNode para
5048
this).translate();
5149

5250
RubyNode body = translateNodeOrNil(node.body).simplifyAsTailExpression();
53-
body = sequence(Arrays.asList(loadArguments, body));
51+
body = sequence(loadArguments, body);
5452

5553
if (environment.getFlipFlopStates().size() > 0) {
56-
body = sequence(Arrays.asList(initFlipFlopStates(environment), body));
54+
body = sequence(initFlipFlopStates(environment), body);
5755
}
5856

5957
return body;

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public RubyNode translate() {
9090

9191
// Early return for the common case of zero parameters
9292
if (parameters == ZERO_PARAMETERS_NODE) {
93-
return sequence(sequence);
93+
return sequence(sequence.toArray(RubyNode.EMPTY_ARRAY));
9494
}
9595

9696
if (parameters.optionals.length > 0) {
@@ -134,7 +134,7 @@ public RubyNode translate() {
134134
sequence.add(parameters.block.accept(this));
135135
}
136136

137-
return sequence(sequence);
137+
return sequence(sequence.toArray(RubyNode.EMPTY_ARRAY));
138138
}
139139

140140
public RubyNode saveMethodBlockArg() {
@@ -312,19 +312,17 @@ public RubyNode visitBlockParameterNode(Nodes.BlockParameterNode node) {
312312
@Override
313313
public RubyNode visitForwardingParameterNode(Nodes.ForwardingParameterNode node) {
314314
// is allowed in method parameters only
315-
ArrayList<RubyNode> sequence = new ArrayList<>();
316315

317316
// desugar ... to *, **, and & parameters
318317
final var rest = new Nodes.RestParameterNode(NO_FLAGS, TranslatorEnvironment.FORWARDED_REST_NAME, 0, 0);
319318
final var keyrest = new Nodes.KeywordRestParameterNode(NO_FLAGS,
320319
TranslatorEnvironment.FORWARDED_KEYWORD_REST_NAME, 0, 0);
321320
final var block = new Nodes.BlockParameterNode(NO_FLAGS, TranslatorEnvironment.FORWARDED_BLOCK_NAME, 0, 0);
322321

323-
sequence.add(rest.accept(this));
324-
sequence.add(keyrest.accept(this));
325-
sequence.add(block.accept(this));
326-
327-
return sequence(sequence);
322+
return sequence(
323+
rest.accept(this),
324+
keyrest.accept(this),
325+
block.accept(this));
328326
}
329327

330328
@Override

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public RubyNode translate() {
121121
sequence.add(parameters.block.accept(this));
122122
}
123123

124-
return sequence(sequence);
124+
return sequence(sequence.toArray(RubyNode.EMPTY_ARRAY));
125125
}
126126

127127
@Override

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

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
*/
1010
package org.truffleruby.parser;
1111

12-
import java.util.Arrays;
13-
1412
import org.prism.Nodes;
1513
import org.truffleruby.core.array.ArrayDeconstructNodeGen;
1614
import org.truffleruby.core.array.ArrayIndexNodes;
@@ -114,9 +112,9 @@ public RubyNode visitArrayPatternNode(Nodes.ArrayPatternNode node) {
114112
RubyNode outerPrev = currentValueToMatch;
115113
currentValueToMatch = readTemp;
116114
try {
117-
RubyNode check = YARPTranslator.sequence(Arrays.asList(
115+
RubyNode check = YARPTranslator.sequence(
118116
assignTemp,
119-
ArrayPatternLengthCheckNodeGen.create(preSize + postSize, restNode != null, readTemp)));
117+
ArrayPatternLengthCheckNodeGen.create(preSize + postSize, restNode != null, readTemp));
120118
if (condition == null) {
121119
condition = check;
122120
} else {
@@ -213,9 +211,9 @@ public RubyNode visitHashPatternNode(Nodes.HashPatternNode node) {
213211
RubyNode outerPrev = currentValueToMatch;
214212
currentValueToMatch = readTemp;
215213
try {
216-
RubyNode check = YARPTranslator.sequence(Arrays.asList(
214+
RubyNode check = YARPTranslator.sequence(
217215
assignTemp,
218-
HashPatternLengthCheckNodeGen.create(node.elements.length, readTemp)));
216+
HashPatternLengthCheckNodeGen.create(node.elements.length, readTemp));
219217
if (condition == null) {
220218
condition = check;
221219
} else {
@@ -235,9 +233,9 @@ public RubyNode visitHashPatternNode(Nodes.HashPatternNode node) {
235233
RubyNode prev = currentValueToMatch;
236234
currentValueToMatch = readValue;
237235
try {
238-
RubyNode valueCondition = YARPTranslator.sequence(assocNode, Arrays.asList(
236+
RubyNode valueCondition = YARPTranslator.sequence(assocNode,
239237
writeValue,
240-
AndNodeGen.create(new IsNotUndefinedNode(readValue), assocNode.value.accept(this))));
238+
AndNodeGen.create(new IsNotUndefinedNode(readValue), assocNode.value.accept(this)));
241239
condition = AndNodeGen.create(condition, valueCondition);
242240
} finally {
243241
currentValueToMatch = prev;

0 commit comments

Comments
 (0)