avoid spurious "Useless use of variable" warning on C<our $foo;>
Gurusamy Sarathy [Fri, 14 Jan 2000 01:27:13 +0000 (01:27 +0000)]
p4raw-id: //depot/perl@4800

dump.c
op.c
op.h

diff --git a/dump.c b/dump.c
index b8eaa54..c10ac1a 100644 (file)
--- a/dump.c
+++ b/dump.c
@@ -485,6 +485,8 @@ Perl_do_op_dump(pTHX_ I32 level, PerlIO *file, OP *o)
            else {
                if (o->op_private & HINT_STRICT_REFS)
                    sv_catpv(tmpsv, ",STRICT_REFS");
+               if (o->op_private & OPpOUR_INTRO)
+                   sv_catpv(tmpsv, ",OUR_INTRO");
            }
        }
        else if (o->op_type == OP_CONST) {
diff --git a/op.c b/op.c
index 805aeaa..3c92fef 100644 (file)
--- a/op.c
+++ b/op.c
@@ -1074,7 +1074,7 @@ Perl_scalarvoid(pTHX_ OP *o)
     case OP_RV2SV:
     case OP_RV2AV:
     case OP_RV2HV:
-       if (!(o->op_private & OPpLVAL_INTRO) &&
+       if (!(o->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)) &&
                (!o->op_sibling || o->op_sibling->op_type != OP_READLINE))
            useless = "a variable";
        break;
@@ -1830,6 +1830,7 @@ S_my_kid(pTHX_ OP *o, OP *attrs)
     } else if (type == OP_RV2SV ||     /* "our" declaration */
               type == OP_RV2AV ||
               type == OP_RV2HV) { /* XXX does this let anything illegal in? */
+       o->op_private |= OPpOUR_INTRO;
        return o;
     } else if (type != OP_PADSV &&
             type != OP_PADAV &&
diff --git a/op.h b/op.h
index 5231a41..c69d897 100644 (file)
--- a/op.h
+++ b/op.h
@@ -136,7 +136,9 @@ typedef U32 PADOFFSET;
 #define OPpEARLY_CV            32      /* foo() called before sub foo was parsed */
   /* OP_?ELEM only */
 #define OPpLVAL_DEFER          16      /* Defer creation of array/hash elem */
-  /* for OP_RV2?V, lower bits carry hints */
+  /* OP_RV2?V only */
+#define OPpOUR_INTRO           16      /* Defer creation of array/hash elem */
+  /* for OP_RV2?V, lower bits carry hints (currently only HINT_STRICT_REFS) */
 
 /* Private for OPs with TARGLEX */
   /* (lower bits may carry MAXARG) */