Feature #17613 ยป 0001-Eliminate-useless-catch-tables-and-nops-from-lambdas.patch
| compile.c | ||
|---|---|---|
| 
         debugs("[compile step 6 (update_catch_except_flags)] \n"); 
   | 
||
| 
         update_catch_except_flags(iseq->body); 
   | 
||
| 
         debugs("[compile step 6.1 (remove unused catch tables)] \n"); 
   | 
||
| 
         if (!iseq->body->catch_except_p && iseq->body->catch_table) { 
   | 
||
| 
             xfree(iseq->body->catch_table); 
   | 
||
| 
             iseq->body->catch_table = NULL; 
   | 
||
| 
         } 
   | 
||
| 
     #if VM_INSN_INFO_TABLE_IMPL == 2 
   | 
||
| 
         if (iseq->body->insns_info.succ_index_table == NULL) { 
   | 
||
| 
             debugs("[compile step 7 (rb_iseq_insns_info_encode_positions)] \n"); 
   | 
||
| ... | ... | |
| 
         list = FIRST_ELEMENT(anchor); 
   | 
||
| 
         int do_block_optimization = 0; 
   | 
||
| 
         if (iseq->body->type == ISEQ_TYPE_BLOCK && !iseq->body->catch_except_p) { 
   | 
||
| 
             do_block_optimization = 1; 
   | 
||
| 
         } 
   | 
||
| 
         while (list) { 
   | 
||
| 
     	if (IS_INSN(list)) { 
   | 
||
| 
     	    if (do_peepholeopt) { 
   | 
||
| ... | ... | |
| 
     	    if (do_ou) { 
   | 
||
| 
     		insn_operands_unification((INSN *)list); 
   | 
||
| 
     	    } 
   | 
||
| 
                 if (do_block_optimization) { 
   | 
||
| 
                     INSN * item = (INSN *)list; 
   | 
||
| 
                     if (IS_INSN_ID(item, jump)) { 
   | 
||
| 
                         do_block_optimization = 0; 
   | 
||
| 
                     } 
   | 
||
| 
                 } 
   | 
||
| 
     	} 
   | 
||
| 
     	if (IS_LABEL(list)) { 
   | 
||
| 
     	    switch (((LABEL *)list)->rescued) { 
   | 
||
| ... | ... | |
| 
     	} 
   | 
||
| 
     	list = list->next; 
   | 
||
| 
         } 
   | 
||
| 
         if (do_block_optimization) { 
   | 
||
| 
             LINK_ELEMENT * le = FIRST_ELEMENT(anchor)->next; 
   | 
||
| 
             if (IS_INSN(le) && IS_INSN_ID((INSN *)le, nop)) { 
   | 
||
| 
                 ELEM_REMOVE(le); 
   | 
||
| 
             } 
   | 
||
| 
         } 
   | 
||
| 
         return COMPILE_OK; 
   | 
||
| 
     } 
   | 
||