# Do not edit this file - Generated by Perlito 7.0 use v5; use utf8; use strict; use warnings; no warnings ('redefine', 'once', 'void', 'uninitialized', 'misc', 'recursion'); use Perlito::Perl5::Runtime; use Perlito::Perl5::Prelude; our $MATCH = Perlito::Match->new(); { package GLOBAL; sub new { shift; bless { @_ }, "GLOBAL" } # use v6 ; { package Main; sub new { shift; bless { @_ }, "Main" } use Perlito::Go::Emitter; use Perlito::Lisp::Emitter; use Perlito::Perl5::Emitter; use Perlito::Javascript::Emitter; use Perlito::Parrot::Emitter; use Perlito::Python::Emitter; use Perlito::Ruby::Emitter; use Perlito::Grammar; use Perlito::Grammar::Control; use Perlito::Grammar::Regex; use Perlito::Emitter::Token; use Perlito::Expression; use Perlito::Precedence; use Perlito::Macro; ((my $_V6_COMPILER_NAME) = 'Perlito'); ((my $_V6_COMPILER_VERSION) = '7.0'); ((my $source) = ''); ((my $backend) = ''); ((my $execute) = 0); ((my $verbose) = 0); ((my $comp_units) = do { (my $List_a = bless [], 'ARRAY'); (my $List_v = bless [], 'ARRAY'); $List_a }); ((my $perl6lib) = '.' . chr(47) . 'src' . chr(47) . 'lib'); ((my $expand_use) = 1); if ($verbose) { warn((chr(47) . chr(47) . ' Perlito compiler')); warn((chr(47) . chr(47) . ' ARGS: '), Main::perl((\@ARGV), )) }; (my $Hash_module_seen = bless {}, 'HASH'); sub module_name { my $grammar = $_[0]; my $str = $_[1]; my $pos = $_[2]; (my $MATCH); ($MATCH = Perlito::Match->new(('str' => $str), ('from' => $pos), ('to' => $pos), ('bool' => 1))); (($MATCH)->{bool} = ((do { ((my $pos1) = $MATCH->to()); (do { ((do { ((my $m2) = Perlito::Grammar->ident($str, $MATCH->to())); if ($m2) { (($MATCH)->{to} = $m2->to()); ($MATCH->{'Perlito::Grammar.ident'} = $m2); 1 } else { 0 } }) && (do { ((my $pos1) = $MATCH->to()); ((do { ((((('::' eq substr($str, $MATCH->to(), 2)) && ((($MATCH)->{to} = (2 + $MATCH->to()))))) && (do { ((my $m2) = $grammar->module_name($str, $MATCH->to())); if ($m2) { (($MATCH)->{to} = $m2->to()); ($MATCH->{'module_name'} = $m2); 1 } else { 0 } })) && (((do { ($MATCH->{capture} = (do { (my $List_a = bless [], 'ARRAY'); (my $List_v = bless [], 'ARRAY'); push( @{$List_a}, "".($MATCH->{'Perlito::Grammar.ident'}) ); ($List_v = ((${$MATCH->{'module_name'}}))); for my $x ( @{(bless [0 .. ((scalar( @{$List_v} ) - 1))], 'ARRAY')} ) { push( @{$List_a}, $List_v->[$x] ) }; $List_a })) }) || 1))) }) || (do { (($MATCH)->{to} = $pos1); ((1 && (((do { ($MATCH->{capture} = (do { (my $List_a = bless [], 'ARRAY'); (my $List_v = bless [], 'ARRAY'); push( @{$List_a}, "".($MATCH->{'Perlito::Grammar.ident'}) ); $List_a })) }) || 1)))) })) })) }) }))); $MATCH }; sub modulename_to_filename { my $s = $_[0]; ((my $ident) = Main->module_name($s, 0)); return scalar (Main::join((${$ident}), (chr(47)))) }; sub expand_use { my $stmt = $_[0]; ((my $module_name) = $stmt->mod()); if (($module_name eq 'v6')) { return () }; if (!(($Hash_module_seen->{$module_name}))) { ($Hash_module_seen->{$module_name} = 1); if (((($backend eq 'perl5')) || (($backend eq 'ast-perl6')))) { } else { ((my $filename) = $module_name); ($filename = ($perl6lib . chr(47) . modulename_to_filename($filename) . '.pm')); if (($verbose)) { warn((chr(47) . chr(47) . ' now loading: '), $filename) }; ((my $source) = IO::slurp($filename)); ((my $m) = Perlito::Grammar->exp_stmts($source, 0)); add_comp_unit(${$m}) } } }; sub add_comp_unit { my $List_parse = $_[0]; for my $comp_unit ( @{$List_parse} ) { if (($expand_use && Main::isa($comp_unit, 'Use'))) { expand_use($comp_unit) } else { if (Main::isa($comp_unit, 'CompUnit')) { if ($verbose) { warn(('parsed comp_unit: ' . chr(39)), $comp_unit->name(), (chr(39))) }; for my $stmt ( @{(($comp_unit->body()))} ) { if (($expand_use && Main::isa($stmt, 'Use'))) { expand_use($stmt) } } } }; push( @{$comp_units}, $comp_unit ) } }; if (((((\@ARGV)->[0] eq '-v')) || (((\@ARGV)->[0] eq '--verbose')))) { ($verbose = 1); shift( @{(\@ARGV)} ) }; if ((substr((\@ARGV)->[0], 0, 2) eq '-C')) { ($backend = substr((\@ARGV)->[0], 2, 10)); ($execute = 0); shift( @{(\@ARGV)} ); if ((((($backend eq 'perl5')) || (($backend eq 'python'))) || (($backend eq 'ruby')))) { ($expand_use = 0) } }; if ((substr((\@ARGV)->[0], 0, 2) eq '-B')) { ($backend = substr((\@ARGV)->[0], 2, 10)); ($execute = 1); shift( @{(\@ARGV)} ); if ((((($backend eq 'perl5')) || (($backend eq 'python'))) || (($backend eq 'ruby')))) { ($expand_use = 0) } }; if (((((\@ARGV)->[0] eq '-V')) || (((\@ARGV)->[0] eq '--version')))) { ($backend = ''); Main::say($_V6_COMPILER_NAME, (' '), $_V6_COMPILER_VERSION); shift( @{(\@ARGV)} ) } else { if ((((((\@ARGV)->[0] eq '-h')) || (((\@ARGV)->[0] eq '--help'))) || (($backend eq '')))) { ($backend = ''); Main::say($_V6_COMPILER_NAME, (' '), $_V6_COMPILER_VERSION, (chr(10) . 'perlito [switches] [programfile]' . chr(10) . ' switches:' . chr(10) . ' -h --help' . chr(10) . ' -v --verbose' . chr(10) . ' -V --version' . chr(10) . ' -Ctarget target backend: go, js, lisp, parrot, perl5, python, ruby, ast-perl6' . chr(10) . ' --expand_use --noexpand_use' . chr(10) . ' expand ' . chr(39) . 'use' . chr(39) . ' statements at compile time' . chr(10) . ' -e program one line of program (omit programfile)' . chr(10))); shift( @{(\@ARGV)} ) } }; if (((\@ARGV)->[0] eq '--expand_use')) { ($expand_use = 1); shift( @{(\@ARGV)} ) }; if (((\@ARGV)->[0] eq '--noexpand_use')) { ($expand_use = 0); shift( @{(\@ARGV)} ) }; if (($backend && (\@ARGV))) { (my $prelude_filename); if (($backend eq 'lisp')) { ($prelude_filename = ($perl6lib . chr(47) . 'Perlito' . chr(47) . 'Lisp' . chr(47) . 'Prelude.pm')) }; if (($backend eq 'js')) { ($prelude_filename = ($perl6lib . chr(47) . 'Perlito' . chr(47) . 'Javascript' . chr(47) . 'Prelude.pm')) }; if (($backend eq 'go')) { ($prelude_filename = ($perl6lib . chr(47) . 'Perlito' . chr(47) . 'Go' . chr(47) . 'Prelude.pm')) }; if ($prelude_filename) { if ($verbose) { warn((chr(47) . chr(47) . ' loading lib: '), $prelude_filename) }; ($source = IO::slurp($prelude_filename)); ((my $m) = Perlito::Grammar->exp_stmts($source, 0)); add_comp_unit(${$m}) }; if (((\@ARGV)->[0] eq '-e')) { shift( @{(\@ARGV)} ); if ($verbose) { warn((chr(47) . chr(47) . ' source from command line: '), (\@ARGV)->[0]) }; ($source = shift( @{(\@ARGV)} )) } else { if ($verbose) { warn((chr(47) . chr(47) . ' source from file: '), (\@ARGV)->[0]) }; ($source = IO::slurp(shift( @{(\@ARGV)} ))) }; if ($verbose) { warn((chr(47) . chr(47) . ' backend: '), $backend); warn(('now parsing')) }; ((my $m) = Perlito::Grammar->exp_stmts($source, 0)); add_comp_unit(${$m}); ($comp_units = do { (my $List_a = bless [], 'ARRAY'); (my $List_v = bless [], 'ARRAY'); push( @{$List_a}, CompUnit->new(('name' => 'GLOBAL'), ('body' => $comp_units)) ); $List_a }); if (($backend eq 'ast-perl6')) { Main::say((chr(35) . ' AST dump - do not edit this file - Generated by '), $_V6_COMPILER_NAME, (' '), $_V6_COMPILER_VERSION); Main::say(Main::perl($comp_units, )) }; if (($backend eq 'go')) { Main::say((chr(47) . chr(47) . ' Do not edit this file - Generated by '), $_V6_COMPILER_NAME, (' '), $_V6_COMPILER_VERSION); ((my $filename) = ($perl6lib . chr(47) . 'Perlito' . chr(47) . 'Go' . chr(47) . 'Runtime.go')); if (($verbose)) { warn((chr(47) . chr(47) . ' now loading: '), $filename) }; ((my $source) = IO::slurp($filename)); Main::say($source); Main::say(CompUnit::emit_go_program($comp_units)) }; if (($backend eq 'lisp')) { Main::say((chr(59) . chr(59) . ' Do not edit this file - Generated by '), $_V6_COMPILER_NAME, (' '), $_V6_COMPILER_VERSION); ((my $filename) = ($perl6lib . chr(47) . 'Perlito' . chr(47) . 'Lisp' . chr(47) . 'Runtime.lisp')); if (($verbose)) { warn((chr(47) . chr(47) . ' now loading: '), $filename) }; ((my $source) = IO::slurp($filename)); Main::say($source); Main::say(CompUnit::emit_lisp_program($comp_units)); Main::say('(compiler-main)'); Main::say(chr(59) . chr(59) . ' Note: the line below creates a binary executable:'); Main::say(chr(59) . chr(59) . ' (sb-ext:save-lisp-and-die ' . chr(34) . 'tmp.out' . chr(34) . ' :toplevel ' . chr(39) . 'compiler-main :executable t )') }; if (($backend eq 'perl5')) { Main::say((chr(35) . ' Do not edit this file - Generated by '), $_V6_COMPILER_NAME, (' '), $_V6_COMPILER_VERSION); Main::print(CompUnit::emit_perl5_program($comp_units)) }; if (($backend eq 'js')) { Main::say((chr(47) . chr(47) . ' Do not edit this file - Generated by '), $_V6_COMPILER_NAME, (' '), $_V6_COMPILER_VERSION); ((my $filename) = ($perl6lib . chr(47) . 'Perlito' . chr(47) . 'Javascript' . chr(47) . 'Runtime.js')); if (($verbose)) { warn((chr(47) . chr(47) . ' now loading: '), $filename) }; ((my $source) = IO::slurp($filename)); Main::say($source); Main::print(CompUnit::emit_javascript_program($comp_units)) }; if (($backend eq 'python')) { Main::say((chr(35) . ' Do not edit this file - Generated by '), $_V6_COMPILER_NAME, (' '), $_V6_COMPILER_VERSION); Main::say((chr(35) . '-*- coding: utf-8 -*-')); Main::say(''); Main::say(('from Perlito__Python__Runtime import *')); Main::say(('from Perlito__Python__Prelude import *')); Main::say(('import __builtin__')); Main::say(('__all__ ' . chr(61) . ' []')); Main::say(''); for my $c ( @{(($comp_units))} ) { Main::say($c->emit_python()) } }; if (($backend eq 'ruby')) { Main::say((chr(35) . ' Do not edit this file - Generated by '), $_V6_COMPILER_NAME, (' '), $_V6_COMPILER_VERSION); Main::say(''); Main::say(('require ' . chr(39) . 'Perlito' . chr(47) . 'Ruby' . chr(47) . 'Runtime.rb' . chr(39))); Main::say(''); for my $c ( @{(($comp_units))} ) { Main::say($c->emit_ruby()) } }; if (($backend eq 'parrot')) { Main::say((chr(35) . ' Do not edit this file - Generated by '), $_V6_COMPILER_NAME, (' '), $_V6_COMPILER_VERSION); for my $c ( @{(($comp_units))} ) { Main::say($c->emit_parrot()) } } } } } 1;