Skip to content

Commit fa95ce5

Browse files
committed
Translate BEGIN node
1 parent d1461c8 commit fa95ce5

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

spec/tags/truffle/parsing/parsing_tags.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
fails:Parsing a BEGIN block (BEGIN { ... }) case is parsed correctly
21
fails:Parsing a For operator (for ... in ... operator) case is parsed correctly
32

43
# Not supported yet by Prism

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,9 @@ public class YARPTranslator extends AbstractNodeVisitor<RubyNode> {
215215
"_9"
216216
};
217217

218+
// all the encountered BEGIN {} blocks
219+
private final ArrayDeque<Nodes.PreExecutionNode> beginBlocksQueue = new ArrayDeque<>();
220+
218221
public YARPTranslator(
219222
RubyLanguage language,
220223
TranslatorEnvironment environment,
@@ -2440,12 +2443,22 @@ public RubyNode visitPostExecutionNode(Nodes.PostExecutionNode node) {
24402443

24412444
@Override
24422445
public RubyNode visitPreExecutionNode(Nodes.PreExecutionNode node) {
2443-
return defaultVisit(node);
2446+
beginBlocksQueue.add(node);
2447+
return null;
24442448
}
24452449

24462450
@Override
24472451
public RubyNode visitProgramNode(Nodes.ProgramNode node) {
2448-
return node.statements.accept(this);
2452+
final RubyNode sequence = node.statements.accept(this);
2453+
2454+
// add BEGIN {} blocks at the very beginning of the program
2455+
ArrayList<RubyNode> nodes = new ArrayList<>();
2456+
for (var begin : beginBlocksQueue) {
2457+
nodes.add(begin.statements.accept(this));
2458+
}
2459+
2460+
nodes.add(sequence);
2461+
return sequence(node, nodes);
24492462
}
24502463

24512464
@Override

0 commit comments

Comments
 (0)