view release on metacpan or search on metacpan
WIP/blib/lib/Mildew/AST/Block.pm view on Meta::CPAN
class Mildew::AST::Block extends Mildew::AST::Base {
has 'stmts' => (is=>'ro',isa=>'ArrayRef[Mildew::AST::Base]');
has 'regs' => (is=>'ro',default=>sub {[]},isa=>'ArrayRef[Str]');
method m0ld($ret) {
"my $ret = mold {\n"
. join('',map {'my $'.$_.";\n"} @{$self->regs})
. join("",map { $_->m0ld('$void') } @{$self->stmts})
. "};\n";
}
method pretty {
return 'mold {...}' if defined $Mildew::consise_pretty;
"mold \{\n". Mildew::AST::indent(
join('',map {'my $'.$_.";\n"} @{$self->regs})
WIP/blib/lib/Mildew/AST/Capture.pm view on Meta::CPAN
use v5.10;
use MooseX::Declare;
class Mildew::AST::Capture extends Mildew::AST::Base {
has 'invocant' => (is=>'ro',isa=>'Mildew::AST::Base');
has 'positional' => (is=>'ro',default=>sub {[]},isa=>'ArrayRef[Mildew::AST::Base]');
has 'named' => (is=>'ro',default=>sub {[]},isa=>'ArrayRef[Mildew::AST::Base]');
}
WIP/blib/lib/Mildew/Types.pm view on Meta::CPAN
use v5.10;
use Mildew::Emit::Yeast;
use MooseX::Declare;
class Mildew::TypeInfo {
has type=>(is=>'rw',builder=>'infer_type',lazy=>1);
has mold=>(is=>'rw',isa=>'Mildew::AST::Block::SSA');
has usage=>(is=>'ro',isa=>'ArrayRef[Mildew::AST::Base]',default=>sub {[]});
method add_usage($stmt) {
push(@{$self->usage},$stmt);
}
method infer_type {
Mildew::Type::Unknown->new();
}
}
class Mildew::TypeInfo::FromAssignment extends Mildew::TypeInfo {
has orgin=>(is=>'ro',isa=>'Mildew::AST::Base',required=>1);
WIP/blib/lib/Mildew/Types.pm view on Meta::CPAN
$self->debug("not handling method:",$id);
Mildew::Type::Unknown->new();
}
}
}
class Mildew::Type::Lexical extends Mildew::Type {
use Term::ANSIColor qw(:constants);
use Scalar::Util qw(refaddr);
use Carp qw(cluck);
has content=>(is=>'rw',isa=>'Mildew::Type',lazy_build=>1);
has binds=>(is=>'ro',isa=>'ArrayRef[Type]',default=>sub {[]});
has stores=>(is=>'ro',isa=>'ArrayRef[Type]',default=>sub {[]});
method _build_content {
$self->debug("infering content of lexical");
my $container;
if (@{$self->binds} == 1) {
$container = $self->binds->[0];
$self->debug("1 BIND: ",$self->binds->[0]);
} else {
$self->debug("many BINDs");
$container = Mildew::Type::Scalar->new();
}
WIP/blib/lib/Mildew/Types.pm view on Meta::CPAN
}
$self->debug(RED,"unknow usage of lexical ",$reg->pretty,": ",$usage->pretty,RESET);
}
method pretty {
(ref $self) . " of " . $self->content->pretty;
}
}
class Mildew::Type::Scalar extends Mildew::Type {
use Carp qw(cluck);
use Scalar::Util qw(refaddr);
has stores=>(is=>'ro',isa=>'ArrayRef[Type]',default=>sub {[]});
has content=>(is=>'rw',builder=>'infer_content',lazy=>1,predicate=>'has_content');
method add_store($content) {
$self->debug("adding store to ",(refaddr $self));
push(@{$self->stores},$content);
}
method infer_content {
if (@{$self->stores} == 1) {
$self->debug("just enough stores");
$self->stores->[0];
} else {
WIP/lib/Mildew/AST/Block.pm view on Meta::CPAN
class Mildew::AST::Block extends Mildew::AST::Base {
has 'stmts' => (is=>'ro',isa=>'ArrayRef[Mildew::AST::Base]');
has 'regs' => (is=>'ro',default=>sub {[]},isa=>'ArrayRef[Str]');
method m0ld($ret) {
"my $ret = mold {\n"
. join('',map {'my $'.$_.";\n"} @{$self->regs})
. join("",map { $_->m0ld('$void') } @{$self->stmts})
. "};\n";
}
method pretty {
return 'mold {...}' if defined $Mildew::consise_pretty;
"mold \{\n". Mildew::AST::indent(
join('',map {'my $'.$_.";\n"} @{$self->regs})
WIP/lib/Mildew/AST/Capture.pm view on Meta::CPAN
use v5.10;
use MooseX::Declare;
class Mildew::AST::Capture extends Mildew::AST::Base {
has 'invocant' => (is=>'ro',isa=>'Mildew::AST::Base');
has 'positional' => (is=>'ro',default=>sub {[]},isa=>'ArrayRef[Mildew::AST::Base]');
has 'named' => (is=>'ro',default=>sub {[]},isa=>'ArrayRef[Mildew::AST::Base]');
}
WIP/lib/Mildew/Types.pm view on Meta::CPAN
use v5.10;
use Mildew::Emit::Yeast;
use MooseX::Declare;
class Mildew::TypeInfo {
has type=>(is=>'rw',builder=>'infer_type',lazy=>1);
has mold=>(is=>'rw',isa=>'Mildew::AST::Block::SSA');
has usage=>(is=>'ro',isa=>'ArrayRef[Mildew::AST::Base]',default=>sub {[]});
method add_usage($stmt) {
push(@{$self->usage},$stmt);
}
method infer_type {
Mildew::Type::Unknown->new();
}
}
class Mildew::TypeInfo::FromAssignment extends Mildew::TypeInfo {
has orgin=>(is=>'ro',isa=>'Mildew::AST::Base',required=>1);
WIP/lib/Mildew/Types.pm view on Meta::CPAN
$self->debug("not handling method:",$id);
Mildew::Type::Unknown->new();
}
}
}
class Mildew::Type::Lexical extends Mildew::Type {
use Term::ANSIColor qw(:constants);
use Scalar::Util qw(refaddr);
use Carp qw(cluck);
has content=>(is=>'rw',isa=>'Mildew::Type',lazy_build=>1);
has binds=>(is=>'ro',isa=>'ArrayRef[Type]',default=>sub {[]});
has stores=>(is=>'ro',isa=>'ArrayRef[Type]',default=>sub {[]});
method _build_content {
$self->debug("infering content of lexical");
my $container;
if (@{$self->binds} == 1) {
$container = $self->binds->[0];
$self->debug("1 BIND: ",$self->binds->[0]);
} else {
$self->debug("many BINDs");
$container = Mildew::Type::Scalar->new();
}
WIP/lib/Mildew/Types.pm view on Meta::CPAN
}
$self->debug(RED,"unknow usage of lexical ",$reg->pretty,": ",$usage->pretty,RESET);
}
method pretty {
(ref $self) . " of " . $self->content->pretty;
}
}
class Mildew::Type::Scalar extends Mildew::Type {
use Carp qw(cluck);
use Scalar::Util qw(refaddr);
has stores=>(is=>'ro',isa=>'ArrayRef[Type]',default=>sub {[]});
has content=>(is=>'rw',builder=>'infer_content',lazy=>1,predicate=>'has_content');
method add_store($content) {
$self->debug("adding store to ",(refaddr $self));
push(@{$self->stores},$content);
}
method infer_content {
if (@{$self->stores} == 1) {
$self->debug("just enough stores");
$self->stores->[0];
} else {
lib/Mildew/AST/Block.pm view on Meta::CPAN
class Mildew::AST::Block extends Mildew::AST::Base {
has 'stmts' => (is=>'ro',isa=>'ArrayRef[Mildew::AST::Base]');
has 'regs' => (is=>'ro',default=>sub {[]},isa=>'ArrayRef[Str]');
method m0ld($ret) {
"my $ret = mold {\n"
. join('',map {'my $'.$_.";\n"} @{$self->regs})
. join("",map { $_->m0ld('$void') } @{$self->stmts})
. "};\n";
}
method pretty {
return 'mold {...}' if defined $Mildew::consise_pretty;
"mold \{\n". Mildew::AST::indent(
join('',map {'my $'.$_.";\n"} @{$self->regs})
lib/Mildew/AST/Capture.pm view on Meta::CPAN
use v5.10;
use MooseX::Declare;
class Mildew::AST::Capture extends Mildew::AST::Base {
has 'invocant' => (is=>'ro',isa=>'Mildew::AST::Base');
has 'positional' => (is=>'ro',default=>sub {[]},isa=>'ArrayRef[Mildew::AST::Base]');
has 'named' => (is=>'ro',default=>sub {[]},isa=>'ArrayRef[Mildew::AST::Base]');
}
lib/Mildew/Types.pm view on Meta::CPAN
use v5.10;
use Mildew::Emit::Yeast;
use MooseX::Declare;
class Mildew::TypeInfo {
has type=>(is=>'rw',builder=>'infer_type',lazy=>1);
has mold=>(is=>'rw',isa=>'Mildew::AST::Block::SSA');
has usage=>(is=>'ro',isa=>'ArrayRef[Mildew::AST::Base]',default=>sub {[]});
method add_usage($stmt) {
push(@{$self->usage},$stmt);
}
method infer_type {
Mildew::Type::Unknown->new();
}
}
class Mildew::TypeInfo::FromAssignment extends Mildew::TypeInfo {
has orgin=>(is=>'ro',isa=>'Mildew::AST::Base',required=>1);
lib/Mildew/Types.pm view on Meta::CPAN
$self->debug("not handling method:",$id);
Mildew::Type::Unknown->new();
}
}
}
class Mildew::Type::Lexical extends Mildew::Type {
use Term::ANSIColor qw(:constants);
use Scalar::Util qw(refaddr);
use Carp qw(cluck);
has content=>(is=>'rw',isa=>'Mildew::Type',lazy_build=>1);
has binds=>(is=>'ro',isa=>'ArrayRef[Type]',default=>sub {[]});
has stores=>(is=>'ro',isa=>'ArrayRef[Type]',default=>sub {[]});
method _build_content {
$self->debug("infering content of lexical");
my $container;
if (@{$self->binds} == 1) {
$container = $self->binds->[0];
$self->debug("1 BIND: ",$self->binds->[0]);
} else {
$self->debug("many BINDs");
$container = Mildew::Type::Scalar->new();
}
lib/Mildew/Types.pm view on Meta::CPAN
}
$self->debug(RED,"unknow usage of lexical ",$reg->pretty,": ",$usage->pretty,RESET);
}
method pretty {
(ref $self) . " of " . $self->content->pretty;
}
}
class Mildew::Type::Scalar extends Mildew::Type {
use Carp qw(cluck);
use Scalar::Util qw(refaddr);
has stores=>(is=>'ro',isa=>'ArrayRef[Type]',default=>sub {[]});
has content=>(is=>'rw',builder=>'infer_content',lazy=>1,predicate=>'has_content');
method add_store($content) {
$self->debug("adding store to ",(refaddr $self));
push(@{$self->stores},$content);
}
method infer_content {
if (@{$self->stores} == 1) {
$self->debug("just enough stores");
$self->stores->[0];
} else {