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 {
|
||