@@ -75,7 +75,7 @@ static void emit_bc_end_pass(emit_t *emit) {
75
75
emit -> code_base = m_new (byte , emit -> code_size );
76
76
77
77
} 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 );
79
79
}
80
80
}
81
81
@@ -302,24 +302,24 @@ static void emit_bc_load_fast(emit_t *emit, qstr qstr, int local_num) {
302
302
}
303
303
}
304
304
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 ) {
306
306
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 );
308
308
}
309
309
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 ) {
311
311
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 );
313
313
}
314
314
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 ) {
316
316
emit_pre (emit , 1 );
317
- assert ( 0 );
317
+ emit_write_byte_1_qstr ( emit , PYBC_LOAD_NAME , qstr );
318
318
}
319
319
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 ) {
321
321
emit_pre (emit , 1 );
322
- assert ( 0 );
322
+ emit_write_byte_1_qstr ( emit , PYBC_LOAD_GLOBAL , qstr );
323
323
}
324
324
325
325
static 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) {
348
348
}
349
349
}
350
350
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
+
351
356
static void emit_bc_store_name (emit_t * emit , qstr qstr ) {
352
357
emit_pre (emit , -1 );
353
358
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) {
358
363
emit_write_byte_1_qstr (emit , PYBC_STORE_GLOBAL , qstr );
359
364
}
360
365
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
-
366
366
static void emit_bc_store_attr (emit_t * emit , qstr qstr ) {
367
367
emit_pre (emit , -2 );
368
368
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) {
385
385
emit_write_byte_1_uint (emit , PYBC_DELETE_FAST_N , local_num );
386
386
}
387
387
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
+
388
393
static void emit_bc_delete_name (emit_t * emit , qstr qstr ) {
389
394
emit_pre (emit , 0 );
390
395
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) {
395
400
emit_write_byte_1_qstr (emit , PYBC_DELETE_GLOBAL , qstr );
396
401
}
397
402
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
-
404
403
static void emit_bc_delete_attr (emit_t * emit , qstr qstr ) {
405
404
emit_pre (emit , -1 );
406
405
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
612
611
}
613
612
614
613
static 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 );
620
617
}
621
618
622
619
static 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 = {
728
725
emit_bc_load_const_verbatim_quoted_str ,
729
726
emit_bc_load_const_verbatim_end ,
730
727
emit_bc_load_fast ,
731
- emit_bc_load_name ,
732
- emit_bc_load_global ,
733
728
emit_bc_load_deref ,
734
729
emit_bc_load_closure ,
730
+ emit_bc_load_name ,
731
+ emit_bc_load_global ,
735
732
emit_bc_load_attr ,
736
733
emit_bc_load_method ,
737
734
emit_bc_load_build_class ,
738
735
emit_bc_store_fast ,
736
+ emit_bc_store_deref ,
739
737
emit_bc_store_name ,
740
738
emit_bc_store_global ,
741
- emit_bc_store_deref ,
742
739
emit_bc_store_attr ,
743
740
emit_bc_store_subscr ,
744
741
emit_bc_store_locals ,
745
742
emit_bc_delete_fast ,
743
+ emit_bc_delete_deref ,
746
744
emit_bc_delete_name ,
747
745
emit_bc_delete_global ,
748
- emit_bc_delete_deref ,
749
746
emit_bc_delete_attr ,
750
747
emit_bc_delete_subscr ,
751
748
emit_bc_dup_top ,
0 commit comments