Skip to content

Commit d352b73

Browse files
committed
Adopt splitting KeywordParameterNode class into Required and Optional
1 parent 0396a89 commit d352b73

File tree

2 files changed

+32
-24
lines changed

2 files changed

+32
-24
lines changed

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

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ private RubyNode translateWithParameters() {
119119

120120
if (hasKeywordArguments()) {
121121
for (var node : parametersNode.keywords) {
122-
sequence.add(node.accept(this)); // Nodes.KeywordParameterNode is expected here
122+
sequence.add(node.accept(this)); // Nodes.RequiredKeywordParameterNode/Nodes.OptionalKeywordParameterNode are expected here
123123
}
124124
}
125125

@@ -173,6 +173,14 @@ public RubyNode visitMultiTargetNode(Nodes.MultiTargetNode node) {
173173
return rubyNode;
174174
}
175175

176+
public RubyNode visitRequiredKeywordParameterNode(Nodes.RequiredKeywordParameterNode node) {
177+
final int slot = environment.declareVar(node.name);
178+
final var name = language.getSymbol(node.name);
179+
final var readNode = ReadKeywordArgumentNode.create(name, null);
180+
181+
return new WriteLocalVariableNode(slot, readNode);
182+
}
183+
176184
public RubyNode visitRequiredParameterNode(Nodes.RequiredParameterNode node) {
177185
final RubyNode readNode;
178186

@@ -194,6 +202,15 @@ public RubyNode visitRequiredParameterNode(Nodes.RequiredParameterNode node) {
194202
return new WriteLocalVariableNode(slot, readNode);
195203
}
196204

205+
public RubyNode visitOptionalKeywordParameterNode(Nodes.OptionalKeywordParameterNode node) {
206+
final int slot = environment.declareVar(node.name);
207+
final var name = language.getSymbol(node.name);
208+
final var value = node.value.accept(this);
209+
final var readNode = ReadKeywordArgumentNode.create(name, value);
210+
211+
return new WriteLocalVariableNode(slot, readNode);
212+
}
213+
197214
public RubyNode visitOptionalParameterNode(Nodes.OptionalParameterNode node) {
198215
final RubyNode readNode;
199216
final RubyNode defaultValue = node.value.accept(this);
@@ -221,20 +238,6 @@ public RubyNode visitRestParameterNode(Nodes.RestParameterNode node) {
221238
return new WriteLocalVariableNode(slot, readNode);
222239
}
223240

224-
public RubyNode visitKeywordParameterNode(Nodes.KeywordParameterNode node) {
225-
final int slot = environment.declareVar(node.name);
226-
final RubyNode defaultValue;
227-
228-
if (node.value != null) {
229-
defaultValue = yarpTranslator.translateNodeOrNil(node.value);
230-
} else {
231-
defaultValue = null;
232-
}
233-
234-
final RubyNode readNode = ReadKeywordArgumentNode.create(language.getSymbol(node.name), defaultValue);
235-
return new WriteLocalVariableNode(slot, readNode);
236-
}
237-
238241
public RubyNode visitKeywordRestParameterNode(Nodes.KeywordRestParameterNode node) {
239242
final RubyNode readNode = new ReadKeywordRestArgumentNode(language, arity);
240243
final String name = (node.name != null) ? node.name : YARPDefNodeTranslator.DEFAULT_KEYWORD_REST_NAME;

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

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2272,9 +2272,15 @@ private ArgumentDescriptor[] parametersNodeToArgumentDescriptors(Nodes.Parameter
22722272
}
22732273

22742274
for (var node : parametersNode.keywords) {
2275-
var keywordParameterNode = (Nodes.KeywordParameterNode) node;
2276-
var type = (keywordParameterNode.value == null) ? ArgumentType.keyreq : ArgumentType.key;
2277-
var descriptor = new ArgumentDescriptor(type, keywordParameterNode.name);
2275+
final ArgumentDescriptor descriptor;
2276+
2277+
if (node instanceof Nodes.RequiredKeywordParameterNode required) {
2278+
descriptor = new ArgumentDescriptor(ArgumentType.keyreq, required.name);
2279+
} else if (node instanceof Nodes.OptionalKeywordParameterNode optional) {
2280+
descriptor = new ArgumentDescriptor(ArgumentType.key, optional.name);
2281+
} else {
2282+
throw CompilerDirectives.shouldNotReachHere();
2283+
}
22782284

22792285
descriptors.add(descriptor);
22802286
}
@@ -2319,13 +2325,12 @@ private Arity createArity(Nodes.ParametersNode parametersNode) {
23192325
final List<String> optionalKeywords = new ArrayList<>();
23202326

23212327
for (var node : parametersNode.keywords) {
2322-
final var keywordParameterNode = (Nodes.KeywordParameterNode) node;
2323-
final String name = keywordParameterNode.name;
2324-
2325-
if (keywordParameterNode.value == null) {
2326-
requiredKeywords.add(name);
2328+
if (node instanceof Nodes.RequiredKeywordParameterNode required) {
2329+
requiredKeywords.add(required.name);
2330+
} else if (node instanceof Nodes.OptionalKeywordParameterNode optional) {
2331+
optionalKeywords.add(optional.name);
23272332
} else {
2328-
optionalKeywords.add(name);
2333+
throw CompilerDirectives.shouldNotReachHere();
23292334
}
23302335
}
23312336

0 commit comments

Comments
 (0)