@@ -2188,13 +2188,14 @@ public RubyNode visitMultipleAsgnNode(MultipleAsgnParseNode node) {
2188
2188
final SourceIndexLength sourceSection = node .getPosition ();
2189
2189
2190
2190
final ListParseNode preArray = node .getPre ();
2191
+ final ParseNode rest = node .getRest ();
2191
2192
final ListParseNode postArray = node .getPost ();
2192
2193
final ParseNode rhs = node .getValueNode ();
2193
2194
2194
2195
RubyNode rhsTranslated ;
2195
2196
2196
2197
if (rhs == null ) {
2197
- throw new UnsupportedOperationException ("null rhs" );
2198
+ throw CompilerDirectives . shouldNotReachHere ("null rhs" );
2198
2199
} else {
2199
2200
rhsTranslated = rhs .accept (this );
2200
2201
}
@@ -2203,8 +2204,7 @@ public RubyNode visitMultipleAsgnNode(MultipleAsgnParseNode node) {
2203
2204
2204
2205
// TODO CS 5-Jan-15 we shouldn't be doing this kind of low level optimisation or pattern matching - EA should do it for us
2205
2206
2206
- if (preArray != null && node .getPost () == null && node .getRest () == null &&
2207
- rhsTranslated instanceof ArrayLiteralNode &&
2207
+ if (preArray != null && postArray == null && rest == null && rhsTranslated instanceof ArrayLiteralNode &&
2208
2208
((ArrayLiteralNode ) rhsTranslated ).getSize () == preArray .size ()) {
2209
2209
/* We can deal with this common case be rewriting
2210
2210
*
@@ -2310,15 +2310,15 @@ public RubyNode visitMultipleAsgnNode(MultipleAsgnParseNode node) {
2310
2310
sequence .add (translateDummyAssignment (preArray .get (n ), assignedValue ));
2311
2311
}
2312
2312
2313
- if (node . getRest () != null ) {
2313
+ if (rest != null ) {
2314
2314
RubyNode assignedValue = ArrayGetTailNodeGen
2315
2315
.create (preArray .size (), environment .findLocalVarNode (tempName , sourceSection ));
2316
2316
2317
2317
if (postArray != null ) {
2318
2318
assignedValue = ArrayDropTailNodeGen .create (postArray .size (), assignedValue );
2319
2319
}
2320
2320
2321
- sequence .add (translateDummyAssignment (node . getRest () , assignedValue ));
2321
+ sequence .add (translateDummyAssignment (rest , assignedValue ));
2322
2322
}
2323
2323
2324
2324
if (postArray != null ) {
@@ -2357,9 +2357,9 @@ public RubyNode visitMultipleAsgnNode(MultipleAsgnParseNode node) {
2357
2357
result = new ElidableResultNode (
2358
2358
sequence (sourceSection , sequence ),
2359
2359
environment .findLocalVarNode (tempRHSName , sourceSection ));
2360
- } else if (node . getPre () == null && node . getPost () == null && node . getRest () instanceof StarParseNode ) {
2360
+ } else if (preArray == null && postArray == null && rest instanceof StarParseNode ) {
2361
2361
result = rhsTranslated ;
2362
- } else if (node . getPre () == null && node . getPost () == null && node . getRest () != null &&
2362
+ } else if (preArray == null && postArray == null && rest != null &&
2363
2363
!(rhs instanceof ArrayParseNode )) {
2364
2364
/* *a = b
2365
2365
*
@@ -2405,7 +2405,7 @@ public RubyNode visitMultipleAsgnNode(MultipleAsgnParseNode node) {
2405
2405
2406
2406
sequence .add (
2407
2407
translateDummyAssignment (
2408
- node . getRest () ,
2408
+ rest ,
2409
2409
environment .findLocalVarNode (tempRHSSplattedName , sourceSection )));
2410
2410
2411
2411
final RubyNode assignmentResult ;
@@ -2417,15 +2417,14 @@ public RubyNode visitMultipleAsgnNode(MultipleAsgnParseNode node) {
2417
2417
}
2418
2418
2419
2419
result = new ElidableResultNode (sequence (sourceSection , sequence ), assignmentResult );
2420
- } else if (node .getPre () == null && node .getPost () == null && node .getRest () != null &&
2421
- rhs instanceof ArrayParseNode ) {
2420
+ } else if (preArray == null && postArray == null && rest != null && rhs instanceof ArrayParseNode ) {
2422
2421
/* *a = [b, c]
2423
2422
*
2424
2423
* This seems to be the same as:
2425
2424
*
2426
2425
* a = [b, c] */
2427
- result = translateDummyAssignment (node . getRest () , rhsTranslated );
2428
- } else if (node . getPre () == null && node . getRest () != null && node . getPost () != null ) {
2426
+ result = translateDummyAssignment (rest , rhsTranslated );
2427
+ } else if (preArray == null && rest != null && postArray != null ) {
2429
2428
/* Something like
2430
2429
*
2431
2430
* *a,b = [1, 2, 3, 4] */
@@ -2464,11 +2463,11 @@ public RubyNode visitMultipleAsgnNode(MultipleAsgnParseNode node) {
2464
2463
2465
2464
/* Then index the temp array for each assignment on the LHS. */
2466
2465
2467
- if (node . getRest () != null ) {
2466
+ if (rest != null ) {
2468
2467
final ArrayDropTailNode assignedValue = ArrayDropTailNodeGen
2469
2468
.create (postArray .size (), environment .findLocalVarNode (tempName , sourceSection ));
2470
2469
2471
- sequence .add (translateDummyAssignment (node . getRest () , assignedValue ));
2470
+ sequence .add (translateDummyAssignment (rest , assignedValue ));
2472
2471
}
2473
2472
2474
2473
final List <RubyNode > smallerSequence = new ArrayList <>();
0 commit comments