Construct CallCompiledFunctionPosArgsVariable

Performance Diagrams

Construct CallCompiledFunctionPosArgsVariable 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000220000000220000000CPython 2.7Nuitka (master)Nuitka (develop)Nuitka (factory)22715685088.11538461538461257.0CPython 2.758549988240.03846153846155440.42105708862874Nuitka (master)58550000391.96153846153845440.42104403428056Nuitka (develop)58550012543.8846153846154440.42103097993237Nuitka (factory)Construct CallCompiledFunctionPosArgsVariableTicks Construct CallCompiledFunctionPosArgsVariable 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000CPython 3.5Nuitka (master)Nuitka (develop)Nuitka (factory)21126005088.11538461538461257.0CPython 3.567799714240.03846153846155424.8086136384627Nuitka (master)67800606391.96153846153845424.80757024704496Nuitka (develop)67800614543.8846153846154424.80756088927444Nuitka (factory)Construct CallCompiledFunctionPosArgsVariableTicks

Source Code with Construct

from __future__ import print_function

def compiled_func(a,b,c,d,e,f):
    return a, b, c, d, e, f

def getUnknownValue():
    return 8

def calledRepeatedly():
    a = getUnknownValue()
    b = getUnknownValue()
    c = getUnknownValue()
    d = getUnknownValue()
    e = getUnknownValue()
    f = getUnknownValue()

    # This is supposed to make a call to a non-compiled function, which is
    # being optimized separately.
# construct_begin
    compiled_func(a, b, c, d, e, f)
    compiled_func(a, c, b, d, e, f)
    compiled_func(a, b, c, d, f, e)
# construct_alternative



import itertools
for x in itertools.repeat(None, 50000):
    calledRepeatedly()

print("OK.")

Source Code without Construct

from __future__ import print_function

def compiled_func(a,b,c,d,e,f):
    return a, b, c, d, e, f

def getUnknownValue():
    return 8

def calledRepeatedly():
    a = getUnknownValue()
    b = getUnknownValue()
    c = getUnknownValue()
    d = getUnknownValue()
    e = getUnknownValue()
    f = getUnknownValue()

    # This is supposed to make a call to a non-compiled function, which is
    # being optimized separately.
# construct_begin



# construct_alternative
    pass
# construct_end

import itertools
for x in itertools.repeat(None, 50000):
    calledRepeatedly()

print("OK.")

Context Diff of Source Code


Construct
Baseline
34     f = getUnknownValue() 34     f = getUnknownValue()
35 35
36     # This is supposed to make a call to a non-compiled function, which is 36     # This is supposed to make a call to a non-compiled function, which is
37     # being optimized separately. 37     # being optimized separately.
38 # construct_begin 38 # construct_begin
n 39     compiled_func(a, b, c, d, e, f) n
40     compiled_func(a, c, b, d, e, f)
41     compiled_func(a, b, c, d, f, e)
42 # construct_alternative
43 39
44 40
t t 41  
42 # construct_alternative
43     pass
44 # construct_end
45 45
46 import itertools 46 import itertools
47 for x in itertools.repeat(None, 50000): 47 for x in itertools.repeat(None, 50000):
48     calledRepeatedly() 48     calledRepeatedly()
49 49

Context Diff of Generated Code


Construct
Baseline
66 static bool constants_created = false; 66 static bool constants_created = false;
67 67
68 /* Function to create module private constants. */ 68 /* Function to create module private constants. */
69 static void createModuleConstants( void ) 69 static void createModuleConstants( void )
70 { 70 {
n 71     const_str_plain_b = UNSTREAM_STRING_ASCII( &constant_bin[ 110 ], 1, 1 ); n 71     const_str_plain_b = UNSTREAM_STRING_ASCII( &constant_bin[ 75 ], 1, 1 );
72     const_str_plain_itertools = UNSTREAM_STRING_ASCII( &constant_bin[ 111 ], 9, 1 ); 72     const_str_plain_itertools = UNSTREAM_STRING_ASCII( &constant_bin[ 76 ], 9, 1 );
73     const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple = PyTuple_New( 6 ); 73     const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple = PyTuple_New( 6 );
74     const_str_plain_a = UNSTREAM_STRING_ASCII( &constant_bin[ 1 ], 1, 1 ); 74     const_str_plain_a = UNSTREAM_STRING_ASCII( &constant_bin[ 1 ], 1, 1 );
75     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 0, const_str_plain_a ); Py_INCREF(const_str_plain_a); 75     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 0, const_str_plain_a ); Py_INCREF(const_str_plain_a);
76     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 1, const_str_plain_b ); Py_INCREF(const_str_plain_b); 76     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 1, const_str_plain_b ); Py_INCREF(const_str_plain_b);
77     const_str_plain_c = UNSTREAM_STRING_ASCII( &constant_bin[ 43 ], 1, 1 ); 77     const_str_plain_c = UNSTREAM_STRING_ASCII( &constant_bin[ 43 ], 1, 1 );
80     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 3, const_str_plain_d ); Py_INCREF(const_str_plain_d); 80     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 3, const_str_plain_d ); Py_INCREF(const_str_plain_d);
81     const_str_plain_e = UNSTREAM_STRING_ASCII( &constant_bin[ 3 ], 1, 1 ); 81     const_str_plain_e = UNSTREAM_STRING_ASCII( &constant_bin[ 3 ], 1, 1 );
82     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 4, const_str_plain_e ); Py_INCREF(const_str_plain_e); 82     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 4, const_str_plain_e ); Py_INCREF(const_str_plain_e);
83     const_str_plain_f = UNSTREAM_STRING_ASCII( &constant_bin[ 32 ], 1, 1 ); 83     const_str_plain_f = UNSTREAM_STRING_ASCII( &constant_bin[ 32 ], 1, 1 );
84     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 5, const_str_plain_f ); Py_INCREF(const_str_plain_f); 84     PyTuple_SET_ITEM( const_tuple_d4571c3ff966778a8b3ba4a6bd66fdef_tuple, 5, const_str_plain_f ); Py_INCREF(const_str_plain_f);
n 85     const_str_digest_f69581acf450bdce3d0f0bd2aef5d881 = UNSTREAM_STRING_ASCII( &constant_bin[ 120 ], 60, 0 ); n 85     const_str_digest_f69581acf450bdce3d0f0bd2aef5d881 = UNSTREAM_STRING_ASCII( &constant_bin[ 85 ], 60, 0 );
86     const_str_plain_compiled_func = UNSTREAM_STRING_ASCII( &constant_bin[ 43 ], 13, 1 ); 86     const_str_plain_compiled_func = UNSTREAM_STRING_ASCII( &constant_bin[ 145 ], 13, 1 );
87     const_int_pos_50000 = PyLong_FromUnsignedLong(50000ul); 87     const_int_pos_50000 = PyLong_FromUnsignedLong(50000ul);
88     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 ); 88     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 );
n 89     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII( &constant_bin[ 180 ], 3, 0 ); n 89     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING_ASCII( &constant_bin[ 158 ], 3, 0 );
90     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF(const_str_digest_5ed1392909ad16e6227b8230f4582352); 90     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF(const_str_digest_5ed1392909ad16e6227b8230f4582352);
n 91     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII( &constant_bin[ 78 ], 16, 1 ); n 91     const_str_plain_calledRepeatedly = UNSTREAM_STRING_ASCII( &constant_bin[ 43 ], 16, 1 );
92     const_int_pos_8 = PyLong_FromUnsignedLong(8ul); 92     const_int_pos_8 = PyLong_FromUnsignedLong(8ul);
n 93     const_str_angle_module = UNSTREAM_STRING_ASCII( &constant_bin[ 183 ], 8, 0 ); n 93     const_str_angle_module = UNSTREAM_STRING_ASCII( &constant_bin[ 161 ], 8, 0 );
94     const_str_plain_None = UNSTREAM_STRING_ASCII( &constant_bin[ 191 ], 4, 1 ); 94     const_str_plain_None = UNSTREAM_STRING_ASCII( &constant_bin[ 169 ], 4, 1 );
95     const_str_plain_x = UNSTREAM_STRING_ASCII( &constant_bin[ 195 ], 1, 1 ); 95     const_str_plain_x = UNSTREAM_STRING_ASCII( &constant_bin[ 173 ], 1, 1 );
96     const_str_plain_repeat = UNSTREAM_STRING_ASCII( &constant_bin[ 196 ], 6, 1 ); 96     const_str_plain_repeat = UNSTREAM_STRING_ASCII( &constant_bin[ 174 ], 6, 1 );
97     const_tuple_none_int_pos_50000_tuple = PyTuple_New( 2 ); 97     const_tuple_none_int_pos_50000_tuple = PyTuple_New( 2 );
98     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 0, Py_None ); Py_INCREF(Py_None); 98     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 0, Py_None ); Py_INCREF(Py_None);
99     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000 ); Py_INCREF(const_int_pos_50000); 99     PyTuple_SET_ITEM( const_tuple_none_int_pos_50000_tuple, 1, const_int_pos_50000 ); Py_INCREF(const_int_pos_50000);
100     const_tuple_55466054951980d6b25c1e8547da8eed_tuple = PyTuple_New( 6 ); 100     const_tuple_55466054951980d6b25c1e8547da8eed_tuple = PyTuple_New( 6 );
101     PyTuple_SET_ITEM( const_tuple_55466054951980d6b25c1e8547da8eed_tuple, 0, const_str_plain_b ); Py_INCREF(const_str_plain_b); 101     PyTuple_SET_ITEM( const_tuple_55466054951980d6b25c1e8547da8eed_tuple, 0, const_str_plain_b ); Py_INCREF(const_str_plain_b);
103     PyTuple_SET_ITEM( const_tuple_55466054951980d6b25c1e8547da8eed_tuple, 2, const_str_plain_e ); Py_INCREF(const_str_plain_e); 103     PyTuple_SET_ITEM( const_tuple_55466054951980d6b25c1e8547da8eed_tuple, 2, const_str_plain_e ); Py_INCREF(const_str_plain_e);
104     PyTuple_SET_ITEM( const_tuple_55466054951980d6b25c1e8547da8eed_tuple, 3, const_str_plain_a ); Py_INCREF(const_str_plain_a); 104     PyTuple_SET_ITEM( const_tuple_55466054951980d6b25c1e8547da8eed_tuple, 3, const_str_plain_a ); Py_INCREF(const_str_plain_a);
105     PyTuple_SET_ITEM( const_tuple_55466054951980d6b25c1e8547da8eed_tuple, 4, const_str_plain_f ); Py_INCREF(const_str_plain_f); 105     PyTuple_SET_ITEM( const_tuple_55466054951980d6b25c1e8547da8eed_tuple, 4, const_str_plain_f ); Py_INCREF(const_str_plain_f);
106     PyTuple_SET_ITEM( const_tuple_55466054951980d6b25c1e8547da8eed_tuple, 5, const_str_plain_d ); Py_INCREF(const_str_plain_d); 106     PyTuple_SET_ITEM( const_tuple_55466054951980d6b25c1e8547da8eed_tuple, 5, const_str_plain_d ); Py_INCREF(const_str_plain_d);
107     const_str_plain_getUnknownValue = UNSTREAM_STRING_ASCII( &constant_bin[ 6 ], 15, 1 ); 107     const_str_plain_getUnknownValue = UNSTREAM_STRING_ASCII( &constant_bin[ 6 ], 15, 1 );
n 108     const_str_plain_print_function = UNSTREAM_STRING_ASCII( &constant_bin[ 202 ], 14, 1 ); n 108     const_str_plain_print_function = UNSTREAM_STRING_ASCII( &constant_bin[ 180 ], 14, 1 );
109 109
110     constants_created = true; 110     constants_created = true;
111 } 111 }
112 112
113 /* Function to verify module private constants for non-corruption. */ 113 /* Function to verify module private constants for non-corruption. */
545             goto frame_exception_exit_1; 545             goto frame_exception_exit_1;
546         } 546         }
547         assert(var_f == NULL); 547         assert(var_f == NULL);
548         var_f = tmp_assign_source_6; 548         var_f = tmp_assign_source_6;
549     } 549     }
n 550     { n
551         PyObject *tmp_called_name_7;
552         PyObject *tmp_mvar_value_7;
553         PyObject *tmp_call_result_1;
554         PyObject *tmp_args_element_name_1;
555         PyObject *tmp_args_element_name_2;
556         PyObject *tmp_args_element_name_3;
557         PyObject *tmp_args_element_name_4;
558         PyObject *tmp_args_element_name_5;
559         PyObject *tmp_args_element_name_6;
560         tmp_mvar_value_7 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func);
561  
562         if (unlikely( tmp_mvar_value_7 == NULL )) {
563             tmp_mvar_value_7 = GET_STRING_DICT_VALUE(dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func);
564         }
565  
566         if ( tmp_mvar_value_7 == NULL )
567         {
568  
569             exception_type = PyExc_NameError;
570             Py_INCREF(exception_type);
571             exception_value = UNSTREAM_STRING( &constant_bin[ 37 ], 35, 0 );
572             exception_tb = NULL;
573             NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
574             CHAIN_EXCEPTION( exception_value );
575  
576             exception_lineno = 39;
577             type_description_1 = "oooooo";
578             goto frame_exception_exit_1;
579         }
580  
581         tmp_called_name_7 = tmp_mvar_value_7;
582         CHECK_OBJECT(var_a);
583         tmp_args_element_name_1 = var_a;
584         CHECK_OBJECT(var_b);
585         tmp_args_element_name_2 = var_b;
586         CHECK_OBJECT(var_c);
587         tmp_args_element_name_3 = var_c;
588         CHECK_OBJECT(var_d);
589         tmp_args_element_name_4 = var_d;
590         CHECK_OBJECT(var_e);
591         tmp_args_element_name_5 = var_e;
592         CHECK_OBJECT(var_f);
593         tmp_args_element_name_6 = var_f;
594         frame_bfa6e75329b2c2bfaf9fb63d4f6bc9cb->m_frame.f_lineno = 39;
595         {
596             PyObject *call_args[] = { tmp_args_element_name_1, tmp_args_element_name_2, tmp_args_element_name_3, tmp_args_element_name_4, tmp_args_element_name_5, tmp_args_element_name_6 };
597             tmp_call_result_1 = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_7, call_args );
598         }
599  
600         if ( tmp_call_result_1 == NULL )
601         {
602             assert(ERROR_OCCURRED());
603  
604             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
605  
606  
607             exception_lineno = 39;
608             type_description_1 = "oooooo";
609             goto frame_exception_exit_1;
610         }
611         Py_DECREF(tmp_call_result_1);
612     }
613     {
614         PyObject *tmp_called_name_8;
615         PyObject *tmp_mvar_value_8;
616         PyObject *tmp_call_result_2;
617         PyObject *tmp_args_element_name_7;
618         PyObject *tmp_args_element_name_8;
619         PyObject *tmp_args_element_name_9;
620         PyObject *tmp_args_element_name_10;
621         PyObject *tmp_args_element_name_11;
622         PyObject *tmp_args_element_name_12;
623         tmp_mvar_value_8 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func);
624  
625         if (unlikely( tmp_mvar_value_8 == NULL )) {
626             tmp_mvar_value_8 = GET_STRING_DICT_VALUE(dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func);
627         }
628  
629         if ( tmp_mvar_value_8 == NULL )
630         {
631  
632             exception_type = PyExc_NameError;
633             Py_INCREF(exception_type);
634             exception_value = UNSTREAM_STRING( &constant_bin[ 37 ], 35, 0 );
635             exception_tb = NULL;
636             NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
637             CHAIN_EXCEPTION( exception_value );
638  
639             exception_lineno = 40;
640             type_description_1 = "oooooo";
641             goto frame_exception_exit_1;
642         }
643  
644         tmp_called_name_8 = tmp_mvar_value_8;
645         CHECK_OBJECT(var_a);
646         tmp_args_element_name_7 = var_a;
647         CHECK_OBJECT(var_c);
648         tmp_args_element_name_8 = var_c;
649         CHECK_OBJECT(var_b);
650         tmp_args_element_name_9 = var_b;
651         CHECK_OBJECT(var_d);
652         tmp_args_element_name_10 = var_d;
653         CHECK_OBJECT(var_e);
654         tmp_args_element_name_11 = var_e;
655         CHECK_OBJECT(var_f);
656         tmp_args_element_name_12 = var_f;
657         frame_bfa6e75329b2c2bfaf9fb63d4f6bc9cb->m_frame.f_lineno = 40;
658         {
659             PyObject *call_args[] = { tmp_args_element_name_7, tmp_args_element_name_8, tmp_args_element_name_9, tmp_args_element_name_10, tmp_args_element_name_11, tmp_args_element_name_12 };
660             tmp_call_result_2 = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_8, call_args );
661         }
662  
663         if ( tmp_call_result_2 == NULL )
664         {
665             assert(ERROR_OCCURRED());
666  
667             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
668  
669  
670             exception_lineno = 40;
671             type_description_1 = "oooooo";
672             goto frame_exception_exit_1;
673         }
674         Py_DECREF(tmp_call_result_2);
675     }
676     {
677         PyObject *tmp_called_name_9;
678         PyObject *tmp_mvar_value_9;
679         PyObject *tmp_call_result_3;
680         PyObject *tmp_args_element_name_13;
681         PyObject *tmp_args_element_name_14;
682         PyObject *tmp_args_element_name_15;
683         PyObject *tmp_args_element_name_16;
684         PyObject *tmp_args_element_name_17;
685         PyObject *tmp_args_element_name_18;
686         tmp_mvar_value_9 = GET_STRING_DICT_VALUE(moduledict___main__, (Nuitka_StringObject *)const_str_plain_compiled_func);
687  
688         if (unlikely( tmp_mvar_value_9 == NULL )) {
689             tmp_mvar_value_9 = GET_STRING_DICT_VALUE(dict_builtin, (Nuitka_StringObject *)const_str_plain_compiled_func);
690         }
691  
692         if ( tmp_mvar_value_9 == NULL )
693         {
694  
695             exception_type = PyExc_NameError;
696             Py_INCREF(exception_type);
697             exception_value = UNSTREAM_STRING( &constant_bin[ 37 ], 35, 0 );
698             exception_tb = NULL;
699             NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
700             CHAIN_EXCEPTION( exception_value );
701  
702             exception_lineno = 41;
703             type_description_1 = "oooooo";
704             goto frame_exception_exit_1;
705         }
706  
707         tmp_called_name_9 = tmp_mvar_value_9;
708         CHECK_OBJECT(var_a);
709         tmp_args_element_name_13 = var_a;
710         CHECK_OBJECT(var_b);
711         tmp_args_element_name_14 = var_b;
712         CHECK_OBJECT(var_c);
713         tmp_args_element_name_15 = var_c;
714         CHECK_OBJECT(var_d);
715         tmp_args_element_name_16 = var_d;
716         CHECK_OBJECT(var_f);
717         tmp_args_element_name_17 = var_f;
718         CHECK_OBJECT(var_e);
719         tmp_args_element_name_18 = var_e;
720         frame_bfa6e75329b2c2bfaf9fb63d4f6bc9cb->m_frame.f_lineno = 41;
721         {
722             PyObject *call_args[] = { tmp_args_element_name_13, tmp_args_element_name_14, tmp_args_element_name_15, tmp_args_element_name_16, tmp_args_element_name_17, tmp_args_element_name_18 };
723             tmp_call_result_3 = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_9, call_args );
724         }
725  
726         if ( tmp_call_result_3 == NULL )
727         {
728             assert(ERROR_OCCURRED());
729  
730             FETCH_ERROR_OCCURRED(&exception_type, &exception_value, &exception_tb);
731  
732  
733             exception_lineno = 41;
734             type_description_1 = "oooooo";
735             goto frame_exception_exit_1;
736         }
737         Py_DECREF(tmp_call_result_3);
738     }
739 550
740 #if 0 551 #if 0
741     RESTORE_FRAME_EXCEPTION(frame_bfa6e75329b2c2bfaf9fb63d4f6bc9cb); 552     RESTORE_FRAME_EXCEPTION(frame_bfa6e75329b2c2bfaf9fb63d4f6bc9cb);
742 #endif 553 #endif
743 554
840     Py_XDECREF(var_e); 651     Py_XDECREF(var_e);
841     var_e = NULL; 652     var_e = NULL;
842 653
843     Py_XDECREF(var_a); 654     Py_XDECREF(var_a);
844     var_a = NULL; 655     var_a = NULL;
n 845   n
846     Py_XDECREF(var_f);
847     var_f = NULL;
848 656
849     Py_XDECREF(var_d); 657     Py_XDECREF(var_d);
850     var_d = NULL; 658     var_d = NULL;
851 659
852     // Re-raise. 660     // Re-raise.
1415         if ( tmp_mvar_value_2 == NULL ) 1223         if ( tmp_mvar_value_2 == NULL )
1416         { 1224         {
1417 1225
1418             exception_type = PyExc_NameError; 1226             exception_type = PyExc_NameError;
1419             Py_INCREF(exception_type); 1227             Py_INCREF(exception_type);
t 1420             exception_value = UNSTREAM_STRING( &constant_bin[ 72 ], 38, 0 ); t 1228             exception_value = UNSTREAM_STRING( &constant_bin[ 37 ], 38, 0 );
1421             exception_tb = NULL; 1229             exception_tb = NULL;
1422             NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb ); 1230             NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
1423             CHAIN_EXCEPTION( exception_value ); 1231             CHAIN_EXCEPTION( exception_value );
1424 1232
1425             exception_lineno = 48; 1233             exception_lineno = 48;