← Index
NYTProf Performance Profile   « line view »
For ../prof.pl
  Run on Wed Dec 14 16:10:05 2022
Reported on Wed Dec 14 16:12:57 2022

Filename/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm
StatementsExecuted 56630 statements in 99.3ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
63323910.4ms57.7msType::Tiny::::inline_check Type::Tiny::inline_check (recurses: max depth 4, inclusive time 42.5ms)
7032110.2ms35.5msType::Tiny::::is_strictly_subtype_of Type::Tiny::is_strictly_subtype_of (recurses: max depth 7, inclusive time 69.2ms)
37511247.93ms9.51msType::Tiny::::isa Type::Tiny::isa
794327.06ms17.9msType::Tiny::::strictly_equals Type::Tiny::strictly_equals
10162197.04ms11.3msType::Tiny::::can_be_inlined Type::Tiny::can_be_inlined (recurses: max depth 2, inclusive time 501µs)
1691416.38ms14.1msType::Tiny::::_loose_to_TypeTiny Type::Tiny::_loose_to_TypeTiny
132325.71ms53.3msType::Tiny::::inline_assert Type::Tiny::inline_assert
1114.59ms4.89msType::Tiny::::BEGIN@21 Type::Tiny::BEGIN@21
54114.54ms14.8msType::Tiny::::_build_coercion Type::Tiny::_build_coercion (recurses: max depth 2, inclusive time 2.12ms)
82763.28ms5.59msType::Tiny::::new Type::Tiny::new
1539713.00ms3.88msType::Tiny::::_is_null_constraint Type::Tiny::_is_null_constraint
1911032.52ms45.3msType::Tiny::::is_strictly_a_type_of Type::Tiny::is_strictly_a_type_of
69112.48ms73.7msType::Tiny::::parameterize Type::Tiny::parameterize
1112.32ms2.68msType::Tiny::::__ANON__[:126] Type::Tiny::__ANON__[:126]
36241212.27ms2.27msType::Tiny::::has_parent Type::Tiny::has_parent
3671031.82ms2.69msType::Tiny::::__ANON__[:100] Type::Tiny::__ANON__[:100] (recurses: max depth 1, inclusive time 8µs)
201918101.73ms1.73msType::Tiny::::CORE:match Type::Tiny::CORE:match (opcode)
220211.51ms37.4msType::Tiny::::_overload_coderef Type::Tiny::_overload_coderef
69111.10ms4.37msType::Tiny::::____make_key Type::Tiny::____make_key
62321.05ms21.4msType::Tiny::::_build_compiled_check Type::Tiny::_build_compiled_check
38122957µs3.65msType::Tiny::::check Type::Tiny::check
3822937µs27.7msType::Tiny::::exportables Type::Tiny::exportables
8321883µs1.03msType::Tiny::::_stringify_no_magic Type::Tiny::_stringify_no_magic
153911881µs887µsType::Tiny::::constraint Type::Tiny::constraint
18373814µs23.9msType::Tiny::::__ANON__[:89] Type::Tiny::__ANON__[:89]
1139123700µs700µsType::Tiny::::parent Type::Tiny::parent
79611543µs543µsType::Tiny::::has_inlined Type::Tiny::has_inlined
36711463µs620µsType::Tiny::::display_name Type::Tiny::display_name (recurses: max depth 1, inclusive time 1µs)
6733452µs536µsType::Tiny::::can Type::Tiny::can
311435µs5.29msType::Tiny::::__ANON__[:659] Type::Tiny::__ANON__[:659]
169104384µs22.7msType::Tiny::::compiled_check Type::Tiny::compiled_check (recurses: max depth 1, inclusive time 7µs)
12932353µs487µsType::Tiny::::is_anon Type::Tiny::is_anon
52511340µs340µsType::Tiny::::inlined Type::Tiny::inlined
8576329µs2.12msType::Tiny::::has_coercion Type::Tiny::has_coercion (recurses: max depth 2, inclusive time 432µs)
10622312µs442µsType::Tiny::::is_parameterizable Type::Tiny::is_parameterizable
29752281µs281µsType::Tiny::::name Type::Tiny::name
1622274µs852µsType::Tiny::::__ANON__[:524] Type::Tiny::__ANON__[:524]
2732268µs2.89msType::Tiny::::create_child_type Type::Tiny::create_child_type
240146260µs260µsType::Tiny::::__ANON__[:101] Type::Tiny::__ANON__[:101]
5863233µs15.0msType::Tiny::::coercion Type::Tiny::coercion (recurses: max depth 2, inclusive time 2.13ms)
3011210µs225µsType::Tiny::::__ANON__[:276] Type::Tiny::__ANON__[:276]
4633164µs193µsType::Tiny::::qualified_name Type::Tiny::qualified_name
111158µs158µsType::Tiny::::BEGIN@29 Type::Tiny::BEGIN@29
13221156µs156µsType::Tiny::::CORE:sort Type::Tiny::CORE:sort (opcode)
885139µs139µsType::Tiny::::_install_overloads Type::Tiny::_install_overloads
10322138µs138µsType::Tiny::::deprecated Type::Tiny::deprecated
10611130µs130µsType::Tiny::::has_constraint_generator Type::Tiny::has_constraint_generator
621118µs387µsType::Tiny::::AUTOLOAD Type::Tiny::AUTOLOAD
4355109µs109µsType::Tiny::::__ANON__[:55] Type::Tiny::__ANON__[:55]
3311102µs456µsType::Tiny::::CORE:subst Type::Tiny::CORE:subst (opcode)
4411102µs143µsType::Tiny::::_build_display_name Type::Tiny::_build_display_name
1221102µs136µsType::Tiny::::_lookup_my_method Type::Tiny::_lookup_my_method (recurses: max depth 1, inclusive time 34µs)
176272µs77µsType::Tiny::::type_default Type::Tiny::type_default (recurses: max depth 1, inclusive time 3µs)
11169µs69µsType::Tiny::::BEGIN@3 Type::Tiny::BEGIN@3
341167µs67µsType::Tiny::::constraint_generator Type::Tiny::constraint_generator
31157µs5.39msType::Tiny::::__ANON__[:602] Type::Tiny::__ANON__[:602]
542147µs47µsType::Tiny::::has_coercion_generator Type::Tiny::has_coercion_generator
222245µs67µsType::Tiny::::name_generator Type::Tiny::name_generator
271136µs36µsType::Tiny::::child_type_class Type::Tiny::child_type_class
31133µs812µsType::Tiny::::__ANON__[:1073] Type::Tiny::__ANON__[:1073]
201128µs28µsType::Tiny::::inline_generator Type::Tiny::inline_generator
201127µs27µsType::Tiny::::has_inline_generator Type::Tiny::has_inline_generator
181125µs27µsType::Tiny::::my_methods Type::Tiny::my_methods
11123µs23µsType::Tiny::::BEGIN@7 Type::Tiny::BEGIN@7
51122µs22µsType::Tiny::::_build_name_generator Type::Tiny::_build_name_generator
11121µs60µsType::Tiny::::DESTROY Type::Tiny::DESTROY
21121µs32µsType::Tiny::::find_parent Type::Tiny::find_parent
55219µs1.05msType::Tiny::::where Type::Tiny::where
11116µs628µsType::Tiny::::exportables_by_tag Type::Tiny::exportables_by_tag
31114µs5.40msType::Tiny::::is_a_type_of Type::Tiny::is_a_type_of
11113µs23µsType::Tiny::::BEGIN@1435 Type::Tiny::BEGIN@1435
62112µs27µsType::Tiny::::find_constraining_type Type::Tiny::find_constraining_type
11110µs27µsType::Tiny::::BEGIN@72 Type::Tiny::BEGIN@72
31110µs13µsType::Tiny::::is_parameterized Type::Tiny::is_parameterized
1117µs22µsType::Tiny::::BEGIN@71 Type::Tiny::BEGIN@71
5227µs7µsType::Tiny::::parameters Type::Tiny::parameters
2117µs10µsType::Tiny::::type_parameter Type::Tiny::type_parameter
15116µs6µsType::Tiny::::_build_constraint Type::Tiny::_build_constraint
1115µs35µsType::Tiny::::BEGIN@5 Type::Tiny::BEGIN@5
1114µs27µsType::Tiny::::BEGIN@20 Type::Tiny::BEGIN@20
1114µs7µsType::Tiny::::BEGIN@4 Type::Tiny::BEGIN@4
1113µs3µsType::Tiny::::_swap Type::Tiny::_swap
3113µs3µsType::Tiny::::coercion_generator Type::Tiny::coercion_generator
3113µs3µsType::Tiny::::has_parameters Type::Tiny::has_parameters
1112µs2µsType::Tiny::::BEGIN@11 Type::Tiny::BEGIN@11
2112µs2µsType::Tiny::::_build_my_methods Type::Tiny::_build_my_methods
0000s0sType::Tiny::::DOES Type::Tiny::DOES
0000s0sType::Tiny::::TIEARRAY Type::Tiny::TIEARRAY
0000s0sType::Tiny::::TIEHASH Type::Tiny::TIEHASH
0000s0sType::Tiny::::TIESCALAR Type::Tiny::TIESCALAR
0000s0sType::Tiny::::__ANON__[:1110] Type::Tiny::__ANON__[:1110]
0000s0sType::Tiny::::__ANON__[:1114] Type::Tiny::__ANON__[:1114]
0000s0sType::Tiny::::__ANON__[:1147] Type::Tiny::__ANON__[:1147]
0000s0sType::Tiny::::__ANON__[:1219] Type::Tiny::__ANON__[:1219]
0000s0sType::Tiny::::__ANON__[:1395] Type::Tiny::__ANON__[:1395]
0000s0sType::Tiny::::__ANON__[:1410] Type::Tiny::__ANON__[:1410]
0000s0sType::Tiny::::__ANON__[:150] Type::Tiny::__ANON__[:150]
0000s0sType::Tiny::::__ANON__[:151] Type::Tiny::__ANON__[:151]
0000s0sType::Tiny::::__ANON__[:152] Type::Tiny::__ANON__[:152]
0000s0sType::Tiny::::__ANON__[:1530] Type::Tiny::__ANON__[:1530]
0000s0sType::Tiny::::__ANON__[:153] Type::Tiny::__ANON__[:153]
0000s0sType::Tiny::::__ANON__[:154] Type::Tiny::__ANON__[:154]
0000s0sType::Tiny::::__ANON__[:158] Type::Tiny::__ANON__[:158]
0000s0sType::Tiny::::__ANON__[:159] Type::Tiny::__ANON__[:159]
0000s0sType::Tiny::::__ANON__[:163] Type::Tiny::__ANON__[:163]
0000s0sType::Tiny::::__ANON__[:164] Type::Tiny::__ANON__[:164]
0000s0sType::Tiny::::__ANON__[:165] Type::Tiny::__ANON__[:165]
0000s0sType::Tiny::::__ANON__[:166] Type::Tiny::__ANON__[:166]
0000s0sType::Tiny::::__ANON__[:167] Type::Tiny::__ANON__[:167]
0000s0sType::Tiny::::__ANON__[:171] Type::Tiny::__ANON__[:171]
0000s0sType::Tiny::::__ANON__[:195] Type::Tiny::__ANON__[:195]
0000s0sType::Tiny::::__ANON__[:321] Type::Tiny::__ANON__[:321]
0000s0sType::Tiny::::__ANON__[:335] Type::Tiny::__ANON__[:335]
0000s0sType::Tiny::::__ANON__[:484] Type::Tiny::__ANON__[:484]
0000s0sType::Tiny::::__ANON__[:511] Type::Tiny::__ANON__[:511]
0000s0sType::Tiny::::__ANON__[:516] Type::Tiny::__ANON__[:516]
0000s0sType::Tiny::::__ANON__[:553] Type::Tiny::__ANON__[:553]
0000s0sType::Tiny::::__ANON__[:569] Type::Tiny::__ANON__[:569]
0000s0sType::Tiny::::__ANON__[:823] Type::Tiny::__ANON__[:823]
0000s0sType::Tiny::::__ANON__[:82] Type::Tiny::__ANON__[:82]
0000s0sType::Tiny::::__ANON__[:83] Type::Tiny::__ANON__[:83]
0000s0sType::Tiny::::__is_parameterized Type::Tiny::__is_parameterized
0000s0sType::Tiny::::_actually_compile_type_constraint Type::Tiny::_actually_compile_type_constraint
0000s0sType::Tiny::::_add_type_coercions Type::Tiny::_add_type_coercions
0000s0sType::Tiny::::_as_string Type::Tiny::_as_string
0000s0sType::Tiny::::_assert_coercion Type::Tiny::_assert_coercion
0000s0sType::Tiny::::_build_complementary_type Type::Tiny::_build_complementary_type
0000s0sType::Tiny::::_build_default_message Type::Tiny::_build_default_message
0000s0sType::Tiny::::_build_moose_type Type::Tiny::_build_moose_type
0000s0sType::Tiny::::_build_mouse_type Type::Tiny::_build_mouse_type
0000s0sType::Tiny::::_build_util Type::Tiny::_build_util
0000s0sType::Tiny::::_clone Type::Tiny::_clone
0000s0sType::Tiny::::_compiled_type_coercion Type::Tiny::_compiled_type_coercion
0000s0sType::Tiny::::_compiled_type_constraint Type::Tiny::_compiled_type_constraint
0000s0sType::Tiny::::_croak Type::Tiny::_croak
0000s0sType::Tiny::::_dd Type::Tiny::_dd
0000s0sType::Tiny::::_default_message Type::Tiny::_default_message
0000s0sType::Tiny::::_failed_check Type::Tiny::_failed_check
0000s0sType::Tiny::::_has_xsub Type::Tiny::_has_xsub
0000s0sType::Tiny::::_identity Type::Tiny::_identity
0000s0sType::Tiny::::_inline_check Type::Tiny::_inline_check
0000s0sType::Tiny::::_instantiate_moose_type Type::Tiny::_instantiate_moose_type
0000s0sType::Tiny::::_perlcode Type::Tiny::_perlcode
0000s0sType::Tiny::::_process_coercion_list Type::Tiny::_process_coercion_list
0000s0sType::Tiny::::_strict_check Type::Tiny::_strict_check
0000s0sType::Tiny::::_unite Type::Tiny::_unite
0000s0sType::Tiny::::assert_coerce Type::Tiny::assert_coerce
0000s0sType::Tiny::::assert_return Type::Tiny::assert_return
0000s0sType::Tiny::::assert_valid Type::Tiny::assert_valid
0000s0sType::Tiny::::coerce Type::Tiny::coerce
0000s0sType::Tiny::::coercibles Type::Tiny::coercibles
0000s0sType::Tiny::::compile_type_constraint Type::Tiny::compile_type_constraint
0000s0sType::Tiny::::complementary_type Type::Tiny::complementary_type
0000s0sType::Tiny::::deep_explanation Type::Tiny::deep_explanation
0000s0sType::Tiny::::equals Type::Tiny::equals
0000s0sType::Tiny::::get_message Type::Tiny::get_message
0000s0sType::Tiny::::hand_optimized_type_constraint Type::Tiny::hand_optimized_type_constraint
0000s0sType::Tiny::::has_deep_explanation Type::Tiny::has_deep_explanation
0000s0sType::Tiny::::has_hand_optimized_type_constraint Type::Tiny::has_hand_optimized_type_constraint
0000s0sType::Tiny::::has_library Type::Tiny::has_library
0000s0sType::Tiny::::has_message Type::Tiny::has_message
0000s0sType::Tiny::::has_parameterized_from Type::Tiny::has_parameterized_from
0000s0sType::Tiny::::has_sorter Type::Tiny::has_sorter
0000s0sType::Tiny::::inline_environment Type::Tiny::inline_environment
0000s0sType::Tiny::::is_strictly_supertype_of Type::Tiny::is_strictly_supertype_of
0000s0sType::Tiny::::is_subtype_of Type::Tiny::is_subtype_of
0000s0sType::Tiny::::is_supertype_of Type::Tiny::is_supertype_of
0000s0sType::Tiny::::library Type::Tiny::library
0000s0sType::Tiny::::message Type::Tiny::message
0000s0sType::Tiny::::meta Type::Tiny::meta
0000s0sType::Tiny::::minus_coercions Type::Tiny::minus_coercions
0000s0sType::Tiny::::moose_type Type::Tiny::moose_type
0000s0sType::Tiny::::mouse_type Type::Tiny::mouse_type
0000s0sType::Tiny::::no_coercions Type::Tiny::no_coercions
0000s0sType::Tiny::::of Type::Tiny::of
0000s0sType::Tiny::::parameterized_from Type::Tiny::parameterized_from
0000s0sType::Tiny::::parents Type::Tiny::parents
0000s0sType::Tiny::::plus_coercions Type::Tiny::plus_coercions
0000s0sType::Tiny::::plus_fallback_coercions Type::Tiny::plus_fallback_coercions
0000s0sType::Tiny::::sorter Type::Tiny::sorter
0000s0sType::Tiny::::validate Type::Tiny::validate
0000s0sType::Tiny::::validate_explain Type::Tiny::validate_explain
0000s0sTypes::Standard::::to_AnyTypes::Standard::to_Any
0000s0sTypes::Standard::::to_ArrayRefTypes::Standard::to_ArrayRef
0000s0sTypes::Standard::::to_ClassNameTypes::Standard::to_ClassName
0000s0sTypes::Standard::::to_CodeRefTypes::Standard::to_CodeRef
0000s0sTypes::Standard::::to_ConsumerOfTypes::Standard::to_ConsumerOf
0000s0sTypes::Standard::::to_CycleTupleTypes::Standard::to_CycleTuple
0000s0sTypes::Standard::::to_DefinedTypes::Standard::to_Defined
0000s0sTypes::Standard::::to_DictTypes::Standard::to_Dict
0000s0sTypes::Standard::::to_EnumTypes::Standard::to_Enum
0000s0sTypes::Standard::::to_FileHandleTypes::Standard::to_FileHandle
0000s0sTypes::Standard::::to_GlobRefTypes::Standard::to_GlobRef
0000s0sTypes::Standard::::to_HasMethodsTypes::Standard::to_HasMethods
0000s0sTypes::Standard::::to_HashRefTypes::Standard::to_HashRef
0000s0sTypes::Standard::::to_InstanceOfTypes::Standard::to_InstanceOf
0000s0sTypes::Standard::::to_IntTypes::Standard::to_Int
0000s0sTypes::Standard::::to_ItemTypes::Standard::to_Item
0000s0sTypes::Standard::::to_LaxNumTypes::Standard::to_LaxNum
0000s0sTypes::Standard::::to_MapTypes::Standard::to_Map
0000s0sTypes::Standard::::to_MaybeTypes::Standard::to_Maybe
0000s0sTypes::Standard::::to_NumTypes::Standard::to_Num
0000s0sTypes::Standard::::to_ObjectTypes::Standard::to_Object
0000s0sTypes::Standard::::to_OptListTypes::Standard::to_OptList
0000s0sTypes::Standard::::to_OptionalTypes::Standard::to_Optional
0000s0sTypes::Standard::::to_OverloadTypes::Standard::to_Overload
0000s0sTypes::Standard::::to_RefTypes::Standard::to_Ref
0000s0sTypes::Standard::::to_RegexpRefTypes::Standard::to_RegexpRef
0000s0sTypes::Standard::::to_RoleNameTypes::Standard::to_RoleName
0000s0sTypes::Standard::::to_ScalarRefTypes::Standard::to_ScalarRef
0000s0sTypes::Standard::::to_SlurpyTypes::Standard::to_Slurpy
0000s0sTypes::Standard::::to_StrTypes::Standard::to_Str
0000s0sTypes::Standard::::to_StrMatchTypes::Standard::to_StrMatch
0000s0sTypes::Standard::::to_StrictNumTypes::Standard::to_StrictNum
0000s0sTypes::Standard::::to_TiedTypes::Standard::to_Tied
0000s0sTypes::Standard::::to_TupleTypes::Standard::to_Tuple
0000s0sTypes::Standard::::to_UndefTypes::Standard::to_Undef
0000s0sTypes::Standard::::to_ValueTypes::Standard::to_Value
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Type::Tiny;
2
3269µs169µs
# spent 69µs within Type::Tiny::BEGIN@3 which was called: # once (69µs+0s) by Type::Library::BEGIN@16 at line 3
use 5.008001;
# spent 69µs making 1 call to Type::Tiny::BEGIN@3
4217µs210µs
# spent 7µs (4+3) within Type::Tiny::BEGIN@4 which was called: # once (4µs+3µs) by Type::Library::BEGIN@16 at line 4
use strict;
# spent 7µs making 1 call to Type::Tiny::BEGIN@4 # spent 3µs making 1 call to strict::import
5246µs265µs
# spent 35µs (5+30) within Type::Tiny::BEGIN@5 which was called: # once (5µs+30µs) by Type::Library::BEGIN@16 at line 5
use warnings;
# spent 35µs making 1 call to Type::Tiny::BEGIN@5 # spent 30µs making 1 call to warnings::import
6
7
# spent 23µs within Type::Tiny::BEGIN@7 which was called: # once (23µs+0s) by Type::Library::BEGIN@16 at line 9
BEGIN {
812µs if ( $] < 5.010 ) { require Devel::TypeTiny::Perl58Compat }
9121µs123µs}
# spent 23µs making 1 call to Type::Tiny::BEGIN@7
10
11
# spent 2µs within Type::Tiny::BEGIN@11 which was called: # once (2µs+0s) by Type::Library::BEGIN@16 at line 15
BEGIN {
1210s $Type::Tiny::AUTHORITY = 'cpan:TOBYINK';
1310s $Type::Tiny::VERSION = '2.000001';
1414µs $Type::Tiny::XS_VERSION = '0.016';
15126µs12µs}
# spent 2µs making 1 call to Type::Tiny::BEGIN@11
16
1712µs$Type::Tiny::VERSION =~ tr/_//d;
1810s$Type::Tiny::XS_VERSION =~ tr/_//d;
19
20216µs250µs
# spent 27µs (4+23) within Type::Tiny::BEGIN@20 which was called: # once (4µs+23µs) by Type::Library::BEGIN@16 at line 20
use Scalar::Util qw( blessed );
# spent 27µs making 1 call to Type::Tiny::BEGIN@20 # spent 23µs making 1 call to Exporter::import
212783µs14.89ms
# spent 4.89ms (4.59+298µs) within Type::Tiny::BEGIN@21 which was called: # once (4.59ms+298µs) by Type::Library::BEGIN@16 at line 21
use Types::TypeTiny ();
# spent 4.89ms making 1 call to Type::Tiny::BEGIN@21
22
2311µsour $SafePackage = sprintf 'package %s;', __PACKAGE__;
24
25sub _croak ($;@) { require Error::TypeTiny; goto \&Error::TypeTiny::croak }
26
2713µs
# spent 3µs within Type::Tiny::_swap which was called: # once (3µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:126] at line 104
sub _swap { $_[2] ? @_[ 1, 0 ] : @_[ 0, 1 ] }
28
29
# spent 158µs within Type::Tiny::BEGIN@29 which was called: # once (158µs+0s) by Type::Library::BEGIN@16 at line 66
BEGIN {
3011µs my $support_smartmatch = 0+ !!( $] >= 5.010001 );
31127µs eval qq{ sub SUPPORT_SMARTMATCH () { !! $support_smartmatch } };
32
3310s my $fixed_precedence = 0+ !!( $] >= 5.014 );
34117µs eval qq{ sub _FIXED_PRECEDENCE () { !! $fixed_precedence } };
35
36 my $try_xs =
37 exists( $ENV{PERL_TYPE_TINY_XS} ) ? !!$ENV{PERL_TYPE_TINY_XS}
38 : exists( $ENV{PERL_ONLY} ) ? !$ENV{PERL_ONLY}
3911µs : 1;
40
4110s my $use_xs = 0;
4211µs $try_xs and eval {
43198µs require Type::Tiny::XS;
44 'Type::Tiny::XS'->VERSION( $Type::Tiny::XS_VERSION );
45 $use_xs++;
46 };
47
48 *_USE_XS =
49 $use_xs
50 ? sub () { !!1 }
5111µs : sub () { !!0 };
52
53 *_USE_MOUSE =
54 $try_xs
5543151µs
# spent 109µs within Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:55] which was called 43 times, avg 3µs/call: # 20 times (49µs+0s) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:127] at line 74 of Types/Standard.pm, avg 2µs/call # 10 times (30µs+0s) by Type::Tiny::Class::new at line 46 of Type/Tiny/Class.pm, avg 3µs/call # 8 times (20µs+0s) by Types::Standard::HashRef::__constraint_generator at line 34 of Types/Standard/HashRef.pm, avg 2µs/call # 4 times (7µs+0s) by Types::Standard::ArrayRef::__constraint_generator at line 38 of Types/Standard/ArrayRef.pm, avg 2µs/call # once (3µs+0s) by Type::Tiny::Duck::new at line 47 of Type/Tiny/Duck.pm
? sub () { $INC{'Mouse/Util.pm'} and Mouse::Util::MOUSE_XS() }
5612µs : sub () { !!0 };
57
5810s my $strict_mode = 0;
5916µs $ENV{$_} && ++$strict_mode for qw(
60 EXTENDED_TESTING
61 AUTHOR_TESTING
62 RELEASE_TESTING
63 PERL_STRICT
64 );
6514µs *_STRICT_MODE = $strict_mode ? sub () { !!1 } : sub () { !!0 };
66129µs1158µs} #/ BEGIN
# spent 158µs making 1 call to Type::Tiny::BEGIN@29
67
68{
69
70
# spent 139µs within Type::Tiny::_install_overloads which was called 8 times, avg 17µs/call: # once (32µs+0s) by Type::Library::BEGIN@16 at line 168 # once (31µs+0s) by Type::Tiny::_build_coercion at line 29 of Type/Coercion.pm # once (19µs+0s) by JSON::Schema::Modern::BEGIN@31 at line 161 of Types/Standard.pm # once (16µs+0s) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:1059] at line 22 of Type/Tiny/Enum.pm # once (15µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:126] at line 23 of Type/Tiny/Union.pm # once (10µs+0s) by JSON::Schema::Modern::BEGIN@31 at line 191 of Types/Standard.pm # once (9µs+0s) by Type::Tiny::_build_coercion at line 34 of Type/Coercion.pm # once (7µs+0s) by Type::Library::BEGIN@16 at line 172
sub _install_overloads {
71241µs237µs
# spent 22µs (7+15) within Type::Tiny::BEGIN@71 which was called: # once (7µs+15µs) by Type::Library::BEGIN@16 at line 71
no strict 'refs';
# spent 22µs making 1 call to Type::Tiny::BEGIN@71 # spent 15µs making 1 call to strict::unimport
7227.22ms244µs
# spent 27µs (10+17) within Type::Tiny::BEGIN@72 which was called: # once (10µs+17µs) by Type::Library::BEGIN@16 at line 72
no warnings 'redefine', 'once';
# spent 27µs making 1 call to Type::Tiny::BEGIN@72 # spent 17µs making 1 call to warnings::unimport
73
74 # Coverage is checked on Perl 5.26
7585µs if ( $] < 5.010 ) { # uncoverable statement
76 require overload; # uncoverable statement
77 push @_, fallback => 1; # uncoverable statement
78 goto \&overload::OVERLOAD; # uncoverable statement
79 }
80
8183µs my $class = shift;
82836µs *{ $class . '::((' } = sub { };
83814µs *{ $class . '::()' } = sub { };
842414µs *{ $class . '::()' } = do { my $x = 1; \$x };
85843µs while ( @_ ) {
86257µs my $f = shift;
872536µs *{ $class . '::(' . $f } = ref $_[0] ? shift : do {
8820s my $m = shift;
89183759µs18323.1ms
# spent 23.9ms (814µs+23.1) within Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:89] which was called 183 times, avg 130µs/call: # 72 times (348µs+2.83ms) by JSON::Schema::Modern::Document::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Document.pm:135] or Sub::Defer::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Sub/Defer.pm:178] at line 120 of JSON/Schema/Modern/Document.pm, avg 44µs/call # 48 times (147µs+4.15ms) by JSON::Schema::Modern::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern.pm:676] or Sub::Defer::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Sub/Defer.pm:178] at line 650 of JSON/Schema/Modern.pm, avg 90µs/call # 47 times (275µs+15.5ms) by Method::Generate::Accessor::_validate_codulatable at line 686 of Method/Generate/Accessor.pm, avg 335µs/call # 10 times (27µs+13µs) by JSON::Schema::Modern::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern.pm:124] or Sub::Defer::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Sub/Defer.pm:178] at line 124 of JSON/Schema/Modern.pm, avg 4µs/call # 2 times (6µs+307µs) by JSON::Schema::Modern::add_vocabulary or Sub::Defer::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Sub/Defer.pm:178] at line 711 of JSON/Schema/Modern.pm, avg 156µs/call # 2 times (8µs+253µs) by JSON::Schema::Modern::add_vocabulary or Sub::Defer::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Sub/Defer.pm:178] at line 706 of JSON/Schema/Modern.pm, avg 130µs/call # 2 times (3µs+2µs) by JSON::Schema::Modern::add_vocabulary or Sub::Defer::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Sub/Defer.pm:178] at line 712 of JSON/Schema/Modern.pm, avg 2µs/call
sub { shift->$m( @_ ) }
# spent 23.1ms making 183 calls to Type::Tiny::_overload_coderef, avg 126µs/call
9023µs };
91 }
92 } #/ sub _install_overloads
93}
94
9511µs__PACKAGE__->_install_overloads(
96
# spent 2.69ms (1.82+870µs) within Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:100] which was called 367 times, avg 7µs/call: # 68 times (320µs+130µs) by Type::Tiny::inline_assert at line 935, avg 7µs/call # 64 times (346µs+221µs) by Type::Tiny::inline_assert at line 947, avg 9µs/call # 48 times (319µs+258µs) by Type::Tiny::_build_compiled_check at line 537, avg 12µs/call # 39 times (121µs+53µs) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:826] at line 823 of Types/Standard.pm, avg 4µs/call # 37 times (209µs+69µs) by Type::Tiny::_build_coercion at line 502, avg 8µs/call # 37 times (104µs+38µs) by Type::Tiny::_overload_coderef at line 215, avg 4µs/call # 33 times (276µs+78µs) by Type::Tiny::CORE:subst at line 522, avg 11µs/call # 33 times (101µs+21µs) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:524] at line 523, avg 4µs/call # 6 times (19µs+9µs) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:786] at line 785 of Types/Standard.pm, avg 5µs/call # 2 times (7µs+-7µs) by Type::Tiny::Union::_build_display_name at line 97 of Type/Tiny/Union.pm, avg 0s/call
q("") => sub {
973671.81ms734877µs caller =~ m{^(Moo::HandleMoose|Sub::Quote)}
# spent 621µs making 367 calls to Type::Tiny::display_name, avg 2µs/call, recursion: max depth 1, sum of overlapping time 1µs # spent 257µs making 367 calls to Type::Tiny::CORE:match, avg 700ns/call
98 ? $_[0]->_stringify_no_magic
99 : $_[0]->display_name;
100 },
101240466µs
# spent 260µs within Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:101] which was called 240 times, avg 1µs/call: # 79 times (58µs+0s) by Type::Tiny::Class::parent at line 149 of Type/Tiny/Class.pm, avg 734ns/call # 58 times (54µs+0s) by Type::Coercion::_preserve_type_constraint at line 111 of Type/Coercion.pm, avg 931ns/call # 41 times (72µs+0s) by Method::Generate::Accessor::_generate_populate_set at line 567 of Method/Generate/Accessor.pm, avg 2µs/call # 17 times (34µs+0s) by Method::Generate::Accessor::_generate_use_default at line 367 of Method/Generate/Accessor.pm, avg 2µs/call # 10 times (14µs+0s) by Method::Generate::Accessor::is_simple_set at line 297 of Method/Generate/Accessor.pm, avg 1µs/call # 10 times (6µs+0s) by Method::Generate::Accessor::_generate_set at line 410 of Method/Generate/Accessor.pm, avg 600ns/call # 6 times (6µs+0s) by Type::Coercion::type_constraint at line 89 of Type/Coercion.pm, avg 1µs/call # 4 times (4µs+0s) by Types::Standard::Slurpy::my_unslurpy at line 751 of Types/Standard.pm, avg 1µs/call # 3 times (3µs+0s) by Types::Standard::Dict::__inline_generator at line 103 of Types/Standard/Dict.pm, avg 1µs/call # 3 times (2µs+0s) by Types::Standard::Dict::__inline_generator at line 96 of Types/Standard/Dict.pm, avg 667ns/call # 3 times (2µs+0s) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:826] at line 823 of Types/Standard.pm, avg 667ns/call # 3 times (1µs+0s) by Types::Standard::Dict::__inline_generator at line 100 of Types/Standard/Dict.pm, avg 333ns/call # 2 times (3µs+0s) by Type::Tiny::find_parent at line 743, avg 2µs/call # once (1µs+0s) by Type::Tiny::type_default at line 573
q(bool) => sub { 1 },
102 q(&{}) => "_overload_coderef",
103
# spent 2.68ms (2.32+357µs) within Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:126] which was called: # once (2.32ms+357µs) by JSON::Schema::Modern::BEGIN@33 at line 42 of JSON/Schema/Modern/Error.pm
q(|) => sub {
10413µs13µs my @tc = _swap @_;
# spent 3µs making 1 call to Type::Tiny::_swap
105 if ( !_FIXED_PRECEDENCE && $_[2] ) {
106 if ( blessed $tc[0] ) {
107 if ( blessed $tc[0] eq "Type::Tiny::_HalfOp" ) {
108 my $type = $tc[0]->{type};
109 my $param = $tc[0]->{param};
110 my $op = $tc[0]->{op};
111 require Type::Tiny::Union;
112 return "Type::Tiny::_HalfOp"->new(
113 $op,
114 $param,
115 "Type::Tiny::Union"->new_by_overload( type_constraints => [ $type, $tc[1] ] ),
116 );
117 } #/ if ( blessed $tc[0] eq...)
118 } #/ if ( blessed $tc[0] )
119 elsif ( ref $tc[0] eq 'ARRAY' ) {
120 require Type::Tiny::_HalfOp;
121 return "Type::Tiny::_HalfOp"->new( '|', @tc );
122 }
123 } #/ if ( !_FIXED_PRECEDENCE...)
1241498µs require Type::Tiny::Union;
12514µs1171µs return "Type::Tiny::Union"->new_by_overload( type_constraints => \@tc );
# spent 171µs making 1 call to Type::Tiny::Union::new_by_overload
126 },
127 q(&) => sub {
128 my @tc = _swap @_;
129 if ( !_FIXED_PRECEDENCE && $_[2] ) {
130 if ( blessed $tc[0] ) {
131 if ( blessed $tc[0] eq "Type::Tiny::_HalfOp" ) {
132 my $type = $tc[0]->{type};
133 my $param = $tc[0]->{param};
134 my $op = $tc[0]->{op};
135 require Type::Tiny::Intersection;
136 return "Type::Tiny::_HalfOp"->new(
137 $op,
138 $param,
139 "Type::Tiny::Intersection"->new_by_overload( type_constraints => [ $type, $tc[1] ] ),
140 );
141 } #/ if ( blessed $tc[0] eq...)
142 } #/ if ( blessed $tc[0] )
143 elsif ( ref $tc[0] eq 'ARRAY' ) {
144 require Type::Tiny::_HalfOp;
145 return "Type::Tiny::_HalfOp"->new( '&', @tc );
146 }
147 } #/ if ( !_FIXED_PRECEDENCE...)
148 require Type::Tiny::Intersection;
149 "Type::Tiny::Intersection"->new_by_overload( type_constraints => \@tc );
150 },
151 q(~) => sub { shift->complementary_type },
152 q(==) => sub { $_[0]->equals( $_[1] ) },
153 q(!=) => sub { not $_[0]->equals( $_[1] ) },
154 q(<) => sub { my $m = $_[0]->can( 'is_subtype_of' ); $m->( _swap @_ ) },
155 q(>) => sub {
156 my $m = $_[0]->can( 'is_subtype_of' );
157 $m->( reverse _swap @_ );
158 },
159 q(<=) => sub { my $m = $_[0]->can( 'is_a_type_of' ); $m->( _swap @_ ) },
160 q(>=) => sub {
161 my $m = $_[0]->can( 'is_a_type_of' );
162 $m->( reverse _swap @_ );
163 },
164 q(eq) => sub { "$_[0]" eq "$_[1]" },
165 q(cmp) => sub { $_[2] ? ( "$_[1]" cmp "$_[0]" ) : ( "$_[0]" cmp "$_[1]" ) },
166 q(0+) => sub { $_[0]{uniq} },
167 q(/) => sub { ( _STRICT_MODE xor $_[2] ) ? $_[0] : $_[1] },
168116µs132µs);
# spent 32µs making 1 call to Type::Tiny::_install_overloads
169
170__PACKAGE__->_install_overloads(
171 q(~~) => sub { $_[0]->check( $_[1] ) },
17211µs17µs) if Type::Tiny::SUPPORT_SMARTMATCH;
# spent 7µs making 1 call to Type::Tiny::_install_overloads
173
174# Would be easy to just return sub { $self->assert_return(@_) }
175# but try to build a more efficient coderef whenever possible.
176#
177
# spent 37.4ms (1.51+35.9) within Type::Tiny::_overload_coderef which was called 220 times, avg 170µs/call: # 183 times (808µs+22.2ms) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:89] at line 89, avg 126µs/call # 37 times (697µs+13.7ms) by Type::Tiny::exportables at line 1209, avg 388µs/call
sub _overload_coderef {
17822039µs my $self = shift;
179
180 # Bypass generating a coderef if we've already got the best possible one.
181 #
182220517µs return $self->{_overload_coderef} if $self->{_overload_coderef_no_rebuild};
183
184 # Subclasses of Type::Tiny might override assert_return to do some kind
185 # of interesting thing. In that case, we can't rely on it having identical
186 # behaviour to Type::Tiny::inline_assert.
187 #
188 $self->{_overrides_assert_return} =
189 ( $self->can( 'assert_return' ) != \&assert_return )
19064193µs61463µs unless exists $self->{_overrides_assert_return};
# spent 463µs making 61 calls to Type::Tiny::can, avg 8µs/call
191
19264104µs if ( $self->{_overrides_assert_return} ) {
193 $self->{_overload_coderef} ||= do {
194 Scalar::Util::weaken( my $weak = $self );
195 sub { $weak->assert_return( @_ ) };
196 };
197 ++$self->{_overload_coderef_no_rebuild};
198 }
199 elsif ( exists( &Sub::Quote::quote_sub ) ) {
200
201 # Use `=` instead of `||=` because we want to overwrite non-Sub::Quote
202 # coderef if possible.
20327170µs8122.1ms $self->{_overload_coderef} = $self->can_be_inlined
# spent 20.0ms making 27 calls to Type::Tiny::inline_assert, avg 741µs/call # spent 1.69ms making 27 calls to Sub::Quote::quote_sub, avg 63µs/call # spent 369µs making 23 calls to Type::Tiny::can_be_inlined, avg 16µs/call # spent 32µs making 1 call to Type::Tiny::Union::can_be_inlined # spent 3µs making 3 calls to Type::Tiny::Enum::can_be_inlined, avg 1µs/call
204 ? Sub::Quote::quote_sub(
205 $self->inline_assert( '$_[0]' ),
206 )
207 : Sub::Quote::quote_sub(
208 $self->inline_assert( '$_[0]', '$type' ),
209 { '$type' => \$self },
210 );
2112744µs ++$self->{_overload_coderef_no_rebuild};
212 } #/ elsif ( exists( &Sub::Quote::quote_sub...))
213 else {
2143718µs require Eval::TypeTiny;
21537294µs14813.4ms $self->{_overload_coderef} ||= $self->can_be_inlined
# spent 6.29ms making 37 calls to Eval::TypeTiny::eval_closure, avg 170µs/call # spent 6.19ms making 37 calls to Type::Tiny::inline_assert, avg 167µs/call # spent 733µs making 37 calls to Type::Tiny::can_be_inlined, avg 20µs/call # spent 142µs making 37 calls to Type::Tiny::__ANON__[Type/Tiny.pm:100], avg 4µs/call
216 ? Eval::TypeTiny::eval_closure(
217 source => sprintf(
218 'sub { %s }', $self->inline_assert( '$_[0]', undef, no_wrapper => 1 )
219 ),
220 description => sprintf( "compiled assertion 'assert_%s'", $self ),
221 )
222 : Eval::TypeTiny::eval_closure(
223 source => sprintf(
224 'sub { %s }', $self->inline_assert( '$_[0]', '$type', no_wrapper => 1 )
225 ),
226 description => sprintf( "compiled assertion 'assert_%s'", $self ),
227 environment => { '$type' => \$self },
228 );
229 } #/ else [ if ( $self->{_overrides_assert_return...})]
230
23164156µs $self->{_overload_coderef};
232} #/ sub _overload_coderef
233
234our %ALL_TYPES;
235
23610smy $QFS;
23710smy $uniq = 1;
238
239
# spent 5.59ms (3.28+2.31) within Type::Tiny::new which was called 82 times, avg 68µs/call: # 37 times (1.30ms+835µs) by Type::Library::add_type at line 222 of Type/Library.pm, avg 58µs/call # 27 times (1.33ms+1.26ms) by Type::Tiny::create_child_type at line 1096, avg 96µs/call # 11 times (395µs+126µs) by Type::Tiny::ConstrainedObject::new at line 36 of Type/Tiny/ConstrainedObject.pm, avg 47µs/call # 4 times (139µs+50µs) by Type::Tiny::Enum::new at line 84 of Type/Tiny/Enum.pm, avg 47µs/call # once (50µs+9µs) by Type::Tiny::Union::new at line 85 of Type/Tiny/Union.pm # once (32µs+22µs) by Types::TypeTiny::TypeTiny at line 421 of Types/TypeTiny.pm # once (33µs+12µs) by Types::TypeTiny::StringLike at line 195 of Types/TypeTiny.pm
sub new {
2408237µs my $class = shift;
24182197µs my %params = ( @_ == 1 ) ? %{ $_[0] } : @_;
242
2438250µs for ( qw/ name display_name library / ) {
244246197µs $params{$_} = $params{$_} . '' if defined $params{$_};
245 }
246
2478257µs if ( exists $params{parent} ) {
248 $params{parent} =
249 ref( $params{parent} ) =~ /^Type::Tiny\b/
250 ? $params{parent}
25163317µs63113µs : Types::TypeTiny::to_TypeTiny( $params{parent} );
# spent 113µs making 63 calls to Type::Tiny::CORE:match, avg 2µs/call
252
253 _croak "Parent must be an instance of %s", __PACKAGE__
254 unless blessed( $params{parent} )
25563254µs126334µs && $params{parent}->isa( __PACKAGE__ );
# spent 277µs making 63 calls to Type::Tiny::isa, avg 4µs/call # spent 57µs making 63 calls to Scalar::Util::blessed, avg 905ns/call
256
2576394µs6374µs if ( $params{parent}->deprecated and not exists $params{deprecated} ) {
# spent 74µs making 63 calls to Type::Tiny::deprecated, avg 1µs/call
258 $params{deprecated} = 1;
259 }
260 } #/ if ( exists $params{parent...})
261
2628276µs if ( exists $params{constraint}
263 and defined $params{constraint}
264 and not ref $params{constraint} )
265 {
26652µs require Eval::TypeTiny;
26752µs my $code = $params{constraint};
268512µs5497µs $params{constraint} = Eval::TypeTiny::eval_closure(
# spent 497µs making 5 calls to Eval::TypeTiny::eval_closure, avg 99µs/call
269 source => sprintf( 'sub ($) { %s }', $code ),
270 description => "anonymous check",
271 );
272
# spent 225µs (210+15) within Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:276] which was called 30 times, avg 8µs/call: # 30 times (210µs+15µs) by Type::Tiny::inline_check at line 895, avg 8µs/call
$params{inlined} ||= sub {
2733018µs my ( $type ) = @_;
2743045µs my $inlined = $_ eq '$_' ? "do { $code }" : "do { local \$_ = $_; $code }";
27530117µs3015µs $type->has_parent ? ( undef, $inlined ) : $inlined;
# spent 15µs making 30 calls to Type::Tiny::has_parent, avg 500ns/call
276 }
277519µs573µs if ( !exists $params{parent} or $params{parent}->can_be_inlined );
# spent 73µs making 5 calls to Type::Tiny::can_be_inlined, avg 15µs/call
278 } #/ if ( exists $params{constraint...})
279
280 # canonicalize to a boolean
28182112µs $params{deprecated} = !!$params{deprecated};
282
2838261µs $params{name} = "__ANON__" unless exists $params{name};
2848289µs $params{uniq} = $uniq++;
285
2868262µs if ( $params{name} ne "__ANON__" ) {
287
288 # First try a fast ASCII-only expression, but fall back to Unicode
289 $params{name} =~ /^_{0,2}[A-Z][A-Za-z0-9_]+$/sm
290 or eval q( use 5.008; $params{name} =~ /^_{0,2}\p{Lu}[\p{L}0-9_]+$/sm )
29139164µs3995µs or _croak '"%s" is not a valid type name', $params{name};
# spent 95µs making 39 calls to Type::Tiny::CORE:match, avg 2µs/call
292 }
293
2948224µs if ( exists $params{coercion} and !ref $params{coercion} and $params{coercion} )
295 {
296 $params{parent}->has_coercion
297 or _croak
298 "coercion => 1 requires type to have a direct parent with a coercion";
299
300 $params{coercion} = $params{parent}->coercion->type_coercion_map;
301 }
302
3038245µs if ( !exists $params{inlined}
304 and exists $params{constraint}
305 and ( !exists $params{parent} or $params{parent}->can_be_inlined )
306 and $QFS ||= "Sub::Quote"->can( "quoted_from_sub" ) )
307 {
308 my ( undef, $perlstring, $captures ) = @{ $QFS->( $params{constraint} ) || [] };
309
310 $params{inlined} = sub {
311 my ( $self, $var ) = @_;
312 my $code = Sub::Quote::inlinify(
313 $perlstring,
314 $var,
315 $var eq q($_) ? '' : "local \$_ = $var;",
316 1,
317 );
318 $code = sprintf( '%s and %s', $self->parent->inline_check( $var ), $code )
319 if $self->has_parent;
320 return $code;
321 }
322 if $perlstring && !$captures;
323 } #/ if ( !exists $params{inlined...})
324
32582102µs my $self = bless \%params, $class;
326
3278293µs unless ( $params{tmp} ) {
32882189µs my $uniq = $self->{uniq};
329
3308296µs $ALL_TYPES{$uniq} = $self;
33182281µs8264µs Scalar::Util::weaken( $ALL_TYPES{$uniq} );
# spent 64µs making 82 calls to Scalar::Util::weaken, avg 780ns/call
332
3338218µs my $tmp = $self;
33482155µs8250µs Scalar::Util::weaken( $tmp );
# spent 50µs making 82 calls to Scalar::Util::weaken, avg 610ns/call
33582395µs82990µs $Moo::HandleMoose::TYPE_MAP{ $self->_stringify_no_magic } = sub { $tmp };
# spent 990µs making 82 calls to Type::Tiny::_stringify_no_magic, avg 12µs/call
336 } #/ unless ( $params{tmp} )
337
3388286µs if ( ref( $params{coercion} ) eq q(CODE) ) {
339 require Types::Standard;
340 my $code = delete( $params{coercion} );
341 $self->{coercion} = $self->_build_coercion;
342 $self->coercion->add_type_coercions( Types::Standard::Any(), $code );
343 }
344 elsif ( ref( $params{coercion} ) eq q(ARRAY) ) {
345 my $arr = delete( $params{coercion} );
346 $self->{coercion} = $self->_build_coercion;
347 $self->coercion->add_type_coercions( @$arr );
348 }
349
350 # Documenting this here because it's too weird to be in the pod.
351 # There's a secret attribute called "_build_coercion" which takes a
352 # coderef. If present, then when $type->coercion is lazy built,
353 # the blank Type::Coercion object gets passed to the coderef,
354 # allowing the coderef to manipulate it a little. This is used by
355 # Types::TypeTiny to allow it to build a coercion for the TypeTiny
356 # type constraint without needing to load Type::Coercion yet.
357
3588233µs if ( $params{my_methods} ) {
35941µs require Eval::TypeTiny;
360 Scalar::Util::reftype( $params{my_methods}{$_} ) eq 'CODE'
361 and Eval::TypeTiny::set_subname(
362 sprintf( "%s::my_%s", $self->qualified_name, $_ ),
363 $params{my_methods}{$_},
364427µs1320µs ) for keys %{ $params{my_methods} };
# spent 15µs making 2 calls to Eval::TypeTiny::set_subname, avg 8µs/call # spent 4µs making 2 calls to Type::Tiny::qualified_name, avg 2µs/call # spent 1µs making 9 calls to Scalar::Util::reftype, avg 111ns/call
365 } #/ if ( $params{my_methods...})
366
36782193µs return $self;
368} #/ sub new
369
370
# spent 60µs (21+39) within Type::Tiny::DESTROY which was called: # once (21µs+39µs) by JSON::Schema::Modern::add_vocabulary at line 712 of JSON/Schema/Modern.pm
sub DESTROY {
37111µs my $self = shift;
372114µs delete( $ALL_TYPES{ $self->{uniq} } );
37313µs139µs delete( $Moo::HandleMoose::TYPE_MAP{ $self->_stringify_no_magic } );
# spent 39µs making 1 call to Type::Tiny::_stringify_no_magic
37415µs return;
375}
376
377sub _clone {
378 my $self = shift;
379 my %opts;
380 $opts{$_} = $self->{$_} for qw< name display_name message >;
381 $self->create_child_type( %opts );
382}
383
384
# spent 1.03ms (883µs+146µs) within Type::Tiny::_stringify_no_magic which was called 83 times, avg 12µs/call: # 82 times (846µs+144µs) by Type::Tiny::new at line 335, avg 12µs/call # once (37µs+2µs) by Type::Tiny::DESTROY at line 373
sub _stringify_no_magic {
385831.09ms249146µs sprintf(
# spent 64µs making 83 calls to Scalar::Util::blessed, avg 771ns/call # spent 60µs making 83 calls to Scalar::Util::reftype, avg 723ns/call # spent 22µs making 83 calls to Scalar::Util::refaddr, avg 265ns/call
386 '%s=%s(0x%08x)', blessed( $_[0] ), Scalar::Util::reftype( $_[0] ),
387 Scalar::Util::refaddr( $_[0] )
388 );
389}
390
391our $DD;
392
393sub _dd {
394 @_ = $_ unless @_;
395 my ( $value ) = @_;
396
397 goto $DD if ref( $DD ) eq q(CODE);
398
399 require B;
400
401 !defined $value ? 'Undef'
402 : !ref $value ? sprintf( 'Value %s', B::perlstring( $value ) )
403 : do {
404 my $N = 0+ ( defined( $DD ) ? $DD : 72 );
405 require Data::Dumper;
406 local $Data::Dumper::Indent = 0;
407 local $Data::Dumper::Useqq = 1;
408 local $Data::Dumper::Terse = 1;
409 local $Data::Dumper::Sortkeys = 1;
410 local $Data::Dumper::Maxdepth = 2;
411 my $str;
412 eval {
413 $str = Data::Dumper::Dumper( $value );
414 $str = substr( $str, 0, $N - 12 ) . '...' . substr( $str, -1, 1 )
415 if length( $str ) >= $N;
416 1;
417 } or do { $str = 'which cannot be dumped' };
418 "Reference $str";
419 } #/ do
420} #/ sub _dd
421
422
# spent 14.1ms (6.38+7.75) within Type::Tiny::_loose_to_TypeTiny which was called 1691 times, avg 8µs/call: # 794 times (2.84ms+3.47ms) by Type::Tiny::strictly_equals at line 686, avg 8µs/call # 703 times (2.59ms+3.24ms) by Type::Tiny::is_strictly_subtype_of at line 693, avg 8µs/call # 191 times (940µs+1.02ms) by Type::Tiny::is_strictly_a_type_of at line 711, avg 10µs/call # 3 times (13µs+13µs) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:602] at line 589, avg 9µs/call
sub _loose_to_TypeTiny {
4231691450µs my $caller = caller( 1 ); # assumption
424 map +(
425 ref( $_ )
426 ? Types::TypeTiny::to_TypeTiny( $_ )
42716914.77ms33827.75ms : do { require Type::Utils; Type::Utils::dwim_type( $_, for => $caller ) }
# spent 7.75ms making 3382 calls to Types::TypeTiny::to_TypeTiny, avg 2µs/call
428 ), @_;
429}
430
431297566µs
# spent 281µs within Type::Tiny::name which was called 297 times, avg 946ns/call: # 129 times (134µs+0s) by Type::Tiny::is_anon at line 727, avg 1µs/call # 46 times (29µs+0s) by Type::Tiny::qualified_name at line 722, avg 630ns/call # 44 times (41µs+0s) by Type::Tiny::_build_display_name at line 487, avg 932ns/call # 40 times (60µs+0s) by Type::Library::_exporter_expand_sub at line 72 of Type/Library.pm, avg 2µs/call # 38 times (17µs+0s) by Type::Tiny::exportables at line 1187, avg 447ns/call
sub name { $_[0]{name} }
432367865µs45158µs
# spent 620µs (463+157) within Type::Tiny::display_name which was called 367 times, avg 2µs/call: # 367 times (463µs+157µs) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:100] at line 97, avg 2µs/call
sub display_name { $_[0]{display_name} ||= $_[0]->_build_display_name }
# spent 143µs making 44 calls to Type::Tiny::_build_display_name, avg 3µs/call # spent 15µs making 1 call to Type::Tiny::Union::_build_display_name
43311391.66ms
# spent 700µs within Type::Tiny::parent which was called 1139 times, avg 615ns/call: # 981 times (605µs+0s) by Type::Tiny::is_strictly_subtype_of at line 698, avg 617ns/call # 60 times (22µs+0s) by Type::Tiny::can_be_inlined at line 877, avg 367ns/call # 32 times (36µs+0s) by Type::Tiny::inline_check at line 899, avg 1µs/call # 20 times (9µs+0s) by Type::Tiny::inline_check at line 889, avg 450ns/call # 14 times (6µs+0s) by Type::Tiny::_build_compiled_check at line 532, avg 429ns/call # 12 times (10µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 629, avg 833ns/call # 6 times (4µs+0s) by Types::Standard::Dict::__inline_generator at line 103 of Types/Standard/Dict.pm, avg 667ns/call # 6 times (3µs+0s) by Type::Tiny::_lookup_my_method at line 1369, avg 500ns/call # 3 times (2µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 645, avg 667ns/call # 2 times (2µs+0s) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:750] at line 750 of Types/Standard.pm, avg 1µs/call # 2 times (0s+0s) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:945] at line 940 of Types/Standard.pm, avg 0s/call # once (1µs+0s) by Type::Tiny::type_default at line 573
sub parent { $_[0]{parent} }
43415392.10ms156µs
# spent 887µs (881+6) within Type::Tiny::constraint which was called 1539 times, avg 576ns/call: # 1539 times (881µs+6µs) by Type::Tiny::_is_null_constraint at line 495, avg 576ns/call
sub constraint { $_[0]{constraint} ||= $_[0]->_build_constraint }
# spent 6µs making 15 calls to Type::Tiny::_build_constraint, avg 400ns/call
435
436
# spent 22.7ms (384µs+22.3) within Type::Tiny::compiled_check which was called 169 times, avg 134µs/call: # 58 times (166µs+6.63ms) by Type::Coercion::_preserve_type_constraint at line 111 of Type/Coercion.pm, avg 117µs/call # 37 times (127µs+5.31ms) by Type::Tiny::exportables at line 1203, avg 147µs/call # 24 times (16µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 632, avg 667ns/call # 14 times (7µs+-7µs) by Type::Tiny::_build_compiled_check at line 532, avg 0s/call # 8 times (26µs+9.71ms) by Types::Standard::HashRef::__constraint_generator at line 32 of Types/Standard/HashRef.pm, avg 1.22ms/call # 8 times (6µs+0s) by Types::Standard::HashRef::__inline_generator at line 58 of Types/Standard/HashRef.pm, avg 750ns/call # 6 times (6µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 609, avg 1µs/call # 6 times (2µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 617, avg 333ns/call # 4 times (25µs+634µs) by Types::Standard::ArrayRef::__constraint_generator at line 36 of Types/Standard/ArrayRef.pm, avg 165µs/call # 4 times (3µs+0s) by Types::Standard::ArrayRef::__inline_generator at line 93 of Types/Standard/ArrayRef.pm, avg 750ns/call
sub compiled_check {
437169482µs6022.3ms $_[0]{compiled_type_constraint} ||= $_[0]->_build_compiled_check;
# spent 19.9ms making 56 calls to Type::Tiny::_build_compiled_check, avg 355µs/call # spent 2.40ms making 4 calls to Type::Tiny::Enum::_build_compiled_check, avg 600µs/call
438}
43958241µs5814.8ms
# spent 15.0ms (233µs+14.8) within Type::Tiny::coercion which was called 58 times, avg 259µs/call: # 37 times (158µs+2.49ms) by Type::Library::make_immutable at line 318 of Type/Library.pm, avg 72µs/call # 14 times (53µs+8.04ms) by Type::Tiny::parameterize at line 1082, avg 578µs/call # 3 times (11µs+-11µs) by Type::Tiny::has_coercion at line 471, avg 0s/call # 2 times (2µs+0s) by Type::Tiny::exportables at line 1220, avg 1µs/call # once (7µs+4.29ms) by JSON::Schema::Modern::BEGIN@31 at line 234 of Types/Standard.pm # once (2µs+0s) by Type::Library::make_immutable at line 319 of Type/Library.pm
sub coercion { $_[0]{coercion} ||= $_[0]->_build_coercion }
# spent 16.9ms making 54 calls to Type::Tiny::_build_coercion, avg 314µs/call, recursion: max depth 2, sum of overlapping time 2.12ms # spent 0s making 4 calls to Type::Coercion::__ANON__[Type/Coercion.pm:28], avg 0s/call
440sub message { $_[0]{message} }
441sub library { $_[0]{library} }
442525945µs
# spent 340µs within Type::Tiny::inlined which was called 525 times, avg 648ns/call: # 525 times (340µs+0s) by Type::Tiny::inline_check at line 895, avg 648ns/call
sub inlined { $_[0]{inlined} }
443103245µs
# spent 138µs within Type::Tiny::deprecated which was called 103 times, avg 1µs/call: # 63 times (74µs+0s) by Type::Tiny::new at line 257, avg 1µs/call # 40 times (64µs+0s) by Type::Library::_exporter_install_sub at line 133 of Type/Library.pm, avg 2µs/call
sub deprecated { $_[0]{deprecated} }
4443498µs
# spent 67µs within Type::Tiny::constraint_generator which was called 34 times, avg 2µs/call: # 34 times (67µs+0s) by Type::Tiny::parameterize at line 1044, avg 2µs/call
sub constraint_generator { $_[0]{constraint_generator} }
4452034µs
# spent 28µs within Type::Tiny::inline_generator which was called 20 times, avg 1µs/call: # 20 times (28µs+0s) by Type::Tiny::parameterize at line 1057, avg 1µs/call
sub inline_generator { $_[0]{inline_generator} }
4462270µs522µs
# spent 67µs (45+22) within Type::Tiny::name_generator which was called 22 times, avg 3µs/call: # 20 times (43µs+19µs) by Type::Tiny::parameterize at line 1050, avg 3µs/call # 2 times (2µs+3µs) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:737] at line 735 of Types/Standard.pm, avg 2µs/call
sub name_generator { $_[0]{name_generator} ||= $_[0]->_build_name_generator }
# spent 22µs making 5 calls to Type::Tiny::_build_name_generator, avg 4µs/call
44736µs
# spent 3µs within Type::Tiny::coercion_generator which was called 3 times, avg 1µs/call: # 3 times (3µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:1073] at line 1070, avg 1µs/call
sub coercion_generator { $_[0]{coercion_generator} }
44858µs
# spent 7µs within Type::Tiny::parameters which was called 5 times, avg 1µs/call: # 3 times (4µs+0s) by Types::Standard::Dict::__inline_generator at line 103 of Types/Standard/Dict.pm, avg 1µs/call # 2 times (3µs+0s) by Type::Tiny::type_parameter at line 1581, avg 2µs/call
sub parameters { $_[0]{parameters} }
449sub moose_type { $_[0]{moose_type} ||= $_[0]->_build_moose_type }
450sub mouse_type { $_[0]{mouse_type} ||= $_[0]->_build_mouse_type }
451sub deep_explanation { $_[0]{deep_explanation} }
4521834µs22µs
# spent 27µs (25+2) within Type::Tiny::my_methods which was called 18 times, avg 2µs/call: # 18 times (25µs+2µs) by Type::Tiny::_lookup_my_method at line 1365, avg 2µs/call
sub my_methods { $_[0]{my_methods} ||= $_[0]->_build_my_methods }
# spent 2µs making 2 calls to Type::Tiny::_build_my_methods, avg 1µs/call
453sub sorter { $_[0]{sorter} }
454
45536245.35ms
# spent 2.27ms within Type::Tiny::has_parent which was called 3624 times, avg 625ns/call: # 911 times (612µs+0s) by Type::Tiny::can_be_inlined at line 877, avg 672ns/call # 851 times (513µs+0s) by Type::Tiny::can_be_inlined at line 879, avg 603ns/call # 639 times (526µs+0s) by Type::Tiny::is_strictly_subtype_of at line 697, avg 823ns/call # 571 times (260µs+0s) by Type::Tiny::inline_check at line 889, avg 455ns/call # 551 times (298µs+0s) by Type::Tiny::inline_check at line 891, avg 541ns/call # 32 times (18µs+0s) by Type::Tiny::inline_check at line 897, avg 562ns/call # 30 times (15µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:276] at line 275, avg 500ns/call # 15 times (7µs+0s) by Type::Tiny::_build_compiled_check at line 532, avg 467ns/call # 12 times (8µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 635, avg 667ns/call # 6 times (4µs+0s) by Type::Tiny::_lookup_my_method at line 1369, avg 667ns/call # 3 times (2µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 644, avg 667ns/call # 3 times (2µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 628, avg 667ns/call
sub has_parent { exists $_[0]{parent} }
456sub has_library { exists $_[0]{library} }
4577961.19ms
# spent 543µs within Type::Tiny::has_inlined which was called 796 times, avg 682ns/call: # 796 times (543µs+0s) by Type::Tiny::can_be_inlined at line 881, avg 682ns/call
sub has_inlined { exists $_[0]{inlined} }
458106245µs
# spent 130µs within Type::Tiny::has_constraint_generator which was called 106 times, avg 1µs/call: # 106 times (130µs+0s) by Type::Tiny::is_parameterizable at line 998, avg 1µs/call
sub has_constraint_generator { exists $_[0]{constraint_generator} }
4592045µs
# spent 27µs within Type::Tiny::has_inline_generator which was called 20 times, avg 1µs/call: # 20 times (27µs+0s) by Type::Tiny::parameterize at line 1057, avg 1µs/call
sub has_inline_generator { exists $_[0]{inline_generator} }
46054163µs
# spent 47µs within Type::Tiny::has_coercion_generator which was called 54 times, avg 870ns/call: # 34 times (26µs+0s) by Type::Tiny::parameterize at line 1082, avg 765ns/call # 20 times (21µs+0s) by Type::Tiny::parameterize at line 1066, avg 1µs/call
sub has_coercion_generator { exists $_[0]{coercion_generator} }
46135µs
# spent 3µs within Type::Tiny::has_parameters which was called 3 times, avg 1µs/call: # 3 times (3µs+0s) by Type::Tiny::is_parameterized at line 1002, avg 1µs/call
sub has_parameters { exists $_[0]{parameters} }
462sub has_message { defined $_[0]{message} }
463sub has_deep_explanation { exists $_[0]{deep_explanation} }
464sub has_sorter { exists $_[0]{sorter} }
465
466sub _default_message {
467 $_[0]{_default_message} ||= $_[0]->_build_default_message;
468}
469
470
# spent 2.12ms (329µs+1.80) within Type::Tiny::has_coercion which was called 85 times, avg 25µs/call: # 38 times (58µs+3µs) by Type::Tiny::exportables at line 1220, avg 2µs/call # 37 times (217µs+71µs) by Type::Library::make_immutable at line 319 of Type/Library.pm, avg 8µs/call # 2 times (14µs+1.75ms) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:732] at line 729 of Types/Standard.pm, avg 882µs/call # 2 times (8µs+4µs) by Type::Tiny::Union::new at line 86 of Type/Tiny/Union.pm, avg 6µs/call # 2 times (6µs+-6µs) by Types::Standard::Dict::__coercion_generator at line 257 of Types/Standard/Dict.pm, avg 0s/call # 2 times (9µs+-9µs) by Types::Standard::Dict::__coercion_generator at line 258 of Types/Standard/Dict.pm, avg 0s/call # 2 times (17µs+-17µs) by Types::Standard::HashRef::__coercion_generator at line 103 of Types/Standard/HashRef.pm, avg 0s/call
sub has_coercion {
4718537µs30s $_[0]->coercion if $_[0]{_build_coercion}; # trigger auto build thing
# spent 2.13ms making 3 calls to Type::Tiny::coercion, avg 711µs/call, recursion: max depth 2, sum of overlapping time 2.13ms
47285255µs9694µs $_[0]{coercion} and !!@{ $_[0]{coercion}->type_coercion_map };
# spent 47µs making 48 calls to Type::Coercion::__ANON__[Type/Coercion.pm:28], avg 979ns/call # spent 47µs making 48 calls to Type::Coercion::type_coercion_map, avg 979ns/call
473}
474
475sub _assert_coercion {
476 my $self = shift;
477 return $self->coercion if $self->{_build_coercion}; # trigger auto build thing
478 _croak "No coercion for this type constraint"
479 unless $self->has_coercion
480 && @{ $self->coercion->type_coercion_map };
481 $self->coercion;
482}
483
48410smy $null_constraint = sub { !!1 };
485
486
# spent 143µs (102+41) within Type::Tiny::_build_display_name which was called 44 times, avg 3µs/call: # 44 times (102µs+41µs) by Type::Tiny::display_name at line 432, avg 3µs/call
sub _build_display_name {
48744105µs4441µs shift->name;
# spent 41µs making 44 calls to Type::Tiny::name, avg 932ns/call
488}
489
490
# spent 6µs within Type::Tiny::_build_constraint which was called 15 times, avg 400ns/call: # 15 times (6µs+0s) by Type::Tiny::constraint at line 434, avg 400ns/call
sub _build_constraint {
4911520µs return $null_constraint;
492}
493
494
# spent 3.88ms (3.00+887µs) within Type::Tiny::_is_null_constraint which was called 1539 times, avg 3µs/call: # 852 times (1.67ms+552µs) by Type::Tiny::can_be_inlined at line 877, avg 3µs/call # 543 times (997µs+216µs) by Type::Tiny::inline_check at line 889, avg 2µs/call # 59 times (131µs+33µs) by Type::Tiny::can_be_inlined at line 879, avg 3µs/call # 50 times (140µs+67µs) by Type::Tiny::_build_compiled_check at line 532, avg 4µs/call # 28 times (42µs+16µs) by Type::Tiny::inline_check at line 891, avg 2µs/call # 6 times (12µs+3µs) by Type::Tiny::find_constraining_type at line 558, avg 2µs/call # once (3µs+0s) by Type::Tiny::type_default at line 573
sub _is_null_constraint {
49515393.30ms1539887µs shift->constraint == $null_constraint;
# spent 887µs making 1539 calls to Type::Tiny::constraint, avg 576ns/call
496}
497
498
# spent 14.8ms (4.54+10.3) within Type::Tiny::_build_coercion which was called 54 times, avg 274µs/call: # 54 times (4.54ms+10.3ms) by Type::Tiny::coercion at line 439, avg 274µs/call
sub _build_coercion {
49954581µs require Type::Coercion;
5005414µs my $self = shift;
5015437µs my %opts = ( type_constraint => $self );
50254197µs91539µs $opts{display_name} = "to_$self" unless $self->is_anon;
# spent 278µs making 37 calls to Type::Tiny::__ANON__[Type/Tiny.pm:100], avg 8µs/call # spent 261µs making 54 calls to Type::Tiny::is_anon, avg 5µs/call
50354106µs549.03ms my $coercion = "Type::Coercion"->new( %opts );
# spent 9.03ms making 54 calls to Type::Coercion::new, avg 167µs/call
5045435µs52.59ms $self->{_build_coercion}->( $coercion ) if ref $self->{_build_coercion};
# spent 1.78ms making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:732], avg 890µs/call # spent 812µs making 3 calls to Type::Tiny::__ANON__[Type/Tiny.pm:1073], avg 271µs/call
50554107µs $coercion;
506}
507
508sub _build_default_message {
509 my $self = shift;
510 $self->{is_using_default_message} = 1;
511 return sub { sprintf '%s did not pass type constraint', _dd( $_[0] ) }
512 if "$self" eq "__ANON__";
513 my $name = "$self";
514 return sub {
515 sprintf '%s did not pass type constraint "%s"', _dd( $_[0] ), $name;
516 };
517} #/ sub _build_default_message
518
519
# spent 22µs within Type::Tiny::_build_name_generator which was called 5 times, avg 4µs/call: # 5 times (22µs+0s) by Type::Tiny::name_generator at line 446, avg 4µs/call
sub _build_name_generator {
52051µs my $self = shift;
521
# spent 852µs (274+578) within Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:524] which was called 16 times, avg 53µs/call: # 14 times (249µs+536µs) by Type::Tiny::parameterize at line 1050, avg 56µs/call # 2 times (25µs+42µs) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:737] at line 735 of Types/Standard.pm, avg 34µs/call
return sub {
52216185µs66810µs defined && s/[\x00-\x1F]//smg for ( my ( $s, @a ) = @_ );
# spent 456µs making 33 calls to Type::Tiny::CORE:subst, avg 14µs/call # spent 354µs making 33 calls to Type::Tiny::__ANON__[Type/Tiny.pm:100], avg 11µs/call
52316160µs33122µs sprintf( '%s[%s]', $s, join q[,], map !defined() ? 'undef' : !ref() && /\W/ ? B::perlstring($_) : $_, @a );
# spent 122µs making 33 calls to Type::Tiny::__ANON__[Type/Tiny.pm:100], avg 4µs/call
524525µs };
525}
526
527
# spent 21.4ms (1.05+20.4) within Type::Tiny::_build_compiled_check which was called 62 times, avg 346µs/call: # 56 times (920µs+19.0ms) by Type::Tiny::compiled_check at line 437, avg 355µs/call # 4 times (91µs+961µs) by Type::Tiny::Enum::_build_compiled_check at line 198 of Type/Tiny/Enum.pm, avg 263µs/call # 2 times (38µs+452µs) by Type::Tiny::check at line 758, avg 245µs/call
sub _build_compiled_check {
5286227µs my $self = shift;
529
5306228µs local our $AvoidCallbacks = 0;
531
53262186µs105231µs if ( $self->_is_null_constraint and $self->has_parent ) {
# spent 207µs making 50 calls to Type::Tiny::_is_null_constraint, avg 4µs/call # spent 7µs making 15 calls to Type::Tiny::has_parent, avg 467ns/call # spent 6µs making 4 calls to Type::Tiny::Enum::_is_null_constraint, avg 2µs/call # spent 6µs making 14 calls to Type::Tiny::parent, avg 429ns/call # spent 4µs making 7 calls to Type::Tiny::Class::_is_null_constraint, avg 571ns/call # spent 1µs making 1 call to Type::Tiny::Duck::_is_null_constraint # spent 7µs making 14 calls to Type::Tiny::compiled_check, avg 500ns/call, recursion: max depth 1, sum of overlapping time 7µs
533 return $self->parent->compiled_check;
534 }
535
5364830µs require Eval::TypeTiny;
53748568µs19220.1ms return Eval::TypeTiny::eval_closure(
# spent 10.3ms making 44 calls to Type::Tiny::inline_check, avg 234µs/call # spent 8.59ms making 48 calls to Eval::TypeTiny::eval_closure, avg 179µs/call # spent 594µs making 44 calls to Type::Tiny::can_be_inlined, avg 14µs/call # spent 577µs making 48 calls to Type::Tiny::__ANON__[Type/Tiny.pm:100], avg 12µs/call # spent 69µs making 4 calls to Type::Tiny::Enum::inline_check, avg 17µs/call # spent 5µs making 4 calls to Type::Tiny::Enum::can_be_inlined, avg 1µs/call
538 source => sprintf( 'sub ($) { %s }', $self->inline_check( '$_[0]' ) ),
539 description => sprintf( "compiled check '%s'", $self ),
540 ) if $self->can_be_inlined;
541
542 my @constraints;
543 push @constraints, $self->parent->compiled_check if $self->has_parent;
544 push @constraints, $self->constraint if !$self->_is_null_constraint;
545 return $null_constraint unless @constraints;
546
547 return sub ($) {
548 local $_ = $_[0];
549 for my $c ( @constraints ) {
550 return unless $c->( @_ );
551 }
552 return !!1;
553 };
554} #/ sub _build_compiled_check
555
556
# spent 27µs (12+15) within Type::Tiny::find_constraining_type which was called 6 times, avg 4µs/call: # 3 times (8µs+9µs) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 613, avg 6µs/call # 3 times (4µs+6µs) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 614, avg 3µs/call
sub find_constraining_type {
55761µs my $self = shift;
55866µs615µs if ( $self->_is_null_constraint and $self->has_parent ) {
# spent 15µs making 6 calls to Type::Tiny::_is_null_constraint, avg 2µs/call
559 return $self->parent->find_constraining_type;
560 }
56168µs $self;
562}
563
564
# spent 77µs (72+5) within Type::Tiny::type_default which was called 17 times, avg 5µs/call: # 8 times (25µs+0s) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:532] at line 530 of Types/Standard.pm, avg 3µs/call # 4 times (13µs+0s) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:510] at line 508 of Types/Standard.pm, avg 3µs/call # 2 times (11µs+0s) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:737] at line 735 of Types/Standard.pm, avg 6µs/call # once (17µs+8µs) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:661] at line 660 of Types/Standard.pm # once (3µs+0s) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:704] at line 703 of Types/Standard.pm # once (3µs+-3µs) by Type::Tiny::type_default at line 573
sub type_default {
565176µs my ( $self, @args ) = @_;
5661711µs if ( exists $self->{type_default} ) {
567161µs if ( @args ) {
568 my $td = $self->{type_default};
569 return sub { local $_ = \@args; &$td; };
570 }
5711673µs return $self->{type_default};
572 }
573116µs45µs if ( my $parent = $self->parent ) {
# spent 3µs making 1 call to Type::Tiny::_is_null_constraint # spent 1µs making 1 call to Type::Tiny::__ANON__[Type/Tiny.pm:101] # spent 1µs making 1 call to Type::Tiny::parent # spent 3µs making 1 call to Type::Tiny::type_default, recursion: max depth 1, sum of overlapping time 3µs
574 return $parent->type_default( @args ) if $self->_is_null_constraint;
575 }
576 return undef;
577}
578
579our @CMP;
580
581sub CMP_SUPERTYPE () { -1 }
582sub CMP_EQUAL () { 0 }
583sub CMP_EQUIVALENT () { '0E0' }
584sub CMP_SUBTYPE () { 1 }
585sub CMP_UNKNOWN () { ''; }
586
587# avoid getting mixed up with cmp operator at compile time
588
# spent 5.39ms (57µs+5.33) within Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:602] which was called 3 times, avg 1.80ms/call: # 3 times (57µs+5.33ms) by Type::Tiny::is_a_type_of at line 680, avg 1.80ms/call
*cmp = sub {
58938µs326µs my ( $A, $B ) = _loose_to_TypeTiny( $_[0], $_[1] );
# spent 26µs making 3 calls to Type::Tiny::_loose_to_TypeTiny, avg 9µs/call
590311µs610µs return unless blessed( $A ) && $A->isa( "Type::Tiny" );
# spent 8µs making 3 calls to Type::Tiny::isa, avg 3µs/call # spent 2µs making 3 calls to Scalar::Util::blessed, avg 667ns/call
59138µs67µs return unless blessed( $B ) && $B->isa( "Type::Tiny" );
# spent 5µs making 3 calls to Type::Tiny::isa, avg 2µs/call # spent 2µs making 3 calls to Scalar::Util::blessed, avg 667ns/call
59234µs for my $comparator ( @CMP ) {
59336µs35.29ms my $result = $comparator->( $A, $B );
# spent 5.29ms making 3 calls to Type::Tiny::__ANON__[Type/Tiny.pm:659], avg 1.76ms/call
59432µs next if $result eq CMP_UNKNOWN;
59531µs if ( $result eq CMP_EQUIVALENT ) {
596 my $prefer = @_ == 3 ? $_[2] : CMP_EQUAL;
597 return $prefer;
598 }
59938µs return $result;
600 }
601 return CMP_UNKNOWN;
60211µs};
603
604
# spent 5.29ms (435µs+4.85) within Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] which was called 3 times, avg 1.76ms/call: # 3 times (435µs+4.85ms) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:602] at line 593, avg 1.76ms/call
push @CMP, sub {
60532µs my ( $A, $B ) = @_;
606316µs62µs return CMP_EQUAL
# spent 2µs making 6 calls to Scalar::Util::refaddr, avg 333ns/call
607 if Scalar::Util::refaddr( $A ) == Scalar::Util::refaddr( $B );
608
609314µs129µs return CMP_EQUIVALENT
# spent 6µs making 6 calls to Type::Tiny::compiled_check, avg 1µs/call # spent 3µs making 6 calls to Scalar::Util::refaddr, avg 500ns/call
610 if Scalar::Util::refaddr( $A->compiled_check ) ==
611 Scalar::Util::refaddr( $B->compiled_check );
612
61336µs317µs my $A_stem = $A->find_constraining_type;
# spent 17µs making 3 calls to Type::Tiny::find_constraining_type, avg 6µs/call
61432µs310µs my $B_stem = $B->find_constraining_type;
# spent 10µs making 3 calls to Type::Tiny::find_constraining_type, avg 3µs/call
615311µs62µs return CMP_EQUIVALENT
# spent 2µs making 6 calls to Scalar::Util::refaddr, avg 333ns/call
616 if Scalar::Util::refaddr( $A_stem ) == Scalar::Util::refaddr( $B_stem );
617321µs126µs return CMP_EQUIVALENT
# spent 4µs making 6 calls to Scalar::Util::refaddr, avg 667ns/call # spent 2µs making 6 calls to Type::Tiny::compiled_check, avg 333ns/call
618 if Scalar::Util::refaddr( $A_stem->compiled_check ) ==
619 Scalar::Util::refaddr( $B_stem->compiled_check );
620
621314µs12988µs if ( $A_stem->can_be_inlined and $B_stem->can_be_inlined ) {
# spent 927µs making 6 calls to Type::Tiny::inline_check, avg 154µs/call # spent 61µs making 6 calls to Type::Tiny::can_be_inlined, avg 10µs/call
622 return CMP_EQUIVALENT
623 if $A_stem->inline_check( '$WOLFIE' ) eq $B_stem->inline_check( '$WOLFIE' );
624 }
625
626 A_IS_SUBTYPE: {
62763µs my $A_prime = $A_stem;
62835µs32µs while ( $A_prime->has_parent ) {
# spent 2µs making 3 calls to Type::Tiny::has_parent, avg 667ns/call
6291211µs1210µs $A_prime = $A_prime->parent;
# spent 10µs making 12 calls to Type::Tiny::parent, avg 833ns/call
6301244µs2410µs return CMP_SUBTYPE
# spent 10µs making 24 calls to Scalar::Util::refaddr, avg 417ns/call
631 if Scalar::Util::refaddr( $A_prime ) == Scalar::Util::refaddr( $B_stem );
6321246µs4823µs return CMP_SUBTYPE
# spent 16µs making 24 calls to Type::Tiny::compiled_check, avg 667ns/call # spent 7µs making 24 calls to Scalar::Util::refaddr, avg 292ns/call
633 if Scalar::Util::refaddr( $A_prime->compiled_check ) ==
634 Scalar::Util::refaddr( $B_stem->compiled_check );
6351254µs603.77ms if ( $A_prime->can_be_inlined and $B_stem->can_be_inlined ) {
# spent 3.50ms making 24 calls to Type::Tiny::inline_check, avg 146µs/call # spent 259µs making 24 calls to Type::Tiny::can_be_inlined, avg 11µs/call # spent 8µs making 12 calls to Type::Tiny::has_parent, avg 667ns/call
636 return CMP_SUBTYPE
637 if $A_prime->inline_check( '$WOLFIE' ) eq $B_stem->inline_check( '$WOLFIE' );
638 }
639 } #/ while ( $A_prime->has_parent)
640 } #/ A_IS_SUBTYPE:
641
642 B_IS_SUBTYPE: {
64363µs my $B_prime = $B_stem;
64432µs32µs while ( $B_prime->has_parent ) {
# spent 2µs making 3 calls to Type::Tiny::has_parent, avg 667ns/call
64534µs32µs $B_prime = $B_prime->parent;
# spent 2µs making 3 calls to Type::Tiny::parent, avg 667ns/call
646319µs61µs return CMP_SUPERTYPE
# spent 1µs making 6 calls to Scalar::Util::refaddr, avg 167ns/call
647 if Scalar::Util::refaddr( $B_prime ) == Scalar::Util::refaddr( $A_stem );
648 return CMP_SUPERTYPE
649 if Scalar::Util::refaddr( $B_prime->compiled_check ) ==
650 Scalar::Util::refaddr( $A_stem->compiled_check );
651 if ( $A_stem->can_be_inlined and $B_prime->can_be_inlined ) {
652 return CMP_SUPERTYPE
653 if $B_prime->inline_check( '$WOLFIE' ) eq $A_stem->inline_check( '$WOLFIE' );
654 }
655 } #/ while ( $B_prime->has_parent)
656 } #/ B_IS_SUBTYPE:
657
658 return CMP_UNKNOWN;
65912µs};
660
661sub equals {
662 my $result = Type::Tiny::cmp( $_[0], $_[1] );
663 return unless defined $result;
664 $result eq CMP_EQUAL;
665}
666
667sub is_subtype_of {
668 my $result = Type::Tiny::cmp( $_[0], $_[1], CMP_SUBTYPE );
669 return unless defined $result;
670 $result eq CMP_SUBTYPE;
671}
672
673sub is_supertype_of {
674 my $result = Type::Tiny::cmp( $_[0], $_[1], CMP_SUBTYPE );
675 return unless defined $result;
676 $result eq CMP_SUPERTYPE;
677}
678
679
# spent 5.40ms (14µs+5.39) within Type::Tiny::is_a_type_of which was called 3 times, avg 1.80ms/call: # 3 times (14µs+5.39ms) by Types::Standard::Dict::__inline_generator at line 100 of Types/Standard/Dict.pm, avg 1.80ms/call
sub is_a_type_of {
68039µs35.39ms my $result = Type::Tiny::cmp( $_[0], $_[1] );
# spent 5.39ms making 3 calls to Type::Tiny::__ANON__[Type/Tiny.pm:602], avg 1.80ms/call
68131µs return unless defined $result;
68238µs $result eq CMP_SUBTYPE or $result eq CMP_EQUAL or $result eq CMP_EQUIVALENT;
683}
684
685
# spent 17.9ms (7.06+10.9) within Type::Tiny::strictly_equals which was called 794 times, avg 23µs/call: # 597 times (5.28ms+8.38ms) by Type::Tiny::is_strictly_subtype_of at line 698, avg 23µs/call # 191 times (1.72ms+2.42ms) by Type::Tiny::is_strictly_a_type_of at line 715, avg 22µs/call # 6 times (47µs+90µs) by Types::Standard::Dict::__inline_generator at line 103 of Types/Standard/Dict.pm, avg 23µs/call
sub strictly_equals {
686794643µs7946.31ms my ( $self, $other ) = _loose_to_TypeTiny( @_ );
# spent 6.31ms making 794 calls to Type::Tiny::_loose_to_TypeTiny, avg 8µs/call
6877942.15ms15882.42ms return unless blessed( $self ) && $self->isa( "Type::Tiny" );
# spent 2.00ms making 794 calls to Type::Tiny::isa, avg 3µs/call # spent 419µs making 794 calls to Scalar::Util::blessed, avg 528ns/call
6887941.87ms15882.16ms return unless blessed( $other ) && $other->isa( "Type::Tiny" );
# spent 1.82ms making 794 calls to Type::Tiny::isa, avg 2µs/call # spent 344µs making 794 calls to Scalar::Util::blessed, avg 433ns/call
6897941.78ms $self->{uniq} == $other->{uniq};
690}
691
692
# spent 35.5ms (10.2+25.3) within Type::Tiny::is_strictly_subtype_of which was called 703 times, avg 51µs/call: # 512 times (7.54ms+-7.54ms) by Type::Tiny::is_strictly_subtype_of at line 698, avg 0s/call # 191 times (2.64ms+32.9ms) by Type::Tiny::is_strictly_a_type_of at line 715, avg 186µs/call
sub is_strictly_subtype_of {
693703528µs7035.83ms my ( $self, $other ) = _loose_to_TypeTiny( @_ );
# spent 5.83ms making 703 calls to Type::Tiny::_loose_to_TypeTiny, avg 8µs/call
6947031.88ms14062.03ms return unless blessed( $self ) && $self->isa( "Type::Tiny" );
# spent 1.67ms making 703 calls to Type::Tiny::isa, avg 2µs/call # spent 360µs making 703 calls to Scalar::Util::blessed, avg 512ns/call
6957031.70ms14061.88ms return unless blessed( $other ) && $other->isa( "Type::Tiny" );
# spent 1.54ms making 703 calls to Type::Tiny::isa, avg 2µs/call # spent 335µs making 703 calls to Scalar::Util::blessed, avg 477ns/call
696
697703705µs703598µs return unless $self->has_parent;
# spent 526µs making 639 calls to Type::Tiny::has_parent, avg 823ns/call # spent 47µs making 42 calls to Type::Tiny::ConstrainedObject::has_parent, avg 1µs/call # spent 25µs making 22 calls to Type::Tiny::Enum::has_parent, avg 1µs/call
6985972.47ms221815.0ms $self->parent->strictly_equals( $other )
# spent 13.7ms making 597 calls to Type::Tiny::strictly_equals, avg 23µs/call # spent 605µs making 981 calls to Type::Tiny::parent, avg 617ns/call # spent 583µs making 84 calls to Type::Tiny::Class::parent, avg 7µs/call # spent 154µs making 44 calls to Type::Tiny::Enum::parent, avg 4µs/call # spent 69.2ms making 512 calls to Type::Tiny::is_strictly_subtype_of, avg 135µs/call, recursion: max depth 7, sum of overlapping time 69.2ms
699 or $self->parent->is_strictly_subtype_of( $other );
700}
701
702sub is_strictly_supertype_of {
703 my ( $self, $other ) = _loose_to_TypeTiny( @_ );
704 return unless blessed( $self ) && $self->isa( "Type::Tiny" );
705 return unless blessed( $other ) && $other->isa( "Type::Tiny" );
706
707 $other->is_strictly_subtype_of( $self );
708}
709
710
# spent 45.3ms (2.52+42.8) within Type::Tiny::is_strictly_a_type_of which was called 191 times, avg 237µs/call: # 134 times (1.79ms+30.4ms) by Types::Standard::Dict::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard/Dict.pm:161] at line 156 of Types/Standard/Dict.pm, avg 240µs/call # 32 times (359µs+6.53ms) by Types::Standard::Dict::__constraint_generator at line 64 of Types/Standard/Dict.pm, avg 215µs/call # 4 times (38µs+1.29ms) by Types::Standard::Tuple::__constraint_generator at line 59 of Types/Standard/Tuple.pm, avg 332µs/call # 4 times (60µs+1.10ms) by Types::Standard::Tuple::__inline_generator at line 133 of Types/Standard/Tuple.pm, avg 291µs/call # 4 times (48µs+834µs) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:826] at line 815 of Types/Standard.pm, avg 220µs/call # 4 times (120µs+591µs) by Types::Standard::Dict::__constraint_generator at line 44 of Types/Standard/Dict.pm, avg 178µs/call # 4 times (57µs+642µs) by Types::Standard::Dict::__inline_generator at line 90 of Types/Standard/Dict.pm, avg 175µs/call # 2 times (23µs+670µs) by Types::Standard::Tuple::__constraint_generator at line 28 of Types/Standard/Tuple.pm, avg 346µs/call # 2 times (14µs+528µs) by Types::Standard::Tuple::__inline_generator at line 95 of Types/Standard/Tuple.pm, avg 271µs/call # once (9µs+175µs) by Types::Standard::Dict::__coercion_generator at line 244 of Types/Standard/Dict.pm
sub is_strictly_a_type_of {
711191184µs1911.96ms my ( $self, $other ) = _loose_to_TypeTiny( @_ );
# spent 1.96ms making 191 calls to Type::Tiny::_loose_to_TypeTiny, avg 10µs/call
712191669µs382643µs return unless blessed( $self ) && $self->isa( "Type::Tiny" );
# spent 542µs making 191 calls to Type::Tiny::isa, avg 3µs/call # spent 101µs making 191 calls to Scalar::Util::blessed, avg 529ns/call
713191528µs382485µs return unless blessed( $other ) && $other->isa( "Type::Tiny" );
# spent 407µs making 191 calls to Type::Tiny::isa, avg 2µs/call # spent 78µs making 191 calls to Scalar::Util::blessed, avg 408ns/call
714
715191621µs38239.7ms $self->strictly_equals( $other ) or $self->is_strictly_subtype_of( $other );
# spent 35.5ms making 191 calls to Type::Tiny::is_strictly_subtype_of, avg 186µs/call # spent 4.14ms making 191 calls to Type::Tiny::strictly_equals, avg 22µs/call
716}
717
718
# spent 193µs (164+29) within Type::Tiny::qualified_name which was called 46 times, avg 4µs/call: # 37 times (131µs+15µs) by Eval::TypeTiny::type_to_coderef at line 169 of Eval/TypeTiny.pm, avg 4µs/call # 7 times (31µs+12µs) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:190] at line 186 of Types/Standard.pm, avg 6µs/call # 2 times (2µs+2µs) by Type::Tiny::new at line 364, avg 2µs/call
sub qualified_name {
7194611µs my $self = shift;
720 ( exists $self->{library} and $self->name ne "__ANON__" )
721 ? "$self->{library}::$self->{name}"
72246167µs4629µs : $self->{name};
# spent 29µs making 46 calls to Type::Tiny::name, avg 630ns/call
723}
724
725
# spent 487µs (353+134) within Type::Tiny::is_anon which was called 129 times, avg 4µs/call: # 54 times (177µs+84µs) by Type::Tiny::_build_coercion at line 502, avg 5µs/call # 38 times (62µs+18µs) by Type::Tiny::exportables at line 1187, avg 2µs/call # 37 times (114µs+32µs) by Type::Library::add_type at line 228 of Type/Library.pm, avg 4µs/call
sub is_anon {
72612938µs my $self = shift;
727129365µs129134µs $self->name eq "__ANON__";
# spent 134µs making 129 calls to Type::Tiny::name, avg 1µs/call
728}
729
730sub parents {
731 my $self = shift;
732 return unless $self->has_parent;
733 return ( $self->parent, $self->parent->parents );
734}
735
736
# spent 32µs (21+11) within Type::Tiny::find_parent which was called 2 times, avg 16µs/call: # 2 times (21µs+11µs) by Types::Standard::Slurpy::my_unslurpy at line 751 of Types/Standard.pm, avg 16µs/call
sub find_parent {
73720s my $self = shift;
73820s my ( $test ) = @_;
739
74024µs local ( $_, $. );
74120s my $type = $self;
74222µs my $count = 0;
74324µs23µs while ( $type ) {
# spent 3µs making 2 calls to Type::Tiny::__ANON__[Type/Tiny.pm:101], avg 2µs/call
744213µs28µs if ( $test->( $_ = $type, $. = $count ) ) {
# spent 8µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:750], avg 4µs/call
745 return wantarray ? ( $type, $count ) : $type;
746 }
747 else {
748 $type = $type->parent;
749 $count++;
750 }
751 }
752
753 return;
754} #/ sub find_parent
755
756
# spent 3.65ms (957µs+2.69) within Type::Tiny::check which was called 381 times, avg 10µs/call: # 343 times (875µs+2.44ms) by Types::TypeTiny::is_TypeTiny at line 2 of (eval 40)[Types/TypeTiny.pm:58], avg 10µs/call # 38 times (82µs+252µs) by Types::TypeTiny::is_StringLike at line 2 of (eval 39)[Types/TypeTiny.pm:58], avg 9µs/call
sub check {
75738160µs my $self = shift;
7583811.01ms3832.69ms ( $self->{compiled_type_constraint} ||= $self->_build_compiled_check )->( @_ );
# spent 2.16ms making 343 calls to Eval::TypeTiny::Sandbox::__ANON__[(eval 57)[Eval/TypeTiny.pm:8]:3], avg 6µs/call # spent 490µs making 2 calls to Type::Tiny::_build_compiled_check, avg 245µs/call # spent 43µs making 38 calls to Eval::TypeTiny::Sandbox::__ANON__[(eval 58)[Eval/TypeTiny.pm:8]:3], avg 1µs/call
759}
760
761sub _strict_check {
762 my $self = shift;
763 local $_ = $_[0];
764
765 my @constraints =
766 reverse
767 map { $_->constraint }
768 grep { not $_->_is_null_constraint } ( $self, $self->parents );
769
770 for my $c ( @constraints ) {
771 return unless $c->( @_ );
772 }
773
774 return !!1;
775} #/ sub _strict_check
776
777sub get_message {
778 my $self = shift;
779 local $_ = $_[0];
780 $self->has_message
781 ? $self->message->( @_ )
782 : $self->_default_message->( @_ );
783}
784
785sub validate {
786 my $self = shift;
787
788 return undef
789 if ( $self->{compiled_type_constraint} ||= $self->_build_compiled_check )
790 ->( @_ );
791
792 local $_ = $_[0];
793 return $self->get_message( @_ );
794} #/ sub validate
795
796sub validate_explain {
797 my $self = shift;
798 my ( $value, $varname ) = @_;
799 $varname = '$_' unless defined $varname;
800
801 return undef if $self->check( $value );
802
803 if ( $self->has_parent ) {
804 my $parent = $self->parent->validate_explain( $value, $varname );
805 return [
806 sprintf( '"%s" is a subtype of "%s"', $self, $self->parent ),
807 @$parent
808 ]
809 if $parent;
810 }
811
812 my $message = sprintf(
813 '%s%s',
814 $self->get_message( $value ),
815 $varname eq q{$_} ? '' : sprintf( ' (in %s)', $varname ),
816 );
817
818 if ( $self->is_parameterized and $self->parent->has_deep_explanation ) {
819 my $deep = $self->parent->deep_explanation->( $self, $value, $varname );
820 return [ $message, @$deep ] if $deep;
821 }
822
823 local $SIG{__WARN__} = sub {};
824 return [
825 $message,
826 sprintf( '"%s" is defined as: %s', $self, $self->_perlcode )
827 ];
828} #/ sub validate_explain
829
83010smy $b;
831
832sub _perlcode {
833 my $self = shift;
834
835 local our $AvoidCallbacks = 1;
836 return $self->inline_check( '$_' )
837 if $self->can_be_inlined;
838
839 $b ||= do {
840 local $@;
841 require B::Deparse;
842 my $tmp = "B::Deparse"->new;
843 $tmp->ambient_pragmas( strict => "all", warnings => "all" )
844 if $tmp->can( 'ambient_pragmas' );
845 $tmp;
846 };
847
848 my $code = $b->coderef2text( $self->constraint );
849 $code =~ s/\s+/ /g;
850 return "sub $code";
851} #/ sub _perlcode
852
853sub assert_valid {
854 my $self = shift;
855
856 return !!1
857 if ( $self->{compiled_type_constraint} ||= $self->_build_compiled_check )
858 ->( @_ );
859
860 local $_ = $_[0];
861 $self->_failed_check( "$self", $_ );
862} #/ sub assert_valid
863
864sub assert_return {
865 my $self = shift;
866
867 return $_[0]
868 if ( $self->{compiled_type_constraint} ||= $self->_build_compiled_check )
869 ->( @_ );
870
871 local $_ = $_[0];
872 $self->_failed_check( "$self", $_ );
873} #/ sub assert_return
874
875
# spent 11.3ms (7.04+4.30) within Type::Tiny::can_be_inlined which was called 1016 times, avg 11µs/call: # 633 times (4.11ms+2.68ms) by Type::Tiny::inline_check at line 886, avg 11µs/call # 121 times (981µs+702µs) by Type::Tiny::inline_assert at line 915, avg 14µs/call # 60 times (265µs+-265µs) by Type::Tiny::can_be_inlined at line 877, avg 0s/call # 44 times (369µs+225µs) by Type::Tiny::_build_compiled_check at line 537, avg 14µs/call # 37 times (429µs+304µs) by Type::Tiny::_overload_coderef at line 215, avg 20µs/call # 30 times (144µs+104µs) by Types::Standard::Dict::__inline_generator at line 117 of Types/Standard/Dict.pm, avg 8µs/call # 24 times (141µs+118µs) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 635, avg 11µs/call # 23 times (226µs+143µs) by Type::Tiny::_overload_coderef at line 203, avg 16µs/call # 8 times (65µs+94µs) by Types::Standard::HashRef::__inline_generator at line 65 of Types/Standard/HashRef.pm, avg 20µs/call # 6 times (36µs+25µs) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 621, avg 10µs/call # 6 times (29µs+25µs) by Type::Tiny::Union::can_be_inlined at line 117 of Type/Tiny/Union.pm, avg 9µs/call # 5 times (43µs+30µs) by Type::Tiny::new at line 277, avg 15µs/call # 4 times (29µs+14µs) by Types::Standard::ArrayRef::__inline_generator at line 100 of Types/Standard/ArrayRef.pm, avg 11µs/call # 3 times (80µs+25µs) by Types::Standard::Dict::__inline_generator at line 96 of Types/Standard/Dict.pm, avg 35µs/call # 2 times (21µs+13µs) by Type::Coercion::can_be_inlined at line 318 of Type/Coercion.pm, avg 17µs/call # 2 times (19µs+11µs) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:737] at line 735 of Types/Standard.pm, avg 15µs/call # 2 times (18µs+10µs) by Types::Standard::Tuple::__inline_generator at line 103 of Types/Standard/Tuple.pm, avg 14µs/call # 2 times (10µs+15µs) by Types::Standard::Map::__inline_generator at line 61 of Types/Standard/Map.pm, avg 12µs/call # 2 times (13µs+10µs) by Type::Coercion::can_be_inlined at line 324 of Type/Coercion.pm, avg 12µs/call # once (10µs+14µs) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:686] at line 681 of Types/Standard.pm # once (4µs+4µs) by Types::Standard::Dict::__coercion_generator at line 256 of Types/Standard/Dict.pm
sub can_be_inlined {
8761016141µs my $self = shift;
87710161.57ms20932.99ms return $self->parent->can_be_inlined
# spent 2.22ms making 852 calls to Type::Tiny::_is_null_constraint, avg 3µs/call # spent 612µs making 911 calls to Type::Tiny::has_parent, avg 672ns/call # spent 77µs making 105 calls to Type::Tiny::ConstrainedObject::has_parent, avg 733ns/call # spent 55µs making 96 calls to Type::Tiny::Class::_is_null_constraint, avg 573ns/call # spent 22µs making 60 calls to Type::Tiny::parent, avg 367ns/call # spent 2µs making 9 calls to Type::Tiny::Duck::_is_null_constraint, avg 222ns/call # spent 501µs making 60 calls to Type::Tiny::can_be_inlined, avg 8µs/call, recursion: max depth 2, sum of overlapping time 501µs
878 if $self->has_parent && $self->_is_null_constraint;
879956779µs1015705µs return !!1
# spent 513µs making 851 calls to Type::Tiny::has_parent, avg 603ns/call # spent 164µs making 59 calls to Type::Tiny::_is_null_constraint, avg 3µs/call # spent 28µs making 105 calls to Type::Tiny::ConstrainedObject::has_parent, avg 267ns/call
880 if !$self->has_parent && $self->_is_null_constraint;
8819012.25ms901603µs return $self->has_inlined;
# spent 543µs making 796 calls to Type::Tiny::has_inlined, avg 682ns/call # spent 56µs making 96 calls to Type::Tiny::Class::has_inlined, avg 583ns/call # spent 4µs making 9 calls to Type::Tiny::Duck::has_inlined, avg 444ns/call
882}
883
884
# spent 57.7ms (10.4+47.4) within Type::Tiny::inline_check which was called 633 times, avg 91µs/call: # 121 times (2.24ms+40.6ms) by Type::Tiny::inline_assert at line 915, avg 354µs/call # 118 times (1.97ms+-1.97ms) by Types::Standard::Dict::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard/Dict.pm:161] at line 156 of Types/Standard/Dict.pm, avg 0s/call # 57 times (632µs+-632µs) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:685] at line 684 of Types/Standard.pm, avg 0s/call # 50 times (577µs+-577µs) by Types::Standard::Dict::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard/Dict.pm:161] at line 148 of Types/Standard/Dict.pm, avg 0s/call # 44 times (842µs+9.46ms) by Type::Tiny::_build_compiled_check at line 537, avg 234µs/call # 37 times (589µs+-589µs) by Types::Standard::HashRef::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard/HashRef.pm:76] at line 69 of Types/Standard/HashRef.pm, avg 0s/call # 37 times (720µs+-720µs) by Types::Standard::HashRef::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard/HashRef.pm:76] at line 70 of Types/Standard/HashRef.pm, avg 0s/call # 32 times (572µs+-572µs) by Type::Tiny::inline_check at line 899, avg 0s/call # 24 times (286µs+3.22ms) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 635, avg 146µs/call # 24 times (413µs+-413µs) by Types::Standard::ArrayRef::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard/ArrayRef.pm:121] at line 105 of Types/Standard/ArrayRef.pm, avg 0s/call # 24 times (439µs+-439µs) by Types::Standard::ArrayRef::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard/ArrayRef.pm:121] at line 114 of Types/Standard/ArrayRef.pm, avg 0s/call # 20 times (176µs+-176µs) by Type::Tiny::inline_check at line 889, avg 0s/call # 16 times (313µs+-313µs) by Types::Standard::Tuple::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard/Tuple.pm:164] at line 157 of Types/Standard/Tuple.pm, avg 0s/call # 6 times (104µs+823µs) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 621, avg 154µs/call # 4 times (43µs+53µs) by Type::Tiny::Union::inline_check at line 140 of Type/Tiny/Union.pm, avg 24µs/call # 3 times (121µs+-121µs) by Types::Standard::Map::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard/Map.pm:87] at line 78 of Types/Standard/Map.pm, avg 0s/call # 3 times (81µs+-81µs) by Types::Standard::Map::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard/Map.pm:87] at line 79 of Types/Standard/Map.pm, avg 0s/call # 3 times (47µs+-47µs) by Types::Standard::Map::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard/Map.pm:87] at line 80 of Types/Standard/Map.pm, avg 0s/call # 2 times (32µs+46µs) by Type::Coercion::inline_coercion at line 368 of Type/Coercion.pm, avg 39µs/call # 2 times (27µs+-27µs) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:734] at line 734 of Types/Standard.pm, avg 0s/call # 2 times (19µs+-19µs) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:945] at line 940 of Types/Standard.pm, avg 0s/call # 2 times (18µs+-18µs) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:328] at line 318 of Types/Standard.pm, avg 0s/call # 2 times (92µs+-92µs) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:921] at line 910 of Types/Standard.pm, avg 0s/call
sub inline_check {
88563390µs my $self = shift;
886633432µs6336.79ms _croak 'Cannot inline type constraint check for "%s"', $self
# spent 6.79ms making 633 calls to Type::Tiny::can_be_inlined, avg 11µs/call
887 unless $self->can_be_inlined;
888
889633778µs12781.53ms return $self->parent->inline_check( @_ )
# spent 1.21ms making 543 calls to Type::Tiny::_is_null_constraint, avg 2µs/call # spent 260µs making 571 calls to Type::Tiny::has_parent, avg 455ns/call # spent 39µs making 62 calls to Type::Tiny::ConstrainedObject::has_parent, avg 629ns/call # spent 12µs making 58 calls to Type::Tiny::Class::_is_null_constraint, avg 207ns/call # spent 9µs making 20 calls to Type::Tiny::parent, avg 450ns/call # spent 0s making 4 calls to Type::Tiny::Duck::_is_null_constraint, avg 0s/call # spent 616µs making 20 calls to Type::Tiny::inline_check, avg 31µs/call, recursion: max depth 2, sum of overlapping time 616µs
890 if $self->has_parent && $self->_is_null_constraint;
891613493µs641375µs return '(!!1)'
# spent 298µs making 551 calls to Type::Tiny::has_parent, avg 541ns/call # spent 58µs making 28 calls to Type::Tiny::_is_null_constraint, avg 2µs/call # spent 19µs making 62 calls to Type::Tiny::ConstrainedObject::has_parent, avg 306ns/call
892 if !$self->has_parent && $self->_is_null_constraint;
893
894587159µs local $_ = $_[0];
8955871.48ms117478.5ms my @r = $self->inlined->( $self, @_ );
# spent 44.9ms making 24 calls to Types::Standard::Dict::__ANON__[Types/Standard/Dict.pm:161], avg 1.87ms/call # spent 23.8ms making 37 calls to Types::Standard::HashRef::__ANON__[Types/Standard/HashRef.pm:76], avg 643µs/call # spent 3.23ms making 24 calls to Types::Standard::ArrayRef::__ANON__[Types/Standard/ArrayRef.pm:121], avg 134µs/call # spent 1.54ms making 57 calls to Types::Standard::__ANON__[Types/Standard.pm:685], avg 27µs/call # spent 1.50ms making 8 calls to Types::Standard::Tuple::__ANON__[Types/Standard/Tuple.pm:164], avg 188µs/call # spent 816µs making 3 calls to Types::Standard::Map::__ANON__[Types/Standard/Map.pm:87], avg 272µs/call # spent 677µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:734], avg 338µs/call # spent 340µs making 525 calls to Type::Tiny::inlined, avg 648ns/call # spent 240µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:921], avg 120µs/call # spent 225µs making 30 calls to Type::Tiny::__ANON__[Type/Tiny.pm:276], avg 8µs/call # spent 206µs making 58 calls to Type::Tiny::Class::__ANON__[Type/Tiny/Class.pm:89], avg 4µs/call # spent 197µs making 58 calls to Type::Tiny::Class::inlined, avg 3µs/call # spent 159µs making 81 calls to Types::Standard::__ANON__[Types/Standard.pm:523], avg 2µs/call # spent 114µs making 35 calls to Types::Standard::__ANON__[Types/Standard.pm:277], avg 3µs/call # spent 90µs making 38 calls to Types::Standard::__ANON__[Types/Standard.pm:501], avg 2µs/call # spent 67µs making 76 calls to Types::Standard::__ANON__[Types/Standard.pm:438], avg 882ns/call # spent 60µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:328], avg 30µs/call # spent 56µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:945], avg 28µs/call # spent 50µs making 3 calls to Types::Standard::__ANON__[Types/Standard.pm:295], avg 17µs/call # spent 50µs making 23 calls to Types::Standard::__ANON__[Types/Standard.pm:362], avg 2µs/call # spent 45µs making 26 calls to Types::Standard::__ANON__[Types/Standard.pm:241], avg 2µs/call # spent 30µs making 13 calls to Types::Standard::__ANON__[Types/Standard.pm:229], avg 2µs/call # spent 27µs making 4 calls to Type::Tiny::Duck::__ANON__[Type/Tiny/Duck.pm:104], avg 7µs/call # spent 25µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:851], avg 12µs/call # spent 17µs making 7 calls to Types::Standard::__ANON__[Types/Standard.pm:384], avg 2µs/call # spent 15µs making 4 calls to Type::Tiny::Duck::inlined, avg 4µs/call # spent 12µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:456], avg 6µs/call # spent 11µs making 1 call to Types::TypeTiny::__ANON__[Types/TypeTiny.pm:174] # spent 10µs making 4 calls to Types::Standard::__ANON__[Types/Standard.pm:348], avg 2µs/call # spent 9µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:488], avg 4µs/call # spent 7µs making 5 calls to Types::Standard::__ANON__[Types/Standard.pm:251], avg 1µs/call # spent 7µs making 4 calls to Types::Standard::__ANON__[Types/Standard.pm:264], avg 2µs/call # spent 7µs making 5 calls to Types::Standard::__ANON__[Types/Standard.pm:566], avg 1µs/call # spent 7µs making 1 call to Types::TypeTiny::__ANON__[Types/TypeTiny.pm:413] # spent 5µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:375], avg 2µs/call # spent 4µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:545], avg 2µs/call # spent 1µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:470], avg 500ns/call
896587176µs if ( @r and not defined $r[0] ) {
8973220µs3218µs _croak 'Inlining type constraint check for "%s" returned undef!', $self
# spent 18µs making 32 calls to Type::Tiny::has_parent, avg 562ns/call
898 unless $self->has_parent;
8993275µs6436µs $r[0] = $self->parent->inline_check( @_ );
# spent 36µs making 32 calls to Type::Tiny::parent, avg 1µs/call # spent 1.28ms making 32 calls to Type::Tiny::inline_check, avg 40µs/call, recursion: max depth 4, sum of overlapping time 1.28ms
900 }
901 my $r = join " && " => map {
90212063.28ms1004732µs /[;{}]/ && !/\Ado \{.+\}\z/
# spent 732µs making 1004 calls to Type::Tiny::CORE:match, avg 729ns/call
903 ? "do { $SafePackage $_ }"
904 : "($_)"
905 } @r;
9065871.36ms return @r == 1 ? $r : "($r)";
907} #/ sub inline_check
908
909
# spent 53.3ms (5.71+47.6) within Type::Tiny::inline_assert which was called 132 times, avg 404µs/call: # 68 times (2.45ms+24.7ms) by MooX::TypeTiny::Role::GenerateAccessor::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/MooX/TypeTiny/Role/GenerateAccessor.pm:33] at line 23 of MooX/TypeTiny/Role/GenerateAccessor.pm, avg 399µs/call # 37 times (2.55ms+3.63ms) by Type::Tiny::_overload_coderef at line 215, avg 167µs/call # 27 times (706µs+19.3ms) by Type::Tiny::_overload_coderef at line 203, avg 741µs/call
sub inline_assert {
910132367µs require B;
91113245µs my $self = shift;
912132289µs my ( $varname, $typevarname, %extras ) = @_;
913
91413221µs my $inline_check;
915132527µs26444.8ms if ( $self->can_be_inlined ) {
# spent 42.8ms making 121 calls to Type::Tiny::inline_check, avg 354µs/call # spent 1.68ms making 121 calls to Type::Tiny::can_be_inlined, avg 14µs/call # spent 149µs making 2 calls to Type::Tiny::Union::inline_check, avg 74µs/call # spent 97µs making 9 calls to Type::Tiny::Enum::inline_check, avg 11µs/call # spent 42µs making 2 calls to Type::Tiny::Union::can_be_inlined, avg 21µs/call # spent 8µs making 9 calls to Type::Tiny::Enum::can_be_inlined, avg 889ns/call
916 $inline_check = sprintf( '(%s)', $self->inline_check( $varname ) );
917 }
918 elsif ( $typevarname ) {
919 $inline_check = sprintf( '%s->check(%s)', $typevarname, $varname );
920 }
921 else {
922 _croak 'Cannot inline type constraint check for "%s"', $self;
923 }
924
925132127µs my $do_wrapper = !delete $extras{no_wrapper};
926
92713217µs my $inline_throw;
928132180µs if ( $typevarname ) {
929 $inline_throw = sprintf(
930 'Type::Tiny::_failed_check(%s, %s, %s, %s)',
931 $typevarname,
932 B::perlstring( "$self" ),
933 $varname,
934 join(
935681.87ms7481.14ms ',', map +( B::perlstring( $_ ) => B::perlstring( $extras{$_} ) ),
# spent 557µs making 612 calls to B::perlstring, avg 910ns/call # spent 450µs making 68 calls to Type::Tiny::__ANON__[Type/Tiny.pm:100], avg 7µs/call # spent 132µs making 68 calls to Type::Tiny::CORE:sort, avg 2µs/call
936 sort keys %extras
937 ),
938 );
939 } #/ if ( $typevarname )
940 else {
941 $inline_throw = sprintf(
942 'Type::Tiny::_failed_check(%s, %s, %s, %s)',
943 $self->{uniq},
944 B::perlstring( "$self" ),
945 $varname,
946 join(
94764739µs192788µs ',', map +( B::perlstring( $_ ) => B::perlstring( $extras{$_} ) ),
# spent 567µs making 64 calls to Type::Tiny::__ANON__[Type/Tiny.pm:100], avg 9µs/call # spent 197µs making 64 calls to B::perlstring, avg 3µs/call # spent 24µs making 64 calls to Type::Tiny::CORE:sort, avg 375ns/call
948 sort keys %extras
949 ),
950 );
951 } #/ else [ if ( $typevarname ) ]
952
953132580µs $do_wrapper
954 ? qq[do { no warnings "void"; $SafePackage $inline_check or $inline_throw; $varname };]
955 : qq[ no warnings "void"; $SafePackage $inline_check or $inline_throw; $varname ];
956} #/ sub inline_assert
957
958sub _failed_check {
959 require Error::TypeTiny::Assertion;
960
961 my ( $self, $name, $value, %attrs ) = @_;
962 $self = $ALL_TYPES{$self} if defined $self && !ref $self;
963
964 my $exception_class =
965 delete( $attrs{exception_class} ) || "Error::TypeTiny::Assertion";
966 my $callback = delete( $attrs{on_die} );
967
968 if ( $self ) {
969 return $exception_class->throw_cb(
970 $callback,
971 message => $self->get_message( $value ),
972 type => $self,
973 value => $value,
974 %attrs,
975 );
976 }
977 else {
978 return $exception_class->throw_cb(
979 $callback,
980 message => sprintf( '%s did not pass type constraint "%s"', _dd( $value ), $name ),
981 value => $value,
982 %attrs,
983 );
984 }
985} #/ sub _failed_check
986
987sub coerce {
988 my $self = shift;
989 $self->_assert_coercion->coerce( @_ );
990}
991
992sub assert_coerce {
993 my $self = shift;
994 $self->_assert_coercion->assert_coerce( @_ );
995}
996
997
# spent 442µs (312+130) within Type::Tiny::is_parameterizable which was called 106 times, avg 4µs/call: # 69 times (209µs+99µs) by Type::Tiny::parameterize at line 1026, avg 4µs/call # 37 times (103µs+31µs) by Eval::TypeTiny::type_to_coderef at line 149 of Eval/TypeTiny.pm, avg 4µs/call
sub is_parameterizable {
998106298µs106130µs shift->has_constraint_generator;
# spent 130µs making 106 calls to Type::Tiny::has_constraint_generator, avg 1µs/call
999}
1000
1001
# spent 13µs (10+3) within Type::Tiny::is_parameterized which was called 3 times, avg 4µs/call: # 3 times (10µs+3µs) by Types::Standard::Dict::__inline_generator at line 103 of Types/Standard/Dict.pm, avg 4µs/call
sub is_parameterized {
100238µs33µs shift->has_parameters;
# spent 3µs making 3 calls to Type::Tiny::has_parameters, avg 1µs/call
1003}
1004
1005{
100610s my %seen;
1007
1008
# spent 4.37ms (1.10+3.27) within Type::Tiny::____make_key which was called 69 times, avg 63µs/call: # 69 times (1.10ms+3.27ms) by Type::Tiny::parameterize at line 1036, avg 63µs/call
sub ____make_key {
1009 #<<<
1010 join ',', map {
101169334µs Types::TypeTiny::is_TypeTiny( $_ ) ? sprintf( '$Type::Tiny::ALL_TYPES{%s}', defined( $_->{uniq} ) ? $_->{uniq} : '____CANNOT_KEY____' ) :
1012 ref() eq 'ARRAY' ? do { $seen{$_}++ ? '____CANNOT_KEY____' : sprintf( '[%s]', ____make_key( @$_ ) ) } :
1013 ref() eq 'HASH' ? do { $seen{$_}++ ? '____CANNOT_KEY____' : sprintf( '{%s}', ____make_key( do { my %h = %$_; map +( $_, $h{$_} ), sort keys %h; } ) ) } :
1014 ref() eq 'SCALAR' || ref() eq 'REF' ? do { $seen{$_}++ ? '____CANNOT_KEY____' : sprintf( '\\(%s)', ____make_key( $$_ ) ) } :
1015 !defined() ? 'undef' :
1016388704µs3083.27ms !ref() ? do { require B; B::perlstring( $_ ) } :
# spent 3.17ms making 228 calls to Types::TypeTiny::is_TypeTiny, avg 14µs/call # spent 103µs making 80 calls to B::perlstring, avg 1µs/call
1017 '____CANNOT_KEY____';
1018 } @_;
1019 #>>>
1020 } #/ sub ____make_key
102110s my %param_cache;
1022
1023
# spent 73.7ms (2.48+71.3) within Type::Tiny::parameterize which was called 69 times, avg 1.07ms/call: # 69 times (2.48ms+71.3ms) by Types::Standard::ArrayRef or Types::Standard::Dict or Types::Standard::Enum or Types::Standard::HasMethods or Types::Standard::HashRef or Types::Standard::InstanceOf or Types::Standard::Map or Types::Standard::Optional or Types::Standard::Slurpy or Types::Standard::Tuple at line 11 of (eval 88)[Eval/TypeTiny.pm:8], avg 1.07ms/call
sub parameterize {
10246917µs my $self = shift;
1025
10266998µs69308µs $self->is_parameterizable
# spent 308µs making 69 calls to Type::Tiny::is_parameterizable, avg 4µs/call
1027 or @_
1028 ? _croak( "Type '%s' does not accept parameters", "$self" )
1029 : return ( $self );
1030
103169202µs159363µs @_ = map Types::TypeTiny::to_TypeTiny( $_ ), @_;
# spent 363µs making 159 calls to Types::TypeTiny::to_TypeTiny, avg 2µs/call
1032
1033 # Generate a key for caching parameterized type constraints,
1034 # but only if all the parameters are strings or type constraints.
10356931µs %seen = ();
103669118µs694.37ms my $key = $self->____make_key( @_ );
# spent 4.37ms making 69 calls to Type::Tiny::____make_key, avg 63µs/call
103769189µs6981µs undef( $key ) if $key =~ /____CANNOT_KEY____/;
# spent 81µs making 69 calls to Type::Tiny::CORE:match, avg 1µs/call
103869152µs return $param_cache{$key} if defined $key && defined $param_cache{$key};
1039
10403411µs local $Type::Tiny::parameterize_type = $self;
1041349µs local $_ = $_[0];
1042342µs my $P;
1043
104434191µs7856.4ms my ( $constraint, $compiled ) = $self->constraint_generator->( @_ );
# spent 12.6ms making 4 calls to Types::Standard::Dict::__constraint_generator, avg 3.15ms/call # spent 12.6ms making 10 calls to Types::Standard::__ANON__[Types/Standard.pm:190], avg 1.26ms/call # spent 11.9ms making 8 calls to Types::Standard::HashRef::__constraint_generator, avg 1.48ms/call # spent 5.29ms making 2 calls to Types::Standard::Tuple::__constraint_generator, avg 2.64ms/call # spent 3.64ms making 7 calls to Types::Standard::__ANON__[Types/Standard.pm:987], avg 520µs/call # spent 3.07ms making 4 calls to Types::Standard::__ANON__[Types/Standard.pm:1059], avg 766µs/call # spent 2.66ms making 4 calls to Types::Standard::ArrayRef::__constraint_generator, avg 666µs/call # spent 2.39ms making 1 call to Types::Standard::Map::__constraint_generator # spent 1.78ms making 1 call to Types::Standard::__ANON__[Types/Standard.pm:1033] # spent 344µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:737], avg 172µs/call # spent 81µs making 1 call to Types::Standard::__ANON__[Types/Standard.pm:678] # spent 67µs making 34 calls to Type::Tiny::constraint_generator, avg 2µs/call
1045
10463468µs34465µs if ( Types::TypeTiny::is_TypeTiny( $constraint ) ) {
# spent 465µs making 34 calls to Types::TypeTiny::is_TypeTiny, avg 14µs/call
1047 $P = $constraint;
1048 }
1049 else {
105020158µs402.33ms my %options = (
# spent 1.43ms making 4 calls to Types::Standard::__ANON__[Types/Standard.pm:826], avg 358µs/call # spent 785µs making 14 calls to Type::Tiny::__ANON__[Type/Tiny.pm:524], avg 56µs/call # spent 62µs making 20 calls to Type::Tiny::name_generator, avg 3µs/call # spent 47µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:786], avg 24µs/call
1051 constraint => $constraint,
1052 display_name => $self->name_generator->( $self, @_ ),
1053 parameters => [@_],
1054 );
1055204µs $options{compiled_type_constraint} = $compiled
1056 if $compiled;
10572097µs609.50ms $options{inlined} = $self->inline_generator->( @_ )
# spent 7.23ms making 4 calls to Types::Standard::Dict::__inline_generator, avg 1.81ms/call # spent 1.81ms making 2 calls to Types::Standard::Tuple::__inline_generator, avg 903µs/call # spent 251µs making 8 calls to Types::Standard::HashRef::__inline_generator, avg 31µs/call # spent 86µs making 4 calls to Types::Standard::ArrayRef::__inline_generator, avg 22µs/call # spent 36µs making 1 call to Types::Standard::Map::__inline_generator # spent 31µs making 1 call to Types::Standard::__ANON__[Types/Standard.pm:686] # spent 28µs making 20 calls to Type::Tiny::inline_generator, avg 1µs/call # spent 27µs making 20 calls to Type::Tiny::has_inline_generator, avg 1µs/call
1058 if $self->has_inline_generator;
1059 $options{type_default} = $self->{type_default_generator}->( @_ )
10602070µs14167µs if exists $self->{type_default_generator}; # undocumented
# spent 91µs making 8 calls to Types::Standard::__ANON__[Types/Standard.pm:532], avg 11µs/call # spent 37µs making 1 call to Types::Standard::__ANON__[Types/Standard.pm:661] # spent 32µs making 4 calls to Types::Standard::__ANON__[Types/Standard.pm:510], avg 8µs/call # spent 7µs making 1 call to Types::Standard::__ANON__[Types/Standard.pm:704]
1061 exists $options{$_} && !defined $options{$_} && delete $options{$_}
10622075µs for keys %options;
1063
10642049µs201.70ms $P = $self->create_child_type( %options );
# spent 1.70ms making 20 calls to Type::Tiny::create_child_type, avg 85µs/call
1065
10662056µs2021µs if ( $self->has_coercion_generator ) {
# spent 21µs making 20 calls to Type::Tiny::has_coercion_generator, avg 1µs/call
10672069µs my @args = @_;
1068
# spent 812µs (33+779) within Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:1073] which was called 3 times, avg 271µs/call: # 3 times (33µs+779µs) by Type::Tiny::_build_coercion at line 504, avg 271µs/call
$P->{_build_coercion} = sub {
106932µs my $coercion = shift;
1070312µs6775µs my $built = $self->coercion_generator->( $self, $P, @args );
# spent 425µs making 2 calls to Types::Standard::HashRef::__coercion_generator, avg 212µs/call # spent 347µs making 1 call to Types::Standard::Dict::__coercion_generator # spent 3µs making 3 calls to Type::Tiny::coercion_generator, avg 1µs/call
107130s $coercion->add_type_coercions( @{ $built->type_coercion_map } ) if $built;
107239µs34µs $coercion->freeze;
# spent 4µs making 3 calls to Type::Coercion::freeze, avg 1µs/call
10732086µs };
1074 }
1075 } #/ else [ if ( Types::TypeTiny::is_TypeTiny...)]
1076
10773422µs if ( defined $key ) {
10783440µs $param_cache{$key} = $P;
10793488µs3418µs Scalar::Util::weaken( $param_cache{$key} );
# spent 18µs making 34 calls to Scalar::Util::weaken, avg 529ns/call
1080 }
1081
108234109µs628.14ms $P->coercion->freeze unless $self->has_coercion_generator;
# spent 8.10ms making 14 calls to Type::Tiny::coercion, avg 578µs/call # spent 26µs making 34 calls to Type::Tiny::has_coercion_generator, avg 765ns/call # spent 19µs making 14 calls to Type::Coercion::freeze, avg 1µs/call
1083
108434120µs return $P;
1085 } #/ sub parameterize
1086}
1087
108810s
# spent 36µs within Type::Tiny::child_type_class which was called 27 times, avg 1µs/call: # 27 times (36µs+0s) by Type::Tiny::create_child_type at line 1096, avg 1µs/call
sub child_type_class {
10892750µs __PACKAGE__;
1090}
1091
1092
# spent 2.89ms (268µs+2.62) within Type::Tiny::create_child_type which was called 27 times, avg 107µs/call: # 20 times (161µs+1.54ms) by Type::Tiny::parameterize at line 1064, avg 85µs/call # 5 times (59µs+977µs) by Type::Tiny::where at line 1567, avg 207µs/call # 2 times (48µs+105µs) by Types::Standard::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Types/Standard.pm:737] at line 735 of Types/Standard.pm, avg 76µs/call
sub create_child_type {
1093277µs my $self = shift;
1094275µs my %moreopts;
10952730µs $moreopts{is_object} = 1 if $self->{is_object};
109627187µs542.62ms return $self->child_type_class->new( parent => $self, %moreopts, @_ );
# spent 2.59ms making 27 calls to Type::Tiny::new, avg 96µs/call # spent 36µs making 27 calls to Type::Tiny::child_type_class, avg 1µs/call
1097}
1098
1099sub complementary_type {
1100 my $self = shift;
1101 my $r = ( $self->{complementary_type} ||= $self->_build_complementary_type );
1102 Scalar::Util::weaken( $self->{complementary_type} )
1103 unless Scalar::Util::isweak( $self->{complementary_type} );
1104 return $r;
1105}
1106
1107sub _build_complementary_type {
1108 my $self = shift;
1109 my %opts = (
1110 constraint => sub { not $self->check( $_ ) },
1111 display_name => sprintf( "~%s", $self ),
1112 );
1113 $opts{display_name} =~ s/^\~{2}//;
1114 $opts{inlined} = sub { shift; "not(" . $self->inline_check( @_ ) . ")" }
1115 if $self->can_be_inlined;
1116 $opts{display_name} = $opts{name} = $self->{complement_name}
1117 if $self->{complement_name};
1118 return "Type::Tiny"->new( %opts );
1119} #/ sub _build_complementary_type
1120
1121sub _instantiate_moose_type {
1122 my $self = shift;
1123 my %opts = @_;
1124 require Moose::Meta::TypeConstraint;
1125 return "Moose::Meta::TypeConstraint"->new( %opts );
1126}
1127
1128sub _build_moose_type {
1129 my $self = shift;
1130
1131 my $r;
1132 if ( $self->{_is_core} ) {
1133 require Moose::Util::TypeConstraints;
1134 $r = Moose::Util::TypeConstraints::find_type_constraint( $self->name );
1135 $r->{"Types::TypeTiny::to_TypeTiny"} = $self;
1136 Scalar::Util::weaken( $r->{"Types::TypeTiny::to_TypeTiny"} );
1137 }
1138 else {
1139 # Type::Tiny is more flexible than Moose, allowing
1140 # inlined to return a list. So we need to wrap the
1141 # inlined coderef to make sure Moose gets a single
1142 # string.
1143 #
1144 my $wrapped_inlined = sub {
1145 shift;
1146 $self->inline_check( @_ );
1147 };
1148
1149 my %opts;
1150 $opts{name} = $self->qualified_name if $self->has_library && !$self->is_anon;
1151 $opts{parent} = $self->parent->moose_type if $self->has_parent;
1152 $opts{constraint} = $self->constraint unless $self->_is_null_constraint;
1153 $opts{message} = $self->message if $self->has_message;
1154 $opts{inlined} = $wrapped_inlined if $self->has_inlined;
1155
1156 $r = $self->_instantiate_moose_type( %opts );
1157 $r->{"Types::TypeTiny::to_TypeTiny"} = $self;
1158 $self->{moose_type} = $r; # prevent recursion
1159 $r->coercion( $self->coercion->moose_coercion ) if $self->has_coercion;
1160 } #/ else [ if ( $self->{_is_core})]
1161
1162 return $r;
1163} #/ sub _build_moose_type
1164
1165sub _build_mouse_type {
1166 my $self = shift;
1167
1168 my %options;
1169 $options{name} = $self->qualified_name if $self->has_library && !$self->is_anon;
1170 $options{parent} = $self->parent->mouse_type if $self->has_parent;
1171 $options{constraint} = $self->constraint unless $self->_is_null_constraint;
1172 $options{message} = $self->message if $self->has_message;
1173
1174 require Mouse::Meta::TypeConstraint;
1175 my $r = "Mouse::Meta::TypeConstraint"->new( %options );
1176
1177 $self->{mouse_type} = $r; # prevent recursion
1178 $r->_add_type_coercions(
1179 $self->coercion->freeze->_codelike_type_coercion_map( 'mouse_type' ) )
1180 if $self->has_coercion;
1181
1182 return $r;
1183} #/ sub _build_mouse_type
1184
1185
# spent 27.7ms (937µs+26.7) within Type::Tiny::exportables which was called 38 times, avg 728µs/call: # 37 times (908µs+26.2ms) by Type::Library::add_type at line 235 of Type/Library.pm, avg 732µs/call # once (29µs+583µs) by Type::Tiny::exportables_by_tag at line 1231
sub exportables {
11863828µs my ( $self, $base_name, $tag ) = ( shift, @_ ); # $tag is undocumented
11873857µs7697µs if ( not $self->is_anon ) {
# spent 80µs making 38 calls to Type::Tiny::is_anon, avg 2µs/call # spent 17µs making 38 calls to Type::Tiny::name, avg 447ns/call
1188 $base_name ||= $self->name;
1189 }
11903811µs $tag ||= 0;
1191
11923811µs my @exportables;
1193388µs return \@exportables if ! $base_name;
1194
11953811µs require Eval::TypeTiny;
1196
119738107µs376.22ms push @exportables, {
# spent 6.22ms making 37 calls to Eval::TypeTiny::type_to_coderef, avg 168µs/call
1198 name => $base_name,
1199 code => Eval::TypeTiny::type_to_coderef( $self ),
1200 tags => [ 'types' ],
1201 } if $tag eq 'types' || !$tag;
1202
120338116µs375.43ms push @exportables, {
# spent 5.43ms making 37 calls to Type::Tiny::compiled_check, avg 147µs/call
1204 name => sprintf( 'is_%s', $base_name ),
1205 code => $self->compiled_check,
1206 tags => [ 'is' ],
1207 } if $tag eq 'is' || !$tag;
1208
120938117µs3714.4ms push @exportables, {
# spent 14.4ms making 37 calls to Type::Tiny::_overload_coderef, avg 388µs/call
1210 name => sprintf( 'assert_%s', $base_name ),
1211 code => $self->_overload_coderef,
1212 tags => [ 'assert' ],
1213 } if $tag eq 'assert' || !$tag;
1214
1215 push @exportables, {
1216 name => sprintf( 'to_%s', $base_name ),
1217 code => $self->has_coercion && $self->coercion->frozen
1218 ? $self->coercion->compiled_coercion
1219 : sub ($) { $self->coerce( $_[0] ) },
122038176µs42631µs tags => [ 'to' ],
# spent 567µs making 1 call to Type::Coercion::compiled_coercion # spent 61µs making 38 calls to Type::Tiny::has_coercion, avg 2µs/call # spent 2µs making 2 calls to Type::Tiny::coercion, avg 1µs/call # spent 1µs making 1 call to Type::Coercion::frozen
1221 } if $tag eq 'to' || !$tag;
1222
12233883µs return \@exportables;
1224}
1225
1226
# spent 628µs (16+612) within Type::Tiny::exportables_by_tag which was called: # once (16µs+612µs) by Type::Library::make_immutable at line 320 of Type/Library.pm
sub exportables_by_tag {
122711µs my ( $self, $tag, $base_name ) = ( shift, @_ );
1228 my @matched = grep {
122910s my $e = $_;
123012µs grep $_ eq $tag, @{ $e->{tags} || [] };
1231111µs1612µs } @{ $self->exportables( $base_name, $tag ) };
# spent 612µs making 1 call to Type::Tiny::exportables
123214µs return @matched if wantarray;
1233 _croak( 'Expected to find one exportable tagged "%s", found %d', $tag, scalar @matched )
1234 unless @matched == 1;
1235 return $matched[0];
1236}
1237
1238sub _process_coercion_list {
1239 my $self = shift;
1240
1241 my @pairs;
1242 while ( @_ ) {
1243 my $next = shift;
1244 if ( blessed( $next )
1245 and $next->isa( 'Type::Coercion' )
1246 and $next->is_parameterized )
1247 {
1248 push @pairs => ( @{ $next->_reparameterize( $self )->type_coercion_map } );
1249 }
1250 elsif ( blessed( $next ) and $next->can( 'type_coercion_map' ) ) {
1251 push @pairs => (
1252 @{ $next->type_coercion_map },
1253 );
1254 }
1255 elsif ( ref( $next ) eq q(ARRAY) ) {
1256 unshift @_, @$next;
1257 }
1258 else {
1259 push @pairs => (
1260 Types::TypeTiny::to_TypeTiny( $next ),
1261 shift,
1262 );
1263 }
1264 } #/ while ( @_ )
1265
1266 return @pairs;
1267} #/ sub _process_coercion_list
1268
1269sub plus_coercions {
1270 my $self = shift;
1271 my $new = $self->_clone;
1272 $new->coercion->add_type_coercions(
1273 $self->_process_coercion_list( @_ ),
1274 @{ $self->coercion->type_coercion_map },
1275 );
1276 $new->coercion->freeze;
1277 return $new;
1278} #/ sub plus_coercions
1279
1280sub plus_fallback_coercions {
1281 my $self = shift;
1282
1283 my $new = $self->_clone;
1284 $new->coercion->add_type_coercions(
1285 @{ $self->coercion->type_coercion_map },
1286 $self->_process_coercion_list( @_ ),
1287 );
1288 $new->coercion->freeze;
1289 return $new;
1290} #/ sub plus_fallback_coercions
1291
1292sub minus_coercions {
1293 my $self = shift;
1294
1295 my $new = $self->_clone;
1296 my @not = grep Types::TypeTiny::is_TypeTiny( $_ ),
1297 $self->_process_coercion_list( $new, @_ );
1298
1299 my @keep;
1300 my $c = $self->coercion->type_coercion_map;
1301 for ( my $i = 0 ; $i <= $#$c ; $i += 2 ) {
1302 my $keep_this = 1;
1303 NOT: for my $n ( @not ) {
1304 if ( $c->[$i] == $n ) {
1305 $keep_this = 0;
1306 last NOT;
1307 }
1308 }
1309
1310 push @keep, $c->[$i], $c->[ $i + 1 ] if $keep_this;
1311 } #/ for ( my $i = 0 ; $i <=...)
1312
1313 $new->coercion->add_type_coercions( @keep );
1314 $new->coercion->freeze;
1315 return $new;
1316} #/ sub minus_coercions
1317
1318sub no_coercions {
1319 my $new = shift->_clone;
1320 $new->coercion->freeze;
1321 $new;
1322}
1323
1324sub coercibles {
1325 my $self = shift;
1326 $self->has_coercion ? $self->coercion->_source_type_union : $self;
1327}
1328
1329
# spent 9.51ms (7.93+1.58) within Type::Tiny::isa which was called 3751 times, avg 3µs/call: # 794 times (1.69ms+311µs) by Type::Tiny::strictly_equals at line 687, avg 3µs/call # 794 times (1.53ms+284µs) by Type::Tiny::strictly_equals at line 688, avg 2µs/call # 703 times (1.39ms+277µs) by Type::Tiny::is_strictly_subtype_of at line 694, avg 2µs/call # 703 times (1.30ms+241µs) by Type::Tiny::is_strictly_subtype_of at line 695, avg 2µs/call # 236 times (640µs+166µs) by Eval::TypeTiny::Sandbox::__ANON__[(eval 57)[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Eval/TypeTiny.pm:8]:3] at line 3 of (eval 57)[Eval/TypeTiny.pm:8], avg 3µs/call # 191 times (450µs+92µs) by Type::Tiny::is_strictly_a_type_of at line 712, avg 3µs/call # 191 times (340µs+67µs) by Type::Tiny::is_strictly_a_type_of at line 713, avg 2µs/call # 68 times (348µs+81µs) by MooX::TypeTiny::Role::GenerateAccessor::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/MooX/TypeTiny/Role/GenerateAccessor.pm:33] at line 13 of MooX/TypeTiny/Role/GenerateAccessor.pm, avg 6µs/call # 63 times (224µs+53µs) by Type::Tiny::new at line 255, avg 4µs/call # 3 times (5µs+3µs) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:602] at line 590, avg 3µs/call # 3 times (5µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:602] at line 591, avg 2µs/call # 2 times (6µs+3µs) by Type::Tiny::Union::new at line 60 of Type/Tiny/Union.pm, avg 4µs/call
sub isa {
13303751462µs my $self = shift;
1331
13323751635µs if ( $INC{"Moose.pm"}
1333 and ref( $self )
1334 and $_[0] =~ /^(?:Class::MOP|MooseX?::Meta)::(.+)$/ )
1335 {
1336 my $meta = $1;
1337
1338 return !!1 if $meta eq 'TypeConstraint';
1339 return $self->is_parameterized if $meta eq 'TypeConstraint::Parameterized';
1340 return $self->is_parameterizable if $meta eq 'TypeConstraint::Parameterizable';
1341 return $self->isa( 'Type::Tiny::Union' ) if $meta eq 'TypeConstraint::Union';
1342
1343 my $inflate = $self->moose_type;
1344 return $inflate->isa( @_ );
1345 } #/ if ( $INC{"Moose.pm"} ...)
1346
13473751471µs if ( $INC{"Mouse.pm"}
1348 and ref( $self )
1349 and $_[0] eq 'Mouse::Meta::TypeConstraint' )
1350 {
1351 return !!1;
1352 }
1353
1354375111.0ms37511.58ms $self->SUPER::isa( @_ );
# spent 1.58ms making 3751 calls to UNIVERSAL::isa, avg 421ns/call
1355} #/ sub isa
1356
1357
# spent 2µs within Type::Tiny::_build_my_methods which was called 2 times, avg 1µs/call: # 2 times (2µs+0s) by Type::Tiny::my_methods at line 452, avg 1µs/call
sub _build_my_methods {
135827µs return {};
1359}
1360
1361
# spent 136µs (102+34) within Type::Tiny::_lookup_my_method which was called 12 times, avg 11µs/call: # 6 times (76µs+60µs) by Type::Tiny::AUTOLOAD at line 1429, avg 23µs/call # 6 times (26µs+-26µs) by Type::Tiny::_lookup_my_method at line 1369, avg 0s/call
sub _lookup_my_method {
1362124µs my $self = shift;
13631210µs my ( $name ) = @_;
1364
13651233µs1827µs if ( $self->my_methods->{$name} ) {
# spent 27µs making 18 calls to Type::Tiny::my_methods, avg 2µs/call
1366 return $self->my_methods->{$name};
1367 }
1368
1369625µs187µs if ( $self->has_parent ) {
# spent 4µs making 6 calls to Type::Tiny::has_parent, avg 667ns/call # spent 3µs making 6 calls to Type::Tiny::parent, avg 500ns/call # spent 34µs making 6 calls to Type::Tiny::_lookup_my_method, avg 6µs/call, recursion: max depth 1, sum of overlapping time 34µs
1370 return $self->parent->_lookup_my_method( @_ );
1371 }
1372
1373 return;
1374} #/ sub _lookup_my_method
1375
137612µsmy %object_methods = (
1377 with_attribute_values => 1, stringifies_to => 1,
1378 numifies_to => 1
1379);
1380
1381
# spent 536µs (452+84) within Type::Tiny::can which was called 67 times, avg 8µs/call: # 61 times (393µs+70µs) by Type::Tiny::_overload_coderef at line 190, avg 8µs/call # 4 times (39µs+7µs) by Type::Coercion::add_type_coercions at line 240 of Type/Coercion.pm, avg 12µs/call # 2 times (20µs+7µs) by Type::Tiny::Union::new_by_overload at line 30 of Type/Tiny/Union.pm, avg 14µs/call
sub can {
13826720µs my $self = shift;
1383
13846726µs return !!0
1385 if $_[0] eq 'type_parameter'
1386 && blessed( $_[0] )
1387 && $_[0]->has_parameters;
1388
138967348µs6778µs my $can = $self->SUPER::can( @_ );
# spent 78µs making 67 calls to UNIVERSAL::can, avg 1µs/call
139067117µs return $can if $can;
1391
139264µs if ( ref( $self ) ) {
139363µs if ( $INC{"Moose.pm"} ) {
1394 my $method = $self->moose_type->can( @_ );
1395 return sub { shift->moose_type->$method( @_ ) }
1396 if $method;
1397 }
1398618µs66µs if ( $_[0] =~ /\Amy_(.+)\z/ ) {
# spent 6µs making 6 calls to Type::Tiny::CORE:match, avg 1µs/call
1399 my $method = $self->_lookup_my_method( $1 );
1400 return $method if $method;
1401 }
140262µs if ( $self->{is_object} && $object_methods{ $_[0] } ) {
1403 require Type::Tiny::ConstrainedObject;
1404 return Type::Tiny::ConstrainedObject->can( $_[0] );
1405 }
140664µs for my $util ( qw/ grep map sort rsort first any all assert_any assert_all / ) {
14075413µs if ( $_[0] eq $util ) {
1408 $self->{'_util'}{$util} ||= eval { $self->_build_util( $util ) };
1409 return unless $self->{'_util'}{$util};
1410 return sub { my $s = shift; $s->{'_util'}{$util}( @_ ) };
1411 }
1412 }
1413 } #/ if ( ref( $self ) )
1414
1415611µs return;
1416} #/ sub can
1417
1418
# spent 387µs (118+269) within Type::Tiny::AUTOLOAD which was called 6 times, avg 65µs/call: # 3 times (81µs+174µs) by Types::Standard::Dict::__constraint_generator at line 44 of Types/Standard/Dict.pm, avg 85µs/call # 3 times (37µs+95µs) by Types::Standard::Dict::__inline_generator at line 90 of Types/Standard/Dict.pm, avg 44µs/call
sub AUTOLOAD {
141962µs my $self = shift;
1420641µs630µs my ( $m ) = ( our $AUTOLOAD =~ /::(\w+)$/ );
# spent 30µs making 6 calls to Type::Tiny::CORE:match, avg 5µs/call
142164µs return if $m eq 'DESTROY';
1422
142363µs if ( ref( $self ) ) {
142462µs if ( $INC{"Moose.pm"} ) {
1425 my $method = $self->moose_type->can( $m );
1426 return $self->moose_type->$method( @_ ) if $method;
1427 }
1428656µs67µs if ( $m =~ /\Amy_(.+)\z/ ) {
# spent 7µs making 6 calls to Type::Tiny::CORE:match, avg 1µs/call
1429623µs6136µs my $method = $self->_lookup_my_method( $1 );
# spent 136µs making 6 calls to Type::Tiny::_lookup_my_method, avg 23µs/call
1430627µs696µs return &$method( $self, @_ ) if $method;
# spent 96µs making 6 calls to Types::Standard::Slurpy::my_unslurpy, avg 16µs/call
1431 }
1432 if ( $self->{is_object} && $object_methods{$m} ) {
1433 require Type::Tiny::ConstrainedObject;
1434 unshift @_, $self;
143521.42ms233µs
# spent 23µs (13+10) within Type::Tiny::BEGIN@1435 which was called: # once (13µs+10µs) by Type::Library::BEGIN@16 at line 1435
no strict 'refs';
# spent 23µs making 1 call to Type::Tiny::BEGIN@1435 # spent 10µs making 1 call to strict::unimport
1436 goto \&{"Type::Tiny::ConstrainedObject::$m"};
1437 }
1438 for my $util ( qw/ grep map sort rsort first any all assert_any assert_all / ) {
1439 if ( $m eq $util ) {
1440 return ( $self->{'_util'}{$util} ||= $self->_build_util( $util ) )->( @_ );
1441 }
1442 }
1443 } #/ if ( ref( $self ) )
1444
1445 _croak q[Can't locate object method "%s" via package "%s"], $m,
1446 ref( $self ) || $self;
1447} #/ sub AUTOLOAD
1448
1449sub DOES {
1450 my $self = shift;
1451
1452 return !!1
1453 if ref( $self )
1454 && $_[0] =~ m{^ Type::API::Constraint (?: ::Coercible | ::Inlinable )? $}x;
1455 return !!1 if !ref( $self ) && $_[0] eq 'Type::API::Constraint::Constructor';
1456
1457 "UNIVERSAL"->can( "DOES" ) ? $self->SUPER::DOES( @_ ) : $self->isa( @_ );
1458} #/ sub DOES
1459
1460sub _has_xsub {
1461 require B;
1462 !!B::svref_2object( shift->compiled_check )->XSUB;
1463}
1464
1465sub _build_util {
1466 my ( $self, $func ) = @_;
1467 Scalar::Util::weaken( my $type = $self );
1468
1469 if ( $func eq 'grep'
1470 || $func eq 'first'
1471 || $func eq 'any'
1472 || $func eq 'all'
1473 || $func eq 'assert_any'
1474 || $func eq 'assert_all' )
1475 {
1476 my ( $inline, $compiled );
1477
1478 if ( $self->can_be_inlined ) {
1479 $inline = $self->inline_check( '$_' );
1480 }
1481 else {
1482 $compiled = $self->compiled_check;
1483 $inline = '$compiled->($_)';
1484 }
1485
1486 if ( $func eq 'grep' ) {
1487 return eval "sub { grep { $inline } \@_ }";
1488 }
1489 elsif ( $func eq 'first' ) {
1490 return eval "sub { for (\@_) { return \$_ if ($inline) }; undef; }";
1491 }
1492 elsif ( $func eq 'any' ) {
1493 return eval "sub { for (\@_) { return !!1 if ($inline) }; !!0; }";
1494 }
1495 elsif ( $func eq 'assert_any' ) {
1496 my $qname = B::perlstring( $self->name );
1497 return
1498 eval
1499 "sub { for (\@_) { return \@_ if ($inline) }; Type::Tiny::_failed_check(\$type, $qname, \@_ ? \$_[-1] : undef); }";
1500 }
1501 elsif ( $func eq 'all' ) {
1502 return eval "sub { for (\@_) { return !!0 unless ($inline) }; !!1; }";
1503 }
1504 elsif ( $func eq 'assert_all' ) {
1505 my $qname = B::perlstring( $self->name );
1506 return
1507 eval
1508 "sub { my \$idx = 0; for (\@_) { Type::Tiny::_failed_check(\$type, $qname, \$_, varname => sprintf('\$_[%d]', \$idx)) unless ($inline); ++\$idx }; \@_; }";
1509 }
1510 } #/ if ( $func eq 'grep' ||...)
1511
1512 if ( $func eq 'map' ) {
1513 my ( $inline, $compiled );
1514 my $c = $self->_assert_coercion;
1515
1516 if ( $c->can_be_inlined ) {
1517 $inline = $c->inline_coercion( '$_' );
1518 }
1519 else {
1520 $compiled = $c->compiled_coercion;
1521 $inline = '$compiled->($_)';
1522 }
1523
1524 return eval "sub { map { $inline } \@_ }";
1525 } #/ if ( $func eq 'map' )
1526
1527 if ( $func eq 'sort' || $func eq 'rsort' ) {
1528 my ( $inline, $compiled );
1529
1530 my $ptype = $self->find_parent( sub { $_->has_sorter } );
1531 _croak "No sorter for this type constraint" unless $ptype;
1532
1533 my $sorter = $ptype->sorter;
1534
1535 # Schwarzian transformation
1536 if ( ref( $sorter ) eq 'ARRAY' ) {
1537 my $sort_key;
1538 ( $sorter, $sort_key ) = @$sorter;
1539
1540 if ( $func eq 'sort' ) {
1541 return
1542 eval
1543 "our (\$a, \$b); sub { map \$_->[0], sort { \$sorter->(\$a->[1],\$b->[1]) } map [\$_,\$sort_key->(\$_)], \@_ }";
1544 }
1545 elsif ( $func eq 'rsort' ) {
1546 return
1547 eval
1548 "our (\$a, \$b); sub { map \$_->[0], sort { \$sorter->(\$b->[1],\$a->[1]) } map [\$_,\$sort_key->(\$_)], \@_ }";
1549 }
1550 } #/ if ( ref( $sorter ) eq...)
1551
1552 # Simple sort
1553 else {
1554 if ( $func eq 'sort' ) {
1555 return eval "our (\$a, \$b); sub { sort { \$sorter->(\$a,\$b) } \@_ }";
1556 }
1557 elsif ( $func eq 'rsort' ) {
1558 return eval "our (\$a, \$b); sub { sort { \$sorter->(\$b,\$a) } \@_ }";
1559 }
1560 }
1561 } #/ if ( $func eq 'sort' ||...)
1562
1563 die "Unknown function: $func";
1564} #/ sub _build_util
1565
1566sub of { shift->parameterize( @_ ) }
1567523µs51.04ms
# spent 1.05ms (19µs+1.04) within Type::Tiny::where which was called 5 times, avg 211µs/call: # once (5µs+280µs) by JSON::Schema::Modern::BEGIN@35 at line 40 of JSON/Schema/Modern/Document.pm # once (4µs+218µs) by OpenAPI::Modern::BEGIN@26 at line 927 of JSON/Schema/Modern.pm # once (5µs+190µs) by JSON::Schema::Modern::add_vocabulary at line 711 of JSON/Schema/Modern.pm # once (3µs+188µs) by OpenAPI::Modern::BEGIN@26 at line 641 of JSON/Schema/Modern.pm # once (2µs+160µs) by JSON::Schema::Modern::BEGIN@35 at line 79 of JSON/Schema/Modern/Document.pm
sub where { shift->create_child_type( constraint => @_ ) }
# spent 1.04ms making 5 calls to Type::Tiny::create_child_type, avg 207µs/call
1568
1569# fill out Moose-compatible API
1570sub inline_environment { +{} }
1571sub _inline_check { shift->inline_check( @_ ) }
1572sub _compiled_type_constraint { shift->compiled_check( @_ ) }
1573sub meta { _croak( "Not really a Moose::Meta::TypeConstraint. Sorry!" ) }
1574sub compile_type_constraint { shift->compiled_check }
1575sub _actually_compile_type_constraint { shift->_build_compiled_check }
1576sub hand_optimized_type_constraint { shift->{hand_optimized_type_constraint} }
1577
1578sub has_hand_optimized_type_constraint {
1579 exists( shift->{hand_optimized_type_constraint} );
1580}
158128µs23µs
# spent 10µs (7+3) within Type::Tiny::type_parameter which was called 2 times, avg 5µs/call: # 2 times (7µs+3µs) by Types::Standard::Slurpy::my_unslurpy at line 751 of Types/Standard.pm, avg 5µs/call
sub type_parameter { ( shift->parameters || [] )->[0] }
# spent 3µs making 2 calls to Type::Tiny::parameters, avg 2µs/call
1582
1583sub parameterized_from {
1584 $_[0]->is_parameterized ? shift->parent : _croak( "Not a parameterized type" );
1585}
1586sub has_parameterized_from { $_[0]->is_parameterized }
1587
1588# some stuff for Mouse-compatible API
1589sub __is_parameterized { shift->is_parameterized( @_ ) }
1590sub _add_type_coercions { shift->coercion->add_type_coercions( @_ ) }
1591sub _as_string { shift->qualified_name( @_ ) }
1592sub _compiled_type_coercion { shift->coercion->compiled_coercion( @_ ) }
1593sub _identity { Scalar::Util::refaddr( shift ) }
1594
1595sub _unite {
1596 require Type::Tiny::Union;
1597 "Type::Tiny::Union"->new( type_constraints => \@_ );
1598}
1599
1600# Hooks for Type::Tie
1601sub TIESCALAR {
1602 require Type::Tie;
1603 unshift @_, 'Type::Tie::SCALAR';
1604 goto \&Type::Tie::SCALAR::TIESCALAR;
1605}
1606
1607sub TIEARRAY {
1608 require Type::Tie;
1609 unshift @_, 'Type::Tie::ARRAY';
1610 goto \&Type::Tie::ARRAY::TIEARRAY;
1611}
1612
1613sub TIEHASH {
1614 require Type::Tie;
1615 unshift @_, 'Type::Tie::HASH';
1616 goto \&Type::Tie::HASH::TIEHASH;
1617}
1618
1619110µs1;
1620
1621__END__
 
# spent 1.73ms within Type::Tiny::CORE:match which was called 2019 times, avg 856ns/call: # 1004 times (732µs+0s) by Type::Tiny::inline_check at line 902, avg 729ns/call # 367 times (257µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:100] at line 97, avg 700ns/call # 180 times (187µs+0s) by Type::Tiny::__ANON__[(eval 432)[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Sub/Quote.pm:3]:16] at line 16 of (eval 432)[Sub/Quote.pm:3], avg 1µs/call # 168 times (125µs+0s) by Type::Tiny::__ANON__[(eval 434)[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Sub/Quote.pm:3]:16] at line 16 of (eval 434)[Sub/Quote.pm:3], avg 744ns/call # 70 times (56µs+0s) by JSON::Schema::Modern::Document::_assert__path_to_resource at line 24 of (eval 303)[Sub/Quote.pm:3], avg 800ns/call # 69 times (81µs+0s) by Type::Tiny::parameterize at line 1037, avg 1µs/call # 63 times (113µs+0s) by Type::Tiny::new at line 251, avg 2µs/call # 39 times (95µs+0s) by Type::Tiny::new at line 291, avg 2µs/call # 20 times (13µs+0s) by Type::Tiny::__ANON__[(eval 427)[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Sub/Quote.pm:3]:16] at line 16 of (eval 427)[Sub/Quote.pm:3], avg 650ns/call # 14 times (6µs+0s) by JSON::Schema::Modern::_assert__vocabulary_classes at line 24 of (eval 359)[Sub/Quote.pm:3], avg 429ns/call # 6 times (30µs+0s) by Type::Tiny::AUTOLOAD at line 1420, avg 5µs/call # 6 times (7µs+0s) by Type::Tiny::AUTOLOAD at line 1428, avg 1µs/call # 6 times (6µs+0s) by Type::Tiny::can at line 1398, avg 1µs/call # 3 times (7µs+0s) by JSON::Schema::Modern::_assert__metaschema_vocabulary_classes at line 24 of (eval 364)[Sub/Quote.pm:3], avg 2µs/call # once (5µs+0s) by JSON::Schema::Modern::new at line 98 of (eval 420)[Sub/Quote.pm:3] # once (4µs+0s) by JSON::Schema::Modern::Result::new at line 139 of (eval 436)[Sub/Quote.pm:3] # once (3µs+0s) by Type::Tiny::__ANON__[(eval 426)[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Sub/Quote.pm:3]:16] at line 16 of (eval 426)[Sub/Quote.pm:3] # once (1µs+0s) by JSON::Schema::Modern::new at line 106 of (eval 420)[Sub/Quote.pm:3]
sub Type::Tiny::CORE:match; # opcode
# spent 156µs within Type::Tiny::CORE:sort which was called 132 times, avg 1µs/call: # 68 times (132µs+0s) by Type::Tiny::inline_assert at line 935, avg 2µs/call # 64 times (24µs+0s) by Type::Tiny::inline_assert at line 947, avg 375ns/call
sub Type::Tiny::CORE:sort; # opcode
# spent 456µs (102+354) within Type::Tiny::CORE:subst which was called 33 times, avg 14µs/call: # 33 times (102µs+354µs) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:524] at line 522, avg 14µs/call
sub Type::Tiny::CORE:subst; # opcode