← Index
NYTProf Performance Profile   « line view »
For ../prof.pl
  Run on Thu Dec 15 15:23:56 2022
Reported on Thu Dec 15 15:27:02 2022

Filename/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm
StatementsExecuted 56630 statements in 71.6ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
6332397.73ms42.3msType::Tiny::::inline_check Type::Tiny::inline_check (recurses: max depth 4, inclusive time 31.3ms)
703217.30ms24.8msType::Tiny::::is_strictly_subtype_of Type::Tiny::is_strictly_subtype_of (recurses: max depth 7, inclusive time 47.9ms)
37511245.75ms6.80msType::Tiny::::isa Type::Tiny::isa
10162195.16ms8.35msType::Tiny::::can_be_inlined Type::Tiny::can_be_inlined (recurses: max depth 2, inclusive time 413µs)
794324.96ms12.7msType::Tiny::::strictly_equals Type::Tiny::strictly_equals
1114.91ms5.24msType::Tiny::::BEGIN@21 Type::Tiny::BEGIN@21
132324.58ms43.0msType::Tiny::::inline_assert Type::Tiny::inline_assert
1691414.46ms9.95msType::Tiny::::_loose_to_TypeTiny Type::Tiny::_loose_to_TypeTiny
54112.77ms9.62msType::Tiny::::_build_coercion Type::Tiny::_build_coercion (recurses: max depth 2, inclusive time 1.79ms)
1539712.24ms2.93msType::Tiny::::_is_null_constraint Type::Tiny::_is_null_constraint
82762.12ms3.86msType::Tiny::::new Type::Tiny::new
1111.81ms2.04msType::Tiny::::__ANON__[:126] Type::Tiny::__ANON__[:126]
69111.79ms55.2msType::Tiny::::parameterize Type::Tiny::parameterize
1911031.64ms31.8msType::Tiny::::is_strictly_a_type_of Type::Tiny::is_strictly_a_type_of
36241211.54ms1.54msType::Tiny::::has_parent Type::Tiny::has_parent
201918101.23ms1.23msType::Tiny::::CORE:match Type::Tiny::CORE:match (opcode)
3671031.10ms1.72msType::Tiny::::__ANON__[:100] Type::Tiny::__ANON__[:100] (recurses: max depth 1, inclusive time 8µs)
220211.09ms30.4msType::Tiny::::_overload_coderef Type::Tiny::_overload_coderef
38122799µs2.58msType::Tiny::::check Type::Tiny::check
6911698µs2.92msType::Tiny::::____make_key Type::Tiny::____make_key
18373687µs17.3msType::Tiny::::__ANON__[:89] Type::Tiny::__ANON__[:89]
153911683µs691µsType::Tiny::::constraint Type::Tiny::constraint
3822631µs22.9msType::Tiny::::exportables Type::Tiny::exportables
6232612µs14.6msType::Tiny::::_build_compiled_check Type::Tiny::_build_compiled_check
8321511µs606µsType::Tiny::::_stringify_no_magic Type::Tiny::_stringify_no_magic
1139123510µs510µsType::Tiny::::parent Type::Tiny::parent
79611377µs377µsType::Tiny::::has_inlined Type::Tiny::has_inlined
52511330µs330µsType::Tiny::::inlined Type::Tiny::inlined
36711325µs479µsType::Tiny::::display_name Type::Tiny::display_name (recurses: max depth 1, inclusive time 2µs)
1622314µs628µsType::Tiny::::__ANON__[:524] Type::Tiny::__ANON__[:524]
6733290µs357µsType::Tiny::::can Type::Tiny::can
311283µs4.06msType::Tiny::::__ANON__[:659] Type::Tiny::__ANON__[:659]
169104253µs15.4msType::Tiny::::compiled_check Type::Tiny::compiled_check (recurses: max depth 1, inclusive time 13µs)
12932253µs321µsType::Tiny::::is_anon Type::Tiny::is_anon
2732221µs2.08msType::Tiny::::create_child_type Type::Tiny::create_child_type
10622217µs305µsType::Tiny::::is_parameterizable Type::Tiny::is_parameterizable
240146198µs198µsType::Tiny::::__ANON__[:101] Type::Tiny::__ANON__[:101]
8576169µs1.64msType::Tiny::::has_coercion Type::Tiny::has_coercion (recurses: max depth 2, inclusive time 382µs)
3011164µs177µsType::Tiny::::__ANON__[:276] Type::Tiny::__ANON__[:276]
29752156µs156µsType::Tiny::::name Type::Tiny::name
885147µs147µsType::Tiny::::_install_overloads Type::Tiny::_install_overloads
111131µs131µsType::Tiny::::BEGIN@29 Type::Tiny::BEGIN@29
4633130µs147µsType::Tiny::::qualified_name Type::Tiny::qualified_name
5863128µs9.74msType::Tiny::::coercion Type::Tiny::coercion (recurses: max depth 2, inclusive time 1.80ms)
4411118µs142µsType::Tiny::::_build_display_name Type::Tiny::_build_display_name
13221110µs110µsType::Tiny::::CORE:sort Type::Tiny::CORE:sort (opcode)
1061188µs88µsType::Tiny::::has_constraint_generator Type::Tiny::has_constraint_generator
1032287µs87µsType::Tiny::::deprecated Type::Tiny::deprecated
331176µs234µsType::Tiny::::CORE:subst Type::Tiny::CORE:subst (opcode)
435569µs69µsType::Tiny::::__ANON__[:55] Type::Tiny::__ANON__[:55]
122167µs88µsType::Tiny::::_lookup_my_method Type::Tiny::_lookup_my_method (recurses: max depth 1, inclusive time 18µs)
176250µs53µsType::Tiny::::type_default Type::Tiny::type_default (recurses: max depth 1, inclusive time 4µs)
62148µs225µsType::Tiny::::AUTOLOAD Type::Tiny::AUTOLOAD
31146µs4.15msType::Tiny::::__ANON__[:602] Type::Tiny::__ANON__[:602]
542138µs38µsType::Tiny::::has_coercion_generator Type::Tiny::has_coercion_generator
222234µs45µsType::Tiny::::name_generator Type::Tiny::name_generator
341131µs31µsType::Tiny::::constraint_generator Type::Tiny::constraint_generator
31126µs712µsType::Tiny::::__ANON__[:1073] Type::Tiny::__ANON__[:1073]
11125µs35µsType::Tiny::::DESTROY Type::Tiny::DESTROY
55223µs1.09msType::Tiny::::where Type::Tiny::where
11121µs21µsType::Tiny::::BEGIN@3 Type::Tiny::BEGIN@3
21119µs28µsType::Tiny::::find_parent Type::Tiny::find_parent
201119µs19µsType::Tiny::::has_inline_generator Type::Tiny::has_inline_generator
271117µs17µsType::Tiny::::child_type_class Type::Tiny::child_type_class
62115µs24µsType::Tiny::::find_constraining_type Type::Tiny::find_constraining_type
11114µs24µsType::Tiny::::BEGIN@1435 Type::Tiny::BEGIN@1435
201114µs14µsType::Tiny::::inline_generator Type::Tiny::inline_generator
181114µs16µsType::Tiny::::my_methods Type::Tiny::my_methods
31113µs4.16msType::Tiny::::is_a_type_of Type::Tiny::is_a_type_of
51111µs11µsType::Tiny::::_build_name_generator Type::Tiny::_build_name_generator
11110µs537µsType::Tiny::::exportables_by_tag Type::Tiny::exportables_by_tag
3119µs12µsType::Tiny::::is_parameterized Type::Tiny::is_parameterized
15118µs8µsType::Tiny::::_build_constraint Type::Tiny::_build_constraint
1116µs13µsType::Tiny::::BEGIN@71 Type::Tiny::BEGIN@71
1115µs27µsType::Tiny::::BEGIN@20 Type::Tiny::BEGIN@20
1115µs6µsType::Tiny::::BEGIN@4 Type::Tiny::BEGIN@4
2115µs7µsType::Tiny::::type_parameter Type::Tiny::type_parameter
1114µs20µsType::Tiny::::BEGIN@72 Type::Tiny::BEGIN@72
3114µs4µsType::Tiny::::coercion_generator Type::Tiny::coercion_generator
1113µs19µsType::Tiny::::BEGIN@5 Type::Tiny::BEGIN@5
3113µs3µsType::Tiny::::has_parameters Type::Tiny::has_parameters
1112µs2µsType::Tiny::::BEGIN@7 Type::Tiny::BEGIN@7
2112µs2µsType::Tiny::::_build_my_methods Type::Tiny::_build_my_methods
1112µs2µsType::Tiny::::_swap Type::Tiny::_swap
5222µs2µsType::Tiny::::parameters Type::Tiny::parameters
1111µs1µsType::Tiny::::BEGIN@11 Type::Tiny::BEGIN@11
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
3230µs121µs
# spent 21µs within Type::Tiny::BEGIN@3 which was called: # once (21µs+0s) by Type::Library::BEGIN@16 at line 3
use 5.008001;
# spent 21µs making 1 call to Type::Tiny::BEGIN@3
4215µs27µs
# spent 6µs (5+1000ns) within Type::Tiny::BEGIN@4 which was called: # once (5µs+1000ns) by Type::Library::BEGIN@16 at line 4
use strict;
# spent 6µs making 1 call to Type::Tiny::BEGIN@4 # spent 1µs making 1 call to strict::import
5221µs235µs
# spent 19µs (3+16) within Type::Tiny::BEGIN@5 which was called: # once (3µs+16µs) by Type::Library::BEGIN@16 at line 5
use warnings;
# spent 19µs making 1 call to Type::Tiny::BEGIN@5 # spent 16µs making 1 call to warnings::import
6
7
# spent 2µs within Type::Tiny::BEGIN@7 which was called: # once (2µs+0s) by Type::Library::BEGIN@16 at line 9
BEGIN {
812µs if ( $] < 5.010 ) { require Devel::TypeTiny::Perl58Compat }
9120µs12µs}
# spent 2µs making 1 call to Type::Tiny::BEGIN@7
10
11
# spent 1µs within Type::Tiny::BEGIN@11 which was called: # once (1µs+0s) by Type::Library::BEGIN@16 at line 15
BEGIN {
1210s $Type::Tiny::AUTHORITY = 'cpan:TOBYINK';
1310s $Type::Tiny::VERSION = '2.000001';
1412µs $Type::Tiny::XS_VERSION = '0.016';
15125µs11µs}
# spent 1µs making 1 call to Type::Tiny::BEGIN@11
16
1711µs$Type::Tiny::VERSION =~ tr/_//d;
1810s$Type::Tiny::XS_VERSION =~ tr/_//d;
19
20214µs249µs
# spent 27µs (5+22) within Type::Tiny::BEGIN@20 which was called: # once (5µs+22µ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 22µs making 1 call to Exporter::import
212675µs15.24ms
# spent 5.24ms (4.91+331µs) within Type::Tiny::BEGIN@21 which was called: # once (4.91ms+331µs) by Type::Library::BEGIN@16 at line 21
use Types::TypeTiny ();
# spent 5.24ms 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 2µs within Type::Tiny::_swap which was called: # once (2µ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 131µs within Type::Tiny::BEGIN@29 which was called: # once (131µs+0s) by Type::Library::BEGIN@16 at line 66
BEGIN {
3011µs my $support_smartmatch = 0+ !!( $] >= 5.010001 );
31115µs eval qq{ sub SUPPORT_SMARTMATCH () { !! $support_smartmatch } };
32
3311µs my $fixed_precedence = 0+ !!( $] >= 5.014 );
34120µ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;
4210s $try_xs and eval {
43186µ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
554397µs
# spent 69µs within Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:55] which was called 43 times, avg 2µs/call: # 20 times (21µ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 1µs/call # 10 times (20µs+0s) by Type::Tiny::Class::new at line 46 of Type/Tiny/Class.pm, avg 2µ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 (1µ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() }
5611µs : sub () { !!0 };
57
5810s my $strict_mode = 0;
5912µ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 };
66122µs1131µs} #/ BEGIN
# spent 131µs making 1 call to Type::Tiny::BEGIN@29
67
68{
69
70
# spent 147µs within Type::Tiny::_install_overloads which was called 8 times, avg 18µs/call: # once (47µs+0s) by Type::Tiny::_build_coercion at line 29 of Type/Coercion.pm # once (36µs+0s) by Type::Library::BEGIN@16 at line 168 # once (15µ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 (14µs+0s) by JSON::Schema::Modern::BEGIN@31 at line 161 of Types/Standard.pm # once (14µ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 (8µs+0s) by Type::Library::BEGIN@16 at line 172 # once (7µs+0s) by Type::Tiny::_build_coercion at line 34 of Type/Coercion.pm # once (6µs+0s) by JSON::Schema::Modern::BEGIN@31 at line 191 of Types/Standard.pm
sub _install_overloads {
71226µs220µs
# spent 13µs (6+7) within Type::Tiny::BEGIN@71 which was called: # once (6µs+7µs) by Type::Library::BEGIN@16 at line 71
no strict 'refs';
# spent 13µs making 1 call to Type::Tiny::BEGIN@71 # spent 7µs making 1 call to strict::unimport
7225.46ms236µs
# spent 20µs (4+16) within Type::Tiny::BEGIN@72 which was called: # once (4µs+16µs) by Type::Library::BEGIN@16 at line 72
no warnings 'redefine', 'once';
# spent 20µs making 1 call to Type::Tiny::BEGIN@72 # spent 16µs making 1 call to warnings::unimport
73
74 # Coverage is checked on Perl 5.26
7584µ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;
82827µs *{ $class . '::((' } = sub { };
83814µs *{ $class . '::()' } = sub { };
842413µs *{ $class . '::()' } = do { my $x = 1; \$x };
85833µs while ( @_ ) {
86254µs my $f = shift;
872561µs *{ $class . '::(' . $f } = ref $_[0] ? shift : do {
8822µs my $m = shift;
89183610µs18316.6ms
# spent 17.3ms (687µs+16.6) within Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:89] which was called 183 times, avg 95µs/call: # 72 times (259µs+1.75ms) by JSON::Schema::Modern::Document::__ANON__[/Users/ether/git/JSON-Schema-Modern/lib/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 /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Document.pm, avg 28µs/call # 48 times (194µs+2.24ms) by JSON::Schema::Modern::__ANON__[/Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm:685] or Sub::Defer::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Sub/Defer.pm:178] at line 659 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 51µs/call # 47 times (188µs+12.0ms) by Method::Generate::Accessor::_validate_codulatable at line 686 of Method/Generate/Accessor.pm, avg 258µs/call # 10 times (14µs+7µs) by JSON::Schema::Modern::__ANON__[/Users/ether/git/JSON-Schema-Modern/lib/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 /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 2µs/call # 2 times (8µs+345µ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 720 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 176µs/call # 2 times (14µs+317µ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 715 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 165µs/call # 2 times (10µs+3µ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 721 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 7µs/call
sub { shift->$m( @_ ) }
# spent 16.6ms making 183 calls to Type::Tiny::_overload_coderef, avg 91µs/call
9022µs };
91 }
92 } #/ sub _install_overloads
93}
94
9510s__PACKAGE__->_install_overloads(
96
# spent 1.72ms (1.10+617µs) within Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:100] which was called 367 times, avg 5µs/call: # 68 times (248µs+75µs) by Type::Tiny::inline_assert at line 935, avg 5µs/call # 64 times (216µs+197µs) by Type::Tiny::inline_assert at line 947, avg 6µs/call # 48 times (168µs+191µs) by Type::Tiny::_build_compiled_check at line 537, avg 7µs/call # 39 times (73µs+28µ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 3µs/call # 37 times (105µs+33µs) by Type::Tiny::_build_coercion at line 502, avg 4µs/call # 37 times (100µs+20µs) by Type::Tiny::_overload_coderef at line 215, avg 3µs/call # 33 times (104µs+54µs) by Type::Tiny::CORE:subst at line 522, avg 5µs/call # 33 times (63µs+17µs) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:524] at line 523, avg 2µs/call # 6 times (16µs+8µ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 4µs/call # 2 times (6µs+-6µs) by Type::Tiny::Union::_build_display_name at line 97 of Type/Tiny/Union.pm, avg 0s/call
q("") => sub {
973671.29ms734623µs caller =~ m{^(Moo::HandleMoose|Sub::Quote)}
# spent 481µs making 367 calls to Type::Tiny::display_name, avg 1µs/call, recursion: max depth 1, sum of overlapping time 2µs # spent 144µs making 367 calls to Type::Tiny::CORE:match, avg 392ns/call
98 ? $_[0]->_stringify_no_magic
99 : $_[0]->display_name;
100 },
101240313µs
# spent 198µs within Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:101] which was called 240 times, avg 825ns/call: # 79 times (66µs+0s) by Type::Tiny::Class::parent at line 149 of Type/Tiny/Class.pm, avg 835ns/call # 58 times (39µs+0s) by Type::Coercion::_preserve_type_constraint at line 111 of Type/Coercion.pm, avg 672ns/call # 41 times (38µs+0s) by Method::Generate::Accessor::_generate_populate_set at line 567 of Method/Generate/Accessor.pm, avg 927ns/call # 17 times (25µs+0s) by Method::Generate::Accessor::_generate_use_default at line 367 of Method/Generate/Accessor.pm, avg 1µs/call # 10 times (15µs+0s) by Method::Generate::Accessor::is_simple_set at line 297 of Method/Generate/Accessor.pm, avg 2µs/call # 10 times (4µs+0s) by Method::Generate::Accessor::_generate_set at line 410 of Method/Generate/Accessor.pm, avg 400ns/call # 6 times (2µs+0s) by Type::Coercion::type_constraint at line 89 of Type/Coercion.pm, avg 333ns/call # 4 times (2µs+0s) by Types::Standard::Slurpy::my_unslurpy at line 751 of Types/Standard.pm, avg 500ns/call # 3 times (1µ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 333ns/call # 3 times (1µs+0s) by Types::Standard::Dict::__inline_generator at line 103 of Types/Standard/Dict.pm, avg 333ns/call # 3 times (1µs+0s) by Types::Standard::Dict::__inline_generator at line 96 of Types/Standard/Dict.pm, avg 333ns/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 (2µs+0s) by Type::Tiny::find_parent at line 743, avg 1µ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.04ms (1.81+230µs) within Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:126] which was called: # once (1.81ms+230µs) by JSON::Schema::Modern::BEGIN@33 at line 42 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Error.pm
q(|) => sub {
10411µs12µs my @tc = _swap @_;
# spent 2µ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...)
1241406µs require Type::Tiny::Union;
12514µs1130µs return "Type::Tiny::Union"->new_by_overload( type_constraints => \@tc );
# spent 130µ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] },
168130µs136µs);
# spent 36µs making 1 call to Type::Tiny::_install_overloads
169
170__PACKAGE__->_install_overloads(
171 q(~~) => sub { $_[0]->check( $_[1] ) },
17211µs18µs) if Type::Tiny::SUPPORT_SMARTMATCH;
# spent 8µ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 30.4ms (1.09+29.3) within Type::Tiny::_overload_coderef which was called 220 times, avg 138µs/call: # 183 times (595µs+16.0ms) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:89] at line 89, avg 91µs/call # 37 times (497µs+13.3ms) by Type::Tiny::exportables at line 1209, avg 372µs/call
sub _overload_coderef {
17822027µs my $self = shift;
179
180 # Bypass generating a coderef if we've already got the best possible one.
181 #
182220351µ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 )
19064186µs61308µs unless exists $self->{_overrides_assert_return};
# spent 308µs making 61 calls to Type::Tiny::can, avg 5µs/call
191
1926469µ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.
20327140µs8115.9ms $self->{_overload_coderef} = $self->can_be_inlined
# spent 14.3ms making 27 calls to Type::Tiny::inline_assert, avg 531µs/call # spent 1.10ms making 27 calls to Sub::Quote::quote_sub, avg 41µs/call # spent 437µs making 23 calls to Type::Tiny::can_be_inlined, avg 19µs/call # spent 26µs making 1 call to Type::Tiny::Union::can_be_inlined # spent 1µs making 3 calls to Type::Tiny::Enum::can_be_inlined, avg 333ns/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 );
2112725µs ++$self->{_overload_coderef_no_rebuild};
212 } #/ elsif ( exists( &Sub::Quote::quote_sub...))
213 else {
214378µs require Eval::TypeTiny;
21537152µs14813.1ms $self->{_overload_coderef} ||= $self->can_be_inlined
# spent 8.36ms making 37 calls to Type::Tiny::inline_assert, avg 226µs/call # spent 4.19ms making 37 calls to Eval::TypeTiny::eval_closure, avg 113µs/call # spent 413µs making 37 calls to Type::Tiny::can_be_inlined, avg 11µs/call # spent 120µs making 37 calls to Type::Tiny::__ANON__[Type/Tiny.pm:100], avg 3µ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
23164121µs $self->{_overload_coderef};
232} #/ sub _overload_coderef
233
234our %ALL_TYPES;
235
23611µsmy $QFS;
23710smy $uniq = 1;
238
239
# spent 3.86ms (2.12+1.75) within Type::Tiny::new which was called 82 times, avg 47µs/call: # 37 times (796µs+570µs) by Type::Library::add_type at line 222 of Type/Library.pm, avg 37µs/call # 27 times (832µs+1.01ms) by Type::Tiny::create_child_type at line 1096, avg 68µs/call # 11 times (317µs+106µs) by Type::Tiny::ConstrainedObject::new at line 36 of Type/Tiny/ConstrainedObject.pm, avg 38µs/call # 4 times (102µs+36µs) by Type::Tiny::Enum::new at line 84 of Type/Tiny/Enum.pm, avg 34µs/call # once (35µs+9µs) by Type::Tiny::Union::new at line 85 of Type/Tiny/Union.pm # once (20µs+9µs) by Types::TypeTiny::TypeTiny at line 421 of Types/TypeTiny.pm # once (13µs+7µs) by Types::TypeTiny::StringLike at line 195 of Types/TypeTiny.pm
sub new {
2408230µs my $class = shift;
24182114µs my %params = ( @_ == 1 ) ? %{ $_[0] } : @_;
242
2438239µs for ( qw/ name display_name library / ) {
244246129µs $params{$_} = $params{$_} . '' if defined $params{$_};
245 }
246
2478231µs if ( exists $params{parent} ) {
248 $params{parent} =
249 ref( $params{parent} ) =~ /^Type::Tiny\b/
250 ? $params{parent}
25163213µs6370µs : Types::TypeTiny::to_TypeTiny( $params{parent} );
# spent 70µs making 63 calls to Type::Tiny::CORE:match, avg 1µs/call
252
253 _croak "Parent must be an instance of %s", __PACKAGE__
254 unless blessed( $params{parent} )
25563168µs126261µs && $params{parent}->isa( __PACKAGE__ );
# spent 229µs making 63 calls to Type::Tiny::isa, avg 4µs/call # spent 32µs making 63 calls to Scalar::Util::blessed, avg 508ns/call
256
2576353µs6351µs if ( $params{parent}->deprecated and not exists $params{deprecated} ) {
# spent 51µs making 63 calls to Type::Tiny::deprecated, avg 810ns/call
258 $params{deprecated} = 1;
259 }
260 } #/ if ( exists $params{parent...})
261
2628230µs if ( exists $params{constraint}
263 and defined $params{constraint}
264 and not ref $params{constraint} )
265 {
26653µs require Eval::TypeTiny;
26752µs my $code = $params{constraint};
268529µs5504µs $params{constraint} = Eval::TypeTiny::eval_closure(
# spent 504µs making 5 calls to Eval::TypeTiny::eval_closure, avg 101µs/call
269 source => sprintf( 'sub ($) { %s }', $code ),
270 description => "anonymous check",
271 );
272
# spent 177µs (164+13) within Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:276] which was called 30 times, avg 6µs/call: # 30 times (164µs+13µs) by Type::Tiny::inline_check at line 895, avg 6µs/call
$params{inlined} ||= sub {
2733012µs my ( $type ) = @_;
2743042µs my $inlined = $_ eq '$_' ? "do { $code }" : "do { local \$_ = $_; $code }";
27530103µs3013µs $type->has_parent ? ( undef, $inlined ) : $inlined;
# spent 13µs making 30 calls to Type::Tiny::has_parent, avg 433ns/call
276 }
277526µs5102µs if ( !exists $params{parent} or $params{parent}->can_be_inlined );
# spent 102µs making 5 calls to Type::Tiny::can_be_inlined, avg 20µs/call
278 } #/ if ( exists $params{constraint...})
279
280 # canonicalize to a boolean
2818249µs $params{deprecated} = !!$params{deprecated};
282
2838243µs $params{name} = "__ANON__" unless exists $params{name};
2848246µs $params{uniq} = $uniq++;
285
2868239µ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 )
29139100µs3962µs or _croak '"%s" is not a valid type name', $params{name};
# spent 62µs making 39 calls to Type::Tiny::CORE:match, avg 2µs/call
292 }
293
2948222µ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
3038219µ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
3258247µs my $self = bless \%params, $class;
326
3278233µs unless ( $params{tmp} ) {
32882153µs my $uniq = $self->{uniq};
329
3308269µs $ALL_TYPES{$uniq} = $self;
33182160µs8243µs Scalar::Util::weaken( $ALL_TYPES{$uniq} );
# spent 43µs making 82 calls to Scalar::Util::weaken, avg 524ns/call
332
3338213µs my $tmp = $self;
33482162µs8243µs Scalar::Util::weaken( $tmp );
# spent 43µs making 82 calls to Scalar::Util::weaken, avg 524ns/call
33582241µs82596µs $Moo::HandleMoose::TYPE_MAP{ $self->_stringify_no_magic } = sub { $tmp };
# spent 596µs making 82 calls to Type::Tiny::_stringify_no_magic, avg 7µs/call
336 } #/ unless ( $params{tmp} )
337
3388244µ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
3588218µs if ( $params{my_methods} ) {
35940s 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}{$_},
364418µs1317µs ) for keys %{ $params{my_methods} };
# spent 10µs making 2 calls to Eval::TypeTiny::set_subname, avg 5µs/call # spent 5µs making 2 calls to Type::Tiny::qualified_name, avg 2µs/call # spent 2µs making 9 calls to Scalar::Util::reftype, avg 222ns/call
365 } #/ if ( $params{my_methods...})
366
36782152µs return $self;
368} #/ sub new
369
370
# spent 35µs (25+10) within Type::Tiny::DESTROY which was called: # once (25µs+10µs) by JSON::Schema::Modern::add_vocabulary at line 721 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm
sub DESTROY {
37111µs my $self = shift;
372118µs delete( $ALL_TYPES{ $self->{uniq} } );
37313µs110µs delete( $Moo::HandleMoose::TYPE_MAP{ $self->_stringify_no_magic } );
# spent 10µs making 1 call to Type::Tiny::_stringify_no_magic
37417µ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 606µs (511+95) within Type::Tiny::_stringify_no_magic which was called 83 times, avg 7µs/call: # 82 times (502µs+94µs) by Type::Tiny::new at line 335, avg 7µs/call # once (9µs+1µs) by Type::Tiny::DESTROY at line 373
sub _stringify_no_magic {
38583674µs24995µs sprintf(
# spent 35µs making 83 calls to Scalar::Util::blessed, avg 422ns/call # spent 35µs making 83 calls to Scalar::Util::reftype, avg 422ns/call # spent 25µs making 83 calls to Scalar::Util::refaddr, avg 301ns/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 9.95ms (4.46+5.48) within Type::Tiny::_loose_to_TypeTiny which was called 1691 times, avg 6µs/call: # 794 times (2.15ms+2.50ms) by Type::Tiny::strictly_equals at line 686, avg 6µs/call # 703 times (1.71ms+2.24ms) by Type::Tiny::is_strictly_subtype_of at line 693, avg 6µs/call # 191 times (580µs+726µs) by Type::Tiny::is_strictly_a_type_of at line 711, avg 7µs/call # 3 times (23µs+9µs) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:602] at line 589, avg 11µs/call
sub _loose_to_TypeTiny {
4231691339µs my $caller = caller( 1 ); # assumption
424 map +(
425 ref( $_ )
426 ? Types::TypeTiny::to_TypeTiny( $_ )
42716913.20ms33825.48ms : do { require Type::Utils; Type::Utils::dwim_type( $_, for => $caller ) }
# spent 5.48ms making 3382 calls to Types::TypeTiny::to_TypeTiny, avg 2µs/call
428 ), @_;
429}
430
431297410µs
# spent 156µs within Type::Tiny::name which was called 297 times, avg 525ns/call: # 129 times (68µs+0s) by Type::Tiny::is_anon at line 727, avg 527ns/call # 46 times (17µs+0s) by Type::Tiny::qualified_name at line 722, avg 370ns/call # 44 times (24µs+0s) by Type::Tiny::_build_display_name at line 487, avg 545ns/call # 40 times (43µs+0s) by Type::Library::_exporter_expand_sub at line 72 of Type/Library.pm, avg 1µs/call # 38 times (4µs+0s) by Type::Tiny::exportables at line 1187, avg 105ns/call
sub name { $_[0]{name} }
432367499µs45156µs
# spent 479µs (325+154) within Type::Tiny::display_name which was called 367 times, avg 1µs/call: # 367 times (325µs+154µs) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:100] at line 97, avg 1µs/call
sub display_name { $_[0]{display_name} ||= $_[0]->_build_display_name }
# spent 142µs making 44 calls to Type::Tiny::_build_display_name, avg 3µs/call # spent 14µs making 1 call to Type::Tiny::Union::_build_display_name
43311391.13ms
# spent 510µs within Type::Tiny::parent which was called 1139 times, avg 448ns/call: # 981 times (430µs+0s) by Type::Tiny::is_strictly_subtype_of at line 698, avg 438ns/call # 60 times (21µs+0s) by Type::Tiny::can_be_inlined at line 877, avg 350ns/call # 32 times (31µs+0s) by Type::Tiny::inline_check at line 899, avg 969ns/call # 20 times (7µs+0s) by Type::Tiny::inline_check at line 889, avg 350ns/call # 14 times (7µs+0s) by Type::Tiny::_build_compiled_check at line 532, avg 500ns/call # 12 times (5µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 629, avg 417ns/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 (1µs+0s) by Type::Tiny::_lookup_my_method at line 1369, avg 167ns/call # 3 times (0s+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 645, avg 0s/call # 2 times (2µs+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 1µs/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 # once (0s+0s) by Type::Tiny::type_default at line 573
sub parent { $_[0]{parent} }
43415391.61ms158µs
# spent 691µs (683+8) within Type::Tiny::constraint which was called 1539 times, avg 449ns/call: # 1539 times (683µs+8µs) by Type::Tiny::_is_null_constraint at line 495, avg 449ns/call
sub constraint { $_[0]{constraint} ||= $_[0]->_build_constraint }
# spent 8µs making 15 calls to Type::Tiny::_build_constraint, avg 533ns/call
435
436
# spent 15.4ms (253µs+15.2) within Type::Tiny::compiled_check which was called 169 times, avg 91µs/call: # 58 times (116µs+5.03ms) by Type::Coercion::_preserve_type_constraint at line 111 of Type/Coercion.pm, avg 89µs/call # 37 times (78µs+3.44ms) by Type::Tiny::exportables at line 1203, avg 95µs/call # 24 times (11µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 632, avg 458ns/call # 14 times (13µs+-13µs) by Type::Tiny::_build_compiled_check at line 532, avg 0s/call # 8 times (14µs+6.39ms) by Types::Standard::HashRef::__constraint_generator at line 32 of Types/Standard/HashRef.pm, avg 800µs/call # 8 times (7µs+0s) by Types::Standard::HashRef::__inline_generator at line 58 of Types/Standard/HashRef.pm, avg 875ns/call # 6 times (4µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 609, avg 667ns/call # 6 times (1µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 617, avg 167ns/call # 4 times (6µs+325µs) by Types::Standard::ArrayRef::__constraint_generator at line 36 of Types/Standard/ArrayRef.pm, avg 83µ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 {
437169351µs6015.2ms $_[0]{compiled_type_constraint} ||= $_[0]->_build_compiled_check;
# spent 13.6ms making 56 calls to Type::Tiny::_build_compiled_check, avg 243µs/call # spent 1.57ms making 4 calls to Type::Tiny::Enum::_build_compiled_check, avg 392µs/call
438}
43958132µs589.62ms
# spent 9.74ms (128µs+9.61) within Type::Tiny::coercion which was called 58 times, avg 168µs/call: # 37 times (58µs+1.02ms) by Type::Library::make_immutable at line 318 of Type/Library.pm, avg 29µs/call # 14 times (51µs+6.08ms) by Type::Tiny::parameterize at line 1082, avg 438µ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 (2µs+2.52ms) by JSON::Schema::Modern::BEGIN@31 at line 234 of Types/Standard.pm # once (4µs+2µs) by Type::Library::make_immutable at line 319 of Type/Library.pm
sub coercion { $_[0]{coercion} ||= $_[0]->_build_coercion }
# spent 11.4ms making 54 calls to Type::Tiny::_build_coercion, avg 211µs/call, recursion: max depth 2, sum of overlapping time 1.79ms # spent 3µs making 4 calls to Type::Coercion::__ANON__[Type/Coercion.pm:28], avg 750ns/call
440sub message { $_[0]{message} }
441sub library { $_[0]{library} }
442525633µs
# spent 330µs within Type::Tiny::inlined which was called 525 times, avg 629ns/call: # 525 times (330µs+0s) by Type::Tiny::inline_check at line 895, avg 629ns/call
sub inlined { $_[0]{inlined} }
443103134µs
# spent 87µs within Type::Tiny::deprecated which was called 103 times, avg 845ns/call: # 63 times (51µs+0s) by Type::Tiny::new at line 257, avg 810ns/call # 40 times (36µs+0s) by Type::Library::_exporter_install_sub at line 133 of Type/Library.pm, avg 900ns/call
sub deprecated { $_[0]{deprecated} }
4443455µs
# spent 31µs within Type::Tiny::constraint_generator which was called 34 times, avg 912ns/call: # 34 times (31µs+0s) by Type::Tiny::parameterize at line 1044, avg 912ns/call
sub constraint_generator { $_[0]{constraint_generator} }
4452028µs
# spent 14µs within Type::Tiny::inline_generator which was called 20 times, avg 700ns/call: # 20 times (14µs+0s) by Type::Tiny::parameterize at line 1057, avg 700ns/call
sub inline_generator { $_[0]{inline_generator} }
4462244µs511µs
# spent 45µs (34+11) within Type::Tiny::name_generator which was called 22 times, avg 2µs/call: # 20 times (33µs+9µs) by Type::Tiny::parameterize at line 1050, avg 2µs/call # 2 times (1µs+2µ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 11µs making 5 calls to Type::Tiny::_build_name_generator, avg 2µs/call
447312µs
# spent 4µs within Type::Tiny::coercion_generator which was called 3 times, avg 1µs/call: # 3 times (4µ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} }
44857µs
# spent 2µs within Type::Tiny::parameters which was called 5 times, avg 400ns/call: # 3 times (0s+0s) by Types::Standard::Dict::__inline_generator at line 103 of Types/Standard/Dict.pm, avg 0s/call # 2 times (2µs+0s) by Type::Tiny::type_parameter at line 1581, avg 1µ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} }
4521820µs22µs
# spent 16µs (14+2) within Type::Tiny::my_methods which was called 18 times, avg 889ns/call: # 18 times (14µs+2µs) by Type::Tiny::_lookup_my_method at line 1365, avg 889ns/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
45536243.90ms
# spent 1.54ms within Type::Tiny::has_parent which was called 3624 times, avg 425ns/call: # 911 times (451µs+0s) by Type::Tiny::can_be_inlined at line 877, avg 495ns/call # 851 times (311µs+0s) by Type::Tiny::can_be_inlined at line 879, avg 365ns/call # 639 times (310µs+0s) by Type::Tiny::is_strictly_subtype_of at line 697, avg 485ns/call # 571 times (211µs+0s) by Type::Tiny::inline_check at line 889, avg 370ns/call # 551 times (208µs+0s) by Type::Tiny::inline_check at line 891, avg 377ns/call # 32 times (15µs+0s) by Type::Tiny::inline_check at line 897, avg 469ns/call # 30 times (13µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:276] at line 275, avg 433ns/call # 15 times (9µs+0s) by Type::Tiny::_build_compiled_check at line 532, avg 600ns/call # 12 times (6µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 635, avg 500ns/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 628, avg 667ns/call # 3 times (0s+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 644, avg 0s/call
sub has_parent { exists $_[0]{parent} }
456sub has_library { exists $_[0]{library} }
457796808µs
# spent 377µs within Type::Tiny::has_inlined which was called 796 times, avg 474ns/call: # 796 times (377µs+0s) by Type::Tiny::can_be_inlined at line 881, avg 474ns/call
sub has_inlined { exists $_[0]{inlined} }
458106167µs
# spent 88µs within Type::Tiny::has_constraint_generator which was called 106 times, avg 830ns/call: # 106 times (88µs+0s) by Type::Tiny::is_parameterizable at line 998, avg 830ns/call
sub has_constraint_generator { exists $_[0]{constraint_generator} }
4592037µs
# spent 19µs within Type::Tiny::has_inline_generator which was called 20 times, avg 950ns/call: # 20 times (19µs+0s) by Type::Tiny::parameterize at line 1057, avg 950ns/call
sub has_inline_generator { exists $_[0]{inline_generator} }
4605492µs
# spent 38µs within Type::Tiny::has_coercion_generator which was called 54 times, avg 704ns/call: # 34 times (21µs+0s) by Type::Tiny::parameterize at line 1082, avg 618ns/call # 20 times (17µs+0s) by Type::Tiny::parameterize at line 1066, avg 850ns/call
sub has_coercion_generator { exists $_[0]{coercion_generator} }
46136µ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 1.64ms (169µs+1.47) within Type::Tiny::has_coercion which was called 85 times, avg 19µs/call: # 38 times (26µs+0s) by Type::Tiny::exportables at line 1220, avg 684ns/call # 37 times (96µs+43µs) by Type::Library::make_immutable at line 319 of Type/Library.pm, avg 4µs/call # 2 times (7µs+1.45ms) 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 730µs/call # 2 times (9µs+4µs) by Type::Tiny::Union::new at line 86 of Type/Tiny/Union.pm, avg 6µs/call # 2 times (11µs+-11µs) by Types::Standard::Dict::__coercion_generator at line 257 of Types/Standard/Dict.pm, avg 0s/call # 2 times (8µs+-8µs) by Types::Standard::Dict::__coercion_generator at line 258 of Types/Standard/Dict.pm, avg 0s/call # 2 times (12µs+-12µs) by Types::Standard::HashRef::__coercion_generator at line 103 of Types/Standard/HashRef.pm, avg 0s/call
sub has_coercion {
4718523µs30s $_[0]->coercion if $_[0]{_build_coercion}; # trigger auto build thing
# spent 1.80ms making 3 calls to Type::Tiny::coercion, avg 599µs/call, recursion: max depth 2, sum of overlapping time 1.80ms
47285165µs9655µs $_[0]{coercion} and !!@{ $_[0]{coercion}->type_coercion_map };
# spent 29µs making 48 calls to Type::Coercion::__ANON__[Type/Coercion.pm:28], avg 604ns/call # spent 26µs making 48 calls to Type::Coercion::type_coercion_map, avg 542ns/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
48411µsmy $null_constraint = sub { !!1 };
485
486
# spent 142µs (118+24) within Type::Tiny::_build_display_name which was called 44 times, avg 3µs/call: # 44 times (118µs+24µs) by Type::Tiny::display_name at line 432, avg 3µs/call
sub _build_display_name {
4874481µs4424µs shift->name;
# spent 24µs making 44 calls to Type::Tiny::name, avg 545ns/call
488}
489
490
# spent 8µs within Type::Tiny::_build_constraint which was called 15 times, avg 533ns/call: # 15 times (8µs+0s) by Type::Tiny::constraint at line 434, avg 533ns/call
sub _build_constraint {
4911517µs return $null_constraint;
492}
493
494
# spent 2.93ms (2.24+691µs) within Type::Tiny::_is_null_constraint which was called 1539 times, avg 2µs/call: # 852 times (1.29ms+421µs) by Type::Tiny::can_be_inlined at line 877, avg 2µs/call # 543 times (765µs+162µs) by Type::Tiny::inline_check at line 889, avg 2µs/call # 59 times (71µs+35µs) by Type::Tiny::can_be_inlined at line 879, avg 2µs/call # 50 times (77µs+62µs) by Type::Tiny::_build_compiled_check at line 532, avg 3µs/call # 28 times (33µs+6µs) by Type::Tiny::inline_check at line 891, avg 1µs/call # 6 times (5µs+4µs) by Type::Tiny::find_constraining_type at line 558, avg 2µs/call # once (1µs+1µs) by Type::Tiny::type_default at line 573
sub _is_null_constraint {
49515392.50ms1539691µs shift->constraint == $null_constraint;
# spent 691µs making 1539 calls to Type::Tiny::constraint, avg 449ns/call
496}
497
498
# spent 9.62ms (2.77+6.85) within Type::Tiny::_build_coercion which was called 54 times, avg 178µs/call: # 54 times (2.77ms+6.85ms) by Type::Tiny::coercion at line 439, avg 178µs/call
sub _build_coercion {
49954365µs require Type::Coercion;
5005411µs my $self = shift;
5015430µs my %opts = ( type_constraint => $self );
5025491µs91310µs $opts{display_name} = "to_$self" unless $self->is_anon;
# spent 172µs making 54 calls to Type::Tiny::is_anon, avg 3µs/call # spent 138µs making 37 calls to Type::Tiny::__ANON__[Type/Tiny.pm:100], avg 4µs/call
5035471µs546.00ms my $coercion = "Type::Coercion"->new( %opts );
# spent 6.00ms making 54 calls to Type::Coercion::new, avg 111µs/call
5045428µs52.18ms $self->{_build_coercion}->( $coercion ) if ref $self->{_build_coercion};
# spent 1.47ms making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:732], avg 735µs/call # spent 712µs making 3 calls to Type::Tiny::__ANON__[Type/Tiny.pm:1073], avg 237µs/call
5055495µ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 11µs within Type::Tiny::_build_name_generator which was called 5 times, avg 2µs/call: # 5 times (11µs+0s) by Type::Tiny::name_generator at line 446, avg 2µs/call
sub _build_name_generator {
52051µs my $self = shift;
521
# spent 628µs (314+314) within Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:524] which was called 16 times, avg 39µs/call: # 14 times (299µs+288µs) by Type::Tiny::parameterize at line 1050, avg 42µs/call # 2 times (15µs+26µ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 20µs/call
return sub {
52216161µs66392µs defined && s/[\x00-\x1F]//smg for ( my ( $s, @a ) = @_ );
# spent 234µs making 33 calls to Type::Tiny::CORE:subst, avg 7µs/call # spent 158µs making 33 calls to Type::Tiny::__ANON__[Type/Tiny.pm:100], avg 5µs/call
5231696µs3380µs sprintf( '%s[%s]', $s, join q[,], map !defined() ? 'undef' : !ref() && /\W/ ? B::perlstring($_) : $_, @a );
# spent 80µs making 33 calls to Type::Tiny::__ANON__[Type/Tiny.pm:100], avg 2µs/call
524518µs };
525}
526
527
# spent 14.6ms (612µs+13.9) within Type::Tiny::_build_compiled_check which was called 62 times, avg 235µs/call: # 56 times (525µs+13.1ms) by Type::Tiny::compiled_check at line 437, avg 243µs/call # 4 times (65µs+617µs) by Type::Tiny::Enum::_build_compiled_check at line 198 of Type/Tiny/Enum.pm, avg 170µs/call # 2 times (22µs+234µs) by Type::Tiny::check at line 758, avg 128µs/call
sub _build_compiled_check {
5286211µs my $self = shift;
529
5306221µs local our $AvoidCallbacks = 0;
531
5326291µs105162µs if ( $self->_is_null_constraint and $self->has_parent ) {
# spent 139µs making 50 calls to Type::Tiny::_is_null_constraint, avg 3µs/call # spent 9µs making 15 calls to Type::Tiny::has_parent, avg 600ns/call # spent 7µs making 14 calls to Type::Tiny::parent, avg 500ns/call # spent 6µs making 7 calls to Type::Tiny::Class::_is_null_constraint, avg 857ns/call # spent 1µs making 4 calls to Type::Tiny::Enum::_is_null_constraint, avg 250ns/call # spent 0s making 1 call to Type::Tiny::Duck::_is_null_constraint # spent 13µs making 14 calls to Type::Tiny::compiled_check, avg 929ns/call, recursion: max depth 1, sum of overlapping time 13µs
533 return $self->parent->compiled_check;
534 }
535
5364823µs require Eval::TypeTiny;
53748331µs19213.8ms return Eval::TypeTiny::eval_closure(
# spent 7.54ms making 44 calls to Type::Tiny::inline_check, avg 171µs/call # spent 5.50ms making 48 calls to Eval::TypeTiny::eval_closure, avg 114µs/call # spent 359µs making 48 calls to Type::Tiny::__ANON__[Type/Tiny.pm:100], avg 7µs/call # spent 330µs making 44 calls to Type::Tiny::can_be_inlined, avg 8µs/call # spent 38µs making 4 calls to Type::Tiny::Enum::inline_check, avg 10µs/call # spent 4µ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 24µs (15+9) within Type::Tiny::find_constraining_type which was called 6 times, avg 4µs/call: # 3 times (12µs+4µs) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 613, avg 5µs/call # 3 times (3µs+5µ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 {
55762µs my $self = shift;
55862µs69µs if ( $self->_is_null_constraint and $self->has_parent ) {
# spent 9µs making 6 calls to Type::Tiny::_is_null_constraint, avg 2µs/call
559 return $self->parent->find_constraining_type;
560 }
56167µs $self;
562}
563
564
# spent 53µs (50+3) within Type::Tiny::type_default which was called 17 times, avg 3µs/call: # 8 times (19µ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 2µ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 (2µ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 1µs/call # once (10µs+7µ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 (2µ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 (4µs+-4µs) by Type::Tiny::type_default at line 573
sub type_default {
565178µs my ( $self, @args ) = @_;
566178µs if ( exists $self->{type_default} ) {
567161µs if ( @args ) {
568 my $td = $self->{type_default};
569 return sub { local $_ = \@args; &$td; };
570 }
5711635µs return $self->{type_default};
572 }
57317µs43µs if ( my $parent = $self->parent ) {
# spent 2µ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 0s making 1 call to Type::Tiny::parent # spent 4µs making 1 call to Type::Tiny::type_default, recursion: max depth 1, sum of overlapping time 4µ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 4.15ms (46µs+4.10) within Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:602] which was called 3 times, avg 1.38ms/call: # 3 times (46µs+4.10ms) by Type::Tiny::is_a_type_of at line 680, avg 1.38ms/call
*cmp = sub {
58932µs332µs my ( $A, $B ) = _loose_to_TypeTiny( $_[0], $_[1] );
# spent 32µs making 3 calls to Type::Tiny::_loose_to_TypeTiny, avg 11µs/call
59039µs69µs return unless blessed( $A ) && $A->isa( "Type::Tiny" );
# spent 7µ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
59138µs65µs return unless blessed( $B ) && $B->isa( "Type::Tiny" );
# spent 5µs making 3 calls to Type::Tiny::isa, avg 2µs/call # spent 0s making 3 calls to Scalar::Util::blessed, avg 0s/call
59233µs for my $comparator ( @CMP ) {
59335µs34.06ms my $result = $comparator->( $A, $B );
# spent 4.06ms making 3 calls to Type::Tiny::__ANON__[Type/Tiny.pm:659], avg 1.35ms/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 }
59937µs return $result;
600 }
601 return CMP_UNKNOWN;
60212µs};
603
604
# spent 4.06ms (283µs+3.77) within Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] which was called 3 times, avg 1.35ms/call: # 3 times (283µs+3.77ms) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:602] at line 593, avg 1.35ms/call
push @CMP, sub {
60531µs my ( $A, $B ) = @_;
606312µ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
609312µs125µs return CMP_EQUIVALENT
# spent 4µs making 6 calls to Type::Tiny::compiled_check, avg 667ns/call # spent 1µs making 6 calls to Scalar::Util::refaddr, avg 167ns/call
610 if Scalar::Util::refaddr( $A->compiled_check ) ==
611 Scalar::Util::refaddr( $B->compiled_check );
612
61335µs316µs my $A_stem = $A->find_constraining_type;
# spent 16µs making 3 calls to Type::Tiny::find_constraining_type, avg 5µs/call
61432µs38µs my $B_stem = $B->find_constraining_type;
# spent 8µs making 3 calls to Type::Tiny::find_constraining_type, avg 3µs/call
61538µs61µs return CMP_EQUIVALENT
# spent 1µs making 6 calls to Scalar::Util::refaddr, avg 167ns/call
616 if Scalar::Util::refaddr( $A_stem ) == Scalar::Util::refaddr( $B_stem );
61739µs123µs return CMP_EQUIVALENT
# spent 2µs making 6 calls to Scalar::Util::refaddr, avg 333ns/call # spent 1µs making 6 calls to Type::Tiny::compiled_check, avg 167ns/call
618 if Scalar::Util::refaddr( $A_stem->compiled_check ) ==
619 Scalar::Util::refaddr( $B_stem->compiled_check );
620
62139µs12776µs if ( $A_stem->can_be_inlined and $B_stem->can_be_inlined ) {
# spent 735µs making 6 calls to Type::Tiny::inline_check, avg 122µs/call # spent 41µs making 6 calls to Type::Tiny::can_be_inlined, avg 7µ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;
62833µs32µs while ( $A_prime->has_parent ) {
# spent 2µs making 3 calls to Type::Tiny::has_parent, avg 667ns/call
629127µs125µs $A_prime = $A_prime->parent;
# spent 5µs making 12 calls to Type::Tiny::parent, avg 417ns/call
6301226µs241µs return CMP_SUBTYPE
# spent 1µs making 24 calls to Scalar::Util::refaddr, avg 42ns/call
631 if Scalar::Util::refaddr( $A_prime ) == Scalar::Util::refaddr( $B_stem );
6321232µs4818µs return CMP_SUBTYPE
# spent 11µs making 24 calls to Type::Tiny::compiled_check, avg 458ns/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 );
6351234µs602.93ms if ( $A_prime->can_be_inlined and $B_stem->can_be_inlined ) {
# spent 2.77ms making 24 calls to Type::Tiny::inline_check, avg 115µs/call # spent 163µs making 24 calls to Type::Tiny::can_be_inlined, avg 7µs/call # spent 6µs making 12 calls to Type::Tiny::has_parent, avg 500ns/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: {
64362µs my $B_prime = $B_stem;
64431µs30s while ( $B_prime->has_parent ) {
# spent 0s making 3 calls to Type::Tiny::has_parent, avg 0s/call
64533µs30s $B_prime = $B_prime->parent;
# spent 0s making 3 calls to Type::Tiny::parent, avg 0s/call
646331µ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;
65914µ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 4.16ms (13µs+4.15) within Type::Tiny::is_a_type_of which was called 3 times, avg 1.39ms/call: # 3 times (13µs+4.15ms) by Types::Standard::Dict::__inline_generator at line 100 of Types/Standard/Dict.pm, avg 1.39ms/call
sub is_a_type_of {
68037µs34.15ms my $result = Type::Tiny::cmp( $_[0], $_[1] );
# spent 4.15ms making 3 calls to Type::Tiny::__ANON__[Type/Tiny.pm:602], avg 1.38ms/call
68132µs return unless defined $result;
68236µs $result eq CMP_SUBTYPE or $result eq CMP_EQUAL or $result eq CMP_EQUIVALENT;
683}
684
685
# spent 12.7ms (4.96+7.75) within Type::Tiny::strictly_equals which was called 794 times, avg 16µs/call: # 597 times (3.55ms+5.90ms) by Type::Tiny::is_strictly_subtype_of at line 698, avg 16µs/call # 191 times (1.37ms+1.79ms) by Type::Tiny::is_strictly_a_type_of at line 715, avg 17µs/call # 6 times (37µs+58µs) by Types::Standard::Dict::__inline_generator at line 103 of Types/Standard/Dict.pm, avg 16µs/call
sub strictly_equals {
686794423µs7944.65ms my ( $self, $other ) = _loose_to_TypeTiny( @_ );
# spent 4.65ms making 794 calls to Type::Tiny::_loose_to_TypeTiny, avg 6µs/call
6877941.45ms15881.64ms return unless blessed( $self ) && $self->isa( "Type::Tiny" );
# spent 1.35ms making 794 calls to Type::Tiny::isa, avg 2µs/call # spent 288µs making 794 calls to Scalar::Util::blessed, avg 363ns/call
6887941.35ms15881.47ms return unless blessed( $other ) && $other->isa( "Type::Tiny" );
# spent 1.24ms making 794 calls to Type::Tiny::isa, avg 2µs/call # spent 228µs making 794 calls to Scalar::Util::blessed, avg 287ns/call
6897941.22ms $self->{uniq} == $other->{uniq};
690}
691
692
# spent 24.8ms (7.30+17.5) within Type::Tiny::is_strictly_subtype_of which was called 703 times, avg 35µs/call: # 512 times (5.21ms+-5.21ms) by Type::Tiny::is_strictly_subtype_of at line 698, avg 0s/call # 191 times (2.10ms+22.7ms) by Type::Tiny::is_strictly_a_type_of at line 715, avg 130µs/call
sub is_strictly_subtype_of {
693703417µs7033.96ms my ( $self, $other ) = _loose_to_TypeTiny( @_ );
# spent 3.96ms making 703 calls to Type::Tiny::_loose_to_TypeTiny, avg 6µs/call
6947031.34ms14061.41ms return unless blessed( $self ) && $self->isa( "Type::Tiny" );
# spent 1.16ms making 703 calls to Type::Tiny::isa, avg 2µs/call # spent 252µs making 703 calls to Scalar::Util::blessed, avg 358ns/call
6957031.15ms14061.38ms return unless blessed( $other ) && $other->isa( "Type::Tiny" );
# spent 1.16ms making 703 calls to Type::Tiny::isa, avg 2µs/call # spent 224µs making 703 calls to Scalar::Util::blessed, avg 319ns/call
696
697703484µs703348µs return unless $self->has_parent;
# spent 310µs making 639 calls to Type::Tiny::has_parent, avg 485ns/call # spent 19µs making 42 calls to Type::Tiny::ConstrainedObject::has_parent, avg 452ns/call # spent 19µs making 22 calls to Type::Tiny::Enum::has_parent, avg 864ns/call
6985971.72ms221810.4ms $self->parent->strictly_equals( $other )
# spent 9.45ms making 597 calls to Type::Tiny::strictly_equals, avg 16µs/call # spent 440µs making 84 calls to Type::Tiny::Class::parent, avg 5µs/call # spent 430µs making 981 calls to Type::Tiny::parent, avg 438ns/call # spent 112µs making 44 calls to Type::Tiny::Enum::parent, avg 3µs/call # spent 47.9ms making 512 calls to Type::Tiny::is_strictly_subtype_of, avg 94µs/call, recursion: max depth 7, sum of overlapping time 47.9ms
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 31.8ms (1.64+30.2) within Type::Tiny::is_strictly_a_type_of which was called 191 times, avg 167µs/call: # 134 times (1.19ms+21.7ms) 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 171µs/call # 32 times (225µs+4.20ms) by Types::Standard::Dict::__constraint_generator at line 64 of Types/Standard/Dict.pm, avg 138µs/call # 4 times (33µs+1.01ms) by Types::Standard::Tuple::__inline_generator at line 133 of Types/Standard/Tuple.pm, avg 260µs/call # 4 times (35µs+916µs) by Types::Standard::Tuple::__constraint_generator at line 59 of Types/Standard/Tuple.pm, avg 238µs/call # 4 times (53µs+407µs) by Types::Standard::Dict::__constraint_generator at line 44 of Types/Standard/Dict.pm, avg 115µs/call # 4 times (27µs+354µs) by Types::Standard::Dict::__inline_generator at line 90 of Types/Standard/Dict.pm, avg 95µs/call # 4 times (28µs+315µ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 86µs/call # 2 times (22µs+613µs) by Types::Standard::Tuple::__constraint_generator at line 28 of Types/Standard/Tuple.pm, avg 318µs/call # 2 times (17µs+526µs) by Types::Standard::Tuple::__inline_generator at line 95 of Types/Standard/Tuple.pm, avg 272µs/call # once (11µs+193µs) by Types::Standard::Dict::__coercion_generator at line 244 of Types/Standard/Dict.pm
sub is_strictly_a_type_of {
711191170µs1911.31ms my ( $self, $other ) = _loose_to_TypeTiny( @_ );
# spent 1.31ms making 191 calls to Type::Tiny::_loose_to_TypeTiny, avg 7µs/call
712191398µs382473µs return unless blessed( $self ) && $self->isa( "Type::Tiny" );
# spent 399µs making 191 calls to Type::Tiny::isa, avg 2µs/call # spent 74µs making 191 calls to Scalar::Util::blessed, avg 387ns/call
713191327µs382425µs return unless blessed( $other ) && $other->isa( "Type::Tiny" );
# spent 364µs making 191 calls to Type::Tiny::isa, avg 2µs/call # spent 61µs making 191 calls to Scalar::Util::blessed, avg 319ns/call
714
715191451µs38228.0ms $self->strictly_equals( $other ) or $self->is_strictly_subtype_of( $other );
# spent 24.8ms making 191 calls to Type::Tiny::is_strictly_subtype_of, avg 130µs/call # spent 3.16ms making 191 calls to Type::Tiny::strictly_equals, avg 17µs/call
716}
717
718
# spent 147µs (130+17) within Type::Tiny::qualified_name which was called 46 times, avg 3µs/call: # 37 times (102µs+9µs) by Eval::TypeTiny::type_to_coderef at line 169 of Eval/TypeTiny.pm, avg 3µs/call # 7 times (24µs+7µ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 4µs/call # 2 times (4µs+1µs) by Type::Tiny::new at line 364, avg 2µs/call
sub qualified_name {
719469µs my $self = shift;
720 ( exists $self->{library} and $self->name ne "__ANON__" )
721 ? "$self->{library}::$self->{name}"
72246103µs4617µs : $self->{name};
# spent 17µs making 46 calls to Type::Tiny::name, avg 370ns/call
723}
724
725
# spent 321µs (253+68) within Type::Tiny::is_anon which was called 129 times, avg 2µs/call: # 54 times (137µs+35µs) by Type::Tiny::_build_coercion at line 502, avg 3µs/call # 38 times (44µs+15µs) by Type::Tiny::exportables at line 1187, avg 2µs/call # 37 times (72µs+18µs) by Type::Library::add_type at line 228 of Type/Library.pm, avg 2µs/call
sub is_anon {
72612915µs my $self = shift;
727129247µs12968µs $self->name eq "__ANON__";
# spent 68µs making 129 calls to Type::Tiny::name, avg 527ns/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 28µs (19+9) within Type::Tiny::find_parent which was called 2 times, avg 14µs/call: # 2 times (19µs+9µs) by Types::Standard::Slurpy::my_unslurpy at line 751 of Types/Standard.pm, avg 14µs/call
sub find_parent {
73720s my $self = shift;
73820s my ( $test ) = @_;
739
74023µs local ( $_, $. );
74122µs my $type = $self;
74220s my $count = 0;
74323µs22µs while ( $type ) {
# spent 2µs making 2 calls to Type::Tiny::__ANON__[Type/Tiny.pm:101], avg 1µs/call
744211µs27µs if ( $test->( $_ = $type, $. = $count ) ) {
# spent 7µ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 2.58ms (799µs+1.78) within Type::Tiny::check which was called 381 times, avg 7µs/call: # 343 times (669µs+1.63ms) by Types::TypeTiny::is_TypeTiny at line 2 of (eval 40)[Types/TypeTiny.pm:58], avg 7µs/call # 38 times (130µs+144µs) by Types::TypeTiny::is_StringLike at line 2 of (eval 39)[Types/TypeTiny.pm:58], avg 7µs/call
sub check {
75738143µs my $self = shift;
758381619µs3831.78ms ( $self->{compiled_type_constraint} ||= $self->_build_compiled_check )->( @_ );
# spent 1.49ms making 343 calls to Eval::TypeTiny::Sandbox::__ANON__[(eval 57)[Eval/TypeTiny.pm:8]:3], avg 4µs/call # spent 256µs making 2 calls to Type::Tiny::_build_compiled_check, avg 128µs/call # spent 27µs making 38 calls to Eval::TypeTiny::Sandbox::__ANON__[(eval 58)[Eval/TypeTiny.pm:8]:3], avg 711ns/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 8.35ms (5.16+3.19) within Type::Tiny::can_be_inlined which was called 1016 times, avg 8µs/call: # 633 times (3.02ms+1.98ms) by Type::Tiny::inline_check at line 886, avg 8µs/call # 121 times (718µs+597µs) by Type::Tiny::inline_assert at line 915, avg 11µs/call # 60 times (220µs+-220µs) by Type::Tiny::can_be_inlined at line 877, avg 0s/call # 44 times (222µs+108µs) by Type::Tiny::_build_compiled_check at line 537, avg 8µs/call # 37 times (194µs+219µs) by Type::Tiny::_overload_coderef at line 215, avg 11µs/call # 30 times (131µs+81µs) by Types::Standard::Dict::__inline_generator at line 117 of Types/Standard/Dict.pm, avg 7µs/call # 24 times (83µs+80µs) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 635, avg 7µs/call # 23 times (286µs+151µs) by Type::Tiny::_overload_coderef at line 203, avg 19µs/call # 8 times (62µs+34µs) by Types::Standard::HashRef::__inline_generator at line 65 of Types/Standard/HashRef.pm, avg 12µs/call # 6 times (29µs+19µs) by Type::Tiny::Union::can_be_inlined at line 117 of Type/Tiny/Union.pm, avg 8µs/call # 6 times (26µs+15µs) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 621, avg 7µs/call # 5 times (65µs+37µs) by Type::Tiny::new at line 277, avg 20µs/call # 4 times (21µs+12µs) by Types::Standard::ArrayRef::__inline_generator at line 100 of Types/Standard/ArrayRef.pm, avg 8µs/call # 3 times (16µs+12µs) by Types::Standard::Dict::__inline_generator at line 96 of Types/Standard/Dict.pm, avg 9µs/call # 2 times (14µs+12µs) by Types::Standard::Tuple::__inline_generator at line 103 of Types/Standard/Tuple.pm, avg 13µs/call # 2 times (7µs+18µs) by Type::Coercion::can_be_inlined at line 324 of Type/Coercion.pm, avg 12µs/call # 2 times (15µs+9µs) by Types::Standard::Map::__inline_generator at line 61 of Types/Standard/Map.pm, avg 12µs/call # 2 times (9µs+10µs) by Type::Coercion::can_be_inlined at line 318 of Type/Coercion.pm, avg 10µs/call # 2 times (7µs+6µ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 6µs/call # once (9µs+3µ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 (6µs+3µs) by Types::Standard::Dict::__coercion_generator at line 256 of Types/Standard/Dict.pm
sub can_be_inlined {
8761016107µs my $self = shift;
87710161.18ms20932.32ms return $self->parent->can_be_inlined
# spent 1.71ms making 852 calls to Type::Tiny::_is_null_constraint, avg 2µs/call # spent 451µs making 911 calls to Type::Tiny::has_parent, avg 495ns/call # spent 69µs making 105 calls to Type::Tiny::ConstrainedObject::has_parent, avg 657ns/call # spent 58µs making 96 calls to Type::Tiny::Class::_is_null_constraint, avg 604ns/call # spent 21µs making 60 calls to Type::Tiny::parent, avg 350ns/call # spent 7µs making 9 calls to Type::Tiny::Duck::_is_null_constraint, avg 778ns/call # spent 413µs making 60 calls to Type::Tiny::can_be_inlined, avg 7µs/call, recursion: max depth 2, sum of overlapping time 413µs
878 if $self->has_parent && $self->_is_null_constraint;
879956534µs1015448µs return !!1
# spent 311µs making 851 calls to Type::Tiny::has_parent, avg 365ns/call # spent 106µs making 59 calls to Type::Tiny::_is_null_constraint, avg 2µs/call # spent 31µs making 105 calls to Type::Tiny::ConstrainedObject::has_parent, avg 295ns/call
880 if !$self->has_parent && $self->_is_null_constraint;
8819011.40ms901424µs return $self->has_inlined;
# spent 377µs making 796 calls to Type::Tiny::has_inlined, avg 474ns/call # spent 46µs making 96 calls to Type::Tiny::Class::has_inlined, avg 479ns/call # spent 1µs making 9 calls to Type::Tiny::Duck::has_inlined, avg 111ns/call
882}
883
884
# spent 42.3ms (7.73+34.5) within Type::Tiny::inline_check which was called 633 times, avg 67µs/call: # 121 times (1.69ms+29.4ms) by Type::Tiny::inline_assert at line 915, avg 257µs/call # 118 times (1.44ms+-1.44ms) 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 (591µs+-591µ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 (407µs+-407µ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 (589µs+6.95ms) by Type::Tiny::_build_compiled_check at line 537, avg 171µs/call # 37 times (417µs+-417µ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 (337µs+-337µ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 (426µs+-426µs) by Type::Tiny::inline_check at line 899, avg 0s/call # 24 times (202µs+2.56ms) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 635, avg 115µs/call # 24 times (269µs+-269µ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 (462µs+-462µ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 (151µs+-151µs) by Type::Tiny::inline_check at line 889, avg 0s/call # 16 times (345µs+-345µ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 (59µs+676µs) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:659] at line 621, avg 122µs/call # 4 times (88µs+45µs) by Type::Tiny::Union::inline_check at line 140 of Type/Tiny/Union.pm, avg 33µs/call # 3 times (41µs+-41µ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 (27µs+-27µ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 # 3 times (49µs+-49µ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 # 2 times (21µs+15µs) by Type::Coercion::inline_coercion at line 368 of Type/Coercion.pm, avg 18µs/call # 2 times (62µs+-62µ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 # 2 times (18µs+-18µ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 (20µs+-20µ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 (20µs+-20µ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
sub inline_check {
88563369µs my $self = shift;
886633361µs6335.00ms _croak 'Cannot inline type constraint check for "%s"', $self
# spent 5.00ms making 633 calls to Type::Tiny::can_be_inlined, avg 8µs/call
887 unless $self->can_be_inlined;
888
889633667µs12781.18ms return $self->parent->inline_check( @_ )
# spent 927µs making 543 calls to Type::Tiny::_is_null_constraint, avg 2µs/call # spent 211µs making 571 calls to Type::Tiny::has_parent, avg 370ns/call # spent 17µs making 58 calls to Type::Tiny::Class::_is_null_constraint, avg 293ns/call # spent 14µs making 62 calls to Type::Tiny::ConstrainedObject::has_parent, avg 226ns/call # spent 7µs making 20 calls to Type::Tiny::parent, avg 350ns/call # spent 2µs making 4 calls to Type::Tiny::Duck::_is_null_constraint, avg 500ns/call # spent 383µs making 20 calls to Type::Tiny::inline_check, avg 19µs/call, recursion: max depth 2, sum of overlapping time 383µs
890 if $self->has_parent && $self->_is_null_constraint;
891613351µs641260µs return '(!!1)'
# spent 208µs making 551 calls to Type::Tiny::has_parent, avg 377ns/call # spent 39µs making 28 calls to Type::Tiny::_is_null_constraint, avg 1µs/call # spent 13µs making 62 calls to Type::Tiny::ConstrainedObject::has_parent, avg 210ns/call
892 if !$self->has_parent && $self->_is_null_constraint;
893
894587112µs local $_ = $_[0];
8955871.65ms117457.5ms my @r = $self->inlined->( $self, @_ );
# spent 32.4ms making 24 calls to Types::Standard::Dict::__ANON__[Types/Standard/Dict.pm:161], avg 1.35ms/call # spent 16.5ms making 37 calls to Types::Standard::HashRef::__ANON__[Types/Standard/HashRef.pm:76], avg 447µs/call # spent 2.91ms making 24 calls to Types::Standard::ArrayRef::__ANON__[Types/Standard/ArrayRef.pm:121], avg 121µs/call # spent 1.49ms making 8 calls to Types::Standard::Tuple::__ANON__[Types/Standard/Tuple.pm:164], avg 187µs/call # spent 1.39ms making 57 calls to Types::Standard::__ANON__[Types/Standard.pm:685], avg 24µs/call # spent 686µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:734], avg 343µs/call # spent 391µs making 3 calls to Types::Standard::Map::__ANON__[Types/Standard/Map.pm:87], avg 130µs/call # spent 330µs making 525 calls to Type::Tiny::inlined, avg 629ns/call # spent 192µs making 58 calls to Type::Tiny::Class::inlined, avg 3µs/call # spent 177µs making 30 calls to Type::Tiny::__ANON__[Type/Tiny.pm:276], avg 6µs/call # spent 155µs making 58 calls to Type::Tiny::Class::__ANON__[Type/Tiny/Class.pm:89], avg 3µs/call # spent 104µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:921], avg 52µs/call # spent 90µs making 81 calls to Types::Standard::__ANON__[Types/Standard.pm:523], avg 1µs/call # spent 75µs making 35 calls to Types::Standard::__ANON__[Types/Standard.pm:277], avg 2µs/call # spent 75µs making 76 calls to Types::Standard::__ANON__[Types/Standard.pm:438], avg 987ns/call # spent 67µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:945], avg 34µs/call # spent 59µs making 38 calls to Types::Standard::__ANON__[Types/Standard.pm:501], avg 2µs/call # spent 53µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:328], avg 26µs/call # spent 45µs making 23 calls to Types::Standard::__ANON__[Types/Standard.pm:362], avg 2µs/call # spent 30µs making 3 calls to Types::Standard::__ANON__[Types/Standard.pm:295], avg 10µs/call # spent 28µs making 26 calls to Types::Standard::__ANON__[Types/Standard.pm:241], avg 1µs/call # spent 27µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:456], avg 14µs/call # spent 24µs making 4 calls to Type::Tiny::Duck::__ANON__[Type/Tiny/Duck.pm:104], avg 6µs/call # spent 21µs making 13 calls to Types::Standard::__ANON__[Types/Standard.pm:229], avg 2µs/call # spent 12µs making 4 calls to Type::Tiny::Duck::inlined, avg 3µs/call # spent 12µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:851], avg 6µs/call # spent 10µs making 7 calls to Types::Standard::__ANON__[Types/Standard.pm:384], avg 1µs/call # spent 9µs making 5 calls to Types::Standard::__ANON__[Types/Standard.pm:251], avg 2µs/call # spent 8µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:488], avg 4µs/call # spent 7µs making 4 calls to Types::Standard::__ANON__[Types/Standard.pm:348], avg 2µs/call # spent 6µs making 1 call to Types::TypeTiny::__ANON__[Types/TypeTiny.pm:174] # spent 4µs making 4 calls to Types::Standard::__ANON__[Types/Standard.pm:264], avg 1µs/call # spent 3µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:375], avg 2µs/call # spent 3µs making 5 calls to Types::Standard::__ANON__[Types/Standard.pm:566], avg 600ns/call # spent 3µs making 1 call to Types::TypeTiny::__ANON__[Types/TypeTiny.pm:413] # spent 1µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:470], avg 500ns/call # spent 1µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:545], avg 500ns/call
896587114µs if ( @r and not defined $r[0] ) {
8973211µs3215µs _croak 'Inlining type constraint check for "%s" returned undef!', $self
# spent 15µs making 32 calls to Type::Tiny::has_parent, avg 469ns/call
898 unless $self->has_parent;
8993278µs6431µs $r[0] = $self->parent->inline_check( @_ );
# spent 31µs making 32 calls to Type::Tiny::parent, avg 969ns/call # spent 991µs making 32 calls to Type::Tiny::inline_check, avg 31µs/call, recursion: max depth 4, sum of overlapping time 991µs
900 }
901 my $r = join " && " => map {
90212062.31ms1004501µs /[;{}]/ && !/\Ado \{.+\}\z/
# spent 501µs making 1004 calls to Type::Tiny::CORE:match, avg 499ns/call
903 ? "do { $SafePackage $_ }"
904 : "($_)"
905 } @r;
9065871.06ms return @r == 1 ? $r : "($r)";
907} #/ sub inline_check
908
909
# spent 43.0ms (4.58+38.5) within Type::Tiny::inline_assert which was called 132 times, avg 326µs/call: # 68 times (1.68ms+18.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 299µs/call # 37 times (2.20ms+6.16ms) by Type::Tiny::_overload_coderef at line 215, avg 226µs/call # 27 times (700µs+13.6ms) by Type::Tiny::_overload_coderef at line 203, avg 531µs/call
sub inline_assert {
910132738µs require B;
91113262µs my $self = shift;
912132186µs my ( $varname, $typevarname, %extras ) = @_;
913
91413220µs my $inline_check;
915132354µs26432.8ms if ( $self->can_be_inlined ) {
# spent 31.1ms making 121 calls to Type::Tiny::inline_check, avg 257µs/call # spent 1.31ms making 121 calls to Type::Tiny::can_be_inlined, avg 11µs/call # spent 163µs making 9 calls to Type::Tiny::Enum::inline_check, avg 18µs/call # spent 149µs making 2 calls to Type::Tiny::Union::inline_check, avg 74µs/call # spent 41µs making 2 calls to Type::Tiny::Union::can_be_inlined, avg 20µs/call # spent 22µs making 9 calls to Type::Tiny::Enum::can_be_inlined, avg 2µs/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
92513269µs my $do_wrapper = !delete $extras{no_wrapper};
926
92713219µs my $inline_throw;
928132137µ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.39ms748806µs ',', map +( B::perlstring( $_ ) => B::perlstring( $extras{$_} ) ),
# spent 400µs making 612 calls to B::perlstring, avg 654ns/call # spent 323µs making 68 calls to Type::Tiny::__ANON__[Type/Tiny.pm:100], avg 5µs/call # spent 83µs making 68 calls to Type::Tiny::CORE:sort, avg 1µ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(
94764565µs192594µs ',', map +( B::perlstring( $_ ) => B::perlstring( $extras{$_} ) ),
# spent 413µs making 64 calls to Type::Tiny::__ANON__[Type/Tiny.pm:100], avg 6µs/call # spent 154µs making 64 calls to B::perlstring, avg 2µs/call # spent 27µs making 64 calls to Type::Tiny::CORE:sort, avg 422ns/call
948 sort keys %extras
949 ),
950 );
951 } #/ else [ if ( $typevarname ) ]
952
953132375µ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 305µs (217+88) within Type::Tiny::is_parameterizable which was called 106 times, avg 3µs/call: # 69 times (156µs+65µs) by Type::Tiny::parameterize at line 1026, avg 3µs/call # 37 times (61µs+23µs) by Eval::TypeTiny::type_to_coderef at line 149 of Eval/TypeTiny.pm, avg 2µs/call
sub is_parameterizable {
998106205µs10688µs shift->has_constraint_generator;
# spent 88µs making 106 calls to Type::Tiny::has_constraint_generator, avg 830ns/call
999}
1000
1001
# spent 12µs (9+3) within Type::Tiny::is_parameterized which was called 3 times, avg 4µs/call: # 3 times (9µs+3µs) by Types::Standard::Dict::__inline_generator at line 103 of Types/Standard/Dict.pm, avg 4µs/call
sub is_parameterized {
100237µ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 2.92ms (698µs+2.22) within Type::Tiny::____make_key which was called 69 times, avg 42µs/call: # 69 times (698µs+2.22ms) by Type::Tiny::parameterize at line 1036, avg 42µs/call
sub ____make_key {
1009 #<<<
1010 join ',', map {
101169200µ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' :
1016388495µs3082.23ms !ref() ? do { require B; B::perlstring( $_ ) } :
# spent 2.16ms making 228 calls to Types::TypeTiny::is_TypeTiny, avg 9µs/call # spent 66µs making 80 calls to B::perlstring, avg 825ns/call
1017 '____CANNOT_KEY____';
1018 } @_;
1019 #>>>
1020 } #/ sub ____make_key
102111µs my %param_cache;
1022
1023
# spent 55.2ms (1.79+53.4) within Type::Tiny::parameterize which was called 69 times, avg 800µs/call: # 69 times (1.78ms+53.4ms) 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 800µs/call
sub parameterize {
10246919µs my $self = shift;
1025
102669100µs69221µs $self->is_parameterizable
# spent 221µs making 69 calls to Type::Tiny::is_parameterizable, avg 3µs/call
1027 or @_
1028 ? _croak( "Type '%s' does not accept parameters", "$self" )
1029 : return ( $self );
1030
103169150µs159269µs @_ = map Types::TypeTiny::to_TypeTiny( $_ ), @_;
# spent 269µ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.
10356920µs %seen = ();
10366972µs692.92ms my $key = $self->____make_key( @_ );
# spent 2.92ms making 69 calls to Type::Tiny::____make_key, avg 42µs/call
103769140µs6939µs undef( $key ) if $key =~ /____CANNOT_KEY____/;
# spent 39µs making 69 calls to Type::Tiny::CORE:match, avg 565ns/call
10386989µs return $param_cache{$key} if defined $key && defined $param_cache{$key};
1039
10403410µs local $Type::Tiny::parameterize_type = $self;
10413415µs local $_ = $_[0];
1042340s my $P;
1043
104434136µs7844.5ms my ( $constraint, $compiled ) = $self->constraint_generator->( @_ );
# spent 10.7ms making 10 calls to Types::Standard::__ANON__[Types/Standard.pm:190], avg 1.07ms/call # spent 8.38ms making 4 calls to Types::Standard::Dict::__constraint_generator, avg 2.09ms/call # spent 8.03ms making 8 calls to Types::Standard::HashRef::__constraint_generator, avg 1.00ms/call # spent 4.34ms making 2 calls to Types::Standard::Tuple::__constraint_generator, avg 2.17ms/call # spent 3.56ms making 7 calls to Types::Standard::__ANON__[Types/Standard.pm:987], avg 509µs/call # spent 2.89ms making 4 calls to Types::Standard::__ANON__[Types/Standard.pm:1059], avg 724µs/call # spent 2.49ms making 1 call to Types::Standard::Map::__constraint_generator # spent 2.23ms making 4 calls to Types::Standard::ArrayRef::__constraint_generator, avg 556µs/call # spent 1.64ms making 1 call to Types::Standard::__ANON__[Types/Standard.pm:1033] # spent 182µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:737], avg 91µs/call # spent 31µs making 34 calls to Type::Tiny::constraint_generator, avg 912ns/call # spent 24µs making 1 call to Types::Standard::__ANON__[Types/Standard.pm:678]
1045
10463437µs34309µs if ( Types::TypeTiny::is_TypeTiny( $constraint ) ) {
# spent 309µs making 34 calls to Types::TypeTiny::is_TypeTiny, avg 9µs/call
1047 $P = $constraint;
1048 }
1049 else {
105020112µs401.33ms my %options = (
# spent 665µs making 4 calls to Types::Standard::__ANON__[Types/Standard.pm:826], avg 166µs/call # spent 587µs making 14 calls to Type::Tiny::__ANON__[Type/Tiny.pm:524], avg 42µs/call # spent 42µs making 20 calls to Type::Tiny::name_generator, avg 2µs/call # spent 41µs making 2 calls to Types::Standard::__ANON__[Types/Standard.pm:786], avg 20µs/call
1051 constraint => $constraint,
1052 display_name => $self->name_generator->( $self, @_ ),
1053 parameters => [@_],
1054 );
1055203µs $options{compiled_type_constraint} = $compiled
1056 if $compiled;
10572069µs607.30ms $options{inlined} = $self->inline_generator->( @_ )
# spent 5.30ms making 4 calls to Types::Standard::Dict::__inline_generator, avg 1.33ms/call # spent 1.68ms making 2 calls to Types::Standard::Tuple::__inline_generator, avg 840µs/call # spent 159µs making 8 calls to Types::Standard::HashRef::__inline_generator, avg 20µs/call # spent 68µs making 4 calls to Types::Standard::ArrayRef::__inline_generator, avg 17µs/call # spent 34µs making 1 call to Types::Standard::Map::__inline_generator # spent 19µs making 20 calls to Type::Tiny::has_inline_generator, avg 950ns/call # spent 19µs making 1 call to Types::Standard::__ANON__[Types/Standard.pm:686] # spent 14µs making 20 calls to Type::Tiny::inline_generator, avg 700ns/call
1058 if $self->has_inline_generator;
1059 $options{type_default} = $self->{type_default_generator}->( @_ )
10602034µs14105µs if exists $self->{type_default_generator}; # undocumented
# spent 52µs making 8 calls to Types::Standard::__ANON__[Types/Standard.pm:532], avg 6µs/call # spent 26µs making 4 calls to Types::Standard::__ANON__[Types/Standard.pm:510], avg 6µs/call # spent 22µs making 1 call to Types::Standard::__ANON__[Types/Standard.pm:661] # spent 5µs making 1 call to Types::Standard::__ANON__[Types/Standard.pm:704]
1061 exists $options{$_} && !defined $options{$_} && delete $options{$_}
10622046µs for keys %options;
1063
10642036µs20947µs $P = $self->create_child_type( %options );
# spent 947µs making 20 calls to Type::Tiny::create_child_type, avg 47µs/call
1065
10662034µs2017µs if ( $self->has_coercion_generator ) {
# spent 17µs making 20 calls to Type::Tiny::has_coercion_generator, avg 850ns/call
10672049µs my @args = @_;
1068
# spent 712µs (26+686) within Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:1073] which was called 3 times, avg 237µs/call: # 3 times (26µs+686µs) by Type::Tiny::_build_coercion at line 504, avg 237µs/call
$P->{_build_coercion} = sub {
106930s my $coercion = shift;
107037µs6684µs my $built = $self->coercion_generator->( $self, $P, @args );
# spent 368µs making 2 calls to Types::Standard::HashRef::__coercion_generator, avg 184µs/call # spent 312µs making 1 call to Types::Standard::Dict::__coercion_generator # spent 4µs making 3 calls to Type::Tiny::coercion_generator, avg 1µs/call
107132µs $coercion->add_type_coercions( @{ $built->type_coercion_map } ) if $built;
107237µs32µs $coercion->freeze;
# spent 2µs making 3 calls to Type::Coercion::freeze, avg 667ns/call
10732055µs };
1074 }
1075 } #/ else [ if ( Types::TypeTiny::is_TypeTiny...)]
1076
10773415µs if ( defined $key ) {
10783433µs $param_cache{$key} = $P;
107934103µs3413µs Scalar::Util::weaken( $param_cache{$key} );
# spent 13µs making 34 calls to Scalar::Util::weaken, avg 382ns/call
1080 }
1081
10823462µs626.17ms $P->coercion->freeze unless $self->has_coercion_generator;
# spent 6.13ms making 14 calls to Type::Tiny::coercion, avg 438µs/call # spent 21µs making 34 calls to Type::Tiny::has_coercion_generator, avg 618ns/call # spent 15µs making 14 calls to Type::Coercion::freeze, avg 1µs/call
1083
10843483µs return $P;
1085 } #/ sub parameterize
1086}
1087
108810s
# spent 17µs within Type::Tiny::child_type_class which was called 27 times, avg 630ns/call: # 27 times (17µs+0s) by Type::Tiny::create_child_type at line 1096, avg 630ns/call
sub child_type_class {
10892738µs __PACKAGE__;
1090}
1091
1092
# spent 2.08ms (221µs+1.86) within Type::Tiny::create_child_type which was called 27 times, avg 77µs/call: # 20 times (122µs+825µs) by Type::Tiny::parameterize at line 1064, avg 47µs/call # 5 times (93µs+977µs) by Type::Tiny::where at line 1567, avg 214µs/call # 2 times (6µs+59µ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 32µs/call
sub create_child_type {
1093279µs my $self = shift;
1094272µs my %moreopts;
10952734µs $moreopts{is_object} = 1 if $self->{is_object};
109627123µs541.86ms return $self->child_type_class->new( parent => $self, %moreopts, @_ );
# spent 1.84ms making 27 calls to Type::Tiny::new, avg 68µs/call # spent 17µs making 27 calls to Type::Tiny::child_type_class, avg 630ns/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 22.9ms (631µs+22.3) within Type::Tiny::exportables which was called 38 times, avg 603µs/call: # 37 times (608µs+21.8ms) by Type::Library::add_type at line 235 of Type/Library.pm, avg 605µs/call # once (23µs+504µs) by Type::Tiny::exportables_by_tag at line 1231
sub exportables {
11863816µs my ( $self, $base_name, $tag ) = ( shift, @_ ); # $tag is undocumented
11873839µs7663µs if ( not $self->is_anon ) {
# spent 59µs making 38 calls to Type::Tiny::is_anon, avg 2µs/call # spent 4µs making 38 calls to Type::Tiny::name, avg 105ns/call
1188 $base_name ||= $self->name;
1189 }
1190386µs $tag ||= 0;
1191
1192382µs my @exportables;
1193385µs return \@exportables if ! $base_name;
1194
11953816µs require Eval::TypeTiny;
1196
11973871µs374.40ms push @exportables, {
# spent 4.40ms making 37 calls to Eval::TypeTiny::type_to_coderef, avg 119µs/call
1198 name => $base_name,
1199 code => Eval::TypeTiny::type_to_coderef( $self ),
1200 tags => [ 'types' ],
1201 } if $tag eq 'types' || !$tag;
1202
12033881µs373.52ms push @exportables, {
# spent 3.52ms making 37 calls to Type::Tiny::compiled_check, avg 95µs/call
1204 name => sprintf( 'is_%s', $base_name ),
1205 code => $self->compiled_check,
1206 tags => [ 'is' ],
1207 } if $tag eq 'is' || !$tag;
1208
12093896µs3713.8ms push @exportables, {
# spent 13.8ms making 37 calls to Type::Tiny::_overload_coderef, avg 372µ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] ) },
122038120µs42525µs tags => [ 'to' ],
# spent 496µs making 1 call to Type::Coercion::compiled_coercion # spent 26µs making 38 calls to Type::Tiny::has_coercion, avg 684ns/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
12233857µs return \@exportables;
1224}
1225
1226
# spent 537µs (10+527) within Type::Tiny::exportables_by_tag which was called: # once (10µs+527µ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} || [] };
123114µs1527µs } @{ $self->exportables( $base_name, $tag ) };
# spent 527µs making 1 call to Type::Tiny::exportables
123213µ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 6.80ms (5.75+1.06) within Type::Tiny::isa which was called 3751 times, avg 2µs/call: # 794 times (1.13ms+218µs) by Type::Tiny::strictly_equals at line 687, avg 2µs/call # 794 times (1.05ms+189µs) by Type::Tiny::strictly_equals at line 688, avg 2µs/call # 703 times (1.01ms+147µs) by Type::Tiny::is_strictly_subtype_of at line 695, avg 2µs/call # 703 times (984µs+171µs) by Type::Tiny::is_strictly_subtype_of at line 694, avg 2µs/call # 236 times (432µs+115µ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 2µs/call # 191 times (320µs+79µs) by Type::Tiny::is_strictly_a_type_of at line 712, avg 2µs/call # 191 times (324µs+40µs) by Type::Tiny::is_strictly_a_type_of at line 713, avg 2µs/call # 68 times (298µs+50µ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 5µs/call # 63 times (186µs+43µs) by Type::Tiny::new at line 255, avg 4µs/call # 3 times (6µs+1000ns) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:602] at line 590, avg 2µs/call # 3 times (4µs+1µs) 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 (3µs+2µs) by Type::Tiny::Union::new at line 60 of Type/Tiny/Union.pm, avg 2µs/call
sub isa {
13303751352µs my $self = shift;
1331
13323751491µ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
13473751370µs if ( $INC{"Mouse.pm"}
1348 and ref( $self )
1349 and $_[0] eq 'Mouse::Meta::TypeConstraint' )
1350 {
1351 return !!1;
1352 }
1353
135437517.99ms37511.06ms $self->SUPER::isa( @_ );
# spent 1.06ms making 3751 calls to UNIVERSAL::isa, avg 282ns/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 {
135824µs return {};
1359}
1360
1361
# spent 88µs (67+21) within Type::Tiny::_lookup_my_method which was called 12 times, avg 7µs/call: # 6 times (52µs+36µs) by Type::Tiny::AUTOLOAD at line 1429, avg 15µs/call # 6 times (15µs+-15µs) by Type::Tiny::_lookup_my_method at line 1369, avg 0s/call
sub _lookup_my_method {
1362122µs my $self = shift;
1363129µs my ( $name ) = @_;
1364
13651221µs1816µs if ( $self->my_methods->{$name} ) {
# spent 16µs making 18 calls to Type::Tiny::my_methods, avg 889ns/call
1366 return $self->my_methods->{$name};
1367 }
1368
1369617µs185µs if ( $self->has_parent ) {
# spent 4µs making 6 calls to Type::Tiny::has_parent, avg 667ns/call # spent 1µs making 6 calls to Type::Tiny::parent, avg 167ns/call # spent 18µs making 6 calls to Type::Tiny::_lookup_my_method, avg 3µs/call, recursion: max depth 1, sum of overlapping time 18µ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 357µs (290+67) within Type::Tiny::can which was called 67 times, avg 5µs/call: # 61 times (249µs+59µs) by Type::Tiny::_overload_coderef at line 190, avg 5µs/call # 4 times (26µs+5µs) by Type::Coercion::add_type_coercions at line 240 of Type/Coercion.pm, avg 8µs/call # 2 times (15µs+3µs) by Type::Tiny::Union::new_by_overload at line 30 of Type/Tiny/Union.pm, avg 9µs/call
sub can {
1382677µs my $self = shift;
1383
13846728µs return !!0
1385 if $_[0] eq 'type_parameter'
1386 && blessed( $_[0] )
1387 && $_[0]->has_parameters;
1388
138967230µs6764µs my $can = $self->SUPER::can( @_ );
# spent 64µs making 67 calls to UNIVERSAL::can, avg 955ns/call
139067120µs return $can if $can;
1391
139262µ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 }
1398611µs63µs if ( $_[0] =~ /\Amy_(.+)\z/ ) {
# spent 3µs making 6 calls to Type::Tiny::CORE:match, avg 500ns/call
1399 my $method = $self->_lookup_my_method( $1 );
1400 return $method if $method;
1401 }
140263µs if ( $self->{is_object} && $object_methods{ $_[0] } ) {
1403 require Type::Tiny::ConstrainedObject;
1404 return Type::Tiny::ConstrainedObject->can( $_[0] );
1405 }
140665µs for my $util ( qw/ grep map sort rsort first any all assert_any assert_all / ) {
1407547µ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
141566µs return;
1416} #/ sub can
1417
1418
# spent 225µs (48+177) within Type::Tiny::AUTOLOAD which was called 6 times, avg 38µs/call: # 3 times (32µs+118µs) by Types::Standard::Dict::__constraint_generator at line 44 of Types/Standard/Dict.pm, avg 50µs/call # 3 times (16µs+59µs) by Types::Standard::Dict::__inline_generator at line 90 of Types/Standard/Dict.pm, avg 25µs/call
sub AUTOLOAD {
141961µs my $self = shift;
1420622µs615µs my ( $m ) = ( our $AUTOLOAD =~ /::(\w+)$/ );
# spent 15µs making 6 calls to Type::Tiny::CORE:match, avg 2µs/call
142163µs return if $m eq 'DESTROY';
1422
142361µs if ( ref( $self ) ) {
142463µs if ( $INC{"Moose.pm"} ) {
1425 my $method = $self->moose_type->can( $m );
1426 return $self->moose_type->$method( @_ ) if $method;
1427 }
1428610µs65µs if ( $m =~ /\Amy_(.+)\z/ ) {
# spent 5µs making 6 calls to Type::Tiny::CORE:match, avg 833ns/call
142968µs688µs my $method = $self->_lookup_my_method( $1 );
# spent 88µs making 6 calls to Type::Tiny::_lookup_my_method, avg 15µs/call
1430620µs669µs return &$method( $self, @_ ) if $method;
# spent 69µs making 6 calls to Types::Standard::Slurpy::my_unslurpy, avg 12µs/call
1431 }
1432 if ( $self->{is_object} && $object_methods{$m} ) {
1433 require Type::Tiny::ConstrainedObject;
1434 unshift @_, $self;
143521.03ms234µs
# spent 24µs (14+10) within Type::Tiny::BEGIN@1435 which was called: # once (14µs+10µs) by Type::Library::BEGIN@16 at line 1435
no strict 'refs';
# spent 24µ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( @_ ) }
1567526µs51.07ms
# spent 1.09ms (23µs+1.07) within Type::Tiny::where which was called 5 times, avg 219µs/call: # once (5µs+369µs) by JSON::Schema::Modern::add_vocabulary at line 720 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm # once (9µs+266µs) by JSON::Schema::Modern::BEGIN@35 at line 40 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Document.pm # once (3µs+154µs) by OpenAPI::Modern::BEGIN@26 at line 936 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm # once (3µs+150µs) by JSON::Schema::Modern::BEGIN@35 at line 79 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Document.pm # once (3µs+131µs) by OpenAPI::Modern::BEGIN@26 at line 650 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm
sub where { shift->create_child_type( constraint => @_ ) }
# spent 1.07ms making 5 calls to Type::Tiny::create_child_type, avg 214µ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}
158126µs22µs
# spent 7µs (5+2) within Type::Tiny::type_parameter which was called 2 times, avg 4µs/call: # 2 times (5µs+2µs) by Types::Standard::Slurpy::my_unslurpy at line 751 of Types/Standard.pm, avg 4µs/call
sub type_parameter { ( shift->parameters || [] )->[0] }
# spent 2µs making 2 calls to Type::Tiny::parameters, avg 1µ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
1619113µs1;
1620
1621__END__
 
# spent 1.23ms within Type::Tiny::CORE:match which was called 2019 times, avg 609ns/call: # 1004 times (501µs+0s) by Type::Tiny::inline_check at line 902, avg 499ns/call # 367 times (144µs+0s) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:100] at line 97, avg 392ns/call # 180 times (173µ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 961ns/call # 168 times (137µ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 815ns/call # 70 times (54µs+0s) by JSON::Schema::Modern::Document::_assert__path_to_resource at line 24 of (eval 303)[Sub/Quote.pm:3], avg 771ns/call # 69 times (39µs+0s) by Type::Tiny::parameterize at line 1037, avg 565ns/call # 63 times (70µs+0s) by Type::Tiny::new at line 251, avg 1µs/call # 39 times (62µs+0s) by Type::Tiny::new at line 291, avg 2µs/call # 20 times (8µ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 400ns/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 (15µs+0s) by Type::Tiny::AUTOLOAD at line 1420, avg 2µs/call # 6 times (5µs+0s) by Type::Tiny::AUTOLOAD at line 1428, avg 833ns/call # 6 times (3µs+0s) by Type::Tiny::can at line 1398, avg 500ns/call # 3 times (3µs+0s) by JSON::Schema::Modern::_assert__metaschema_vocabulary_classes at line 24 of (eval 364)[Sub/Quote.pm:3], avg 1µs/call # once (3µs+0s) by JSON::Schema::Modern::Result::new at line 139 of (eval 436)[Sub/Quote.pm:3] # once (3µs+0s) by JSON::Schema::Modern::new at line 98 of (eval 420)[Sub/Quote.pm:3] # once (2µ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 110µs within Type::Tiny::CORE:sort which was called 132 times, avg 833ns/call: # 68 times (83µs+0s) by Type::Tiny::inline_assert at line 935, avg 1µs/call # 64 times (27µs+0s) by Type::Tiny::inline_assert at line 947, avg 422ns/call
sub Type::Tiny::CORE:sort; # opcode
# spent 234µs (76+158) within Type::Tiny::CORE:subst which was called 33 times, avg 7µs/call: # 33 times (76µs+158µs) by Type::Tiny::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/Type/Tiny.pm:524] at line 522, avg 7µs/call
sub Type::Tiny::CORE:subst; # opcode