Construct CallCompiledMethodPosArgsVariable

Performance Diagrams

Construct CallCompiledMethodPosArgsVariable 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000220000000220000000240000000240000000CPython 2.7Nuitka (historic)Nuitka (master)Nuitka (develop)Nuitka (factory)24213617572.9230769230769257.0CPython 2.7104800286194.46153846153845397.1600195911692Nuitka (historic)92050924316.0410.17155532816Nuitka (master)92050884437.53846153846143410.17159615070705Nuitka (develop)82750742559.0769230769231419.6629832485155Nuitka (factory)Construct CallCompiledMethodPosArgsVariableTicks Construct CallCompiledMethodPosArgsVariable 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000CPython 3.5Nuitka (historic)Nuitka (master)Nuitka (develop)Nuitka (factory)21005361372.9230769230769257.0CPython 3.50194.46153846153845504.11538461538464Nuitka (historic)87500498316.0401.1763353484354Nuitka (master)87501058437.53846153846143401.17567654226957Nuitka (develop)87502493559.0769230769231401.17398835146986Nuitka (factory)Construct CallCompiledMethodPosArgsVariableTicks

Source Code with Construct

from __future__ import print_function

class C:
    def compiled_method(self, 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()

    inst = C()

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



for x in xrange(50000):
    calledRepeatedly()

print("OK.")

Source Code without Construct

from __future__ import print_function

class C:
    def compiled_method(self, 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()

    inst = C()

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



# construct_alternative
    pass
# construct_end

for x in xrange(50000):
    calledRepeatedly()

print("OK.")

Context Diff of Source Code


Construct
Baseline
37     inst = C() 37     inst = C()
38 38
39     # This is supposed to make a call to a non-compiled function, which is 39     # This is supposed to make a call to a non-compiled function, which is
40     # being optimized separately. 40     # being optimized separately.
41 # construct_begin 41 # construct_begin
n 42     inst.compiled_method(a, b, c, d, e, f) n
43     inst.compiled_method(a, c, b, d, e, f)
44     inst.compiled_method(a, b, c, d, f, e)
45 # construct_alternative
46 42
47 43
t t 44  
45 # construct_alternative
46     pass
47 # construct_end
48 48
49 for x in xrange(50000): 49 for x in xrange(50000):
50     calledRepeatedly() 50     calledRepeatedly()
51 51
52 print("OK.") 52 print("OK.")

Context Diff of Generated Code


Construct
Baseline
510     NUITKA_MAY_BE_UNUSED int exception_lineno = -1; 510     NUITKA_MAY_BE_UNUSED int exception_lineno = -1;
511     PyObject *exception_keeper_type_1; 511     PyObject *exception_keeper_type_1;
512     PyObject *exception_keeper_value_1; 512     PyObject *exception_keeper_value_1;
513     PyTracebackObject *exception_keeper_tb_1; 513     PyTracebackObject *exception_keeper_tb_1;
514     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1; 514     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1;
n 515     PyObject *tmp_args_element_name_1; n
516     PyObject *tmp_args_element_name_2;
517     PyObject *tmp_args_element_name_3;
518     PyObject *tmp_args_element_name_4;
519     PyObject *tmp_args_element_name_5;
520     PyObject *tmp_args_element_name_6;
521     PyObject *tmp_args_element_name_7;
522     PyObject *tmp_args_element_name_8;
523     PyObject *tmp_args_element_name_9;
524     PyObject *tmp_args_element_name_10;
525     PyObject *tmp_args_element_name_11;
526     PyObject *tmp_args_element_name_12;
527     PyObject *tmp_args_element_name_13;
528     PyObject *tmp_args_element_name_14;
529     PyObject *tmp_args_element_name_15;
530     PyObject *tmp_args_element_name_16;
531     PyObject *tmp_args_element_name_17;
532     PyObject *tmp_args_element_name_18;
533     PyObject *tmp_assign_source_1; 515     PyObject *tmp_assign_source_1;
534     PyObject *tmp_assign_source_2; 516     PyObject *tmp_assign_source_2;
535     PyObject *tmp_assign_source_3; 517     PyObject *tmp_assign_source_3;
536     PyObject *tmp_assign_source_4; 518     PyObject *tmp_assign_source_4;
537     PyObject *tmp_assign_source_5; 519     PyObject *tmp_assign_source_5;
542     PyObject *tmp_called_name_3; 524     PyObject *tmp_called_name_3;
543     PyObject *tmp_called_name_4; 525     PyObject *tmp_called_name_4;
544     PyObject *tmp_called_name_5; 526     PyObject *tmp_called_name_5;
545     PyObject *tmp_called_name_6; 527     PyObject *tmp_called_name_6;
546     PyObject *tmp_called_name_7; 528     PyObject *tmp_called_name_7;
n 547     PyObject *tmp_called_name_8; n
548     PyObject *tmp_called_name_9;
549     PyObject *tmp_called_name_10;
550     PyObject *tmp_frame_locals; 529     PyObject *tmp_frame_locals;
551     PyObject *tmp_return_value; 530     PyObject *tmp_return_value;
n 552     PyObject *tmp_source_name_1; n
553     PyObject *tmp_source_name_2;
554     PyObject *tmp_source_name_3;
555     NUITKA_MAY_BE_UNUSED PyObject *tmp_unused;
556     static PyFrameObject *cache_frame_function = NULL; 531     static PyFrameObject *cache_frame_function = NULL;
557 532
558     PyFrameObject *frame_function; 533     PyFrameObject *frame_function;
559 534
560     tmp_return_value = NULL; 535     tmp_return_value = NULL;
826         goto frame_exception_exit_1; 801         goto frame_exception_exit_1;
827     } 802     }
828     assert( var_inst == NULL ); 803     assert( var_inst == NULL );
829     var_inst = tmp_assign_source_7; 804     var_inst = tmp_assign_source_7;
830 805
n 831     tmp_source_name_1 = var_inst; n
832  
833     tmp_called_name_8 = LOOKUP_ATTRIBUTE( tmp_source_name_1, const_str_plain_compiled_method );
834     if ( tmp_called_name_8 == NULL )
835     {
836         assert( ERROR_OCCURRED() );
837  
838         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
839  
840  
841         exception_lineno = 42;
842         goto frame_exception_exit_1;
843     }
844     tmp_args_element_name_1 = var_a;
845  
846     if ( tmp_args_element_name_1 == NULL )
847     {
848         Py_DECREF( tmp_called_name_8 );
849         exception_type = PyExc_UnboundLocalError;
850         Py_INCREF( exception_type );
851         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "a" );
852         exception_tb = NULL;
853         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
854         CHAIN_EXCEPTION( exception_value );
855  
856         exception_lineno = 42;
857         goto frame_exception_exit_1;
858     }
859  
860     tmp_args_element_name_2 = var_b;
861  
862     if ( tmp_args_element_name_2 == NULL )
863     {
864         Py_DECREF( tmp_called_name_8 );
865         exception_type = PyExc_UnboundLocalError;
866         Py_INCREF( exception_type );
867         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "b" );
868         exception_tb = NULL;
869         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
870         CHAIN_EXCEPTION( exception_value );
871  
872         exception_lineno = 42;
873         goto frame_exception_exit_1;
874     }
875  
876     tmp_args_element_name_3 = var_c;
877  
878     if ( tmp_args_element_name_3 == NULL )
879     {
880         Py_DECREF( tmp_called_name_8 );
881         exception_type = PyExc_UnboundLocalError;
882         Py_INCREF( exception_type );
883         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "c" );
884         exception_tb = NULL;
885         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
886         CHAIN_EXCEPTION( exception_value );
887  
888         exception_lineno = 42;
889         goto frame_exception_exit_1;
890     }
891  
892     tmp_args_element_name_4 = var_d;
893  
894     if ( tmp_args_element_name_4 == NULL )
895     {
896         Py_DECREF( tmp_called_name_8 );
897         exception_type = PyExc_UnboundLocalError;
898         Py_INCREF( exception_type );
899         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "d" );
900         exception_tb = NULL;
901         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
902         CHAIN_EXCEPTION( exception_value );
903  
904         exception_lineno = 42;
905         goto frame_exception_exit_1;
906     }
907  
908     tmp_args_element_name_5 = var_e;
909  
910     if ( tmp_args_element_name_5 == NULL )
911     {
912         Py_DECREF( tmp_called_name_8 );
913         exception_type = PyExc_UnboundLocalError;
914         Py_INCREF( exception_type );
915         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "e" );
916         exception_tb = NULL;
917         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
918         CHAIN_EXCEPTION( exception_value );
919  
920         exception_lineno = 42;
921         goto frame_exception_exit_1;
922     }
923  
924     tmp_args_element_name_6 = var_f;
925  
926     if ( tmp_args_element_name_6 == NULL )
927     {
928         Py_DECREF( tmp_called_name_8 );
929         exception_type = PyExc_UnboundLocalError;
930         Py_INCREF( exception_type );
931         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "f" );
932         exception_tb = NULL;
933         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
934         CHAIN_EXCEPTION( exception_value );
935  
936         exception_lineno = 42;
937         goto frame_exception_exit_1;
938     }
939  
940     frame_function->f_lineno = 42;
941     {
942         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 };
943         tmp_unused = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_8, call_args );
944     }
945  
946     Py_DECREF( tmp_called_name_8 );
947     if ( tmp_unused == NULL )
948     {
949         assert( ERROR_OCCURRED() );
950  
951         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
952  
953  
954         exception_lineno = 42;
955         goto frame_exception_exit_1;
956     }
957     Py_DECREF( tmp_unused );
958     tmp_source_name_2 = var_inst;
959  
960     if ( tmp_source_name_2 == NULL )
961     {
962  
963         exception_type = PyExc_UnboundLocalError;
964         Py_INCREF( exception_type );
965         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "inst" );
966         exception_tb = NULL;
967         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
968         CHAIN_EXCEPTION( exception_value );
969  
970         exception_lineno = 43;
971         goto frame_exception_exit_1;
972     }
973  
974     tmp_called_name_9 = LOOKUP_ATTRIBUTE( tmp_source_name_2, const_str_plain_compiled_method );
975     if ( tmp_called_name_9 == NULL )
976     {
977         assert( ERROR_OCCURRED() );
978  
979         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
980  
981  
982         exception_lineno = 43;
983         goto frame_exception_exit_1;
984     }
985     tmp_args_element_name_7 = var_a;
986  
987     if ( tmp_args_element_name_7 == NULL )
988     {
989         Py_DECREF( tmp_called_name_9 );
990         exception_type = PyExc_UnboundLocalError;
991         Py_INCREF( exception_type );
992         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "a" );
993         exception_tb = NULL;
994         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
995         CHAIN_EXCEPTION( exception_value );
996  
997         exception_lineno = 43;
998         goto frame_exception_exit_1;
999     }
1000  
1001     tmp_args_element_name_8 = var_c;
1002  
1003     if ( tmp_args_element_name_8 == NULL )
1004     {
1005         Py_DECREF( tmp_called_name_9 );
1006         exception_type = PyExc_UnboundLocalError;
1007         Py_INCREF( exception_type );
1008         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "c" );
1009         exception_tb = NULL;
1010         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
1011         CHAIN_EXCEPTION( exception_value );
1012  
1013         exception_lineno = 43;
1014         goto frame_exception_exit_1;
1015     }
1016  
1017     tmp_args_element_name_9 = var_b;
1018  
1019     if ( tmp_args_element_name_9 == NULL )
1020     {
1021         Py_DECREF( tmp_called_name_9 );
1022         exception_type = PyExc_UnboundLocalError;
1023         Py_INCREF( exception_type );
1024         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "b" );
1025         exception_tb = NULL;
1026         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
1027         CHAIN_EXCEPTION( exception_value );
1028  
1029         exception_lineno = 43;
1030         goto frame_exception_exit_1;
1031     }
1032  
1033     tmp_args_element_name_10 = var_d;
1034  
1035     if ( tmp_args_element_name_10 == NULL )
1036     {
1037         Py_DECREF( tmp_called_name_9 );
1038         exception_type = PyExc_UnboundLocalError;
1039         Py_INCREF( exception_type );
1040         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "d" );
1041         exception_tb = NULL;
1042         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
1043         CHAIN_EXCEPTION( exception_value );
1044  
1045         exception_lineno = 43;
1046         goto frame_exception_exit_1;
1047     }
1048  
1049     tmp_args_element_name_11 = var_e;
1050  
1051     if ( tmp_args_element_name_11 == NULL )
1052     {
1053         Py_DECREF( tmp_called_name_9 );
1054         exception_type = PyExc_UnboundLocalError;
1055         Py_INCREF( exception_type );
1056         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "e" );
1057         exception_tb = NULL;
1058         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
1059         CHAIN_EXCEPTION( exception_value );
1060  
1061         exception_lineno = 43;
1062         goto frame_exception_exit_1;
1063     }
1064  
1065     tmp_args_element_name_12 = var_f;
1066  
1067     if ( tmp_args_element_name_12 == NULL )
1068     {
1069         Py_DECREF( tmp_called_name_9 );
1070         exception_type = PyExc_UnboundLocalError;
1071         Py_INCREF( exception_type );
1072         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "f" );
1073         exception_tb = NULL;
1074         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
1075         CHAIN_EXCEPTION( exception_value );
1076  
1077         exception_lineno = 43;
1078         goto frame_exception_exit_1;
1079     }
1080  
1081     frame_function->f_lineno = 43;
1082     {
1083         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 };
1084         tmp_unused = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_9, call_args );
1085     }
1086  
1087     Py_DECREF( tmp_called_name_9 );
1088     if ( tmp_unused == NULL )
1089     {
1090         assert( ERROR_OCCURRED() );
1091  
1092         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
1093  
1094  
1095         exception_lineno = 43;
1096         goto frame_exception_exit_1;
1097     }
1098     Py_DECREF( tmp_unused );
1099     tmp_source_name_3 = var_inst;
1100  
1101     if ( tmp_source_name_3 == NULL )
1102     {
1103  
1104         exception_type = PyExc_UnboundLocalError;
1105         Py_INCREF( exception_type );
1106         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "inst" );
1107         exception_tb = NULL;
1108         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
1109         CHAIN_EXCEPTION( exception_value );
1110  
1111         exception_lineno = 44;
1112         goto frame_exception_exit_1;
1113     }
1114  
1115     tmp_called_name_10 = LOOKUP_ATTRIBUTE( tmp_source_name_3, const_str_plain_compiled_method );
1116     if ( tmp_called_name_10 == NULL )
1117     {
1118         assert( ERROR_OCCURRED() );
1119  
1120         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
1121  
1122  
1123         exception_lineno = 44;
1124         goto frame_exception_exit_1;
1125     }
1126     tmp_args_element_name_13 = var_a;
1127  
1128     if ( tmp_args_element_name_13 == NULL )
1129     {
1130         Py_DECREF( tmp_called_name_10 );
1131         exception_type = PyExc_UnboundLocalError;
1132         Py_INCREF( exception_type );
1133         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "a" );
1134         exception_tb = NULL;
1135         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
1136         CHAIN_EXCEPTION( exception_value );
1137  
1138         exception_lineno = 44;
1139         goto frame_exception_exit_1;
1140     }
1141  
1142     tmp_args_element_name_14 = var_b;
1143  
1144     if ( tmp_args_element_name_14 == NULL )
1145     {
1146         Py_DECREF( tmp_called_name_10 );
1147         exception_type = PyExc_UnboundLocalError;
1148         Py_INCREF( exception_type );
1149         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "b" );
1150         exception_tb = NULL;
1151         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
1152         CHAIN_EXCEPTION( exception_value );
1153  
1154         exception_lineno = 44;
1155         goto frame_exception_exit_1;
1156     }
1157  
1158     tmp_args_element_name_15 = var_c;
1159  
1160     if ( tmp_args_element_name_15 == NULL )
1161     {
1162         Py_DECREF( tmp_called_name_10 );
1163         exception_type = PyExc_UnboundLocalError;
1164         Py_INCREF( exception_type );
1165         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "c" );
1166         exception_tb = NULL;
1167         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
1168         CHAIN_EXCEPTION( exception_value );
1169  
1170         exception_lineno = 44;
1171         goto frame_exception_exit_1;
1172     }
1173  
1174     tmp_args_element_name_16 = var_d;
1175  
1176     if ( tmp_args_element_name_16 == NULL )
1177     {
1178         Py_DECREF( tmp_called_name_10 );
1179         exception_type = PyExc_UnboundLocalError;
1180         Py_INCREF( exception_type );
1181         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "d" );
1182         exception_tb = NULL;
1183         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
1184         CHAIN_EXCEPTION( exception_value );
1185  
1186         exception_lineno = 44;
1187         goto frame_exception_exit_1;
1188     }
1189  
1190     tmp_args_element_name_17 = var_f;
1191  
1192     if ( tmp_args_element_name_17 == NULL )
1193     {
1194         Py_DECREF( tmp_called_name_10 );
1195         exception_type = PyExc_UnboundLocalError;
1196         Py_INCREF( exception_type );
1197         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "f" );
1198         exception_tb = NULL;
1199         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
1200         CHAIN_EXCEPTION( exception_value );
1201  
1202         exception_lineno = 44;
1203         goto frame_exception_exit_1;
1204     }
1205  
1206     tmp_args_element_name_18 = var_e;
1207  
1208     if ( tmp_args_element_name_18 == NULL )
1209     {
1210         Py_DECREF( tmp_called_name_10 );
1211         exception_type = PyExc_UnboundLocalError;
1212         Py_INCREF( exception_type );
1213         exception_value = PyUnicode_FromFormat( "local variable '%s' referenced before assignment", "e" );
1214         exception_tb = NULL;
1215         NORMALIZE_EXCEPTION( &exception_type, &exception_value, &exception_tb );
1216         CHAIN_EXCEPTION( exception_value );
1217  
1218         exception_lineno = 44;
1219         goto frame_exception_exit_1;
1220     }
1221  
1222     frame_function->f_lineno = 44;
1223     {
1224         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 };
1225         tmp_unused = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_10, call_args );
1226     }
1227  
1228     Py_DECREF( tmp_called_name_10 );
1229     if ( tmp_unused == NULL )
1230     {
1231         assert( ERROR_OCCURRED() );
1232  
1233         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
1234  
1235  
1236         exception_lineno = 44;
1237         goto frame_exception_exit_1;
1238     }
1239     Py_DECREF( tmp_unused );
1240 806
1241 #if 0 807 #if 0
1242     RESTORE_FRAME_EXCEPTION( frame_function ); 808     RESTORE_FRAME_EXCEPTION( frame_function );
1243 #endif 809 #endif
1244     // Put the previous frame back on top. 810     // Put the previous frame back on top.
1426     Py_XDECREF( var_e ); 992     Py_XDECREF( var_e );
1427     var_e = NULL; 993     var_e = NULL;
1428 994
1429     Py_XDECREF( var_f ); 995     Py_XDECREF( var_f );
1430     var_f = NULL; 996     var_f = NULL;
t 1431   t
1432     Py_XDECREF( var_inst );
1433     var_inst = NULL;
1434 997
1435     // Re-raise. 998     // Re-raise.
1436     exception_type = exception_keeper_type_1; 999     exception_type = exception_keeper_type_1;
1437     exception_value = exception_keeper_value_1; 1000     exception_value = exception_keeper_value_1;
1438     exception_tb = exception_keeper_tb_1; 1001     exception_tb = exception_keeper_tb_1;