Skip to content

Commit c5cae5e

Browse files
eregonandrykonchin
authored andcommitted
Move fields to ParseEnvironment to pass less arguments to translators
1 parent fc1aa20 commit c5cae5e

11 files changed

+58
-102
lines changed

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

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

12+
import com.oracle.truffle.api.nodes.Node;
1213
import com.oracle.truffle.api.source.Source;
1314
import org.prism.Nodes;
1415
import org.truffleruby.RubyLanguage;
@@ -21,8 +22,12 @@
2122
* then multiple threads might lazy translate methods of the same file in parallel. */
2223
public final class ParseEnvironment {
2324

25+
public final RubyLanguage language;
26+
public final RubySource rubySource;
2427
public final Source source;
2528
public final ParserContext parserContext;
29+
public final Node currentNode;
30+
2631
private final boolean inCore;
2732
private final boolean coverageEnabled;
2833

@@ -31,9 +36,17 @@ public final class ParseEnvironment {
3136
// Set once after parsing and before translating
3237
public Boolean allowTruffleRubyPrimitives = null;
3338

34-
public ParseEnvironment(RubyLanguage language, RubySource rubySource, ParserContext parserContext) {
39+
public ParseEnvironment(
40+
RubyLanguage language,
41+
RubySource rubySource,
42+
ParserContext parserContext,
43+
Node currentNode) {
44+
this.language = language;
45+
this.rubySource = rubySource;
3546
this.source = rubySource.getSource();
3647
this.parserContext = parserContext;
48+
this.currentNode = currentNode;
49+
3750
this.inCore = RubyLanguage.getPath(source).startsWith(language.corePath);
3851
this.coverageEnabled = RubyLanguage.MIME_TYPE_COVERAGE.equals(rubySource.getSource().getMimeType());
3952
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public TranslatorDriver(RubyContext context) {
104104

105105
public RootCallTarget parse(RubySource rubySource, ParserContext parserContext, String[] argumentNames,
106106
MaterializedFrame parentFrame, LexicalScope staticLexicalScope, Node currentNode) {
107-
this.parseEnvironment = new ParseEnvironment(language, rubySource, parserContext);
107+
this.parseEnvironment = new ParseEnvironment(language, rubySource, parserContext, currentNode);
108108

109109
if (language.options.PRISM) {
110110
return new YARPTranslatorDriver(context).parse(rubySource, parserContext, argumentNames,

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

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

1212
import java.util.List;
13+
import java.util.Objects;
1314

15+
import com.oracle.truffle.api.nodes.Node;
1416
import org.prism.AbstractNodeVisitor;
1517
import org.prism.Nodes;
1618
import org.truffleruby.RubyLanguage;
@@ -32,14 +34,15 @@
3234

3335
public abstract class YARPBaseTranslator extends AbstractNodeVisitor<RubyNode> {
3436

35-
protected final RubyLanguage language;
3637
protected final TranslatorEnvironment environment;
37-
protected final RubySource rubySource;
3838

39-
// For convenient/concise access, actually redundant with the rubySource field
39+
// For convenient/concise access, actually redundant with environment.getParseEnvironment()
40+
protected final ParseEnvironment parseEnvironment;
41+
protected final RubyLanguage language;
42+
protected final RubySource rubySource;
4043
protected final Source source;
41-
protected final byte[] sourceBytes;
4244
protected final RubyEncoding sourceEncoding;
45+
protected final Node currentNode;
4346

4447
public static final Nodes.Node[] EMPTY_NODE_ARRAY = Nodes.Node.EMPTY_ARRAY;
4548

@@ -48,16 +51,14 @@ public abstract class YARPBaseTranslator extends AbstractNodeVisitor<RubyNode> {
4851

4952
public static final short NO_FLAGS = 0;
5053

51-
public YARPBaseTranslator(
52-
RubyLanguage language,
53-
TranslatorEnvironment environment,
54-
RubySource rubySource) {
55-
this.language = language;
56-
this.environment = environment;
57-
this.rubySource = rubySource;
54+
public YARPBaseTranslator(TranslatorEnvironment environment) {
55+
this.environment = Objects.requireNonNull(environment);
56+
this.parseEnvironment = environment.getParseEnvironment();
57+
this.language = parseEnvironment.language;
58+
this.rubySource = parseEnvironment.rubySource;
5859
this.source = rubySource.getSource();
59-
this.sourceBytes = rubySource.getBytes();
6060
this.sourceEncoding = rubySource.getEncoding();
61+
this.currentNode = parseEnvironment.currentNode;
6162
}
6263

6364
public final TranslatorEnvironment getEnvironment() {
@@ -131,8 +132,8 @@ protected static Nodes.CallNode callNode(Nodes.Node location, short flags, Nodes
131132
}
132133

133134
protected final TruffleString toTString(Nodes.Node node) {
134-
return TruffleString.fromByteArrayUncached(sourceBytes, node.startOffset, node.length, sourceEncoding.tencoding,
135-
false);
135+
return TruffleString.fromByteArrayUncached(rubySource.getBytes(), node.startOffset, node.length,
136+
sourceEncoding.tencoding, false);
136137
}
137138

138139
protected final TruffleString toTString(String string) {
@@ -188,9 +189,9 @@ protected final void copyNewlineFlag(Nodes.Node yarpNode, RubyNode rubyNode) {
188189
if (yarpNode.hasNewLineFlag()) {
189190
TruffleSafepoint.poll(DummyNode.INSTANCE);
190191

191-
if (environment.getParseEnvironment().isCoverageEnabled()) {
192+
if (parseEnvironment.isCoverageEnabled()) {
192193
rubyNode.unsafeSetIsCoverageLine();
193-
int startLine = environment.getParseEnvironment().yarpSource.line(yarpNode.startOffset);
194+
int startLine = parseEnvironment.yarpSource.line(yarpNode.startOffset);
194195
language.coverageManager.setLineHasCode(source, startLine);
195196
}
196197

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

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

1212
import com.oracle.truffle.api.RootCallTarget;
13-
import com.oracle.truffle.api.nodes.Node;
1413
import com.oracle.truffle.api.nodes.NodeUtil;
1514
import com.oracle.truffle.api.source.SourceSection;
1615
import org.prism.Nodes;
@@ -46,14 +45,8 @@ public final class YARPBlockNodeTranslator extends YARPTranslator {
4645

4746
private final Arity arity;
4847

49-
public YARPBlockNodeTranslator(
50-
RubyLanguage language,
51-
TranslatorEnvironment environment,
52-
RubySource rubySource,
53-
ParserContext parserContext,
54-
Node currentNode,
55-
Arity arity) {
56-
super(language, environment, rubySource, parserContext, currentNode);
48+
public YARPBlockNodeTranslator(TranslatorEnvironment environment, Arity arity) {
49+
super(environment);
5750
this.arity = arity;
5851
}
5952

@@ -63,9 +56,7 @@ public RubyNode compileBlockNode(Nodes.Node body, Nodes.ParametersNode parameter
6356
declareLocalVariables(locals);
6457

6558
final RubyNode loadArguments = new YARPLoadArgumentsTranslator(
66-
language,
6759
environment,
68-
rubySource,
6960
parameters,
7061
arity,
7162
!isStabbyLambda,
@@ -164,9 +155,7 @@ private RubyNode preludeProc(
164155
final RubyNode readArrayNode = new ReadLocalVariableNode(LocalVariableType.FRAME_LOCAL, arraySlot);
165156

166157
final var translator = new YARPParametersNodeToDestructureTranslator(
167-
language,
168158
environment,
169-
rubySource,
170159
parameters,
171160
readArrayNode,
172161
this);

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

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import org.truffleruby.language.methods.Arity;
1919
import org.truffleruby.language.methods.CachedLazyCallTargetSupplier;
2020

21-
import com.oracle.truffle.api.nodes.Node;
2221
import org.prism.Nodes;
2322

2423
public final class YARPDefNodeTranslator extends YARPTranslator {
@@ -27,13 +26,10 @@ public final class YARPDefNodeTranslator extends YARPTranslator {
2726

2827
public YARPDefNodeTranslator(
2928
RubyLanguage language,
30-
TranslatorEnvironment environment,
31-
RubySource rubySource,
32-
ParserContext parserContext,
33-
Node currentNode) {
34-
super(language, environment, rubySource, parserContext, currentNode);
29+
TranslatorEnvironment environment) {
30+
super(environment);
3531

36-
if (parserContext.isEval() || environment.getParseEnvironment().isCoverageEnabled()) {
32+
if (parseEnvironment.parserContext.isEval() || parseEnvironment.isCoverageEnabled()) {
3733
shouldLazyTranslate = false;
3834
} else if (language.getSourcePath(source).startsWith(language.coreLoadPath)) {
3935
shouldLazyTranslate = language.options.LAZY_TRANSLATION_CORE;
@@ -46,9 +42,7 @@ private RubyNode compileMethodBody(Nodes.DefNode node, Nodes.ParametersNode para
4642
declareLocalVariables(node);
4743

4844
final RubyNode loadArguments = new YARPLoadArgumentsTranslator(
49-
language,
5045
environment,
51-
rubySource,
5246
parameters,
5347
arity,
5448
false,

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
import com.oracle.truffle.api.CompilerDirectives;
1717
import org.truffleruby.Layouts;
18-
import org.truffleruby.RubyLanguage;
1918
import org.truffleruby.language.RubyNode;
2019
import org.truffleruby.language.arguments.CheckNoKeywordArgumentsNode;
2120
import org.truffleruby.language.arguments.MissingArgumentBehavior;
@@ -56,15 +55,13 @@ private enum State {
5655
private int repeatedParameterCounter = 2;
5756

5857
public YARPLoadArgumentsTranslator(
59-
RubyLanguage language,
6058
TranslatorEnvironment environment,
61-
RubySource rubySource,
6259
Nodes.ParametersNode parameters,
6360
Arity arity,
6461
boolean isProc,
6562
boolean isMethod,
6663
YARPTranslator yarpTranslator) {
67-
super(language, environment, rubySource);
64+
super(environment);
6865
this.arity = arity;
6966
this.isProc = isProc;
7067
this.isMethod = isMethod;

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
import com.oracle.truffle.api.CompilerDirectives;
1616
import org.prism.Nodes;
17-
import org.truffleruby.RubyLanguage;
1817
import org.truffleruby.core.array.ArrayIndexNodes;
1918
import org.truffleruby.core.array.ArraySliceNodeGen;
2019
import org.truffleruby.core.hash.HashLiteralNode;
@@ -56,13 +55,11 @@ private enum State {
5655
private final RubyNode readArrayNode;
5756

5857
public YARPParametersNodeToDestructureTranslator(
59-
RubyLanguage language,
6058
TranslatorEnvironment environment,
61-
RubySource rubySource,
6259
Nodes.ParametersNode parameters,
6360
RubyNode readArrayNode,
6461
YARPTranslator yarpTranslator) {
65-
super(language, environment, rubySource);
62+
super(environment);
6663
this.parameters = parameters;
6764
this.readArrayNode = readArrayNode;
6865
this.yarpTranslator = yarpTranslator;

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import java.util.Arrays;
1313

1414
import org.prism.Nodes;
15-
import org.truffleruby.RubyLanguage;
1615
import org.truffleruby.core.array.ArrayDeconstructNodeGen;
1716
import org.truffleruby.core.array.ArrayIndexNodes;
1817
import org.truffleruby.core.array.ArrayPatternLengthCheckNodeGen;
@@ -44,11 +43,9 @@ public final class YARPPatternMatchingTranslator extends YARPBaseTranslator {
4443
private RubyNode currentValueToMatch;
4544

4645
public YARPPatternMatchingTranslator(
47-
RubyLanguage language,
4846
TranslatorEnvironment environment,
49-
RubySource rubySource,
5047
YARPTranslator yarpTranslator) {
51-
super(language, environment, rubySource);
48+
super(environment);
5249
this.yarpTranslator = yarpTranslator;
5350
}
5451

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import com.oracle.truffle.api.CompilerDirectives;
1717
import org.prism.Nodes;
1818
import org.truffleruby.Layouts;
19-
import org.truffleruby.RubyLanguage;
2019
import org.truffleruby.core.hash.ConcatHashLiteralNode;
2120
import org.truffleruby.core.hash.HashLiteralNode;
2221
import org.truffleruby.language.RubyNode;
@@ -41,12 +40,10 @@ public final class YARPReloadArgumentsTranslator extends YARPBaseTranslator {
4140
private int repeatedParameterCounter = 2;
4241

4342
public YARPReloadArgumentsTranslator(
44-
RubyLanguage language,
4543
TranslatorEnvironment environment,
46-
RubySource rubySource,
4744
YARPTranslator yarpTranslator,
4845
Nodes.ParametersNode parametersNode) {
49-
super(language, environment, rubySource);
46+
super(environment);
5047
this.yarpTranslator = yarpTranslator;
5148
this.hasKeywordArguments = parametersNode.keywords.length > 0 || parametersNode.keyword_rest != null;
5249
}

0 commit comments

Comments
 (0)