Mildew

 view release on metacpan or  search on metacpan

WIP/blib/script/mildew  view on Meta::CPAN

        'simplified-dd' => sub {
            use Data::Dumper::Concise;
            Dumper($_[0]->simplified)
        },
        'ast-dd'    => sub {
            use Data::Dumper::Concise;
            Dumper($_[0]);
        },
        ssa => sub {require Mildew::SSA;Mildew::SSA::to_ssa($_[0]->simplified,{})->pretty."\n"},
    );
    my $c = container 'Mildew' => as {
        (service 'options' => (block=>sub {\%args})),
        service 'frontend'  => (class => $frontends{$F},
            dependencies=>{options=>depends_on('options')}
        );
        (service 'backend'  => (block => sub {
            my $s = shift;
            my $backend = $backends{$B // $C};
            if (ref $backend eq 'CODE') {
                require Mildew::Backend::DumpAST;
                return Mildew::Backend::DumpAST->new(format=>$backend);
            } elsif ($backend) {
                eval("require $backend");
                return $backend->new(options=>$s->param('options'));
            } elsif ($C) {
                die "Unknown backend $C passed to -C.";
            } elsif ($B) {
                die "Unknown backend $B passed to -B.";
            }
        },dependencies=>{options=>depends_on('options')})),
        service 'compiler' => (class => 'Mildew::Compiler',dependencies=>{backend=>depends_on('backend'),frontend=>depends_on('frontend')});
    };
    
    if ($C) {
        $c->fetch('compiler')->get->compile($source,$output);
    } elsif ($B) {
        $c->fetch('compiler')->get->run($source);
    }
}

if (@ARGV == 1 && $ARGV[0] eq '--server') {
    require App::Persistent::Server;
    {
    package Dummy;
BEGIN {
  $Dummy::VERSION = '0.05';
}
    require Mildew::Backend::C;
    require Mildew::Backend::Perlesque;
    require Mildew::Frontend::STD;
    require Mildew::Compiler;
    }
    my $server = App::Persistent::Server->new(
        code => sub {
            my $info = shift;
    
            # fake environment
            local %ENV = $info->environment;
            local $0 = $info->program_name;
            chdir $info->working_directory;
            local @ARGV = $info->cmdline_args;
    
            MAIN;
         },
    );
    $server->start;
    exit if fork;
    exit $server->completion_condvar->recv;
} else {
    MAIN;
}



( run in 0.542 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )