From 1a7f1d436ba78911095ad809862b6e6a882a29c0 Mon Sep 17 00:00:00 2001 From: "Flavio S. Glock" Date: Thu, 11 Jun 2015 14:48:24 +0200 Subject: [PATCH] Perlito5 - fix Data::Dumper; TODO update; fix perlito5-browser-perl6.pl --- TODO-perlito5 | 18 ++++++++++---- perlito5.pl | 38 ++++++++++++++++------------- src5/lib/Perlito5/Dumper.pm | 20 +-------------- src5/lib/Perlito5/Grammar/Use.pm | 2 +- src5/lib/Perlito5X/Dumper.pm | 23 +++++++++++++++++ src5/util/perlito5-browser-perl6.pl | 2 ++ 6 files changed, 61 insertions(+), 42 deletions(-) create mode 100644 src5/lib/Perlito5X/Dumper.pm diff --git a/TODO-perlito5 b/TODO-perlito5 index c168cd289..019b19b87 100644 --- a/TODO-perlito5 +++ b/TODO-perlito5 @@ -10,7 +10,7 @@ TODO list for Perlito5 -- Test (implemented as Perlito5::Test) --- Data::Dumper (implemented as Perlito5::Dumper) +-- Data::Dumper (implemented as Perlito5X::Dumper) -- create perlito5-specific libs for: feature.pm @@ -305,6 +305,18 @@ TODO list for Perlito5 * Javascript backend +-- DESTROY + Try::Tiny uses DESTROY to implement finally() - and it doesn't execute in js: + + $ nodejs perlito5.js -Isrc5/lib -I. -I /usr/local/lib/perl5/site_perl/5.20.0 -e ' use Try::Tiny; try { print "this\n" }; try { die "this" } catch { print "catched\n" } finally { print "done\n" } ' + this + catched + + $ perl -e ' use Try::Tiny; try { print "this\n" }; try { die "this" } catch { print "catched\n" } finally { print "done\n" } ' + this + catched + done + -- constant subroutines -- prototype mismatch $ perl -e ' sub X () { 123 } print X, "\n"; eval " sub X { 456 } "; ' @@ -319,10 +331,6 @@ TODO list for Perlito5 \undef, ]; --- indirect object is confused here, maybe a problem at import() time: - $ node perlito5.js -Isrc5/lib -I. -e ' use Data::Dumper; $v = [20, \$v ]; print Dumper $v ' - Warning: Died: Can't call method Dumper on unblessed reference - -- phase order print x(); # js will try to execute this before the sub declaration sub x { "ok\n"; } diff --git a/perlito5.pl b/perlito5.pl index 8e19824f5..6e0d3481a 100644 --- a/perlito5.pl +++ b/perlito5.pl @@ -3827,7 +3827,7 @@ package Perlito5::Grammar::Use; # use Perlito5::Grammar::Precedence # use Perlito5::Grammar # use strict -my %Perlito_internal_module = ('strict' => 'Perlito5X::strict', 'warnings' => 'Perlito5X::warnings', 'feature' => 'Perlito5X::feature', 'utf8' => 'Perlito5X::utf8', 'bytes' => 'Perlito5X::bytes', 'encoding' => 'Perlito5X::encoding', 'Carp' => 'Perlito5X::Carp', 'Exporter' => 'Perlito5X::Exporter', 'Data::Dumper' => 'Perlito5::Dumper'); +my %Perlito_internal_module = ('strict' => 'Perlito5X::strict', 'warnings' => 'Perlito5X::warnings', 'feature' => 'Perlito5X::feature', 'utf8' => 'Perlito5X::utf8', 'bytes' => 'Perlito5X::bytes', 'encoding' => 'Perlito5X::encoding', 'Carp' => 'Perlito5X::Carp', 'Exporter' => 'Perlito5X::Exporter', 'Data::Dumper' => 'Perlito5X::Dumper'); sub Perlito5::Grammar::Use::use_decl { my $str = $_[0]; my $pos = $_[1]; @@ -7912,22 +7912,6 @@ sub Perlito5::Rul::NotBefore::set_captures_to_array { # use Perlito5::Emitter::Token package main; package Perlito5::Dumper; -sub Perlito5::Dumper::import { - my $pkg = shift; - my $callpkg = caller(0); - *{$callpkg . '::Dumper'} = \&Dumper; - return -} -sub Perlito5::Dumper::Dumper { - my $seen = {}; - my $level = ' '; - my @out; - for my $i (0 .. $#_) { - my $pos = '$VAR' . ($i + 1); - push(@out, $pos . ' = ' . _dumper($_[$i], $level, $seen, $pos) . ';' . chr(10)) - } - return join('', @out) -} sub Perlito5::Dumper::ast_dumper { my $seen = {}; my $level = ''; @@ -12154,6 +12138,26 @@ sub Perlito5::Perl5::Runtime::emit_perl5 { 1; # use Perlito5::Perl5::Runtime package main; +package Data::Dumper; +# use Perlito5::Dumper +sub Data::Dumper::import { + my $pkg = shift; + my $callpkg = caller(0); + *{$callpkg . '::Dumper'} = \&Dumper; + return +} +sub Data::Dumper::Dumper { + my $seen = {}; + my $level = ' '; + my @out; + for my $i (0 .. $#_) { + my $pos = '$VAR' . ($i + 1); + push(@out, $pos . ' = ' . Perlito5::Dumper::_dumper($_[$i], $level, $seen, $pos) . ';' . chr(10)) + } + return join('', @out) +} +1; +package main; package Perlito5::TreeGrammar; # use Data::Dumper # use strict diff --git a/src5/lib/Perlito5/Dumper.pm b/src5/lib/Perlito5/Dumper.pm index 6460d6666..68c9fc012 100644 --- a/src5/lib/Perlito5/Dumper.pm +++ b/src5/lib/Perlito5/Dumper.pm @@ -1,24 +1,5 @@ package Perlito5::Dumper; -sub import { - my $pkg = shift; - my $callpkg = caller(0); - *{ $callpkg . "::Dumper" } = \&Dumper; - return; -} - -sub Dumper { - # old-style Data::Dumper - my $seen = {}; - my $level = ' '; - my @out; - for my $i (0 .. $#_) { - my $pos = '$VAR' . ($i + 1); - push @out, "$pos = " . _dumper($_[$i], $level, $seen, $pos) . ";\n"; - } - return join('', @out); -} - sub ast_dumper { my $seen = {}; my $level = ''; @@ -26,6 +7,7 @@ sub ast_dumper { return _dumper($_[0], $level, $seen, $pos); } +# Note: this is called from Perlito5X/Dumper.pm sub _dumper { my ($obj, $tab, $seen, $pos) = @_; diff --git a/src5/lib/Perlito5/Grammar/Use.pm b/src5/lib/Perlito5/Grammar/Use.pm index 0048c31ec..42e60a566 100644 --- a/src5/lib/Perlito5/Grammar/Use.pm +++ b/src5/lib/Perlito5/Grammar/Use.pm @@ -14,7 +14,7 @@ my %Perlito_internal_module = ( encoding => 'Perlito5X::encoding', Carp => 'Perlito5X::Carp', Exporter => 'Perlito5X::Exporter', - 'Data::Dumper' => 'Perlito5::Dumper', + 'Data::Dumper' => 'Perlito5X::Dumper', # vars => 'Perlito5::vars', # this is "hardcoded" in stmt_use() # constant => 'Perlito5::constant', ); diff --git a/src5/lib/Perlito5X/Dumper.pm b/src5/lib/Perlito5X/Dumper.pm new file mode 100644 index 000000000..a771a50c2 --- /dev/null +++ b/src5/lib/Perlito5X/Dumper.pm @@ -0,0 +1,23 @@ +package Data::Dumper; +use Perlito5::Dumper; + +sub import { + my $pkg = shift; + my $callpkg = caller(0); + *{ $callpkg . "::Dumper" } = \&Dumper; + return; +} + +sub Dumper { + my $seen = {}; + my $level = ' '; + my @out; + for my $i (0 .. $#_) { + my $pos = '$VAR' . ($i + 1); + push @out, "$pos = " . Perlito5::Dumper::_dumper($_[$i], $level, $seen, $pos) . ";\n"; + } + return join('', @out); +} + +1; + diff --git a/src5/util/perlito5-browser-perl6.pl b/src5/util/perlito5-browser-perl6.pl index 469d740bf..ea3fe8adb 100755 --- a/src5/util/perlito5-browser-perl6.pl +++ b/src5/util/perlito5-browser-perl6.pl @@ -5,6 +5,8 @@ package Perlito5; use Perlito5::Compiler; use Perlito5::Perl6::Emitter; use Perlito5::Perl6::PrettyPrinter; +use Perlito5::Javascript2::Emitter; +use Perlito5::Javascript2::Runtime; sub compile_p5_to_p6 { my $s = shift;