← 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/Constraint/Enum.pm
StatementsExecuted 0 statements in 0s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
0000s0sSpecio::Constraint::Enum::::BEGIN@10Specio::Constraint::Enum::BEGIN@10
0000s0sSpecio::Constraint::Enum::::BEGIN@11Specio::Constraint::Enum::BEGIN@11
0000s0sSpecio::Constraint::Enum::::BEGIN@12Specio::Constraint::Enum::BEGIN@12
0000s0sSpecio::Constraint::Enum::::BEGIN@14Specio::Constraint::Enum::BEGIN@14
0000s0sSpecio::Constraint::Enum::::BEGIN@3Specio::Constraint::Enum::BEGIN@3
0000s0sSpecio::Constraint::Enum::::BEGIN@4Specio::Constraint::Enum::BEGIN@4
0000s0sSpecio::Constraint::Enum::::BEGIN@8Specio::Constraint::Enum::BEGIN@8
0000s0sSpecio::Constraint::Enum::::BEGIN@9Specio::Constraint::Enum::BEGIN@9
0000s0sSpecio::Constraint::Enum::::CORE:matchSpecio::Constraint::Enum::CORE:match (opcode)
0000s0sSpecio::Constraint::Enum::::__ANON__Specio::Constraint::Enum::__ANON__ (xsub)
0000s0sSpecio::Constraint::Enum::::__ANON__[:52]Specio::Constraint::Enum::__ANON__[:52]
0000s0sSpecio::Constraint::Enum::::_attrsSpecio::Constraint::Enum::_attrs
0000s0sSpecio::Constraint::Enum::::_build_inline_environmentSpecio::Constraint::Enum::_build_inline_environment
0000s0sSpecio::Constraint::Enum::::_build_inline_generatorSpecio::Constraint::Enum::_build_inline_generator
0000s0sSpecio::Constraint::Enum::::_build_parentSpecio::Constraint::Enum::_build_parent
0000s0sSpecio::Constraint::Enum::::_env_var_nameSpecio::Constraint::Enum::_env_var_name
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Specio::Constraint::Enum;
2
3use strict;
4use warnings;
5
6our $VERSION = '0.47';
7
8use Role::Tiny::With;
9use Scalar::Util qw( refaddr );
10use Specio::Library::Builtins;
11use Specio::OO;
12use Storable qw( dclone );
13
14use Specio::Constraint::Role::Interface;
15with 'Specio::Constraint::Role::Interface';
16
17{
18 ## no critic (Subroutines::ProtectPrivateSubs)
19 my $attrs = dclone( Specio::Constraint::Role::Interface::_attrs() );
20 ## use critic
21
22 for my $name (qw( parent _inline_generator )) {
23 $attrs->{$name}{init_arg} = undef;
24 $attrs->{$name}{builder}
25 = $name =~ /^_/ ? '_build' . $name : '_build_' . $name;
26 }
27
28 $attrs->{values} = {
29 isa => 'ArrayRef',
30 required => 1,
31 };
32
33 ## no critic (Subroutines::ProhibitUnusedPrivateSubroutines)
34 sub _attrs {
35 return $attrs;
36 }
37}
38
39{
40 my $Str = t('Str');
41 sub _build_parent {$Str}
42}
43
44{
45 my $_inline_generator = sub {
46 my $self = shift;
47 my $val = shift;
48
49 return sprintf( <<'EOF', ($val) x 2, $self->_env_var_name, $val );
50( !ref( %s ) && defined( %s ) && $%s{ %s } )
51EOF
52 };
53
54 sub _build_inline_generator {$_inline_generator}
55}
56
57sub _build_inline_environment {
58 my $self = shift;
59
60 my %values = map { $_ => 1 } @{ $self->values };
61
62 return { '%' . $self->_env_var_name => \%values };
63}
64
65sub _env_var_name {
66 my $self = shift;
67
68 return '_Specio_Constraint_Enum_' . refaddr($self);
69}
70
71__PACKAGE__->_ooify;
72
731;
74
75# ABSTRACT: A class for constraints which require a string matching one of a set of values
76
77__END__