Add alloccopstash provisionally to the API
authorFather Chrysostomos <sprout@cpan.org>
Sat, 9 Jun 2012 00:58:39 +0000 (17:58 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Sat, 9 Jun 2012 03:19:50 +0000 (20:19 -0700)
MANIFEST
embed.fnc
embed.h
ext/XS-APItest/APItest.pm
ext/XS-APItest/APItest.xs
ext/XS-APItest/t/copstash.t [new file with mode: 0644]
op.c

index ac56b4d..55c8d03 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -3972,6 +3972,7 @@ ext/XS-APItest/t/cleanup.t        test stack behaviour on unwinding
 ext/XS-APItest/t/clone-with-stack.t    test clone with CLONEf_COPY_STACKS works
 ext/XS-APItest/t/cophh.t       test COPHH API
 ext/XS-APItest/t/coplabel.t    test cop_*_label
+ext/XS-APItest/t/copstash.t    test alloccopstash
 ext/XS-APItest/t/copyhints.t   test hv_copy_hints_hv() API
 ext/XS-APItest/t/customop.t    XS::APItest: tests for custom ops
 ext/XS-APItest/t/eval-filter.t Simple source filter/eval test
index 5bfa543..594485d 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -974,7 +974,7 @@ p   |void   |package_version|NN OP* v
 p      |PADOFFSET|allocmy      |NN const char *const name|const STRLEN len\
                                |const U32 flags
 #ifdef USE_ITHREADS
-p      |PADOFFSET|alloccopstash|NN HV *hv
+AMp    |PADOFFSET|alloccopstash|NN HV *hv
 #endif
 : Used in perly.y
 pR     |OP*    |oopsAV         |NN OP* o
diff --git a/embed.h b/embed.h
index 781366b..a980a87 100644 (file)
--- a/embed.h
+++ b/embed.h
 #define unlnk(a)               Perl_unlnk(aTHX_ a)
 #endif
 #if defined(USE_ITHREADS)
+#define alloccopstash(a)       Perl_alloccopstash(aTHX_ a)
 #define any_dup(a,b)           Perl_any_dup(aTHX_ a,b)
 #define cx_dup(a,b,c,d)                Perl_cx_dup(aTHX_ a,b,c,d)
 #define dirp_dup(a,b)          Perl_dirp_dup(aTHX_ a,b)
 #define pidgone(a,b)           S_pidgone(aTHX_ a,b)
 #  endif
 #  if defined(USE_ITHREADS)
-#define alloccopstash(a)       Perl_alloccopstash(aTHX_ a)
 #define mro_meta_dup(a,b)      Perl_mro_meta_dup(aTHX_ a,b)
 #define padlist_dup(a,b)       Perl_padlist_dup(aTHX_ a,b)
 #  endif
index d7fb60a..0eff22e 100644 (file)
@@ -5,7 +5,7 @@ use strict;
 use warnings;
 use Carp;
 
-our $VERSION = '0.39';
+our $VERSION = '0.40';
 
 require XSLoader;
 
index 21a8c8c..2c0ee61 100644 (file)
@@ -3348,6 +3348,17 @@ setup_addissub()
 CODE:
     wrap_op_checker(OP_ADD, addissub_myck_add, &addissub_nxck_add);
 
+#ifdef USE_ITHREADS
+
+bool
+test_alloccopstash()
+CODE:
+    RETVAL = PL_stashpad[alloccopstash(PL_defstash)] == PL_defstash;
+OUTPUT:
+    RETVAL
+
+#endif
+
 MODULE = XS::APItest PACKAGE = XS::APItest::AUTOLOADtest
 
 int
diff --git a/ext/XS-APItest/t/copstash.t b/ext/XS-APItest/t/copstash.t
new file mode 100644 (file)
index 0000000..8ed98a2
--- /dev/null
@@ -0,0 +1,9 @@
+use Config;
+use Test::More;
+BEGIN { plan skip_all => 'no threads' unless $Config{useithreads} }
+
+plan tests => 1;
+
+use XS::APItest;
+
+ok test_alloccopstash;
diff --git a/op.c b/op.c
index b4ffc81..400291a 100644 (file)
--- a/op.c
+++ b/op.c
@@ -465,6 +465,15 @@ Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags)
     return off;
 }
 
+/*
+=for apidoc alloccopstash
+
+Available only under threaded builds, this function allocates an entry in
+C<PL_stashpad> for the stash passed to it.
+
+=cut
+*/
+
 #ifdef USE_ITHREADS
 PADOFFSET
 Perl_alloccopstash(pTHX_ HV *hv)