Added a flags parameter to pad_findlex.
authorBrian Fraser <fraserbn@gmail.com>
Sat, 11 Jun 2011 16:29:54 +0000 (13:29 -0300)
committerFather Chrysostomos <sprout@cpan.org>
Wed, 13 Jul 2011 04:46:52 +0000 (21:46 -0700)
embed.fnc
embed.h
pad.c
proto.h

index efb9d08..925eee7 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -2141,7 +2141,7 @@ ApdR      |PADOFFSET|pad_findmy_sv|NN SV* name|U32 flags
 ApdD   |PADOFFSET|find_rundefsvoffset  |
 Apd    |SV*    |find_rundefsv  |
 #if defined(PERL_IN_PAD_C)
-sd     |PADOFFSET|pad_findlex  |NN const char *namepv|STRLEN namelen\
+sd     |PADOFFSET|pad_findlex  |NN const char *namepv|STRLEN namelen|U32 flags \
                                |NN const CV* cv|U32 seq|int warn \
                                |NULLOK SV** out_capture|NN SV** out_name_sv \
                                |NN int *out_flags
diff --git a/embed.h b/embed.h
index 6a828db..750c0da 100644 (file)
--- a/embed.h
+++ b/embed.h
 #  if defined(PERL_IN_PAD_C)
 #define pad_alloc_name(a,b,c,d)        S_pad_alloc_name(aTHX_ a,b,c,d)
 #define pad_check_dup(a,b,c)   S_pad_check_dup(aTHX_ a,b,c)
-#define pad_findlex(a,b,c,d,e,f,g,h)   S_pad_findlex(aTHX_ a,b,c,d,e,f,g,h)
+#define pad_findlex(a,b,c,d,e,f,g,h,i) S_pad_findlex(aTHX_ a,b,c,d,e,f,g,h,i)
 #define pad_reset()            S_pad_reset(aTHX)
 #  endif
 #  if defined(PERL_IN_PERL_C)
diff --git a/pad.c b/pad.c
index c35d0a6..afdc808 100644 (file)
--- a/pad.c
+++ b/pad.c
@@ -817,8 +817,8 @@ Perl_pad_findmy_pvn(pTHX_ const char *namepv, STRLEN namelen, U32 flags)
        Perl_croak(aTHX_ "panic: pad_findmy_pvn illegal flag bits 0x%" UVxf,
                   (UV)flags);
 
-    offset = pad_findlex(namepv, namelen, PL_compcv, PL_cop_seqmax, 1,
-               NULL, &out_sv, &out_flags);
+    offset = pad_findlex(namepv, namelen, flags,
+                PL_compcv, PL_cop_seqmax, 1, NULL, &out_sv, &out_flags);
     if ((PADOFFSET)offset != NOT_IN_PAD) 
        return offset;
 
@@ -895,7 +895,7 @@ Perl_find_rundefsvoffset(pTHX)
     dVAR;
     SV *out_sv;
     int out_flags;
-    return pad_findlex("$_", 2, find_runcv(NULL), PL_curcop->cop_seq, 1,
+    return pad_findlex("$_", 2, 0, find_runcv(NULL), PL_curcop->cop_seq, 1,
            NULL, &out_sv, &out_flags);
 }
 
@@ -916,7 +916,7 @@ Perl_find_rundefsv(pTHX)
     int flags;
     PADOFFSET po;
 
-    po = pad_findlex("$_", 2, find_runcv(NULL), PL_curcop->cop_seq, 1,
+    po = pad_findlex("$_", 2, 0, find_runcv(NULL), PL_curcop->cop_seq, 1,
            NULL, &namesv, &flags);
 
     if (po == NOT_IN_PAD || SvPAD_OUR(namesv))
@@ -926,7 +926,7 @@ Perl_find_rundefsv(pTHX)
 }
 
 /*
-=for apidoc m|PADOFFSET|pad_findlex|const char *namepv|STRLEN namelen|const CV* cv|U32 seq|int warn|SV** out_capture|SV** out_name_sv|int *out_flags
+=for apidoc m|PADOFFSET|pad_findlex|const char *namepv|STRLEN namelen|U32 flags|const CV* cv|U32 seq|int warn|SV** out_capture|SV** out_name_sv|int *out_flags
 
 Find a named lexical anywhere in a chain of nested pads. Add fake entries
 in the inner pads if it's found in an outer one.
@@ -957,7 +957,7 @@ the parent pad.
 
 
 STATIC PADOFFSET
-S_pad_findlex(pTHX_ const char *namepv, STRLEN namelen, const CV* cv, U32 seq,
+S_pad_findlex(pTHX_ const char *namepv, STRLEN namelen, U32 flags, const CV* cv, U32 seq,
        int warn, SV** out_capture, SV** out_name_sv, int *out_flags)
 {
     dVAR;
@@ -1097,7 +1097,7 @@ S_pad_findlex(pTHX_ const char *namepv, STRLEN namelen, const CV* cv, U32 seq,
                            "Pad findlex cv=0x%"UVxf" chasing lex in outer pad\n",
                            PTR2UV(cv)));
                        n = *out_name_sv;
-                       (void) pad_findlex(namepv, namelen, CvOUTSIDE(cv),
+                       (void) pad_findlex(namepv, namelen, flags, CvOUTSIDE(cv),
                            CvOUTSIDE_SEQ(cv),
                            newwarn, out_capture, out_name_sv, out_flags);
                        *out_name_sv = n;
@@ -1143,7 +1143,7 @@ S_pad_findlex(pTHX_ const char *namepv, STRLEN namelen, const CV* cv, U32 seq,
     new_capturep = out_capture ? out_capture :
                CvLATE(cv) ? NULL : &new_capture;
 
-    offset = pad_findlex(namepv, namelen, CvOUTSIDE(cv), CvOUTSIDE_SEQ(cv), 1,
+    offset = pad_findlex(namepv, namelen, flags, CvOUTSIDE(cv), CvOUTSIDE_SEQ(cv), 1,
                new_capturep, out_name_sv, out_flags);
     if ((PADOFFSET)offset == NOT_IN_PAD)
        return NOT_IN_PAD;
diff --git a/proto.h b/proto.h
index 343d9a7..2164152 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -5626,11 +5626,11 @@ STATIC void     S_pad_check_dup(pTHX_ SV *name, U32 flags, const HV *ourstash)
 #define PERL_ARGS_ASSERT_PAD_CHECK_DUP \
        assert(name)
 
-STATIC PADOFFSET       S_pad_findlex(pTHX_ const char *namepv, STRLEN namelen, const CV* cv, U32 seq, int warn, SV** out_capture, SV** out_name_sv, int *out_flags)
+STATIC PADOFFSET       S_pad_findlex(pTHX_ const char *namepv, STRLEN namelen, U32 flags, const CV* cv, U32 seq, int warn, SV** out_capture, SV** out_name_sv, int *out_flags)
                        __attribute__nonnull__(pTHX_1)
-                       __attribute__nonnull__(pTHX_3)
-                       __attribute__nonnull__(pTHX_7)
-                       __attribute__nonnull__(pTHX_8);
+                       __attribute__nonnull__(pTHX_4)
+                       __attribute__nonnull__(pTHX_8)
+                       __attribute__nonnull__(pTHX_9);
 #define PERL_ARGS_ASSERT_PAD_FINDLEX   \
        assert(namepv); assert(cv); assert(out_name_sv); assert(out_flags)