@@ -6595,30 +6595,35 @@ pattern_unpack_helper(struct compiler *c, location loc,
6595
6595
pattern_ty elt = asdl_seq_GET (elts , i );
6596
6596
if (elt -> kind == MatchStar_kind && !seen_star ) {
6597
6597
if ((i >= (1 << 8 )) ||
6598
- (n - i - 1 >= (INT_MAX >> 8 )))
6599
- return compiler_error (c , loc ,
6598
+ (n - i - 1 >= (INT_MAX >> 8 ))) {
6599
+ compiler_error (c , loc ,
6600
6600
"too many expressions in "
6601
6601
"star-unpacking sequence pattern" );
6602
- _ADDOP_I (c , loc , UNPACK_EX , (i + ((n - i - 1 ) << 8 )));
6602
+ return ERROR ;
6603
+ }
6604
+ ADDOP_I (c , loc , UNPACK_EX , (i + ((n - i - 1 ) << 8 )));
6603
6605
seen_star = 1 ;
6604
6606
}
6605
6607
else if (elt -> kind == MatchStar_kind ) {
6606
- return compiler_error (c , loc ,
6608
+ compiler_error (c , loc ,
6607
6609
"multiple starred expressions in sequence pattern" );
6610
+ return ERROR ;
6608
6611
}
6609
6612
}
6610
6613
if (!seen_star ) {
6611
- _ADDOP_I (c , loc , UNPACK_SEQUENCE , n );
6614
+ ADDOP_I (c , loc , UNPACK_SEQUENCE , n );
6612
6615
}
6613
- return 1 ;
6616
+ return SUCCESS ;
6614
6617
}
6615
6618
6616
6619
static int
6617
6620
pattern_helper_sequence_unpack (struct compiler * c , location loc ,
6618
6621
asdl_pattern_seq * patterns , Py_ssize_t star ,
6619
6622
pattern_context * pc )
6620
6623
{
6621
- RETURN_IF_FALSE (pattern_unpack_helper (c , loc , patterns ));
6624
+ if (pattern_unpack_helper (c , loc , patterns ) < 0 ) {
6625
+ return 0 ;
6626
+ }
6622
6627
Py_ssize_t size = asdl_seq_LEN (patterns );
6623
6628
// We've now got a bunch of new subjects on the stack. They need to remain
6624
6629
// there after each subpattern match:
0 commit comments