summaryrefslogtreecommitdiff
path: root/ext/Devel-Peek
diff options
context:
space:
mode:
authorPaul "LeoNerd" Evans <leonerd@leonerd.org.uk>2021-08-07 14:48:32 +0100
committerPaul Evans <leonerd@leonerd.org.uk>2021-09-10 20:08:40 +0100
commit1d0d673f78c5c03a0f3c97ceeb7686e9388e0611 (patch)
tree388abd531263b971a0bfa2762402a33a3c0148ca /ext/Devel-Peek
parent914bb57489325d34ddbb7c0557c53df7baa84d86 (diff)
downloadperl-1d0d673f78c5c03a0f3c97ceeb7686e9388e0611.tar.gz
Add SvIsBOOL() macro to test for SVs being boolean-intent
These are identified as being static shared COW strings whose string buffer points directly at PL_Yes / PL_No Define sv_setbool() and sv_setbool_mg() macros Use sv_setbool() where appropriate Have sv_dump() annotate when an SV's PV buffer is one of the PL_(Yes|No) special booleans
Diffstat (limited to 'ext/Devel-Peek')
-rw-r--r--ext/Devel-Peek/t/Peek.t24
1 files changed, 24 insertions, 0 deletions
diff --git a/ext/Devel-Peek/t/Peek.t b/ext/Devel-Peek/t/Peek.t
index 63a002879a..63face8cd1 100644
--- a/ext/Devel-Peek/t/Peek.t
+++ b/ext/Devel-Peek/t/Peek.t
@@ -240,6 +240,30 @@ do_test('reference to scalar',
COW_REFCNT = 1
');
+do_test('immediate boolean',
+ !!0,
+'SV = PVNV\\($ADDR\\) at $ADDR
+ REFCNT = \d+
+ FLAGS = \\(.*\\)
+ IV = 0
+ NV = 0
+ PV = $ADDR "" \[BOOL PL_No\]
+ CUR = 0
+ LEN = 0
+') if $] >= 5.035004;
+
+do_test('assignment of boolean',
+ do { my $tmp = !!1 },
+'SV = PVNV\\($ADDR\\) at $ADDR
+ REFCNT = \d+
+ FLAGS = \\(.*\\)
+ IV = 1
+ NV = 1
+ PV = $ADDR "1" \[BOOL PL_Yes\]
+ CUR = 1
+ LEN = 0
+') if $] >= 5.035004;
+
my $c_pattern;
if ($type eq 'N') {
$c_pattern = '