summaryrefslogtreecommitdiff
path: root/ext/B/typemap
diff options
context:
space:
mode:
Diffstat (limited to 'ext/B/typemap')
-rw-r--r--ext/B/typemap17
1 files changed, 17 insertions, 0 deletions
diff --git a/ext/B/typemap b/ext/B/typemap
index 5e342749d2..f3e253b97d 100644
--- a/ext/B/typemap
+++ b/ext/B/typemap
@@ -36,6 +36,8 @@ PADOFFSET T_UV
B::HE T_HE_OBJ
B::RHE T_RHE_OBJ
+B::PADLIST T_PL_OBJ
+
INPUT
T_OP_OBJ
if (SvROK($arg)) {
@@ -77,7 +79,18 @@ T_RHE_OBJ
else
croak(\"$var is not a reference\")
+T_PL_OBJ
+ if (SvROK($arg)) {
+ IV tmp = SvIV((SV*)SvRV($arg));
+ $var = INT2PTR($type,tmp);
+ }
+ else
+ croak(\"$var is not a reference\")
+
OUTPUT
+T_SV_OBJ
+ make_sv_object(aTHX_ ($arg), (SV*)($var));
+
T_MG_OBJ
sv_setiv(newSVrv($arg, "B::MAGIC"), PTR2IV($var));
@@ -86,3 +99,7 @@ T_HE_OBJ
T_RHE_OBJ
sv_setiv(newSVrv($arg, "B::RHE"), PTR2IV($var));
+
+T_PL_OBJ
+ sv_setiv(newSVrv($arg, $var ? "B::PADLIST" : "B::NULL"),
+ PTR2IV($var));