/usr/share/perl5/Specio/Role/Inlinable.pm is in libspecio-perl 0.33-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | package Specio::Role::Inlinable;
use strict;
use warnings;
our $VERSION = '0.33';
use Eval::Closure qw( eval_closure );
use Role::Tiny;
requires '_build_description';
{
my $attrs = {
_inline_generator => {
is => 'ro',
isa => 'CodeRef',
predicate => '_has_inline_generator',
init_arg => 'inline_generator',
},
inline_environment => {
is => 'ro',
isa => 'HashRef',
lazy => 1,
init_arg => 'inline_environment',
builder => '_build_inline_environment',
},
_generated_inline_sub => {
is => 'ro',
isa => 'CodeRef',
init_arg => undef,
lazy => 1,
builder => '_build_generated_inline_sub',
},
declared_at => {
is => 'ro',
isa => 'Specio::DeclaredAt',
required => 1,
},
description => {
is => 'ro',
isa => 'Str',
init_arg => undef,
lazy => 1,
builder => '_build_description',
},
};
## no critic (Subroutines::ProhibitUnusedPrivateSubroutines)
sub _attrs {
return $attrs;
}
}
# These are here for backwards compatibility. Some other packages that I wrote
# may call the private methods.
## no critic (Subroutines::ProhibitUnusedPrivateSubroutines)
sub _description { $_[0]->description }
sub _inline_environment { $_[0]->inline_environment }
## use critic
sub can_be_inlined {
my $self = shift;
return $self->_has_inline_generator;
}
sub _build_generated_inline_sub {
my $self = shift;
my $source
= 'sub { ' . $self->_inline_generator->( $self, '$_[0]' ) . '}';
return eval_closure(
source => $source,
environment => $self->inline_environment,
description => 'inlined sub for ' . $self->description,
);
}
sub _build_inline_environment {
return {};
}
1;
# ABSTRACT: A role for things which can be inlined (type constraints and coercions)
__END__
=pod
=encoding UTF-8
=head1 NAME
Specio::Role::Inlinable - A role for things which can be inlined (type constraints and coercions)
=head1 VERSION
version 0.33
=head1 DESCRIPTION
This role implements a common API for inlinable things, type constraints and
coercions. It is fully documented in the relevant classes.
=for Pod::Coverage .*
=head1 SUPPORT
Bugs may be submitted at L<https://github.com/houseabsolute/Specio/issues>.
I am also usually active on IRC as 'autarch' on C<irc://irc.perl.org>.
=head1 SOURCE
The source code repository for Specio can be found at L<https://github.com/houseabsolute/Specio>.
=head1 AUTHOR
Dave Rolsky <autarch@urth.org>
=head1 COPYRIGHT AND LICENSE
This software is Copyright (c) 2012 - 2017 by Dave Rolsky.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)
The full text of the license can be found in the
F<LICENSE> file included with this distribution.
=cut
|