Fix scalar dereference of threadsv variables (e.g. $$_).
Malcolm Beattie [Tue, 25 Nov 1997 14:17:05 +0000 (14:17 +0000)]
p4raw-id: //depot/perl@291

op.c
op.h

diff --git a/op.c b/op.c
index dd4c5ac..0024f2b 100644 (file)
--- a/op.c
+++ b/op.c
@@ -3740,8 +3740,10 @@ newSVREF(OP *o)
        o->op_ppaddr = ppaddr[OP_PADSV];
        return o;
     }
-    else if (o->op_type == OP_THREADSV)
+    else if (o->op_type == OP_THREADSV && !(o->op_flags & OPpDONE_SVREF)) {
+       o->op_flags |= OPpDONE_SVREF;
        return o;
+    }
     return newUNOP(OP_RV2SV, 0, scalar(o));
 }
 
diff --git a/op.h b/op.h
index e3d3f3d..fbb5b8c 100644 (file)
--- a/op.h
+++ b/op.h
@@ -131,8 +131,8 @@ typedef U32 PADOFFSET;
 /* Private for OP_SORT, OP_PRTF, OP_SPRINTF, string cmp'n, and case changers */
 #define OPpLOCALE              64      /* Use locale */
 
-/* Private for OP_SPECIFIC */
-#define OPpPM_NOT_CONST                64      /* Not constant enough for pmruntime */
+/* Private for OP_THREADSV */
+#define OPpDONE_SVREF          64      /* Been through newSVREF once */
 
 struct op {
     BASEOP