DBIx-Perlish
view release on metacpan or search on metacpan
lib/DBIx/Perlish/Parse.pm view on Meta::CPAN
package DBIx::Perlish::Parse;
use 5.014;
use warnings;
use strict;
our $DEVEL;
our $_cover;
use B;
use Carp;
use Devel::Caller qw(caller_cv);
sub _o($) { ref($_[0]) . sprintf (" (0x%x)", ${$_[0]}) . ( $_[0]->can('name') ? (" " . $_[0]->name) : '' ) }
sub bailout
{
my ($S, @rest) = @_;
if ($DEVEL) {
confess @rest;
} else {
my $args = join '', @rest;
$args = "Something's wrong" unless $args;
my $file = $S->{file};
my $line = $S->{line};
$args .= " at $file line $line.\n"
unless substr($args, length($args) -1) eq "\n";
CORE::die($args);
}
}
# "is" checks
sub is
{
my ($optype, $op, $name) = @_;
return 0 unless ref($op) eq $optype;
return 1 unless $name;
return $op->name eq $name;
}
sub gen_is
{
my ($optype) = @_;
my $pkg = "B::" . uc($optype);
eval qq[ sub is_$optype { is("$pkg", \@_) } ] unless __PACKAGE__->can("is_$optype");
}
gen_is("binop");
gen_is("pvop");
gen_is("cop");
gen_is("listop");
gen_is("logop");
gen_is("loop");
gen_is("null");
gen_is("op");
gen_is("padop");
gen_is("svop");
gen_is("unop");
gen_is("pmop");
gen_is("methop");
gen_is("unop_aux");
sub is_const
{
my ($S, $op) = @_;
return () unless is_svop($op, "const");
my $sv = $op->sv;
if (!$$sv) {
$sv = $S->{padlist}->[1]->ARRAYelt($op->targ);
}
if (wantarray) {
return (${$sv->object_2svref}, $sv);
} else {
( run in 5.251 seconds using v1.01-cache-2.11-cpan-b301d465b3d )