← Index
NYTProf Performance Profile   « line view »
For /usr/local/libexec/sympa/task_manager-debug.pl
  Run on Tue Jun 1 22:32:51 2021
Reported on Tue Jun 1 22:35:05 2021

Filename/usr/local/lib/perl5/site_perl/Specio/Role/Inlinable.pm
StatementsExecuted 0 statements in 0s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
0000s0sSpecio::Role::Inlinable::::BEGIN@10Specio::Role::Inlinable::BEGIN@10
0000s0sSpecio::Role::Inlinable::::BEGIN@3Specio::Role::Inlinable::BEGIN@3
0000s0sSpecio::Role::Inlinable::::BEGIN@4Specio::Role::Inlinable::BEGIN@4
0000s0sSpecio::Role::Inlinable::::BEGIN@8Specio::Role::Inlinable::BEGIN@8
0000s0sSpecio::Role::Inlinable::::_attrsSpecio::Role::Inlinable::_attrs
0000s0sSpecio::Role::Inlinable::::_build_generated_inline_subSpecio::Role::Inlinable::_build_generated_inline_sub
0000s0sSpecio::Role::Inlinable::::_build_inline_environmentSpecio::Role::Inlinable::_build_inline_environment
0000s0sSpecio::Role::Inlinable::::_descriptionSpecio::Role::Inlinable::_description
0000s0sSpecio::Role::Inlinable::::_inline_environmentSpecio::Role::Inlinable::_inline_environment
0000s0sSpecio::Role::Inlinable::::can_be_inlinedSpecio::Role::Inlinable::can_be_inlined
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Specio::Role::Inlinable;
2
3use strict;
4use warnings;
5
6our $VERSION = '0.47';
7
8use Eval::Closure qw( eval_closure );
9
10use Role::Tiny;
11
12requires '_build_description';
13
14{
15 my $attrs = {
16 _inline_generator => {
17 is => 'ro',
18 isa => 'CodeRef',
19 predicate => '_has_inline_generator',
20 init_arg => 'inline_generator',
21 },
22 inline_environment => {
23 is => 'ro',
24 isa => 'HashRef',
25 lazy => 1,
26 init_arg => 'inline_environment',
27 builder => '_build_inline_environment',
28 },
29 _generated_inline_sub => {
30 is => 'ro',
31 isa => 'CodeRef',
32 init_arg => undef,
33 lazy => 1,
34 builder => '_build_generated_inline_sub',
35 },
36 declared_at => {
37 is => 'ro',
38 isa => 'Specio::DeclaredAt',
39 required => 1,
40 },
41 description => {
42 is => 'ro',
43 isa => 'Str',
44 init_arg => undef,
45 lazy => 1,
46 builder => '_build_description',
47 },
48 };
49
50 ## no critic (Subroutines::ProhibitUnusedPrivateSubroutines)
51 sub _attrs {
52 return $attrs;
53 }
54}
55
56# These are here for backwards compatibility. Some other packages that I wrote
57# may call the private methods.
58
59## no critic (Subroutines::ProhibitUnusedPrivateSubroutines)
60sub _description { $_[0]->description }
61sub _inline_environment { $_[0]->inline_environment }
62## use critic
63
64sub can_be_inlined {
65 my $self = shift;
66
67 return $self->_has_inline_generator;
68}
69
70sub _build_generated_inline_sub {
71 my $self = shift;
72
73 my $source
74 = 'sub { ' . $self->_inline_generator->( $self, '$_[0]' ) . '}';
75
76 return eval_closure(
77 source => $source,
78 environment => $self->inline_environment,
79 description => 'inlined sub for ' . $self->description,
80 );
81}
82
83sub _build_inline_environment {
84 return {};
85}
86
871;
88
89# ABSTRACT: A role for things which can be inlined (type constraints and coercions)
90
91__END__