Filename | /opt/flows/lib/lib/perl5/namespace/clean/_Util.pm |
Statements | Executed 13 statements in 308µs |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
1 | 1 | 1 | 16µs | 22µs | BEGIN@12 | namespace::clean::_Util::
1 | 1 | 1 | 10µs | 43µs | BEGIN@18 | namespace::clean::_Util::
1 | 1 | 1 | 8µs | 38µs | BEGIN@19 | namespace::clean::_Util::
1 | 1 | 1 | 8µs | 71µs | BEGIN@15 | namespace::clean::_Util::
1 | 1 | 1 | 7µs | 20µs | BEGIN@13 | namespace::clean::_Util::
1 | 1 | 1 | 4µs | 4µs | BEGIN@23 | namespace::clean::_Util::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | ### !!!ACHTUNG!!! | ||||
2 | # | ||||
3 | # This module is to be loaded at configure time straight from the Makefile.PL | ||||
4 | # in order to get access to some of the constants / utils | ||||
5 | # None of the dependencies will be available yet at this point, so make | ||||
6 | # sure to never use anything beyond what the minimum supported perl came with | ||||
7 | # (no, relying on configure_requires is not ok) | ||||
8 | |||||
9 | package # hide from the pauses | ||||
10 | namespace::clean::_Util; | ||||
11 | |||||
12 | 2 | 29µs | 2 | 28µs | # spent 22µs (16+6) within namespace::clean::_Util::BEGIN@12 which was called:
# once (16µs+6µs) by namespace::clean::BEGIN@38 at line 12 # spent 22µs making 1 call to namespace::clean::_Util::BEGIN@12
# spent 6µs making 1 call to warnings::import |
13 | 2 | 29µs | 2 | 32µs | # spent 20µs (7+13) within namespace::clean::_Util::BEGIN@13 which was called:
# once (7µs+13µs) by namespace::clean::BEGIN@38 at line 13 # spent 20µs making 1 call to namespace::clean::_Util::BEGIN@13
# spent 12µs making 1 call to strict::import |
14 | |||||
15 | 2 | 59µs | 2 | 134µs | # spent 71µs (8+63) within namespace::clean::_Util::BEGIN@15 which was called:
# once (8µs+63µs) by namespace::clean::BEGIN@38 at line 15 # spent 71µs making 1 call to namespace::clean::_Util::BEGIN@15
# spent 63µs making 1 call to base::import |
16 | 1 | 1µs | our @EXPORT_OK = qw( DEBUGGER_NEEDS_CV_RENAME DEBUGGER_NEEDS_CV_PIVOT ); | ||
17 | |||||
18 | 2 | 56µs | 2 | 77µs | # spent 43µs (10+34) within namespace::clean::_Util::BEGIN@18 which was called:
# once (10µs+34µs) by namespace::clean::BEGIN@38 at line 18 # spent 43µs making 1 call to namespace::clean::_Util::BEGIN@18
# spent 34µs making 1 call to constant::import |
19 | 2 | 108µs | 2 | 68µs | # spent 38µs (8+30) within namespace::clean::_Util::BEGIN@19 which was called:
# once (8µs+30µs) by namespace::clean::BEGIN@38 at line 19 # spent 38µs making 1 call to namespace::clean::_Util::BEGIN@19
# spent 30µs making 1 call to constant::import |
20 | |||||
21 | # FIXME - ideally this needs to be provided by some abstraction lib | ||||
22 | # but we don't have that yet | ||||
23 | # spent 4µs within namespace::clean::_Util::BEGIN@23 which was called:
# once (4µs+0s) by namespace::clean::BEGIN@38 at line 110 | ||||
24 | # | ||||
25 | # Note - both get_subname and set_subname are only called by one block | ||||
26 | # which is compiled away unless CV_RENAME is true ( the 5.8.9 ~ 5.12 range ). | ||||
27 | # Hence we compile/provide the definitions here only when needed | ||||
28 | # | ||||
29 | 1 | 5µs | DEBUGGER_NEEDS_CV_RENAME and ( eval <<'EOS' or die $@ ); | ||
30 | { | ||||
31 | my( $sub_name_loaded, $sub_util_loaded ); | ||||
32 | |||||
33 | sub _namer_load_error { | ||||
34 | return '' if $sub_util_loaded or $sub_name_loaded; | ||||
35 | |||||
36 | # if S::N is loaded first *and* so is B - then go with that, otherwise | ||||
37 | # prefer Sub::Util as S::U will provide a faster get_subname and will | ||||
38 | # not need further require() calls | ||||
39 | # this is rather arbitrary but remember this code exists only perls | ||||
40 | # between 5.8.9 ~ 5.13.5 | ||||
41 | |||||
42 | # when changing version also change in Makefile.PL | ||||
43 | my $sn_ver = 0.04; | ||||
44 | |||||
45 | local $@; | ||||
46 | my $err = ''; | ||||
47 | |||||
48 | ( | ||||
49 | ! ( | ||||
50 | $INC{"B.pm"} | ||||
51 | and | ||||
52 | $INC{"Sub/Name.pm"} | ||||
53 | and | ||||
54 | eval { Sub::Name->VERSION($sn_ver) } | ||||
55 | ) | ||||
56 | and | ||||
57 | eval { require Sub::Util } | ||||
58 | and | ||||
59 | # see https://github.com/moose/Moo/commit/dafa5118 | ||||
60 | defined &Sub::Util::set_subname | ||||
61 | and | ||||
62 | $sub_util_loaded = 1 | ||||
63 | ) | ||||
64 | or | ||||
65 | ( | ||||
66 | eval { require Sub::Name and Sub::Name->VERSION($sn_ver) } | ||||
67 | and | ||||
68 | $sub_name_loaded = 1 | ||||
69 | ) | ||||
70 | or | ||||
71 | $err = "When running under -d on this perl $], namespace::clean requires either Sub::Name $sn_ver or Sub::Util to be installed" | ||||
72 | ; | ||||
73 | |||||
74 | $err; | ||||
75 | } | ||||
76 | |||||
77 | sub set_subname { | ||||
78 | if( my $err = _namer_load_error() ) { | ||||
79 | die $err; | ||||
80 | } | ||||
81 | elsif( $sub_name_loaded ) { | ||||
82 | &Sub::Name::subname; | ||||
83 | } | ||||
84 | elsif( $sub_util_loaded ) { | ||||
85 | &Sub::Util::set_subname; | ||||
86 | } | ||||
87 | else { | ||||
88 | die "How the fuck did we get here? Read source and debug please!"; | ||||
89 | } | ||||
90 | } | ||||
91 | |||||
92 | sub get_subname { | ||||
93 | if( | ||||
94 | _namer_load_error() | ||||
95 | or | ||||
96 | ! $sub_util_loaded | ||||
97 | ) { | ||||
98 | require B; | ||||
99 | my $gv = B::svref_2object( $_[0] )->GV; | ||||
100 | join '::', $gv->STASH->NAME, $gv->NAME; | ||||
101 | } | ||||
102 | else { | ||||
103 | &Sub::Util::subname; | ||||
104 | } | ||||
105 | } | ||||
106 | } | ||||
107 | 1; | ||||
108 | EOS | ||||
109 | |||||
110 | 1 | 19µs | 1 | 4µs | } # spent 4µs making 1 call to namespace::clean::_Util::BEGIN@23 |
111 | |||||
112 | 1 | 3µs | 1; |