@@ -2414,6 +2414,50 @@ binary_op_fail_kind(int oparg, PyObject *lhs, PyObject *rhs)
24142414
24152415/** Binary Op Specialization Extensions */
24162416
2417+ /* tuple-tuple*/
2418+
2419+ static int
2420+ tuple_tuple_guard (PyObject * lhs , PyObject * rhs )
2421+ {
2422+ return ( PyTuple_CheckExact (lhs ) && PyTuple_CheckExact (rhs ) );
2423+ }
2424+
2425+ extern PyObject * tuple_concat (PyObject * aa , PyObject * bb );
2426+
2427+ static PyObject * \
2428+ tuple_tuple_add (PyObject * lhs , PyObject * rhs ) \
2429+ {
2430+ return tuple_concat (lhs , rhs );
2431+ }
2432+
2433+ static _PyBinaryOpSpecializationDescr tuple_tuple_specs [NB_OPARG_LAST + 1 ] = {
2434+ [NB_ADD ] = {tuple_tuple_guard , tuple_tuple_add },
2435+ };
2436+
2437+ /* list-list*/
2438+
2439+ static int
2440+ list_list_guard (PyObject * lhs , PyObject * rhs )
2441+ {
2442+ return ( PyList_CheckExact (lhs ) && PyList_CheckExact (rhs ) );
2443+ }
2444+
2445+ extern PyObject * list_concat (PyObject * aa , PyObject * bb );
2446+
2447+ static PyObject * \
2448+ list_list_add (PyObject * lhs , PyObject * rhs ) \
2449+ {
2450+ return list_concat (lhs , rhs );
2451+ }
2452+
2453+ static _PyBinaryOpSpecializationDescr list_list_specs [NB_OPARG_LAST + 1 ] = {
2454+ [NB_ADD ] = {list_list_guard , list_list_add },
2455+ };
2456+
2457+ static binaryopactionfunc list_list_actions [NB_OPARG_LAST + 1 ] = {
2458+ [NB_ADD ] = list_list_add ,
2459+ };
2460+
24172461/* float-long */
24182462
24192463static int
@@ -2494,6 +2538,8 @@ binary_op_extended_specialization(PyObject *lhs, PyObject *rhs, int oparg,
24942538
24952539 LOOKUP_SPEC (compactlong_float_specs , oparg );
24962540 LOOKUP_SPEC (float_compactlong_specs , oparg );
2541+ LOOKUP_SPEC (list_list_specs , oparg );
2542+ LOOKUP_SPEC (tuple_tuple_specs , oparg );
24972543#undef LOOKUP_SPEC
24982544 return 0 ;
24992545}
0 commit comments