← 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/Union.pm
StatementsExecuted 0 statements in 0s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
0000s0sSpecio::Constraint::Union::::BEGIN@10Specio::Constraint::Union::BEGIN@10
0000s0sSpecio::Constraint::Union::::BEGIN@11Specio::Constraint::Union::BEGIN@11
0000s0sSpecio::Constraint::Union::::BEGIN@13Specio::Constraint::Union::BEGIN@13
0000s0sSpecio::Constraint::Union::::BEGIN@3Specio::Constraint::Union::BEGIN@3
0000s0sSpecio::Constraint::Union::::BEGIN@4Specio::Constraint::Union::BEGIN@4
0000s0sSpecio::Constraint::Union::::BEGIN@8Specio::Constraint::Union::BEGIN@8
0000s0sSpecio::Constraint::Union::::BEGIN@9Specio::Constraint::Union::BEGIN@9
0000s0sSpecio::Constraint::Union::::CORE:matchSpecio::Constraint::Union::CORE:match (opcode)
0000s0sSpecio::Constraint::Union::::__ANON__Specio::Constraint::Union::__ANON__ (xsub)
0000s0sSpecio::Constraint::Union::::__ANON__[:101]Specio::Constraint::Union::__ANON__[:101]
0000s0sSpecio::Constraint::Union::::__ANON__[:59]Specio::Constraint::Union::__ANON__[:59]
0000s0sSpecio::Constraint::Union::::__ANON__[:81]Specio::Constraint::Union::__ANON__[:81]
0000s0sSpecio::Constraint::Union::::__ANON__[:82]Specio::Constraint::Union::__ANON__[:82]
0000s0sSpecio::Constraint::Union::::__ANON__[:89]Specio::Constraint::Union::__ANON__[:89]
0000s0sSpecio::Constraint::Union::::_attrsSpecio::Constraint::Union::_attrs
0000s0sSpecio::Constraint::Union::::_build_constraintSpecio::Constraint::Union::_build_constraint
0000s0sSpecio::Constraint::Union::::_build_inline_environmentSpecio::Constraint::Union::_build_inline_environment
0000s0sSpecio::Constraint::Union::::_build_inline_generatorSpecio::Constraint::Union::_build_inline_generator
0000s0sSpecio::Constraint::Union::::_build_nameSpecio::Constraint::Union::_build_name
0000s0sSpecio::Constraint::Union::::_build_optimized_constraintSpecio::Constraint::Union::_build_optimized_constraint
0000s0sSpecio::Constraint::Union::::_has_constraintSpecio::Constraint::Union::_has_constraint
0000s0sSpecio::Constraint::Union::::_has_inline_generatorSpecio::Constraint::Union::_has_inline_generator
0000s0sSpecio::Constraint::Union::::_has_nameSpecio::Constraint::Union::_has_name
0000s0sSpecio::Constraint::Union::::_has_parentSpecio::Constraint::Union::_has_parent
0000s0sSpecio::Constraint::Union::::parentSpecio::Constraint::Union::parent
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::Union;
2
3use strict;
4use warnings;
5
6our $VERSION = '0.47';
7
8use List::Util qw( all any );
9use Role::Tiny::With;
10use Specio::OO;
11use Storable qw( dclone );
12
13use Specio::Constraint::Role::Interface;
14with 'Specio::Constraint::Role::Interface';
15
16{
17 ## no critic (Subroutines::ProtectPrivateSubs)
18 my $attrs = dclone( Specio::Constraint::Role::Interface::_attrs() );
19 ## use critic
20
21 for my $name (qw( _constraint _inline_generator )) {
22 delete $attrs->{$name}{predicate};
23 $attrs->{$name}{init_arg} = undef;
24 $attrs->{$name}{lazy} = 1;
25 $attrs->{$name}{builder}
26 = $name =~ /^_/ ? '_build' . $name : '_build_' . $name;
27 }
28
29 delete $attrs->{parent};
30
31 delete $attrs->{name}{predicate};
32 $attrs->{name}{lazy} = 1;
33 $attrs->{name}{builder} = '_build_name';
34
35 $attrs->{of} = {
36 isa => 'ArrayRef',
37 required => 1,
38 };
39
40 ## no critic (Subroutines::ProhibitUnusedPrivateSubroutines)
41 sub _attrs {
42 return $attrs;
43 }
44}
45
46sub parent {undef}
47
48## no critic (Subroutines::ProhibitUnusedPrivateSubroutines)
49sub _has_parent {0}
50
51sub _has_name {
52 my $self = shift;
53 return defined $self->name;
54}
55
56sub _build_name {
57 my $self = shift;
58
59 return unless all { $_->_has_name } @{ $self->of };
60 return join q{ | }, map { $_->name } @{ $self->of };
61}
62
63## no critic (Subroutines::ProhibitUnusedPrivateSubroutines)
64sub _has_constraint {
65 my $self = shift;
66
67 return !$self->_has_inline_generator;
68}
69## use critic
70
71sub _build_constraint {
72 return $_[0]->_optimized_constraint;
73}
74
75sub _build_optimized_constraint {
76 my $self = shift;
77
78 ## no critic (Subroutines::ProtectPrivateSubs)
79 my @c = map { $_->_optimized_constraint } @{ $self->of };
80 return sub {
81 return any { $_->( $_[0] ) } @c;
82 };
83}
84
85sub _has_inline_generator {
86 my $self = shift;
87
88 ## no critic (Subroutines::ProtectPrivateSubs)
89 return all { $_->_has_inline_generator } @{ $self->of };
90}
91
92sub _build_inline_generator {
93 my $self = shift;
94
95 return sub {
96 return '(' . (
97 join q{ || },
98 map { sprintf( '( %s )', $_->_inline_generator->( $_, $_[1] ) ) }
99 @{ $self->of }
100 ) . ')';
101 }
102}
103
104sub _build_inline_environment {
105 my $self = shift;
106
107 my %env;
108 for my $type ( @{ $self->of } ) {
109 %env = (
110 %env,
111 %{ $type->inline_environment },
112 );
113 }
114
115 return \%env;
116}
117
118__PACKAGE__->_ooify;
119
1201;
121
122# ABSTRACT: A class for union constraints
123
124__END__