@@ -75,7 +75,7 @@ static void emit_bc_end_pass(emit_t *emit) {
7575 emit -> code_base = m_new (byte , emit -> code_size );
7676
7777 } else if (emit -> pass == PASS_3 ) {
78- rt_assign_byte_code (emit -> scope -> unique_code_id , emit -> code_base , emit -> code_size , emit -> scope -> num_params , emit -> scope -> num_locals , emit -> scope -> stack_size , (emit -> scope -> flags & SCOPE_FLAG_GENERATOR ) != 0 );
78+ rt_assign_byte_code (emit -> scope -> unique_code_id , emit -> code_base , emit -> code_size , emit -> scope -> num_params , emit -> scope -> num_locals , emit -> scope -> num_cells , emit -> scope -> stack_size , (emit -> scope -> flags & SCOPE_FLAG_GENERATOR ) != 0 );
7979 }
8080}
8181
@@ -302,24 +302,24 @@ static void emit_bc_load_fast(emit_t *emit, qstr qstr, int local_num) {
302302 }
303303}
304304
305- static void emit_bc_load_name (emit_t * emit , qstr qstr ) {
305+ static void emit_bc_load_deref (emit_t * emit , qstr qstr , int local_num ) {
306306 emit_pre (emit , 1 );
307- emit_write_byte_1_qstr (emit , PYBC_LOAD_NAME , qstr );
307+ emit_write_byte_1_uint (emit , PYBC_LOAD_DEREF , local_num );
308308}
309309
310- static void emit_bc_load_global (emit_t * emit , qstr qstr ) {
310+ static void emit_bc_load_closure (emit_t * emit , qstr qstr , int local_num ) {
311311 emit_pre (emit , 1 );
312- emit_write_byte_1_qstr (emit , PYBC_LOAD_GLOBAL , qstr );
312+ emit_write_byte_1_uint (emit , PYBC_LOAD_CLOSURE , local_num );
313313}
314314
315- static void emit_bc_load_deref (emit_t * emit , qstr qstr , int local_num ) {
315+ static void emit_bc_load_name (emit_t * emit , qstr qstr ) {
316316 emit_pre (emit , 1 );
317- assert ( 0 );
317+ emit_write_byte_1_qstr ( emit , PYBC_LOAD_NAME , qstr );
318318}
319319
320- static void emit_bc_load_closure (emit_t * emit , qstr qstr , int local_num ) {
320+ static void emit_bc_load_global (emit_t * emit , qstr qstr ) {
321321 emit_pre (emit , 1 );
322- assert ( 0 );
322+ emit_write_byte_1_qstr ( emit , PYBC_LOAD_GLOBAL , qstr );
323323}
324324
325325static void emit_bc_load_attr (emit_t * emit , qstr qstr ) {
@@ -348,6 +348,11 @@ static void emit_bc_store_fast(emit_t *emit, qstr qstr, int local_num) {
348348 }
349349}
350350
351+ static void emit_bc_store_deref (emit_t * emit , qstr qstr , int local_num ) {
352+ emit_pre (emit , -1 );
353+ emit_write_byte_1_uint (emit , PYBC_STORE_DEREF , local_num );
354+ }
355+
351356static void emit_bc_store_name (emit_t * emit , qstr qstr ) {
352357 emit_pre (emit , -1 );
353358 emit_write_byte_1_qstr (emit , PYBC_STORE_NAME , qstr );
@@ -358,11 +363,6 @@ static void emit_bc_store_global(emit_t *emit, qstr qstr) {
358363 emit_write_byte_1_qstr (emit , PYBC_STORE_GLOBAL , qstr );
359364}
360365
361- static void emit_bc_store_deref (emit_t * emit , qstr qstr , int local_num ) {
362- emit_pre (emit , -1 );
363- assert (0 );
364- }
365-
366366static void emit_bc_store_attr (emit_t * emit , qstr qstr ) {
367367 emit_pre (emit , -2 );
368368 emit_write_byte_1_qstr (emit , PYBC_STORE_ATTR , qstr );
@@ -385,6 +385,11 @@ static void emit_bc_delete_fast(emit_t *emit, qstr qstr, int local_num) {
385385 emit_write_byte_1_uint (emit , PYBC_DELETE_FAST_N , local_num );
386386}
387387
388+ static void emit_bc_delete_deref (emit_t * emit , qstr qstr , int local_num ) {
389+ emit_pre (emit , 0 );
390+ emit_write_byte_1_qstr (emit , PYBC_DELETE_DEREF , local_num );
391+ }
392+
388393static void emit_bc_delete_name (emit_t * emit , qstr qstr ) {
389394 emit_pre (emit , 0 );
390395 emit_write_byte_1_qstr (emit , PYBC_DELETE_NAME , qstr );
@@ -395,12 +400,6 @@ static void emit_bc_delete_global(emit_t *emit, qstr qstr) {
395400 emit_write_byte_1_qstr (emit , PYBC_DELETE_GLOBAL , qstr );
396401}
397402
398- static void emit_bc_delete_deref (emit_t * emit , qstr qstr , int local_num ) {
399- emit_pre (emit , 0 );
400- assert (0 );
401- //emit_write_byte_1_qstr(emit, PYBC_DELETE_DEREF, qstr);
402- }
403-
404403static void emit_bc_delete_attr (emit_t * emit , qstr qstr ) {
405404 emit_pre (emit , -1 );
406405 emit_write_byte_1_qstr (emit , PYBC_DELETE_ATTR , qstr );
@@ -612,11 +611,9 @@ static void emit_bc_make_function(emit_t *emit, scope_t *scope, int n_dict_param
612611}
613612
614613static void emit_bc_make_closure (emit_t * emit , scope_t * scope , int n_dict_params , int n_default_params ) {
615- assert (0 );
616- emit_pre (emit , -2 - n_default_params - 2 * n_dict_params );
617- if (emit -> pass == PASS_3 ) {
618- printf ("MAKE_CLOSURE %d\n" , (n_dict_params << 8 ) | n_default_params );
619- }
614+ assert (n_default_params == 0 && n_dict_params == 0 );
615+ emit_pre (emit , 0 );
616+ emit_write_byte_1_uint (emit , PYBC_MAKE_CLOSURE , scope -> unique_code_id );
620617}
621618
622619static void emit_bc_call_function (emit_t * emit , int n_positional , int n_keyword , bool have_star_arg , bool have_dbl_star_arg ) {
@@ -728,24 +725,24 @@ const emit_method_table_t emit_bc_method_table = {
728725 emit_bc_load_const_verbatim_quoted_str ,
729726 emit_bc_load_const_verbatim_end ,
730727 emit_bc_load_fast ,
731- emit_bc_load_name ,
732- emit_bc_load_global ,
733728 emit_bc_load_deref ,
734729 emit_bc_load_closure ,
730+ emit_bc_load_name ,
731+ emit_bc_load_global ,
735732 emit_bc_load_attr ,
736733 emit_bc_load_method ,
737734 emit_bc_load_build_class ,
738735 emit_bc_store_fast ,
736+ emit_bc_store_deref ,
739737 emit_bc_store_name ,
740738 emit_bc_store_global ,
741- emit_bc_store_deref ,
742739 emit_bc_store_attr ,
743740 emit_bc_store_subscr ,
744741 emit_bc_store_locals ,
745742 emit_bc_delete_fast ,
743+ emit_bc_delete_deref ,
746744 emit_bc_delete_name ,
747745 emit_bc_delete_global ,
748- emit_bc_delete_deref ,
749746 emit_bc_delete_attr ,
750747 emit_bc_delete_subscr ,
751748 emit_bc_dup_top ,
0 commit comments