X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit%2FDevel-REPL.git;a=blobdiff_plain;f=lib%2FDevel%2FREPL%2FPlugin%2FB%2FConcise.pm;h=153b4d8b2f10c3c4994bdda13b571b38c10fa970;hp=b065b607d8d8a0c4c2595e4daa0f1c10985fe1b3;hb=9d2a4940f5958d82828272364ef754e9290b6113;hpb=320b3ad545d61ea7a478021189f33e1d41192cba diff --git a/lib/Devel/REPL/Plugin/B/Concise.pm b/lib/Devel/REPL/Plugin/B/Concise.pm index b065b60..153b4d8 100644 --- a/lib/Devel/REPL/Plugin/B/Concise.pm +++ b/lib/Devel/REPL/Plugin/B/Concise.pm @@ -1,20 +1,25 @@ -#!/usr/bin/perl - +use strict; +use warnings; package Devel::REPL::Plugin::B::Concise; -use Devel::REPL::Plugin; +# ABSTRACT: B::Concise dumping of expression optrees -use B::Concise (); +our $VERSION = '1.003027'; -B::Concise::compileOpts(qw(-nobanner)); +use Devel::REPL::Plugin; +use B::Concise 0.62 (); +use namespace::autoclean; -use namespace::clean -except => [ 'meta' ]; +B::Concise::compileOpts qw(-nobanner); -with qw(Devel::REPL::Plugin::Turtles); +sub BEFORE_PLUGIN { + my $self = shift; + $self->load_plugin('Turtles'); +} sub AFTER_PLUGIN { my $self = shift; - my $prefix = $self->default_command_prefix; + my $prefix = $self->default_command_prefix; $self->add_turtles_matcher(qr/^ \#(concise) \s+ @@ -28,15 +33,21 @@ sub expr_command_concise { die unless $code; - my $sub = $self->compile($code, no_mangling => 1); + my %opts = map { $_ => 1 } (split /\s+/, $opts); - open my $fh, ">", \my $out; - { - local *STDOUT = $fh; - B::Concise::compile((split /\s+/, $opts), $sub)->(); - } + my $sub = $self->compile($code, no_mangling => !delete($opts{"-mangle"}) ); + + if ( $self->is_error($sub) ) { + return $self->format($sub); + } else { + open my $fh, ">", \my $out; + { + local *STDOUT = $fh; + B::Concise::compile(keys %opts, $sub)->(); + } - return $out; + return $out; + } } __PACKAGE__ @@ -45,23 +56,19 @@ __END__ =pod -=head1 NAME - -Devel::REPL::Plugin::B::Concise - B::Concise dumping of expression optrees - =head1 SYNOPSIS repl> #concise -exec -terse { > foo => foo(), > } - COP (0x138b1e0) nextstate - OP (0x13bd280) pushmark - SVOP (0x138c6a0) const PV (0xbbab50) "foo" - OP (0x13bbae0) pushmark - SVOP (0x13bcee0) gv GV (0xbbb250) *Devel::REPL::Plugin::B::Concise::foo - UNOP (0x13890a0) entersub [1] - LISTOP (0x13ba020) anonhash - UNOP (0x5983d0) leavesub [1] + COP (0x138b1e0) nextstate + OP (0x13bd280) pushmark + SVOP (0x138c6a0) const PV (0xbbab50) "foo" + OP (0x13bbae0) pushmark + SVOP (0x13bcee0) gv GV (0xbbb250) *Devel::REPL::Plugin::B::Concise::foo + UNOP (0x13890a0) entersub [1] + LISTOP (0x13ba020) anonhash + UNOP (0x5983d0) leavesub [1] =head1 DESCRIPTION @@ -69,7 +76,7 @@ This plugin provides a C command that uses L to dump optrees of expressions. The code is not actually executed, which means that when used with -L there is . +L there is no new value in C<_>. The command takes the same options as L, e.g. C<-basic> or C<-exec> to determine the dump order, C<-debug>, C<-concise> and C<-terse> to @@ -80,5 +87,3 @@ determine the formatting, etc. Yuval Kogman Enothingmuch@woobling.orgE =cut - -