applied patch, with tweak suggested by Michael Parker
[p5sagit/p5-mst-13.2.git] / op.c
diff --git a/op.c b/op.c
index c0454bc..16f528d 100644 (file)
--- a/op.c
+++ b/op.c
@@ -3669,6 +3669,7 @@ newSUB(I32 floor, OP *o, OP *proto, OP *block)
            if (!PL_initav)
                PL_initav = newAV();
            av_push(PL_initav, SvREFCNT_inc(cv));
+           GvCV(gv) = 0;
        }
     }
 
@@ -4314,7 +4315,7 @@ ck_fun(OP *o)
                }
                break;
            case OA_FILEREF:
-               if (kid->op_type != OP_GV) {
+               if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) {
                    if (kid->op_type == OP_CONST &&
                      (kid->op_private & OPpCONST_BARE)) {
                        OP *newop = newGVOP(OP_GV, 0,
@@ -4827,8 +4828,12 @@ ck_subr(OP *o)
                        bad_type(arg, "sub", gv_ename(namegv), o2);
                    goto wrapref;
                case '$':
-                   if (o2->op_type != OP_RV2SV && o2->op_type != OP_PADSV)
+                   if (o2->op_type != OP_RV2SV
+                       && o2->op_type != OP_PADSV
+                       && o2->op_type != OP_THREADSV)
+                   {
                        bad_type(arg, "scalar", gv_ename(namegv), o2);
+                   }
                    goto wrapref;
                case '@':
                    if (o2->op_type != OP_RV2AV && o2->op_type != OP_PADAV)