Skip to content

Commit 435bb85

Browse files
author
Branislav Zahradník
committed
[pad] pad_find_my_symbol_pvs - pad_findmy_pvs alternative with explicit symbol table
1 parent 43dc90a commit 435bb85

File tree

4 files changed

+30
-7
lines changed

4 files changed

+30
-7
lines changed

ext/XS-APItest/APItest.xs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -791,6 +791,7 @@ enum Pad_Find_Method {
791791
PAD_FINDMY_PV,
792792
PAD_FINDMY_PVN,
793793
PAD_FINDMY_SV,
794+
PAD_FIND_MY_SYMBOL_FOO,
794795
PAD_FIND_MY_SYMBOL_PV,
795796
PAD_FIND_MY_SYMBOL_PVN,
796797
};
@@ -834,6 +835,10 @@ THX_ck_entersub_pad_scalar(pTHX_ OP *entersubop, GV *namegv, SV *ckobj)
834835
case PAD_FINDMY_FOO: {
835836
padoff = pad_findmy_pvs("$foo", 0);
836837
} break;
838+
case PAD_FIND_MY_SYMBOL_FOO: {
839+
padoff = pad_find_my_symbol_pvs (Perl_Symbol_Table_Scalar, "foo", 0);
840+
break;
841+
}
837842
case PAD_FIND_MY_SYMBOL_PV: {
838843
char *namepv = SvPV_nolen(a1);
839844
padoff = pad_find_my_symbol_pv (Perl_Symbol_Table_Scalar, namepv, SvUTF8(a1));
@@ -4380,6 +4385,7 @@ BOOT:
43804385
EXPORT_ENUM (stash, PAD_FINDMY_PV);
43814386
EXPORT_ENUM (stash, PAD_FINDMY_PVN);
43824387
EXPORT_ENUM (stash, PAD_FINDMY_SV);
4388+
EXPORT_ENUM (stash, PAD_FIND_MY_SYMBOL_FOO);
43834389
EXPORT_ENUM (stash, PAD_FIND_MY_SYMBOL_PV);
43844390
EXPORT_ENUM (stash, PAD_FIND_MY_SYMBOL_PVN);
43854391
}

ext/XS-APItest/t/pad_scalar.t

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
use warnings;
22
use strict;
33

4-
use Test::More tests => 110;
4+
use Test::More tests => 113;
55

66
use XS::APItest qw (
77
PAD_FINDMY_FOO
88
PAD_FINDMY_PV
99
PAD_FINDMY_PVN
1010
PAD_FINDMY_SV
11+
PAD_FIND_MY_SYMBOL_FOO
1112
PAD_FIND_MY_SYMBOL_PV
1213
PAD_FIND_MY_SYMBOL_PVN
1314
pad_scalar
@@ -17,6 +18,7 @@ is pad_scalar (PAD_FINDMY_SV, "foo"), "NOT_IN_PAD", q (undeclared '$foo
1718
is pad_scalar (PAD_FINDMY_PVN, "foo"), "NOT_IN_PAD", q (undeclared '$foo'; pad_findmy_pvn ());
1819
is pad_scalar (PAD_FINDMY_PV, "foo"), "NOT_IN_PAD", q (undeclared '$foo'; pad_findmy_pv ());
1920
is pad_scalar (PAD_FINDMY_FOO, "foo"), "NOT_IN_PAD", q (undeclared '$foo'; pad_findmy_pvs ());
21+
is pad_scalar (PAD_FIND_MY_SYMBOL_FOO, "foo"), "NOT_IN_PAD", q (undeclared '$foo'; pad_find_my_symbol_pvs ());
2022
is pad_scalar (PAD_FIND_MY_SYMBOL_PV, "foo"), "NOT_IN_PAD", q (undeclared '$foo'; pad_find_my_symbol_pv ());
2123
is pad_scalar (PAD_FIND_MY_SYMBOL_PVN, "foo"), "NOT_IN_PAD", q (undeclared '$foo'; pad_find_my_symbol_pvn ());
2224

@@ -32,6 +34,7 @@ is pad_scalar (PAD_FINDMY_SV, "foo"), "NOT_MY", q ('our $foo'; pad_find
3234
is pad_scalar (PAD_FINDMY_PVN, "foo"), "NOT_MY", q ('our $foo'; pad_findmy_pvn ());
3335
is pad_scalar (PAD_FINDMY_PV, "foo"), "NOT_MY", q ('our $foo'; pad_findmy_pv ());
3436
is pad_scalar (PAD_FINDMY_FOO, "foo"), "NOT_MY", q ('our $foo'; pad_findmy_pvs ());
37+
is pad_scalar (PAD_FIND_MY_SYMBOL_FOO, "foo"), "NOT_MY", q ('our $foo'; pad_find_my_symbol_pvs ());
3538
is pad_scalar (PAD_FIND_MY_SYMBOL_PV, "foo"), "NOT_MY", q ('our $foo'; pad_find_my_symbol_pv ());
3639
is pad_scalar (PAD_FIND_MY_SYMBOL_PVN, "foo"), "NOT_MY", q ('our $foo'; pad_find_my_symbol_pvn ());
3740

@@ -79,12 +82,12 @@ sub bb() {
7982
my $counter = 0;
8083
my $foo = \$counter;
8184
return sub {
82-
ok pad_scalar (PAD_FINDMY_SV, "foo") == \pad_scalar(PAD_FINDMY_SV, "counter");
83-
ok pad_scalar (PAD_FINDMY_PVN, "foo") == \pad_scalar(PAD_FINDMY_SV, "counter");
84-
ok pad_scalar (PAD_FINDMY_PV, "foo") == \pad_scalar(PAD_FINDMY_SV, "counter");
85-
ok pad_scalar (PAD_FINDMY_FOO, "foo") == \pad_scalar(PAD_FINDMY_SV, "counter");
86-
ok pad_scalar (PAD_FIND_MY_SYMBOL_PV, "foo") == \pad_scalar(PAD_FINDMY_SV, "counter");
87-
ok pad_scalar (PAD_FIND_MY_SYMBOL_PVN, "foo") == \pad_scalar(PAD_FINDMY_SV, "counter");
85+
ok pad_scalar (PAD_FINDMY_SV, "foo") == \pad_scalar (PAD_FINDMY_SV, "counter");
86+
ok pad_scalar (PAD_FINDMY_PVN, "foo") == \pad_scalar (PAD_FINDMY_SV, "counter");
87+
ok pad_scalar (PAD_FINDMY_PV, "foo") == \pad_scalar (PAD_FINDMY_SV, "counter");
88+
ok pad_scalar (PAD_FINDMY_FOO, "foo") == \pad_scalar (PAD_FINDMY_SV, "counter");
89+
ok pad_scalar (PAD_FIND_MY_SYMBOL_PV, "foo") == \pad_scalar (PAD_FINDMY_SV, "counter");
90+
ok pad_scalar (PAD_FIND_MY_SYMBOL_PVN, "foo") == \pad_scalar (PAD_FINDMY_SV, "counter");
8891

8992
my $modulus = pad_scalar (PAD_FINDMY_SV, "counter") % 5;
9093

@@ -121,6 +124,7 @@ is pad_scalar (PAD_FINDMY_SV, "foo"), "NOT_MY", q ('my $foo' still unde
121124
is pad_scalar (PAD_FINDMY_PVN, "foo"), "NOT_MY", q ('my $foo' still undeclared; pad_findmy_pvn ());
122125
is pad_scalar (PAD_FINDMY_PV, "foo"), "NOT_MY", q ('my $foo' still undeclared; pad_findmy_pv ());
123126
is pad_scalar (PAD_FINDMY_FOO, "foo"), "NOT_MY", q ('my $foo' still undeclared; pad_findmy_pvs ());
127+
is pad_scalar (PAD_FIND_MY_SYMBOL_FOO, "foo"), "NOT_MY", q ('my $foo' still undeclared; pad_find_my_symbol_pvs ());
124128
is pad_scalar (PAD_FIND_MY_SYMBOL_PV, "foo"), "NOT_MY", q ('my $foo' still undeclared; pad_find_my_symbol_pv ());
125129
is pad_scalar (PAD_FIND_MY_SYMBOL_PVN, "foo"), "NOT_MY", q ('my $foo' still undeclared; pad_find_my_symbol_pvn ());
126130

pad.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1037,6 +1037,7 @@ C<flags> is reserved and must be zero.
10371037
10381038
=for apidoc pad_find_my_symbol_pv
10391039
=for apidoc_item pad_find_my_symbol_pvn
1040+
=for apidoc_item pad_find_my_symbol_pvs
10401041
10411042
Similar to C<pad_findmy_pv> but with explicit symbol table parameter.
10421043
@@ -1048,6 +1049,9 @@ Similar to C<pad_findmy_pv> but with explicit symbol table parameter.
10481049
pad_findmy_pvn ("$self", 5, 0);
10491050
pad_find_my_symbol_pvn (Perl_Symbol_Scalar, "self", 5, 0);
10501051
1052+
pad_findmy_pvs ("$self", 0);
1053+
pad_find_my_symbol_pvs (Perl_Symbol_Scalar, "self", 0);
1054+
10511055
=cut
10521056
*/
10531057

pad.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -736,6 +736,15 @@ Similar to L</pad_add_symbol_pvn>, but takes a literal string instead of a strin
736736
#define pad_findmy_pvs(name,flags) \
737737
EXPAND_CALL (pad_findmy_pvn, (STR_WITH_LEN(name), flags))
738738

739+
/*
740+
=for apidoc_defn Am|PADOFFSET|pad_find_my_symbol_pvs|"symbol_table"|"name"|U32 flags
741+
742+
=cut
743+
*/
744+
745+
#define pad_find_my_symbol_pvs(Symbol_Table, Name, Flags) \
746+
EXPAND_CALL (pad_find_my_symbol_pvn, (Symbol_Table, STR_WITH_LEN(Name), Flags))
747+
739748
struct suspended_compcv
740749
{
741750
CV *compcv;

0 commit comments

Comments
 (0)