@@ -119,7 +119,7 @@ private RubyNode translateWithParameters() {
119
119
120
120
if (hasKeywordArguments ()) {
121
121
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
123
123
}
124
124
}
125
125
@@ -173,6 +173,14 @@ public RubyNode visitMultiTargetNode(Nodes.MultiTargetNode node) {
173
173
return rubyNode ;
174
174
}
175
175
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
+
176
184
public RubyNode visitRequiredParameterNode (Nodes .RequiredParameterNode node ) {
177
185
final RubyNode readNode ;
178
186
@@ -194,6 +202,15 @@ public RubyNode visitRequiredParameterNode(Nodes.RequiredParameterNode node) {
194
202
return new WriteLocalVariableNode (slot , readNode );
195
203
}
196
204
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
+
197
214
public RubyNode visitOptionalParameterNode (Nodes .OptionalParameterNode node ) {
198
215
final RubyNode readNode ;
199
216
final RubyNode defaultValue = node .value .accept (this );
@@ -221,20 +238,6 @@ public RubyNode visitRestParameterNode(Nodes.RestParameterNode node) {
221
238
return new WriteLocalVariableNode (slot , readNode );
222
239
}
223
240
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
-
238
241
public RubyNode visitKeywordRestParameterNode (Nodes .KeywordRestParameterNode node ) {
239
242
final RubyNode readNode = new ReadKeywordRestArgumentNode (language , arity );
240
243
final String name = (node .name != null ) ? node .name : YARPDefNodeTranslator .DEFAULT_KEYWORD_REST_NAME ;
0 commit comments