diff options
author | Paul "LeoNerd" Evans <leonerd@leonerd.org.uk> | 2021-11-30 17:37:13 +0000 |
---|---|---|
committer | Paul Evans <leonerd@leonerd.org.uk> | 2021-12-01 22:03:37 +0000 |
commit | 852c1a84672ff049d20d941d4df1decaabf3f3f0 (patch) | |
tree | 5baaf3ce559ae7d06b13b6c740a23bdf0913b267 /lib | |
parent | 9ae6f26499e0b2d56c36d730466988a3d5ac8457 (diff) | |
download | perl-852c1a84672ff049d20d941d4df1decaabf3f3f0.tar.gz |
Direct optree implementations of builtin:: functions
Turn builtin::true/false into OP_CONSTs
Add a dedicated OP_ISBOOL, make an efficient op version of builtin::isbool()
Diffstat (limited to 'lib')
-rw-r--r-- | lib/B/Deparse.pm | 12 | ||||
-rw-r--r-- | lib/B/Deparse.t | 3 | ||||
-rw-r--r-- | lib/B/Op_private.pm | 1 |
3 files changed, 15 insertions, 1 deletions
diff --git a/lib/B/Deparse.pm b/lib/B/Deparse.pm index 12f6a63670..ec4a8a5469 100644 --- a/lib/B/Deparse.pm +++ b/lib/B/Deparse.pm @@ -52,7 +52,7 @@ use B qw(class main_root main_start main_cv svref_2object opnumber perlstring MDEREF_SHIFT ); -$VERSION = '1.59'; +$VERSION = '1.60'; use strict; our $AUTOLOAD; use warnings (); @@ -6603,6 +6603,16 @@ sub pp_pushdefer { return "defer {\n\t$body\n\b}\cK"; } +sub builtin1 { + my $self = shift; + my ($op, $cx, $name) = @_; + my $arg = $self->deparse($op->first); + # TODO: work out if lexical alias is present somehow... + return "builtin::$name($arg)"; +} + +sub pp_isbool { builtin1(@_, "isbool") } + 1; __END__ diff --git a/lib/B/Deparse.t b/lib/B/Deparse.t index ac3aaf8de8..138b31bdf3 100644 --- a/lib/B/Deparse.t +++ b/lib/B/Deparse.t @@ -3198,3 +3198,6 @@ catch($var) { defer { $a = 123; } +#### +# builtin:: functions +my $x = builtin::isbool(undef); diff --git a/lib/B/Op_private.pm b/lib/B/Op_private.pm index be3975c8ae..2269bd52e4 100644 --- a/lib/B/Op_private.pm +++ b/lib/B/Op_private.pm @@ -401,6 +401,7 @@ $bits{i_preinc}{0} = $bf[0]; $bits{int}{0} = $bf[0]; @{$bits{ioctl}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); @{$bits{isa}}{1,0} = ($bf[1], $bf[1]); +$bits{isbool}{0} = $bf[0]; @{$bits{join}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); $bits{keys}{0} = $bf[0]; @{$bits{kill}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); |