xref: /openbsd-src/gnu/usr.bin/perl/ext/XS-APItest/t/sym-hook.t (revision 91f110e064cd7c194e59e019b83bb7496c1c84d4)
1*91f110e0Safresh1
2*91f110e0Safresh1# Test that PL_check hooks for RV2*V can override symbol lookups.
3*91f110e0Safresh1
4*91f110e0Safresh1# So far we only test RV2CV.
5*91f110e0Safresh1
6*91f110e0Safresh1use XS::APItest;
7*91f110e0Safresh1use Test::More tests => 4;
8*91f110e0Safresh1
9*91f110e0Safresh1BEGIN {
10*91f110e0Safresh1    setup_rv2cv_addunderbar;
11*91f110e0Safresh1    $^H{'XS::APItest/addunder'} = 1; # make foo() actually call foo_()
12*91f110e0Safresh1}
13*91f110e0Safresh1
14*91f110e0Safresh1sub foo_ { @_ ? shift . "___" : "phew" }
15*91f110e0Safresh1
16*91f110e0Safresh1is(foo(), "phew");
17*91f110e0Safresh1
18*91f110e0Safresh1# Make sure subs looked up via rv2cv check hooks are not treated as second-
19*91f110e0Safresh1# class subs.
20*91f110e0Safresh1
21*91f110e0Safresh1BEGIN { # If there is a foo symbol, this test will not be testing anything.
22*91f110e0Safresh1    delete $::{foo};
23*91f110e0Safresh1    delete $::{goo};
24*91f110e0Safresh1}
25*91f110e0Safresh1is((foo bar), 'bar___');
26*91f110e0Safresh1$bar = "baz";
27*91f110e0Safresh1is((foo $bar), 'baz___');
28*91f110e0Safresh1
29*91f110e0Safresh1# Proto should cause goo() to override Foo->goo interpretation.
30*91f110e0Safresh1{package Foom}
31*91f110e0Safresh1sub goo_ (*) { shift . "===" }
32*91f110e0Safresh1is((goo Foom), "Foom===");
33