Construct CallCompiledMethodPosArgsConstant

Performance Diagrams

Construct CallCompiledMethodPosArgsConstant 002000000020000000400000004000000060000000600000008000000080000000100000000100000000120000000120000000140000000140000000160000000160000000180000000180000000200000000200000000220000000220000000240000000240000000260000000260000000CPython 2.7Nuitka (historic)Nuitka (master)Nuitka (develop)Nuitka (factory)27297916672.9230769230769257.0CPython 2.7103004229194.46153846153845410.87043101937957Nuitka (historic)91255544316.0421.5059709217178Nuitka (master)91255549437.53846153846143421.5059663954496Nuitka (develop)91255512559.0769230769231421.50599988983436Nuitka (factory)Construct CallCompiledMethodPosArgsConstantTicks

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 calledRepeatedly():
    inst = C()

    # This is supposed to make a call to a non-compiled function, which is
    # being optimized separately.
# construct_begin
    inst.compiled_method("some", "random", "values", "to", "check", "call")
    inst.compiled_method("some", "other", "values", "to", "check", "call")
    inst.compiled_method("some", "new", "values", "to", "check", "call")

# 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 calledRepeatedly():
    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
27     inst = C() 27     inst = C()
28 28
29     # This is supposed to make a call to a non-compiled function, which is 29     # This is supposed to make a call to a non-compiled function, which is
30     # being optimized separately. 30     # being optimized separately.
31 # construct_begin 31 # construct_begin
n 32     inst.compiled_method("some", "random", "values", "to", "check", "call") n 32  
33     inst.compiled_method("some", "other", "values", "to", "check", "call") 33  
34     inst.compiled_method("some", "new", "values", "to", "check", "call") 34  
35 35
36 # construct_alternative 36 # construct_alternative
t 37   t 37     pass
38   38 # construct_end
39 39
40 for x in xrange(50000): 40 for x in xrange(50000):
41     calledRepeatedly() 41     calledRepeatedly()
42 42
43 print("OK.") 43 print("OK.")

Context Diff of Generated Code


Construct
Baseline
27 27
28 PyObject *module___main__; 28 PyObject *module___main__;
29 PyDictObject *moduledict___main__; 29 PyDictObject *moduledict___main__;
30 30
31 // The module constants used 31 // The module constants used
n 32 static PyObject *const_str_plain_to; n
33 extern PyObject *const_str_plain___main__; 32 extern PyObject *const_str_plain___main__;
34 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352; 33 static PyObject *const_str_digest_5ed1392909ad16e6227b8230f4582352;
35 static PyObject *const_str_plain_inst; 34 static PyObject *const_str_plain_inst;
n 36 static PyObject *const_str_plain_new; n
37 static PyObject *const_str_plain_compiled_method; 35 static PyObject *const_str_plain_compiled_method;
n 38 static PyObject *const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple; n
39 extern PyObject *const_dict_empty; 36 extern PyObject *const_dict_empty;
40 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple; 37 static PyObject *const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple;
n 41 static PyObject *const_str_plain_values; n
42 static PyObject *const_tuple_str_plain_inst_tuple; 38 static PyObject *const_tuple_str_plain_inst_tuple;
43 extern PyObject *const_tuple_empty; 39 extern PyObject *const_tuple_empty;
44 static PyObject *const_str_plain_calledRepeatedly; 40 static PyObject *const_str_plain_calledRepeatedly;
45 extern PyObject *const_str_plain___doc__; 41 extern PyObject *const_str_plain___doc__;
46 extern PyObject *const_int_0; 42 extern PyObject *const_int_0;
47 static PyObject *const_str_plain_print; 43 static PyObject *const_str_plain_print;
48 static PyObject *const_tuple_int_pos_50000_tuple; 44 static PyObject *const_tuple_int_pos_50000_tuple;
49 extern PyObject *const_str_plain___file__; 45 extern PyObject *const_str_plain___file__;
n 50 static PyObject *const_str_plain_other; n
51 static PyObject *const_str_plain_some;
52 static PyObject *const_str_angle_module; 46 static PyObject *const_str_angle_module;
53 static PyObject *const_str_plain_C; 47 static PyObject *const_str_plain_C;
54 static PyObject *const_str_digest_253ebc76a03dc6abd4877f98b296357a; 48 static PyObject *const_str_digest_253ebc76a03dc6abd4877f98b296357a;
n 55 static PyObject *const_str_plain_call; n
56 static PyObject *const_str_plain_random;
57 static PyObject *const_tuple_ba58284e993f645f647ff630deb3d552_tuple; 49 static PyObject *const_tuple_ba58284e993f645f647ff630deb3d552_tuple;
58 static PyObject *const_int_pos_50000; 50 static PyObject *const_int_pos_50000;
59 extern PyObject *const_str_plain___module__; 51 extern PyObject *const_str_plain___module__;
n 60 static PyObject *const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple; n
61 static PyObject *const_str_plain_self; 52 static PyObject *const_str_plain_self;
62 static PyObject *const_str_plain_d; 53 static PyObject *const_str_plain_d;
63 extern PyObject *const_str_plain___metaclass__; 54 extern PyObject *const_str_plain___metaclass__;
64 static PyObject *const_str_plain_f; 55 static PyObject *const_str_plain_f;
65 static PyObject *const_str_plain_a; 56 static PyObject *const_str_plain_a;
66 static PyObject *const_str_plain_b; 57 static PyObject *const_str_plain_b;
67 static PyObject *const_str_plain_c; 58 static PyObject *const_str_plain_c;
n 68 static PyObject *const_str_plain_check; n
69 static PyObject *const_str_plain_x; 59 static PyObject *const_str_plain_x;
70 static PyObject *const_str_plain_print_function; 60 static PyObject *const_str_plain_print_function;
71 static PyObject *const_str_plain_e; 61 static PyObject *const_str_plain_e;
72 extern PyObject *const_str_plain_xrange; 62 extern PyObject *const_str_plain_xrange;
n 73 static PyObject *const_tuple_ca2f155a28955fc472d4376e2721d689_tuple; n
74 static PyObject *module_filename_obj; 63 static PyObject *module_filename_obj;
75 64
76 static bool constants_created = false; 65 static bool constants_created = false;
77 66
78 static void createModuleConstants( void ) 67 static void createModuleConstants( void )
79 { 68 {
n 80     const_str_plain_to = UNSTREAM_STRING( &constant_bin[ 0 ], 2, 1 ); n
81     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING( &constant_bin[ 2 ], 3, 0 ); 69     const_str_digest_5ed1392909ad16e6227b8230f4582352 = UNSTREAM_STRING( &constant_bin[ 0 ], 3, 0 );
82     const_str_plain_inst = UNSTREAM_STRING( &constant_bin[ 5 ], 4, 1 ); 70     const_str_plain_inst = UNSTREAM_STRING( &constant_bin[ 3 ], 4, 1 );
83     const_str_plain_new = UNSTREAM_STRING( &constant_bin[ 9 ], 3, 1 );
84     const_str_plain_compiled_method = UNSTREAM_STRING( &constant_bin[ 12 ], 15, 1 ); 71     const_str_plain_compiled_method = UNSTREAM_STRING( &constant_bin[ 7 ], 15, 1 );
85     const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple = PyTuple_New( 6 );
86     const_str_plain_some = UNSTREAM_STRING( &constant_bin[ 27 ], 4, 1 );
87     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 0, const_str_plain_some ); Py_INCREF( const_str_plain_some );
88     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 1, const_str_plain_new ); Py_INCREF( const_str_plain_new );
89     const_str_plain_values = UNSTREAM_STRING( &constant_bin[ 31 ], 6, 1 );
90     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 2, const_str_plain_values ); Py_INCREF( const_str_plain_values );
91     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 3, const_str_plain_to ); Py_INCREF( const_str_plain_to );
92     const_str_plain_check = UNSTREAM_STRING( &constant_bin[ 37 ], 5, 1 );
93     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 4, const_str_plain_check ); Py_INCREF( const_str_plain_check );
94     const_str_plain_call = UNSTREAM_STRING( &constant_bin[ 42 ], 4, 1 );
95     PyTuple_SET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 5, const_str_plain_call ); Py_INCREF( const_str_plain_call );
96     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 ); 72     const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple = PyTuple_New( 1 );
97     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 ); 73     PyTuple_SET_ITEM( const_tuple_str_digest_5ed1392909ad16e6227b8230f4582352_tuple, 0, const_str_digest_5ed1392909ad16e6227b8230f4582352 ); Py_INCREF( const_str_digest_5ed1392909ad16e6227b8230f4582352 );
98     const_tuple_str_plain_inst_tuple = PyTuple_New( 1 ); 74     const_tuple_str_plain_inst_tuple = PyTuple_New( 1 );
99     PyTuple_SET_ITEM( const_tuple_str_plain_inst_tuple, 0, const_str_plain_inst ); Py_INCREF( const_str_plain_inst ); 75     PyTuple_SET_ITEM( const_tuple_str_plain_inst_tuple, 0, const_str_plain_inst ); Py_INCREF( const_str_plain_inst );
n 100     const_str_plain_calledRepeatedly = UNSTREAM_STRING( &constant_bin[ 46 ], 16, 1 ); n 76     const_str_plain_calledRepeatedly = UNSTREAM_STRING( &constant_bin[ 22 ], 16, 1 );
101     const_str_plain_print = UNSTREAM_STRING( &constant_bin[ 62 ], 5, 1 ); 77     const_str_plain_print = UNSTREAM_STRING( &constant_bin[ 38 ], 5, 1 );
102     const_tuple_int_pos_50000_tuple = PyTuple_New( 1 ); 78     const_tuple_int_pos_50000_tuple = PyTuple_New( 1 );
103     const_int_pos_50000 = PyInt_FromLong( 50000l ); 79     const_int_pos_50000 = PyInt_FromLong( 50000l );
104     PyTuple_SET_ITEM( const_tuple_int_pos_50000_tuple, 0, const_int_pos_50000 ); Py_INCREF( const_int_pos_50000 ); 80     PyTuple_SET_ITEM( const_tuple_int_pos_50000_tuple, 0, const_int_pos_50000 ); Py_INCREF( const_int_pos_50000 );
n 105     const_str_plain_other = UNSTREAM_STRING( &constant_bin[ 67 ], 5, 1 ); n
106     const_str_angle_module = UNSTREAM_STRING( &constant_bin[ 72 ], 8, 0 ); 81     const_str_angle_module = UNSTREAM_STRING( &constant_bin[ 43 ], 8, 0 );
107     const_str_plain_C = UNSTREAM_CHAR( 67, 1 ); 82     const_str_plain_C = UNSTREAM_CHAR( 67, 1 );
n 108     const_str_digest_253ebc76a03dc6abd4877f98b296357a = UNSTREAM_STRING( &constant_bin[ 80 ], 89, 0 ); n 83     const_str_digest_253ebc76a03dc6abd4877f98b296357a = UNSTREAM_STRING( &constant_bin[ 51 ], 89, 0 );
109     const_str_plain_random = UNSTREAM_STRING( &constant_bin[ 169 ], 6, 1 );
110     const_tuple_ba58284e993f645f647ff630deb3d552_tuple = PyTuple_New( 7 ); 84     const_tuple_ba58284e993f645f647ff630deb3d552_tuple = PyTuple_New( 7 );
n 111     const_str_plain_self = UNSTREAM_STRING( &constant_bin[ 175 ], 4, 1 ); n 85     const_str_plain_self = UNSTREAM_STRING( &constant_bin[ 140 ], 4, 1 );
112     PyTuple_SET_ITEM( const_tuple_ba58284e993f645f647ff630deb3d552_tuple, 0, const_str_plain_self ); Py_INCREF( const_str_plain_self ); 86     PyTuple_SET_ITEM( const_tuple_ba58284e993f645f647ff630deb3d552_tuple, 0, const_str_plain_self ); Py_INCREF( const_str_plain_self );
113     const_str_plain_a = UNSTREAM_CHAR( 97, 1 ); 87     const_str_plain_a = UNSTREAM_CHAR( 97, 1 );
114     PyTuple_SET_ITEM( const_tuple_ba58284e993f645f647ff630deb3d552_tuple, 1, const_str_plain_a ); Py_INCREF( const_str_plain_a ); 88     PyTuple_SET_ITEM( const_tuple_ba58284e993f645f647ff630deb3d552_tuple, 1, const_str_plain_a ); Py_INCREF( const_str_plain_a );
115     const_str_plain_b = UNSTREAM_CHAR( 98, 1 ); 89     const_str_plain_b = UNSTREAM_CHAR( 98, 1 );
116     PyTuple_SET_ITEM( const_tuple_ba58284e993f645f647ff630deb3d552_tuple, 2, const_str_plain_b ); Py_INCREF( const_str_plain_b ); 90     PyTuple_SET_ITEM( const_tuple_ba58284e993f645f647ff630deb3d552_tuple, 2, const_str_plain_b ); Py_INCREF( const_str_plain_b );
120     PyTuple_SET_ITEM( const_tuple_ba58284e993f645f647ff630deb3d552_tuple, 4, const_str_plain_d ); Py_INCREF( const_str_plain_d ); 94     PyTuple_SET_ITEM( const_tuple_ba58284e993f645f647ff630deb3d552_tuple, 4, const_str_plain_d ); Py_INCREF( const_str_plain_d );
121     const_str_plain_e = UNSTREAM_CHAR( 101, 1 ); 95     const_str_plain_e = UNSTREAM_CHAR( 101, 1 );
122     PyTuple_SET_ITEM( const_tuple_ba58284e993f645f647ff630deb3d552_tuple, 5, const_str_plain_e ); Py_INCREF( const_str_plain_e ); 96     PyTuple_SET_ITEM( const_tuple_ba58284e993f645f647ff630deb3d552_tuple, 5, const_str_plain_e ); Py_INCREF( const_str_plain_e );
123     const_str_plain_f = UNSTREAM_CHAR( 102, 1 ); 97     const_str_plain_f = UNSTREAM_CHAR( 102, 1 );
124     PyTuple_SET_ITEM( const_tuple_ba58284e993f645f647ff630deb3d552_tuple, 6, const_str_plain_f ); Py_INCREF( const_str_plain_f ); 98     PyTuple_SET_ITEM( const_tuple_ba58284e993f645f647ff630deb3d552_tuple, 6, const_str_plain_f ); Py_INCREF( const_str_plain_f );
n 125     const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple = PyTuple_New( 6 ); n
126     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 0, const_str_plain_some ); Py_INCREF( const_str_plain_some );
127     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 1, const_str_plain_random ); Py_INCREF( const_str_plain_random );
128     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 2, const_str_plain_values ); Py_INCREF( const_str_plain_values );
129     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 3, const_str_plain_to ); Py_INCREF( const_str_plain_to );
130     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 4, const_str_plain_check ); Py_INCREF( const_str_plain_check );
131     PyTuple_SET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 5, const_str_plain_call ); Py_INCREF( const_str_plain_call );
132     const_str_plain_x = UNSTREAM_CHAR( 120, 1 ); 99     const_str_plain_x = UNSTREAM_CHAR( 120, 1 );
n 133     const_str_plain_print_function = UNSTREAM_STRING( &constant_bin[ 179 ], 14, 1 ); n 100     const_str_plain_print_function = UNSTREAM_STRING( &constant_bin[ 144 ], 14, 1 );
134     const_tuple_ca2f155a28955fc472d4376e2721d689_tuple = PyTuple_New( 6 );
135     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 0, const_str_plain_some ); Py_INCREF( const_str_plain_some );
136     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 1, const_str_plain_other ); Py_INCREF( const_str_plain_other );
137     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 2, const_str_plain_values ); Py_INCREF( const_str_plain_values );
138     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 3, const_str_plain_to ); Py_INCREF( const_str_plain_to );
139     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 4, const_str_plain_check ); Py_INCREF( const_str_plain_check );
140     PyTuple_SET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 5, const_str_plain_call ); Py_INCREF( const_str_plain_call );
141 101
142     constants_created = true; 102     constants_created = true;
143 } 103 }
144 104
145 #ifndef __NUITKA_NO_ASSERT__ 105 #ifndef __NUITKA_NO_ASSERT__
375     PyObject *exception_keeper_value_1; 335     PyObject *exception_keeper_value_1;
376     PyTracebackObject *exception_keeper_tb_1; 336     PyTracebackObject *exception_keeper_tb_1;
377     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1; 337     NUITKA_MAY_BE_UNUSED int exception_keeper_lineno_1;
378     PyObject *tmp_assign_source_1; 338     PyObject *tmp_assign_source_1;
379     PyObject *tmp_called_name_1; 339     PyObject *tmp_called_name_1;
n 380     PyObject *tmp_called_name_2; n
381     PyObject *tmp_called_name_3;
382     PyObject *tmp_called_name_4;
383     PyObject *tmp_frame_locals; 340     PyObject *tmp_frame_locals;
384     PyObject *tmp_return_value; 341     PyObject *tmp_return_value;
n 385     PyObject *tmp_source_name_1; n
386     PyObject *tmp_source_name_2;
387     PyObject *tmp_source_name_3;
388     NUITKA_MAY_BE_UNUSED PyObject *tmp_unused;
389     static PyFrameObject *cache_frame_function = NULL; 342     static PyFrameObject *cache_frame_function = NULL;
390 343
391     PyFrameObject *frame_function; 344     PyFrameObject *frame_function;
392 345
393     tmp_return_value = NULL; 346     tmp_return_value = NULL;
441         goto frame_exception_exit_1; 394         goto frame_exception_exit_1;
442     } 395     }
443     assert( var_inst == NULL ); 396     assert( var_inst == NULL );
444     var_inst = tmp_assign_source_1; 397     var_inst = tmp_assign_source_1;
445 398
n 446     tmp_source_name_1 = var_inst; n
447  
448     tmp_called_name_2 = LOOKUP_ATTRIBUTE( tmp_source_name_1, const_str_plain_compiled_method );
449     if ( tmp_called_name_2 == NULL )
450     {
451         assert( ERROR_OCCURRED() );
452  
453         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
454  
455  
456         exception_lineno = 32;
457         goto frame_exception_exit_1;
458     }
459     frame_function->f_lineno = 32;
460     tmp_unused = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_2, &PyTuple_GET_ITEM( const_tuple_78e2f1ad354bdb7db1a0fda186168ee0_tuple, 0 ) );
461  
462     Py_DECREF( tmp_called_name_2 );
463     if ( tmp_unused == NULL )
464     {
465         assert( ERROR_OCCURRED() );
466  
467         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
468  
469  
470         exception_lineno = 32;
471         goto frame_exception_exit_1;
472     }
473     Py_DECREF( tmp_unused );
474     tmp_source_name_2 = var_inst;
475  
476     tmp_called_name_3 = LOOKUP_ATTRIBUTE( tmp_source_name_2, const_str_plain_compiled_method );
477     if ( tmp_called_name_3 == NULL )
478     {
479         assert( ERROR_OCCURRED() );
480  
481         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
482  
483  
484         exception_lineno = 33;
485         goto frame_exception_exit_1;
486     }
487     frame_function->f_lineno = 33;
488     tmp_unused = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_3, &PyTuple_GET_ITEM( const_tuple_ca2f155a28955fc472d4376e2721d689_tuple, 0 ) );
489  
490     Py_DECREF( tmp_called_name_3 );
491     if ( tmp_unused == NULL )
492     {
493         assert( ERROR_OCCURRED() );
494  
495         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
496  
497  
498         exception_lineno = 33;
499         goto frame_exception_exit_1;
500     }
501     Py_DECREF( tmp_unused );
502     tmp_source_name_3 = var_inst;
503  
504     tmp_called_name_4 = LOOKUP_ATTRIBUTE( tmp_source_name_3, const_str_plain_compiled_method );
505     if ( tmp_called_name_4 == NULL )
506     {
507         assert( ERROR_OCCURRED() );
508  
509         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
510  
511  
512         exception_lineno = 34;
513         goto frame_exception_exit_1;
514     }
515     frame_function->f_lineno = 34;
516     tmp_unused = CALL_FUNCTION_WITH_ARGS6( tmp_called_name_4, &PyTuple_GET_ITEM( const_tuple_4cee4124c8df2995a8a82b981e580f5e_tuple, 0 ) );
517  
518     Py_DECREF( tmp_called_name_4 );
519     if ( tmp_unused == NULL )
520     {
521         assert( ERROR_OCCURRED() );
522  
523         FETCH_ERROR_OCCURRED( &exception_type, &exception_value, &exception_tb );
524  
525  
526         exception_lineno = 34;
527         goto frame_exception_exit_1;
528     }
529     Py_DECREF( tmp_unused );
530 399
531 #if 0 400 #if 0
532     RESTORE_FRAME_EXCEPTION( frame_function ); 401     RESTORE_FRAME_EXCEPTION( frame_function );
533 #endif 402 #endif
534     // Put the previous frame back on top. 403     // Put the previous frame back on top.
615     exception_keeper_lineno_1 = exception_lineno; 484     exception_keeper_lineno_1 = exception_lineno;
616     exception_type = NULL; 485     exception_type = NULL;
617     exception_value = NULL; 486     exception_value = NULL;
618     exception_tb = NULL; 487     exception_tb = NULL;
619     exception_lineno = -1; 488     exception_lineno = -1;
n 620   n
621     Py_XDECREF( var_inst );
622     var_inst = NULL;
623 489
624     // Re-raise. 490     // Re-raise.
625     exception_type = exception_keeper_type_1; 491     exception_type = exception_keeper_type_1;
626     exception_value = exception_keeper_value_1; 492     exception_value = exception_keeper_value_1;
627     exception_tb = exception_keeper_tb_1; 493     exception_tb = exception_keeper_tb_1;
1406 1272
1407     // Set the sys.executable path to the original Python executable on Linux 1273     // Set the sys.executable path to the original Python executable on Linux
1408     // or to python.exe on Windows. 1274     // or to python.exe on Windows.
1409     PySys_SetObject( 1275     PySys_SetObject(
1410         (char *)"executable", 1276         (char *)"executable",
t 1411         UNSTREAM_STRING( &constant_bin[ 193 ], 15, 0 ) t 1277         UNSTREAM_STRING( &constant_bin[ 158 ], 15, 0 )
1412     ); 1278     );
1413 1279
1414     patchBuiltinModule(); 1280     patchBuiltinModule();
1415     patchTypeComparison(); 1281     patchTypeComparison();
1416 1282