Bug #1018 ยป return_from_eclass.patch
| vm_insnhelper.c (working copy) | ||
|---|---|---|
| 
     	    else if (state == TAG_RETURN) { 
   | 
||
| 
     		rb_control_frame_t *cfp = GET_CFP(); 
   | 
||
| 
     		VALUE *dfp = GET_DFP(); 
   | 
||
| 
     		VALUE * const lfp = GET_LFP(); 
   | 
||
| 
     		VALUE *lfp = GET_LFP(); 
   | 
||
| 
     		/* check orphan and get dfp */ 
   | 
||
| 
     		while ((VALUE *) cfp < th->stack + th->stack_size) { 
   | 
||
| 
     		    if (!lfp) { 
   | 
||
| 
     		      lfp = cfp->lfp; 
   | 
||
| 
     		    } 
   | 
||
| 
     		    if (cfp->dfp == lfp && cfp->iseq->type == ISEQ_TYPE_CLASS) { 
   | 
||
| 
     		      lfp = 0; 
   | 
||
| 
     		    } 
   | 
||
| 
     		    if (cfp->lfp == lfp) { 
   | 
||
| 
     			if (VM_FRAME_TYPE(cfp) == VM_FRAME_MAGIC_LAMBDA) { 
   | 
||
| 
     			    VALUE *tdfp = dfp; 
   | 
||
| compile.c (working copy) | ||
|---|---|---|
| 
     	rb_iseq_t *is = iseq; 
   | 
||
| 
     	if (is) { 
   | 
||
| 
     	    if (is->type == ISEQ_TYPE_TOP || is->type == ISEQ_TYPE_CLASS) { 
   | 
||
| 
     	    if (is->type == ISEQ_TYPE_TOP) { 
   | 
||
| 
     		COMPILE_ERROR((ERROR_ARGS "Invalid return")); 
   | 
||
| 
     	    } 
   | 
||
| 
     	    else { 
   | 
||