@@ -154,7 +154,7 @@ def test_folding_of_tuples_of_constants(self):
154154        for  line , elem  in  (
155155            ('a = 1,2,3' , (1 , 2 , 3 )),
156156            ('("a","b","c")' , ('a' , 'b' , 'c' )),
157-             ('a,b,c = 1,2,3' , (1 , 2 , 3 )),
157+             ('a,b,c,d  = 1,2,3,4 ' , (1 , 2 , 3 ,  4 )),
158158            ('(None, 1, None)' , (None , 1 , None )),
159159            ('((1, 2), 3, 4)' , ((1 , 2 ), 3 , 4 )),
160160            ):
@@ -1349,6 +1349,71 @@ def test_fold_tuple_of_constants(self):
13491349        ]
13501350        self .cfg_optimization_test (same , same , consts = [])
13511351
1352+     def  test_fold_constant_intrinsic_list_to_tuple (self ):
1353+         INTRINSIC_LIST_TO_TUPLE  =  6 
1354+ 
1355+         # long tuple 
1356+         consts  =  1000 
1357+         before  =  (
1358+             [('BUILD_LIST' , 0 , 0 )] + 
1359+             [('LOAD_CONST' , 0 , 0 ), ('LIST_APPEND' , 1 , 0 )] *  consts  + 
1360+             [('CALL_INTRINSIC_1' , INTRINSIC_LIST_TO_TUPLE , 0 ), ('RETURN_VALUE' , None , 0 )]
1361+         )
1362+         after  =  [
1363+             ('LOAD_CONST' , 1 , 0 ),
1364+             ('RETURN_VALUE' , None , 0 )
1365+         ]
1366+         result_const  =  tuple (["test" ] *  consts )
1367+         self .cfg_optimization_test (before , after , consts = ["test" ], expected_consts = ["test" , result_const ])
1368+ 
1369+         # empty list 
1370+         before  =  [
1371+             ('BUILD_LIST' , 0 , 0 ),
1372+             ('CALL_INTRINSIC_1' , INTRINSIC_LIST_TO_TUPLE , 0 ),
1373+             ('RETURN_VALUE' , None , 0 )
1374+         ]
1375+         after  =  [
1376+             ('LOAD_CONST' , 0 , 0 ),
1377+             ('RETURN_VALUE' , None , 0 )
1378+         ]
1379+         self .cfg_optimization_test (before , after , consts = [], expected_consts = [()])
1380+ 
1381+         # multiple BUILD_LIST 0: ([], 1, [], 2) 
1382+         same  =  [
1383+             ('BUILD_LIST' , 0 , 0 ),
1384+             ('BUILD_LIST' , 0 , 0 ),
1385+             ('LIST_APPEND' , 1 , 0 ),
1386+             ('LOAD_SMALL_INT' , 1 , 0 ),
1387+             ('LIST_APPEND' , 1 , 0 ),
1388+             ('BUILD_LIST' , 0 , 0 ),
1389+             ('LIST_APPEND' , 1 , 0 ),
1390+             ('LOAD_SMALL_INT' , 2 , 0 ),
1391+             ('LIST_APPEND' , 1 , 0 ),
1392+             ('CALL_INTRINSIC_1' , INTRINSIC_LIST_TO_TUPLE , 0 ),
1393+             ('RETURN_VALUE' , None , 0 )
1394+         ]
1395+         self .cfg_optimization_test (same , same , consts = [])
1396+ 
1397+         # nested folding: (1, 1+1, 3) 
1398+         before  =  [
1399+             ('BUILD_LIST' , 0 , 0 ),
1400+             ('LOAD_SMALL_INT' , 1 , 0 ),
1401+             ('LIST_APPEND' , 1 , 0 ),
1402+             ('LOAD_SMALL_INT' , 1 , 0 ),
1403+             ('LOAD_SMALL_INT' , 1 , 0 ),
1404+             ('BINARY_OP' , get_binop_argval ('NB_ADD' ), 0 ),
1405+             ('LIST_APPEND' , 1 , 0 ),
1406+             ('LOAD_SMALL_INT' , 3 , 0 ),
1407+             ('LIST_APPEND' , 1 , 0 ),
1408+             ('CALL_INTRINSIC_1' , INTRINSIC_LIST_TO_TUPLE , 0 ),
1409+             ('RETURN_VALUE' , None , 0 )
1410+         ]
1411+         after  =  [
1412+             ('LOAD_CONST' , 0 , 0 ),
1413+             ('RETURN_VALUE' , None , 0 )
1414+         ]
1415+         self .cfg_optimization_test (before , after , consts = [], expected_consts = [(1 , 2 , 3 )])
1416+ 
13521417    def  test_optimize_if_const_list (self ):
13531418        before  =  [
13541419            ('NOP' , None , 0 ),
0 commit comments