23
23
import org .truffleruby .language .control .NotNode ;
24
24
import org .truffleruby .language .control .RaiseException ;
25
25
import org .truffleruby .language .dispatch .RubyCallNodeParameters ;
26
- import org .truffleruby .language .literal .BooleanLiteralNode ;
27
26
import org .truffleruby .language .literal .NilLiteralNode ;
28
27
import org .truffleruby .language .literal .TruffleInternalModuleLiteralNode ;
29
28
import org .truffleruby .language .locals .ReadLocalNode ;
@@ -70,10 +69,8 @@ public PatternMatchingTranslator(
70
69
Source source ,
71
70
ParserContext parserContext ,
72
71
Node currentNode ,
73
- /** data to match on */
74
- ParseNode data ,
75
- /** cases to check. */
76
- ListParseNode cases ,
72
+ ParseNode data , // data to match on
73
+ ListParseNode cases , // cases to check
77
74
TranslatorEnvironment environment ,
78
75
BodyTranslator bodyTranslator ) {
79
76
super (language , source , parserContext , currentNode , environment );
@@ -97,8 +94,6 @@ protected RubyNode defaultVisit(ParseNode node) {
97
94
@ Override
98
95
public RubyNode visitArrayPatternNode (ArrayPatternParseNode arrayPatternParseNode ) {
99
96
final RubyCallNodeParameters deconstructCallParameters ;
100
- final RubyCallNodeParameters matcherCallParameters ;
101
- final RubyCallNodeParameters matcherCallParametersPost ;
102
97
final RubyNode receiver ;
103
98
final RubyNode deconstructed ;
104
99
final SourceIndexLength sourceSection = arrayPatternParseNode .getPosition ();
@@ -107,8 +102,6 @@ public RubyNode visitArrayPatternNode(ArrayPatternParseNode arrayPatternParseNod
107
102
ListParseNode postNodes = arrayPatternParseNode .getPostArgs ();
108
103
ParseNode restNode = arrayPatternParseNode .getRestArg ();
109
104
110
- var arrayParseNodeRest = arrayPatternParseNode .getRestArg ();
111
-
112
105
receiver = new TruffleInternalModuleLiteralNode ();
113
106
receiver .unsafeSetSourceSection (sourceSection );
114
107
deconstructCallParameters = new RubyCallNodeParameters (
@@ -119,19 +112,16 @@ public RubyNode visitArrayPatternNode(ArrayPatternParseNode arrayPatternParseNod
119
112
new RubyNode []{ currentValueToMatch },
120
113
false ,
121
114
true );
122
- deconstructed = language .coreMethodAssumptions
123
- .createCallNode (deconstructCallParameters );
115
+ deconstructed = language .coreMethodAssumptions .createCallNode (deconstructCallParameters );
124
116
125
117
final int deconSlot = environment .declareLocalTemp ("p_decon_array" );
126
118
final ReadLocalNode readTemp = environment .readNode (deconSlot , sourceSection );
127
119
final RubyNode assignTemp = readTemp .makeWriteNode (deconstructed );
128
120
currentValueToMatch = readTemp ;
129
121
130
-
131
122
int preSize = arrayPatternParseNode .preArgsNum ();
132
123
133
- RubyNode condition = null ;
134
- condition = new ArrayPatternLengthCheckNode (arrayPatternParseNode .minimumArgsNum (),
124
+ RubyNode condition = new ArrayPatternLengthCheckNode (arrayPatternParseNode .minimumArgsNum (),
135
125
currentValueToMatch , arrayPatternParseNode .hasRestArg ());
136
126
137
127
// Constant == pattern.deconstruct
@@ -146,12 +136,10 @@ public RubyNode visitArrayPatternNode(ArrayPatternParseNode arrayPatternParseNod
146
136
new RubyNode []{ currentValueToMatch },
147
137
false ,
148
138
true );
149
- RubyNode isInstance = language .coreMethodAssumptions
150
- .createCallNode (instanceCheckParameters );
139
+ RubyNode isInstance = language .coreMethodAssumptions .createCallNode (instanceCheckParameters );
151
140
condition = new AndNode (isInstance , condition );
152
141
}
153
142
154
-
155
143
for (int i = 0 ; i < preSize ; i ++) {
156
144
ParseNode loopPreNode = preNodes .get (i );
157
145
RubyNode translatedPatternElement ;
@@ -174,11 +162,7 @@ public RubyNode visitArrayPatternNode(ArrayPatternParseNode arrayPatternParseNod
174
162
true );
175
163
176
164
var callNode = language .coreMethodAssumptions .createCallNode (parameters );
177
- if (condition == null ) {
178
- condition = callNode ;
179
- } else {
180
- condition = new AndNode (condition , callNode );
181
- }
165
+ condition = new AndNode (condition , callNode );
182
166
}
183
167
184
168
if (restNode != null ) {
@@ -199,11 +183,7 @@ public RubyNode visitArrayPatternNode(ArrayPatternParseNode arrayPatternParseNod
199
183
currentValueToMatch = prev ;
200
184
}
201
185
var seq = new ExecuteAndReturnTrueNode (restAccept );
202
- if (condition == null ) {
203
- condition = seq ;
204
- } else {
205
- condition = new AndNode (condition , seq );
206
- }
186
+ condition = new AndNode (condition , seq );
207
187
}
208
188
}
209
189
@@ -231,15 +211,10 @@ public RubyNode visitArrayPatternNode(ArrayPatternParseNode arrayPatternParseNod
231
211
true );
232
212
233
213
var callNode = language .coreMethodAssumptions .createCallNode (parameters );
234
- if (condition == null ) {
235
- condition = callNode ;
236
- } else {
237
- condition = new AndNode (condition , callNode );
238
- }
214
+ condition = new AndNode (condition , callNode );
239
215
}
240
216
}
241
217
242
- condition = condition == null ? new BooleanLiteralNode (true ) : condition ;
243
218
return sequence (sourceSection , Arrays .asList (assignTemp , condition ));
244
219
}
245
220
@@ -262,8 +237,7 @@ public RubyNode visitHashPatternNode(HashPatternParseNode node) {
262
237
new RubyNode []{ new NilLiteralNode (true ) },
263
238
false ,
264
239
true );
265
- deconstructed = language .coreMethodAssumptions
266
- .createCallNode (deconstructCallParameters );
240
+ deconstructed = language .coreMethodAssumptions .createCallNode (deconstructCallParameters );
267
241
268
242
receiver = new TruffleInternalModuleLiteralNode ();
269
243
receiver .unsafeSetSourceSection (node .getPosition ());
@@ -277,17 +251,11 @@ public RubyNode visitHashPatternNode(HashPatternParseNode node) {
277
251
false ,
278
252
true );
279
253
280
- return language .coreMethodAssumptions
281
- .createCallNode (matcherCallParameters );
254
+ return language .coreMethodAssumptions .createCallNode (matcherCallParameters );
282
255
}
283
256
284
- public RubyNode translatePatternNode (ParseNode patternNode , RubyNode expressionValue ,
285
- SourceIndexLength sourceSection ) {
286
- final RubyCallNodeParameters deconstructCallParameters ;
257
+ public RubyNode translatePatternNode (ParseNode patternNode , RubyNode expressionValue ) {
287
258
final RubyCallNodeParameters matcherCallParameters ;
288
- final RubyCallNodeParameters matcherCallParametersPost ;
289
- final RubyNode receiver ;
290
- final RubyNode deconstructed ;
291
259
292
260
currentValueToMatch = expressionValue ;
293
261
@@ -303,19 +271,17 @@ public RubyNode translatePatternNode(ParseNode patternNode, RubyNode expressionV
303
271
throw new RaiseException (
304
272
context ,
305
273
context .getCoreExceptions ().syntaxError (
306
- "not yet handled in pattern matching: " + node . toString () + " " + node .getPosition (),
274
+ "not yet handled in pattern matching: " + node + " " + node .getPosition (),
307
275
currentNode ,
308
276
node .getPosition ().toSourceSection (source )));
309
277
case IFNODE : // handles both if and unless
310
278
var ifNode = (IfParseNode ) patternNode ;
311
279
RubyNode pattern ;
312
280
RubyNode condition = ifNode .getCondition ().accept (bodyTranslator );
313
281
if (ifNode .getThenBody () != null ) {
314
- pattern = translatePatternNode (ifNode .getThenBody (), expressionValue ,
315
- sourceSection );
282
+ pattern = translatePatternNode (ifNode .getThenBody (), expressionValue );
316
283
} else {
317
- pattern = translatePatternNode (ifNode .getElseBody (), expressionValue ,
318
- sourceSection );
284
+ pattern = translatePatternNode (ifNode .getElseBody (), expressionValue );
319
285
condition = new NotNode (condition );
320
286
}
321
287
@@ -329,8 +295,7 @@ public RubyNode translatePatternNode(ParseNode patternNode, RubyNode expressionV
329
295
new RubyNode []{ NodeUtil .cloneNode (expressionValue ) },
330
296
false ,
331
297
true );
332
- return language .coreMethodAssumptions
333
- .createCallNode (matcherCallParameters );
298
+ return language .coreMethodAssumptions .createCallNode (matcherCallParameters );
334
299
}
335
300
}
336
301
0 commit comments