The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# 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;