Type-Tiny
view release on metacpan or search on metacpan
Makefile.PL view on Meta::CPAN
Devel::Refcount
indirect
match::simple
Moo
MooseX::Getopt
MooseX::Types::Common
Mouse
MouseX::Types::Common
multidimensional
Object::Accessor
PadWalker
Return::Type
strictures
Test::Fatal
Test::LeakTrace
Test::Requires
Test::Tester
Test::Warnings
);
if ( $] ge '5.028' ) {
$meta->{prereqs}{test}{requires}{$_} = '0'
];
], [
a doap-tests:AutomatedTest;
doap-tests:purpose "Tests Eval::TypeTiny supports alias=>1 using Perl refaliasing.";
doap-tests:test_script [
a nfo:FileDataObject, nfo:SourceCode;
nfo:fileName "t/20-modules/Eval-TypeTiny/aliases-native.t";
];
], [
a doap-tests:AutomatedTest;
doap-tests:purpose "Tests Eval::TypeTiny supports alias=>1 using PadWalker implementation.";
doap-tests:test_script [
a nfo:FileDataObject, nfo:SourceCode;
nfo:fileName "t/20-modules/Eval-TypeTiny/aliases-padwalker.t";
];
], [
a doap-tests:AutomatedTest;
doap-tests:purpose "Tests Eval::TypeTiny supports alias=>1 using 'tie()' implementation.";
doap-tests:test_script [
a nfo:FileDataObject, nfo:SourceCode;
nfo:fileName "t/20-modules/Eval-TypeTiny/aliases-tie.t";
lib/Eval/TypeTiny.pm view on Meta::CPAN
++$ok if $condition;
}
next unless $ok;
return ref( $result ) eq 'CODE' ? $result->() : ref( $result ) eq 'SCALAR' ? eval( $$result ) : $result;
}
return;
}
{
sub IMPLEMENTATION_DEVEL_LEXALIAS () { 'Devel::LexAlias' }
sub IMPLEMENTATION_PADWALKER () { 'PadWalker' }
sub IMPLEMENTATION_TIE () { 'tie' }
sub IMPLEMENTATION_NATIVE () { 'perl' }
my $implementation;
#<<<
# uncoverable subroutine
sub ALIAS_IMPLEMENTATION () {
$implementation ||= _pick_alternative(
if => ( $] ge '5.022' ) => IMPLEMENTATION_NATIVE,
needs => 'Devel::LexAlias' => IMPLEMENTATION_DEVEL_LEXALIAS,
needs => 'PadWalker' => IMPLEMENTATION_PADWALKER,
if => !!1 => IMPLEMENTATION_TIE,
);
}
#>>>
sub _force_implementation {
$implementation = shift;
}
}
lib/Eval/TypeTiny.pm view on Meta::CPAN
my $code = $compiler->( @{ $args{environment} }{@keys} );
undef( $compiler );
if ( $alias and ALIAS_IMPLEMENTATION eq IMPLEMENTATION_DEVEL_LEXALIAS ) {
require Devel::LexAlias;
Devel::LexAlias::lexalias( $code, $_ => $args{environment}{$_} )
for grep !/^\&/, @keys;
}
if ( $alias and ALIAS_IMPLEMENTATION eq IMPLEMENTATION_PADWALKER ) {
require PadWalker;
my %env = map +( $_ => $args{environment}{$_} ), grep !/^\&/, @keys;
PadWalker::set_closed_over( $code, \%env );
}
return $code;
} #/ sub eval_closure
my $tmp;
sub _make_lexical_assignment {
my ( $key, $index, $alias ) = @_;
my $name = substr( $key, 1 );
lib/Eval/TypeTiny.pm view on Meta::CPAN
currently using Perl 5.22's native alias feature. This requires Perl 5.22.
=item C<< IMPLEMENTATION_DEVEL_LEXALIAS >>
If C<< ALIAS_IMPLEMENTATION eq IMPLEMENTATION_DEVEL_LEXALIAS >> then
Eval::TypeTiny is currently using L<Devel::LexAlias> to provide aliases.
=item C<< IMPLEMENTATION_PADWALKER >>
If C<< ALIAS_IMPLEMENTATION eq IMPLEMENTATION_PADWALKER >> then
Eval::TypeTiny is currently using L<PadWalker> to provide aliases.
=item C<< IMPLEMENTATION_TIE >>
If C<< ALIAS_IMPLEMENTATION eq IMPLEMENTATION_TIE >> then Eval::TypeTiny is
using the fallback implementation of aliases using C<tie>. This is the
slowest implementation, and may cause problems in certain edge cases, like
trying to alias already-tied variables, but it's the only way to implement
C<< alias => 1 >> without a recent version of Perl or one of the two optional
modules mentioned above.
t/00-begin.t view on Meta::CPAN
__END__
Exporter::Tiny
Return::Type
Type::Tiny::XS
Scalar::Util/Sub::Util
Ref::Util/Ref::Util::XS
Regexp::Util
Class::XSAccessor
Devel::LexAlias/PadWalker
Devel::StackTrace
Class::Tiny
Moo/MooX::TypeTiny
Moose/MooseX::Types
Mouse/MouseX::Types
$AUTOMATED_TESTING
$NONINTERACTIVE_TESTING
$EXTENDED_TESTING
t/20-modules/Eval-TypeTiny/aliases-padwalker.t view on Meta::CPAN
=pod
=encoding utf-8
=head1 PURPOSE
Tests L<Eval::TypeTiny> supports alias=>1 using L<PadWalker>
implementation.
=head1 DEPENDENCIES
Requires PadWalker.
=head1 AUTHOR
Toby Inkster E<lt>tobyink@cpan.orgE<gt>.
=head1 COPYRIGHT AND LICENCE
This software is copyright (c) 2013-2014, 2017-2025 by Toby Inkster.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
use strict;
use warnings;
use lib qw( ./lib ./t/lib ../inc ./inc );
use Test::More;
use Test::Requires 'PadWalker';
use Eval::TypeTiny;
Eval::TypeTiny::_force_implementation( Eval::TypeTiny::IMPLEMENTATION_PADWALKER );
my %env = (
'$foo' => do { my $x = "foo"; \$x },
'@bar' => [ "bar" ],
'%baz' => { "baz" => "1" },
);
( run in 2.017 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )