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

Filename/Users/ether/perl5/perlbrew/perls/36.0/lib/5.36.0/darwin-2level/Unicode/Normalize.pm
StatementsExecuted 27 statements in 2.63ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11161µs61µsUnicode::Normalize::::BEGIN@3Unicode::Normalize::BEGIN@3
11112µs41µsUnicode::Normalize::::BEGIN@4Unicode::Normalize::BEGIN@4
1117µs9µsUnicode::Normalize::::BEGIN@57Unicode::Normalize::BEGIN@57
1116µs45µsUnicode::Normalize::::BEGIN@5Unicode::Normalize::BEGIN@5
1115µs38µsUnicode::Normalize::::BEGIN@6Unicode::Normalize::BEGIN@6
1114µs16µsUnicode::Normalize::::BEGIN@8Unicode::Normalize::BEGIN@8
1113µs3µsUnicode::Normalize::::BEGIN@93Unicode::Normalize::BEGIN@93
0000s0sUnicode::Normalize::::FCDUnicode::Normalize::FCD
0000s0sUnicode::Normalize::::NFC_partialUnicode::Normalize::NFC_partial
0000s0sUnicode::Normalize::::NFD_partialUnicode::Normalize::NFD_partial
0000s0sUnicode::Normalize::::NFKC_partialUnicode::Normalize::NFKC_partial
0000s0sUnicode::Normalize::::NFKD_partialUnicode::Normalize::NFKD_partial
0000s0sUnicode::Normalize::::__ANON__[:36]Unicode::Normalize::__ANON__[:36]
0000s0sUnicode::Normalize::::__ANON__[:37]Unicode::Normalize::__ANON__[:37]
0000s0sUnicode::Normalize::::__ANON__[:40]Unicode::Normalize::__ANON__[:40]
0000s0sUnicode::Normalize::::__ANON__[:41]Unicode::Normalize::__ANON__[:41]
0000s0sUnicode::Normalize::::checkUnicode::Normalize::check
0000s0sUnicode::Normalize::::dot_t_pack_UUnicode::Normalize::dot_t_pack_U
0000s0sUnicode::Normalize::::dot_t_unpack_UUnicode::Normalize::dot_t_unpack_U
0000s0sUnicode::Normalize::::get_printable_stringUnicode::Normalize::get_printable_string
0000s0sUnicode::Normalize::::normalizeUnicode::Normalize::normalize
0000s0sUnicode::Normalize::::normalize_partialUnicode::Normalize::normalize_partial
0000s0sUnicode::Normalize::::okUnicode::Normalize::ok
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Unicode::Normalize;
2
3266µs161µs
# spent 61µs within Unicode::Normalize::BEGIN@3 which was called: # once (61µs+0s) by Mojo::Util::BEGIN@22 at line 3
use 5.006;
# spent 61µs making 1 call to Unicode::Normalize::BEGIN@3
4251µs270µs
# spent 41µs (12+29) within Unicode::Normalize::BEGIN@4 which was called: # once (12µs+29µs) by Mojo::Util::BEGIN@22 at line 4
use strict;
# spent 41µs making 1 call to Unicode::Normalize::BEGIN@4 # spent 29µs making 1 call to strict::import
5215µs284µs
# spent 45µs (6+39) within Unicode::Normalize::BEGIN@5 which was called: # once (6µs+39µs) by Mojo::Util::BEGIN@22 at line 5
use warnings;
# spent 45µs making 1 call to Unicode::Normalize::BEGIN@5 # spent 39µs making 1 call to warnings::import
6218µs271µs
# spent 38µs (5+33) within Unicode::Normalize::BEGIN@6 which was called: # once (5µs+33µs) by Mojo::Util::BEGIN@22 at line 6
use Carp;
# spent 38µs making 1 call to Unicode::Normalize::BEGIN@6 # spent 33µs making 1 call to Exporter::import
7
82198µs228µs
# spent 16µs (4+12) within Unicode::Normalize::BEGIN@8 which was called: # once (4µs+12µs) by Mojo::Util::BEGIN@22 at line 8
no warnings 'utf8';
# spent 16µs making 1 call to Unicode::Normalize::BEGIN@8 # spent 12µs making 1 call to warnings::unimport
9
1010sour $VERSION = '1.31';
1110sour $PACKAGE = __PACKAGE__;
12
1312µsour @EXPORT = qw( NFC NFD NFKC NFKD );
1411µsour @EXPORT_OK = qw(
15 normalize decompose reorder compose
16 checkNFD checkNFKD checkNFC checkNFKC check
17 getCanon getCompat getComposite getCombinClass
18 isExclusion isSingleton isNonStDecomp isComp2nd isComp_Ex
19 isNFD_NO isNFC_NO isNFC_MAYBE isNFKD_NO isNFKC_NO isNFKC_MAYBE
20 FCD checkFCD FCC checkFCC composeContiguous splitOnLastStarter
21 normalize_partial NFC_partial NFD_partial NFKC_partial NFKD_partial
22);
2314µsour %EXPORT_TAGS = (
24 all => [ @EXPORT, @EXPORT_OK ],
25 normalize => [ @EXPORT, qw/normalize decompose reorder compose/ ],
26 check => [ qw/checkNFD checkNFKD checkNFC checkNFKC check/ ],
27 fast => [ qw/FCD checkFCD FCC checkFCC composeContiguous/ ],
28);
29
30##
31## utilities for tests
32##
33
34 # No EBCDIC support on early perls
35*to_native = ($::IS_ASCII || $] < 5.008)
36 ? sub { return shift }
3713µs : sub { utf8::unicode_to_native(shift) };
38
39*from_native = ($::IS_ASCII || $] < 5.008)
40 ? sub { return shift }
4111µs : sub { utf8::native_to_unicode(shift) };
42
43# The .t files are all in terms of Unicode, so xlate to/from native
44sub dot_t_pack_U {
45 return pack('U*', map { to_native($_) } @_);
46}
47
48sub dot_t_unpack_U {
49
50 # The empty pack returns an empty UTF-8 string, so the effect is to force
51 # the shifted parameter into being UTF-8. This allows this to work on
52 # Perl 5.6, where there is no utf8::upgrade().
5312µs return map { from_native($_) } unpack('U*', shift(@_).pack('U*'));
# spent 2µs making 1 call to main::CORE:pack
54}
55
56sub get_printable_string ($) {
572178µs211µs
# spent 9µs (7+2) within Unicode::Normalize::BEGIN@57 which was called: # once (7µs+2µs) by Mojo::Util::BEGIN@22 at line 57
use bytes;
# spent 9µs making 1 call to Unicode::Normalize::BEGIN@57 # spent 2µs making 1 call to bytes::import
58 my $s = shift;
59
60 # DeMorgan's laws cause this to mean ascii printables
61 return $s if $s =~ /[^[:^ascii:][:^print:]]/;
62
63 return join " ", map { sprintf "\\x%02x", ord $_ } split "", $s;
64}
65
66sub ok ($$;$) {
67 my $count_ref = shift; # Test number in caller
68 my $p = my $r = shift;
69 my $x;
70 if (@_) {
71 $x = shift;
72 $p = !defined $x ? !defined $r : !defined $r ? 0 : $r eq $x;
73 }
74
75 print $p ? "ok" : "not ok", ' ', ++$$count_ref, "\n";
76
77 return if $p;
78
79 my (undef, $file, $line) = caller(1);
80 print STDERR "# Failed test $$count_ref at $file line $line\n";
81
82 return unless defined $x;
83
84 print STDERR "# got ", get_printable_string($r), "\n";
85 print STDERR "# expected ", get_printable_string($x), "\n";
86}
87
8811µsrequire Exporter;
89
90##### The above part is common to XS and PP #####
91
9217µsour @ISA = qw(Exporter);
932487µs13µs
# spent 3µs within Unicode::Normalize::BEGIN@93 which was called: # once (3µs+0s) by Mojo::Util::BEGIN@22 at line 93
use XSLoader ();
# spent 3µs making 1 call to Unicode::Normalize::BEGIN@93
9411.57ms11.56msXSLoader::load( 'Unicode::Normalize', $VERSION );
# spent 1.56ms making 1 call to XSLoader::load
95
96##### The below part is common to XS and PP #####
97
98##
99## normalize
100##
101
102sub FCD ($) {
103 my $str = shift;
104 return checkFCD($str) ? $str : NFD($str);
105}
106
10715µsour %formNorm = (
108 NFC => \&NFC, C => \&NFC,
109 NFD => \&NFD, D => \&NFD,
110 NFKC => \&NFKC, KC => \&NFKC,
111 NFKD => \&NFKD, KD => \&NFKD,
112 FCD => \&FCD, FCC => \&FCC,
113);
114
115sub normalize($$)
116{
117 my $form = shift;
118 my $str = shift;
119 if (exists $formNorm{$form}) {
120 return $formNorm{$form}->($str);
121 }
122 croak($PACKAGE."::normalize: invalid form name: $form");
123}
124
125##
126## partial
127##
128
129sub normalize_partial ($$) {
130 if (exists $formNorm{$_[0]}) {
131 my $n = normalize($_[0], $_[1]);
132 my($p, $u) = splitOnLastStarter($n);
133 $_[1] = $u;
134 return $p;
135 }
136 croak($PACKAGE."::normalize_partial: invalid form name: $_[0]");
137}
138
139sub NFD_partial ($) { return normalize_partial('NFD', $_[0]) }
140sub NFC_partial ($) { return normalize_partial('NFC', $_[0]) }
141sub NFKD_partial($) { return normalize_partial('NFKD',$_[0]) }
142sub NFKC_partial($) { return normalize_partial('NFKC',$_[0]) }
143
144##
145## check
146##
147
14812µsour %formCheck = (
149 NFC => \&checkNFC, C => \&checkNFC,
150 NFD => \&checkNFD, D => \&checkNFD,
151 NFKC => \&checkNFKC, KC => \&checkNFKC,
152 NFKD => \&checkNFKD, KD => \&checkNFKD,
153 FCD => \&checkFCD, FCC => \&checkFCC,
154);
155
156sub check($$)
157{
158 my $form = shift;
159 my $str = shift;
160 if (exists $formCheck{$form}) {
161 return $formCheck{$form}->($str);
162 }
163 croak($PACKAGE."::check: invalid form name: $form");
164}
165
166118µs1;
167__END__