jump through hoops to avoid compiler warnings
Zefram [Thu, 8 Dec 2011 21:03:02 +0000 (21:03 +0000)]
Changes
Declare.xs
stolen_chunk_of_toke.c

diff --git a/Changes b/Changes
index 70ca955..3d42a19 100644 (file)
--- a/Changes
+++ b/Changes
@@ -2,6 +2,7 @@ Changes for Devel-Declare
 
   - Fix a C declaration after statement, which broke compatibility with
     older compilers (Jan Dubois).
+  - Jump through some hoops to avoid compiler warnings.
 
 0.006008 - 05 Nov 2011
   - Adjust toke_scan_str logic to always leave the prefix part of
index 5869056..4952520 100644 (file)
@@ -63,6 +63,7 @@ int dd_is_declarator(pTHX_ char* name) {
   HV* is_declarator_pack_hash;
   SV** is_declarator_flag_ref;
   int dd_flags;
+  char* curstash_name;
 
   is_declarator = get_hv("Devel::Declare::declarators", FALSE);
 
@@ -71,11 +72,12 @@ int dd_is_declarator(pTHX_ char* name) {
 
   /* $declarators{$current_package_name} */
 
-  if (!HvNAME(PL_curstash))
+  curstash_name = HvNAME(PL_curstash);
+  if (!curstash_name)
     return -1;
 
-  is_declarator_pack_ref = hv_fetch(is_declarator, HvNAME(PL_curstash),
-                             strlen(HvNAME(PL_curstash)), FALSE);
+  is_declarator_pack_ref = hv_fetch(is_declarator, curstash_name,
+                             strlen(curstash_name), FALSE);
 
   if (!is_declarator_pack_ref || !SvROK(*is_declarator_pack_ref))
     return -1; /* not a hashref */
@@ -149,14 +151,17 @@ void dd_set_linestr(pTHX_ char* new_value) {
   PL_bufend = SvPVX(PL_linestr) + new_len;
 
   if ( DD_DEBUG_UPDATED_LINESTR && PERLDB_LINE && PL_curstash != PL_debstash) {
-    // Cribbed from toke.c
-    SV * const sv = NEWSV(85,0);
-
-    sv_upgrade(sv, SVt_PVMG);
-    sv_setpvn(sv,PL_bufptr,PL_bufend-PL_bufptr);
-    (void)SvIOK_on(sv);
-    SvIV_set(sv, 0);
-    av_store(CopFILEAV(&PL_compiling),(I32)CopLINE(&PL_compiling),sv);
+    /* Cribbed from toke.c */
+    AV *fileav = CopFILEAV(&PL_compiling);
+    if (fileav) {
+      SV * const sv = NEWSV(85,0);
+
+      sv_upgrade(sv, SVt_PVMG);
+      sv_setpvn(sv,PL_bufptr,PL_bufend-PL_bufptr);
+      (void)SvIOK_on(sv);
+      SvIV_set(sv, 0);
+      av_store(fileav,(I32)CopLINE(&PL_compiling),sv);
+    }
   }
 }
 
@@ -352,7 +357,7 @@ OP* dd_pp_entereval(pTHX) {
   const char* s;
   SV *sv;
 #ifdef PERL_5_9_PLUS
-  SV *saved_hh;
+  SV *saved_hh = NULL;
   if (PL_op->op_private & OPpEVAL_HAS_HH) {
     saved_hh = POPs;
   }
index e231264..cbc1806 100644 (file)
@@ -284,7 +284,7 @@ S_skipspace(pTHX_ register char *s, int incline)
        SSize_t oldprevlen, oldoldprevlen;
        SSize_t oldloplen = 0, oldunilen = 0;
        while (s < PL_bufend && isSPACE(*s)) {
-           if (*s++ == '\n' && ((incline == 2) || PL_in_eval && !PL_rsfp && !incline))
+           if (*s++ == '\n' && ((incline == 2) || (PL_in_eval && !PL_rsfp && !incline)))
                incline(s);
        }
 
@@ -385,13 +385,15 @@ S_skipspace(pTHX_ register char *s, int incline)
         * so store the line into the debugger's array of lines
         */
        if (PERLDB_LINE && PL_curstash != PL_debstash) {
-           SV * const sv = NEWSV(85,0);
-
-           sv_upgrade(sv, SVt_PVMG);
-           sv_setpvn(sv,PL_bufptr,PL_bufend-PL_bufptr);
-            (void)SvIOK_on(sv);
-            SvIV_set(sv, 0);
-           av_store(CopFILEAV(PL_curcop),(I32)CopLINE(PL_curcop),sv);
+           AV *fileav = CopFILEAV(PL_curcop);
+           if (fileav) {
+               SV * const sv = NEWSV(85,0);
+               sv_upgrade(sv, SVt_PVMG);
+               sv_setpvn(sv,PL_bufptr,PL_bufend-PL_bufptr);
+               (void)SvIOK_on(sv);
+               SvIV_set(sv, 0);
+               av_store(fileav,(I32)CopLINE(PL_curcop),sv);
+           }
        }
     }
 }
@@ -815,13 +817,15 @@ S_scan_str(pTHX_ char *start, int keep_quoted, int keep_delims)
 
        /* update debugger info */
        if (PERLDB_LINE && PL_curstash != PL_debstash) {
-           SV *sv = NEWSV(88,0);
-
-           sv_upgrade(sv, SVt_PVMG);
-           sv_setsv(sv,PL_linestr);
-            (void)SvIOK_on(sv);
-            SvIV_set(sv, 0);
-           av_store(CopFILEAV(PL_curcop), (I32)CopLINE(PL_curcop), sv);
+           AV *fileav = CopFILEAV(PL_curcop);
+           if (fileav) {
+               SV *sv = NEWSV(88,0);
+               sv_upgrade(sv, SVt_PVMG);
+               sv_setsv(sv,PL_linestr);
+               (void)SvIOK_on(sv);
+               SvIV_set(sv, 0);
+               av_store(fileav, (I32)CopLINE(PL_curcop), sv);
+           }
        }
 
        /* having changed the buffer, we must update PL_bufend */
@@ -863,39 +867,6 @@ S_scan_str(pTHX_ char *start, int keep_quoted, int keep_delims)
     return s;
 }
 
-/*
- * S_force_next
- * When the lexer realizes it knows the next token (for instance,
- * it is reordering tokens for the parser) then it can call S_force_next
- * to know what token to return the next time the lexer is called.  Caller
- * will need to set PL_nextval[], and possibly PL_expect to ensure the lexer
- * handles the token correctly.
- */
-
-STATIC void
-S_force_next(pTHX_ I32 type)
-{
-#ifdef PERL_MAD
-    dVAR;
-    if (PL_curforce < 0)
-    start_force(PL_lasttoke);
-    PL_nexttoke[PL_curforce].next_type = type;
-    if (PL_lex_state != LEX_KNOWNEXT)
-    PL_lex_defer = PL_lex_state;
-    PL_lex_state = LEX_KNOWNEXT;
-    PL_lex_expect = PL_expect;
-    PL_curforce = -1;
-#else
-    PL_nexttype[PL_nexttoke] = type;
-    PL_nexttoke++;
-    if (PL_lex_state != LEX_KNOWNEXT) {
-  PL_lex_defer = PL_lex_state;
-  PL_lex_expect = PL_expect;
-  PL_lex_state = LEX_KNOWNEXT;
-    }
-#endif
-}
-
 #define XFAKEBRACK 128
 
 STATIC char *
@@ -961,12 +932,10 @@ S_scan_ident(pTHX_ register char *s, register const char *send, char *dest, STRL
     if (*s == '{') {
        bracket = s;
        s++;
+    } else if (ck_uni) {
+       /* we always call this with ck_uni == 0, so no need for check_uni() */
+       /* check_uni(); */
     }
-    /* we always call this with ck_uni == 0 (rafl) */
-    /*
-    else if (ck_uni)
-       check_uni();
-    */
     if (s < send)
        *d = *s++;
     d[1] = '\0';