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 )