From: nothingmuch Date: Mon, 5 May 2008 18:37:22 +0000 (+0000) Subject: Devel::REPL::Plugin::B::Concise X-Git-Tag: v1.003015~125 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit%2FDevel-REPL.git;a=commitdiff_plain;h=320b3ad545d61ea7a478021189f33e1d41192cba Devel::REPL::Plugin::B::Concise git-svn-id: http://dev.catalyst.perl.org/repos/bast/trunk/Devel-REPL@4327 bd8105ee-0ff8-0310-8827-fb3f25b6796d --- diff --git a/lib/Devel/REPL/Plugin/B/Concise.pm b/lib/Devel/REPL/Plugin/B/Concise.pm new file mode 100644 index 0000000..b065b60 --- /dev/null +++ b/lib/Devel/REPL/Plugin/B/Concise.pm @@ -0,0 +1,84 @@ +#!/usr/bin/perl + +package Devel::REPL::Plugin::B::Concise; +use Devel::REPL::Plugin; + +use B::Concise (); + +B::Concise::compileOpts(qw(-nobanner)); + +use namespace::clean -except => [ 'meta' ]; + +with qw(Devel::REPL::Plugin::Turtles); + +sub AFTER_PLUGIN { + my $self = shift; + + my $prefix = $self->default_command_prefix; + + $self->add_turtles_matcher(qr/^ + \#(concise) \s+ + ( (?:\-\w+\s+)* ) # options for concise + (.*) # the code + /x); +} + +sub expr_command_concise { + my ( $self, $eval, $opts, $code ) = @_; + + die unless $code; + + my $sub = $self->compile($code, no_mangling => 1); + + open my $fh, ">", \my $out; + { + local *STDOUT = $fh; + B::Concise::compile((split /\s+/, $opts), $sub)->(); + } + + return $out; +} + +__PACKAGE__ + +__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] + +=head1 DESCRIPTION + +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 . + +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 +determine the formatting, etc. + +=head1 AUTHOR + +Yuval Kogman Enothingmuch@woobling.orgE + +=cut + +