@@ -540,84 +540,72 @@ def test_folding_unaryop(self):
540
540
self .check_lnotab (code )
541
541
542
542
def test_folding_binop (self ):
543
- add = get_binop_argval ('NB_ADD' )
544
- sub = get_binop_argval ('NB_SUBTRACT' )
545
- mul = get_binop_argval ('NB_MULTIPLY' )
546
- div = get_binop_argval ('NB_TRUE_DIVIDE' )
547
- floor = get_binop_argval ('NB_FLOOR_DIVIDE' )
548
- rem = get_binop_argval ('NB_REMAINDER' )
549
- pow = get_binop_argval ('NB_POWER' )
550
- lshift = get_binop_argval ('NB_LSHIFT' )
551
- rshift = get_binop_argval ('NB_RSHIFT' )
552
- or_ = get_binop_argval ('NB_OR' )
553
- and_ = get_binop_argval ('NB_AND' )
554
- xor = get_binop_argval ('NB_XOR' )
555
- subscr = get_binop_argval ('NB_SUBSCR' )
556
543
tests = [
557
- ('1 + 2' , False , add ),
558
- ('1 + 2 + 3' , False , add ),
559
- ('1 + ""' , True , add ),
560
- ('1 - 2' , False , sub ),
561
- ('1 - 2 - 3' , False , sub ),
562
- ('1 - ""' , True , sub ),
563
- ('2 * 2' , False , mul ),
564
- ('2 * 2 * 2' , False , mul ),
565
- ('2 / 2' , False , div ),
566
- ('2 / 2 / 2' , False , div ),
567
- ('2 / ""' , True , div ),
568
- ('2 // 2' , False , floor ),
569
- ('2 // 2 // 2' , False , floor ),
570
- ('2 // ""' , True , floor ),
571
- ('2 % 2' , False , rem ),
572
- ('2 % 2 % 2' , False , rem ),
573
- ('2 % ()' , True , rem ),
574
- ('2 ** 2' , False , pow ),
575
- ('2 ** 2 ** 2' , False , pow ),
576
- ('2 ** ""' , True , pow ),
577
- ('2 << 2' , False , lshift ),
578
- ('2 << 2 << 2' , False , lshift ),
579
- ('2 << ""' , True , lshift ),
580
- ('2 >> 2' , False , rshift ),
581
- ('2 >> 2 >> 2' , False , rshift ),
582
- ('2 >> ""' , True , rshift ),
583
- ('2 | 2' , False , or_ ),
584
- ('2 | 2 | 2' , False , or_ ),
585
- ('2 | ""' , True , or_ ),
586
- ('2 & 2' , False , and_ ),
587
- ('2 & 2 & 2' , False , and_ ),
588
- ('2 & ""' , True , and_ ),
589
- ('2 ^ 2' , False , xor ),
590
- ('2 ^ 2 ^ 2' , False , xor ),
591
- ('2 ^ ""' , True , xor ),
592
- ('(1, )[0]' , False , subscr ),
593
- ('(1, )[-1]' , False , subscr ),
594
- ('(1 + 2, )[0]' , False , subscr ),
595
- ('(1, (1, 2))[1][1]' , False , subscr ),
596
- ('(1, 2)[2-1]' , False , subscr ),
597
- ('(1, (1, 2))[1][2-1]' , False , subscr ),
598
- ('(1, (1, 2))[1:6][0][2-1]' , False , subscr ),
599
- ('"a"[0]' , False , subscr ),
600
- ('("a" + "b")[1]' , False , subscr ),
601
- ('("a" + "b", )[0][1]' , False , subscr ),
602
- ('("a" * 10)[9]' , False , subscr ),
603
- ('(1, )[1]' , True , subscr ),
604
- ('(1, )[-2]' , True , subscr ),
605
- ('"a"[1]' , True , subscr ),
606
- ('"a"[-2]' , True , subscr ),
607
- ('("a" + "b")[2]' , True , subscr ),
608
- ('("a" + "b", )[0][2]' , True , subscr ),
609
- ('("a" + "b", )[1][0]' , True , subscr ),
610
- ('("a" * 10)[10]' , True , subscr ),
611
- ('(1, (1, 2))[2:6][0][2-1]' , True , subscr ),
544
+ ('1 + 2' , False , 'NB_ADD' ),
545
+ ('1 + 2 + 3' , False , 'NB_ADD' ),
546
+ ('1 + ""' , True , 'NB_ADD' ),
547
+ ('1 - 2' , False , 'NB_SUBTRACT' ),
548
+ ('1 - 2 - 3' , False , 'NB_SUBTRACT' ),
549
+ ('1 - ""' , True , 'NB_SUBTRACT' ),
550
+ ('2 * 2' , False , 'NB_MULTIPLY' ),
551
+ ('2 * 2 * 2' , False , 'NB_MULTIPLY' ),
552
+ ('2 / 2' , False , 'NB_TRUE_DIVIDE' ),
553
+ ('2 / 2 / 2' , False , 'NB_TRUE_DIVIDE' ),
554
+ ('2 / ""' , True , 'NB_TRUE_DIVIDE' ),
555
+ ('2 // 2' , False , 'NB_FLOOR_DIVIDE' ),
556
+ ('2 // 2 // 2' , False , 'NB_FLOOR_DIVIDE' ),
557
+ ('2 // ""' , True , 'NB_FLOOR_DIVIDE' ),
558
+ ('2 % 2' , False , 'NB_REMAINDER' ),
559
+ ('2 % 2 % 2' , False , 'NB_REMAINDER' ),
560
+ ('2 % ()' , True , 'NB_REMAINDER' ),
561
+ ('2 ** 2' , False , 'NB_POWER' ),
562
+ ('2 ** 2 ** 2' , False , 'NB_POWER' ),
563
+ ('2 ** ""' , True , 'NB_POWER' ),
564
+ ('2 << 2' , False , 'NB_LSHIFT' ),
565
+ ('2 << 2 << 2' , False , 'NB_LSHIFT' ),
566
+ ('2 << ""' , True , 'NB_LSHIFT' ),
567
+ ('2 >> 2' , False , 'NB_RSHIFT' ),
568
+ ('2 >> 2 >> 2' , False , 'NB_RSHIFT' ),
569
+ ('2 >> ""' , True , 'NB_RSHIFT' ),
570
+ ('2 | 2' , False , 'NB_OR' ),
571
+ ('2 | 2 | 2' , False , 'NB_OR' ),
572
+ ('2 | ""' , True , 'NB_OR' ),
573
+ ('2 & 2' , False , 'NB_AND' ),
574
+ ('2 & 2 & 2' , False , 'NB_AND' ),
575
+ ('2 & ""' , True , 'NB_AND' ),
576
+ ('2 ^ 2' , False , 'NB_XOR' ),
577
+ ('2 ^ 2 ^ 2' , False , 'NB_XOR' ),
578
+ ('2 ^ ""' , True , 'NB_XOR' ),
579
+ ('(1, )[0]' , False , 'NB_SUBSCR' ),
580
+ ('(1, )[-1]' , False , 'NB_SUBSCR' ),
581
+ ('(1 + 2, )[0]' , False , 'NB_SUBSCR' ),
582
+ ('(1, (1, 2))[1][1]' , False , 'NB_SUBSCR' ),
583
+ ('(1, 2)[2-1]' , False , 'NB_SUBSCR' ),
584
+ ('(1, (1, 2))[1][2-1]' , False , 'NB_SUBSCR' ),
585
+ ('(1, (1, 2))[1:6][0][2-1]' , False , 'NB_SUBSCR' ),
586
+ ('"a"[0]' , False , 'NB_SUBSCR' ),
587
+ ('("a" + "b")[1]' , False , 'NB_SUBSCR' ),
588
+ ('("a" + "b", )[0][1]' , False , 'NB_SUBSCR' ),
589
+ ('("a" * 10)[9]' , False , 'NB_SUBSCR' ),
590
+ ('(1, )[1]' , True , 'NB_SUBSCR' ),
591
+ ('(1, )[-2]' , True , 'NB_SUBSCR' ),
592
+ ('"a"[1]' , True , 'NB_SUBSCR' ),
593
+ ('"a"[-2]' , True , 'NB_SUBSCR' ),
594
+ ('("a" + "b")[2]' , True , 'NB_SUBSCR' ),
595
+ ('("a" + "b", )[0][2]' , True , 'NB_SUBSCR' ),
596
+ ('("a" + "b", )[1][0]' , True , 'NB_SUBSCR' ),
597
+ ('("a" * 10)[10]' , True , 'NB_SUBSCR' ),
598
+ ('(1, (1, 2))[2:6][0][2-1]' , True , 'NB_SUBSCR' ),
612
599
613
600
]
614
601
for expr , has_error , nb_op in tests :
615
602
with self .subTest (expr = expr , has_error = has_error ):
616
603
code = compile (expr , '' , 'single' )
604
+ nb_op_val = get_binop_argval (nb_op )
617
605
if not has_error :
618
- self .assertNotInBytecode (code , 'BINARY_OP' , argval = nb_op )
606
+ self .assertNotInBytecode (code , 'BINARY_OP' , argval = nb_op_val )
619
607
else :
620
- self .assertInBytecode (code , 'BINARY_OP' , argval = nb_op )
608
+ self .assertInBytecode (code , 'BINARY_OP' , argval = nb_op_val )
621
609
self .check_lnotab (code )
622
610
623
611
def test_constant_folding_remove_nop_location (self ):
@@ -1258,7 +1246,7 @@ def f():
1258
1246
}
1259
1247
self .assertEqual (f (), frozenset (range (40 )))
1260
1248
1261
- def test_multiple_foldings (self ):
1249
+ def test_nested_const_foldings (self ):
1262
1250
# (1, (--2 + ++2 * 2 // 2 - 2, )[0], ~~3, not not True) ==> (1, 2, 3, True)
1263
1251
intrinsic_positive = 5
1264
1252
before = [
0 commit comments