This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
porting/diag.t: Allow nested =item's
[perl5.git] / t / porting / diag.t
CommitLineData
fe13d51d 1#!/usr/bin/perl
f7b649f0 2
99a4af00 3BEGIN {
0bfe7176 4 @INC = '..' if -f '../TestInit.pm';
99a4af00 5}
0bfe7176 6use TestInit qw(T); # T is chdir to the top level
f7b649f0 7
0bfe7176
NC
8use warnings;
9use strict;
3a73a075 10use Config;
f7b649f0 11
3d7c117d 12require './t/test.pl';
3a73a075
BF
13
14if ( $Config{usecrosscompile} ) {
15 skip_all( "Not all files are available during cross-compilation" );
16}
17
0bfe7176 18plan('no_plan');
fe13d51d 19
1eb3f3ad
JM
20# --make-exceptions-list outputs the list of strings that don't have
21# perldiag.pod entries to STDERR without TAP formatting, so they can
22# easily be put in the __DATA__ section of this file. This was done
23# initially so as to not create new test failures upon the initial
24# creation of this test file. You probably shouldn't do it again.
25# Just add the documentation instead.
0db6997d
FC
26my $make_exceptions_list = ($ARGV[0]||'') eq '--make-exceptions-list'
27 and shift;
87a63fff 28
3d7c117d 29require './regen/embed_lib.pl';
45f1c7ba 30
9c9407cf 31# Look for functions that look like they could be diagnostic ones.
1b1ee2ef 32my @functions;
9c9407cf
NC
33foreach (@{(setup_embed())[0]}) {
34 next if @$_ < 2;
dc996669 35 next unless $_->[2] =~ /warn|(?<!ov)err|(\b|_)die|croak/i;
1b1ee2ef
KW
36 # The flag p means that this function may have a 'Perl_' prefix
37 # The flag s means that this function may have a 'S_' prefix
9c9407cf
NC
38 push @functions, $_->[2];
39 push @functions, 'Perl_' . $_->[2] if $_->[0] =~ /p/;
40 push @functions, 'S_' . $_->[2] if $_->[0] =~ /s/;
41};
1bac45e4 42push @functions, 'Perl_mess';
1b1ee2ef 43
946095af 44my $regcomp_fail_re = '\b(?:(?:Simple_)?v)?FAIL[2-4]?(?:utf8f)?\b';
20c98eb0
FC
45my $regcomp_re =
46 "(?<routine>ckWARN(?:\\d+)?reg\\w*|vWARN\\d+|$regcomp_fail_re)";
47my $function_re = join '|', @functions;
b26f9440 48my $source_msg_re =
20c98eb0 49 "(?<routine>\\bDIE\\b|$function_re)";
de53a0ea 50my $text_re = '"(?<text>(?:\\\\"|[^"]|"\s*[A-Z_]+\s*")*)"';
78cd53af 51my $source_msg_call_re = qr/$source_msg_re(?:_nocontext)? \s*
9eb2b0d3 52 \( (?: \s* Perl_form \( )? (?:aTHX_)? \s*
78cd53af
DM
53 (?:packWARN\d*\((?<category>.*?)\),)? \s*
54 $text_re /x;
55my $bad_version_re = qr{BADVERSION\([^"]*$text_re};
b26f9440 56 $regcomp_fail_re = qr/$regcomp_fail_re\([^"]*$text_re/;
b33c0c71 57my $regcomp_call_re = qr/$regcomp_re.*?$text_re/;
fe13d51d
JM
58
59my %entries;
1b1ee2ef
KW
60
61# Get the ignores that are compiled into this file
62f5f54d 62my $reading_categorical_exceptions;
87a63fff
JM
63while (<DATA>) {
64 chomp;
beb1a06e
FC
65 $entries{$_}{todo} = 1;
66 $reading_categorical_exceptions and $entries{$_}{cattodo}=1;
62f5f54d 67 /__CATEGORIES__/ and ++$reading_categorical_exceptions;
87a63fff
JM
68}
69
808910a9 70my $pod = "pod/perldiag.pod";
fe13d51d 71my $cur_entry;
808910a9
KW
72open my $diagfh, "<", $pod
73 or die "Can't open $pod: $!";
1b1ee2ef 74
64fbf0dd 75my $category_re = qr/ [a-z0-9_:]+?/; # Note: requires an initial space
4cf67031
KW
76my $severity_re = qr/ . (?: \| . )* /x; # A severity is a single char, but can
77 # be of the form 'S|P|W'
62f5f54d 78my @same_descr;
b2a155af 79my $depth = 0;
fe13d51d 80while (<$diagfh>) {
b2a155af
KW
81 if (m/^=over/) {
82 $depth++;
83 next;
84 }
85 if (m/^=back/) {
86 $depth--;
87 next;
88 }
89
90 # Stuff deeper than main level is ignored
91 next if $depth != 1;
92
fe13d51d 93 if (m/^=item (.*)/) {
6fbc9859
MH
94 $cur_entry = $1;
95
96 # Allow multi-line headers
97 while (<$diagfh>) {
98 if (/^\s*$/) {
99 last;
100 }
101
f77147f3 102 $cur_entry =~ s/ ?\z/ $_/;
6fbc9859
MH
103 }
104
105 $cur_entry =~ s/\n/ /gs; # Fix multi-line headers if they have \n's
106 $cur_entry =~ s/\s+\z//;
26edd312
KW
107 $cur_entry =~ s/E<lt>/</g;
108 $cur_entry =~ s/E<gt>/>/g;
109 $cur_entry =~ s,E<sol>,/,g;
e0e4a6e3 110 $cur_entry =~ s/[BCIFS](?:<<< (.*?) >>>|<< (.*?) >>|<(.*?)>)/$+/g;
4cf67031 111
beb1a06e
FC
112 if (exists $entries{$cur_entry} && $entries{$cur_entry}{todo}
113 && !$entries{$cur_entry}{cattodo}) {
b61b433c
KW
114 TODO: {
115 local $::TODO = "Remove the TODO entry \"$cur_entry\" from DATA as it is already in $pod near line $.";
116 ok($cur_entry);
117 }
9c3e8e01 118 }
4cf67031
KW
119 # Make sure to init this here, so an actual entry in perldiag
120 # overwrites one in DATA.
87a63fff 121 $entries{$cur_entry}{todo} = 0;
4cf67031 122 $entries{$cur_entry}{line_number} = $.;
4cf67031
KW
123 }
124
125 next if ! defined $cur_entry;
126
127 if (! $entries{$cur_entry}{severity}) {
128 if (/^ \( ( $severity_re )
129
130 # Can have multiple categories separated by commas
62f5f54d 131 ( $category_re (?: , $category_re)* )? \) /x)
4cf67031
KW
132 {
133 $entries{$cur_entry}{severity} = $1;
62f5f54d
FC
134 $entries{$cur_entry}{category} =
135 $2 && join ", ", sort split " ", $2 =~ y/,//dr;
136
137 # Record it also for other messages sharing the same description
138 @$_{qw<severity category>} =
139 @{$entries{$cur_entry}}{qw<severity category>}
140 for @same_descr;
4cf67031
KW
141 }
142 elsif (! $entries{$cur_entry}{first_line} && $_ =~ /\S/) {
143
144 # Keep track of first line of text if doesn't contain a severity, so
145 # that can later examine it to determine if that is ok or not
146 $entries{$cur_entry}{first_line} = $_;
147 }
62f5f54d
FC
148 if (/\S/) {
149 @same_descr = ();
150 }
151 else {
152 push @same_descr, $entries{$cur_entry};
153 }
fe13d51d
JM
154 }
155}
156
b2a155af
KW
157if ($depth != 0) {
158 diag ("Unbalance =over/=back. Fix before proceeding; over - back = " . $depth);
159 exit(1);
160}
161
4cf67031
KW
162foreach my $cur_entry ( keys %entries) {
163 next if $entries{$cur_entry}{todo}; # If in this file, won't have a severity
164 if (! exists $entries{$cur_entry}{severity}
165
166 # If there is no first line, it was two =items in a row, so the
167 # second one is the one with with text, not this one.
168 && exists $entries{$cur_entry}{first_line}
169
170 # If the first line refers to another message, no need for severity
171 && $entries{$cur_entry}{first_line} !~ /^See/)
172 {
173 fail($cur_entry);
174 diag(
175 " $pod entry at line $entries{$cur_entry}{line_number}\n"
176 . " \"$cur_entry\"\n"
177 . " is missing a severity and/or category"
178 );
179 }
180}
181
78cd53af
DM
182# List from perlguts.pod "Formatted Printing of IVs, UVs, and NVs"
183# Convert from internal formats to ones that the readers will be familiar
184# with, while removing any format modifiers, such as precision, the
185# presence of which would just confuse the pod's explanation
186my %specialformats = (IVdf => 'd',
187 UVuf => 'd',
188 UVof => 'o',
189 UVxf => 'x',
190 UVXf => 'X',
191 NVef => 'f',
192 NVff => 'f',
193 NVgf => 'f',
b8fa5213 194 HEKf256=>'s',
fa871b03 195 HEKf => 's',
b17a0679 196 UTF8f=> 's',
f0eec8b8
FC
197 SVf256=>'s',
198 SVf32=> 's',
ea7cbc5a
FC
199 SVf => 's',
200 PNf => 's');
78cd53af
DM
201my $format_modifiers = qr/ [#0\ +-]* # optional flags
202 (?: [1-9][0-9]* | \* )? # optional field width
203 (?: \. \d* )? # optional precision
204 (?: h|l )? # optional length modifier
205 /x;
206
f0eec8b8
FC
207my $specialformats =
208 join '|', sort { length $b cmp length $a } keys %specialformats;
78cd53af
DM
209my $specialformats_re = qr/%$format_modifiers"\s*($specialformats)(\s*")?/;
210
0db6997d
FC
211if (@ARGV) {
212 check_file($_) for @ARGV;
213 exit;
214}
e166f153
NC
215open my $fh, '<', 'MANIFEST' or die "Can't open MANIFEST: $!";
216while (my $file = <$fh>) {
e166f153
NC
217 chomp $file;
218 $file =~ s/\s+.*//;
cd40cd58
NC
219 next unless $file =~ /\.(?:c|cpp|h|xs|y)\z/ or $file =~ /^perly\./;
220 # OS/2 extensions have never been migrated to ext/, hence the special case:
c67aee7a 221 next if $file =~ m!\A(?:ext|dist|cpan|lib|t|os2/OS2)/!
cd40cd58 222 && $file !~ m!\Aext/DynaLoader/!;
e166f153 223 check_file($file);
fe13d51d 224}
e166f153 225close $fh or die $!;
fe13d51d 226
abd65dc0
DG
227# Standardize messages with variants into the form that appears
228# in perldiag.pod -- useful for things without a diag_listed_as annotation
229sub standardize {
230 my ($name) = @_;
231
232 if ( $name =~ m/^(Invalid strict version format) \([^\)]*\)/ ) {
233 $name = "$1 (\%s)";
234 }
235 elsif ( $name =~ m/^(Invalid version format) \([^\)]*\)/ ) {
236 $name = "$1 (\%s)";
237 }
238 elsif ($name =~ m/^panic: /) {
239 $name = "panic: \%s";
240 }
241
242 return $name;
243}
244
fe13d51d
JM
245sub check_file {
246 my ($codefn) = @_;
247
abd65dc0 248 print "# Checking $codefn\n";
fe13d51d 249
38ec24b4 250 open my $codefh, "<", $codefn
fe13d51d
JM
251 or die "Can't open $codefn: $!";
252
253 my $listed_as;
254 my $listed_as_line;
255 my $sub = 'top of file';
256 while (<$codefh>) {
257 chomp;
258 # Getting too much here isn't a problem; we only use this to skip
259 # errors inside of XS modules, which should get documented in the
260 # docs for the module.
78cd53af
DM
261 if (m<^[^#\s]> and $_ !~ m/^[{}]*$/) {
262 $sub = $_;
fe13d51d
JM
263 }
264 next if $sub =~ m/^XS/;
4e85e1b4 265 if (m</\*\s*diag_listed_as: (.*?)\s*\*/>) {
fe13d51d
JM
266 $listed_as = $1;
267 $listed_as_line = $.+1;
268 }
6ccbd5ff
FC
269 elsif (m</\*\s*diag_listed_as: (.*?)\s*\z>) {
270 $listed_as = $1;
271 my $finished;
272 while (<$codefh>) {
273 if (m<\*/>) {
274 $listed_as .= $` =~ s/^\s*/ /r =~ s/\s+\z//r;
275 $listed_as_line = $.+1;
276 $finished = 1;
277 last;
278 }
279 else {
280 $listed_as .= s/^\s*/ /r =~ s/\s+\z//r;
281 }
282 }
283 if (!$finished) { $listed_as = undef }
284 }
fe13d51d 285 next if /^#/;
1b1ee2ef 286
c4ea5f2e 287 my $multiline = 0;
1b1ee2ef 288 # Loop to accumulate the message text all on one line.
56e46aaa 289 if (m/(?!^)\b(?:$source_msg_re(?:_nocontext)?|$regcomp_re)\s*\(/) {
605eee60 290 while (not m/\);\s*$/) {
78cd53af
DM
291 my $nextline = <$codefh>;
292 # Means we fell off the end of the file. Not terribly surprising;
293 # this code tries to merge a lot of things that aren't regular C
294 # code (preprocessor stuff, long comments). That's OK; we don't
295 # need those anyway.
296 last if not defined $nextline;
297 chomp $nextline;
298 $nextline =~ s/^\s+//;
299 $_ =~ s/\\$//;
300 # Note that we only want to do this where *both* are true.
45c76a8e
FC
301 if ($_ =~ m/"\s*$/ and $nextline =~ m/^"/) {
302 $_ =~ s/"\s*$//;
78cd53af
DM
303 $nextline =~ s/^"//;
304 }
305 $_ .= $nextline;
306 ++$multiline;
fe13d51d 307 }
fe13d51d
JM
308 }
309 # This should happen *after* unwrapping, or we don't reformat the things
310 # in later lines.
78cd53af
DM
311
312 s/$specialformats_re/"%$specialformats{$1}" . (defined $2 ? '' : '"')/ge;
78d0fecf
KW
313
314 # Remove any remaining format modifiers, but not in %%
315 s/ (?<!%) % $format_modifiers ( [dioxXucsfeEgGp] ) /%$1/xg;
316
fe13d51d 317 # The %"foo" thing needs to happen *before* this regex.
1b1ee2ef
KW
318 # diag($_);
319 # DIE is just return Perl_die
b33c0c71 320 my ($name, $category, $routine);
b78a1974 321 if (/\b$source_msg_call_re/) {
b33c0c71 322 ($name, $category, $routine) = ($+{'text'}, $+{'category'}, $+{'routine'});
62f5f54d
FC
323 # Sometimes the regexp will pick up too much for the category
324 # e.g., WARN_UNINITIALIZED), PL_warn_uninit_sv ... up to the next )
325 $category && $category =~ s/\).*//s;
77b7eccc
FC
326 # Special-case yywarn
327 /yywarn/ and $category = 'syntax';
85f3efe0
FC
328 if (/win32_croak_not_implemented\(/) {
329 $name .= " not implemented!"
330 }
78cd53af
DM
331 }
332 elsif (/$bad_version_re/) {
333 ($name, $category) = ($+{'text'}, undef);
334 }
b26f9440
FC
335 elsif (/$regcomp_fail_re/) {
336 # FAIL("foo") -> "foo in regex m/%s/"
337 # vFAIL("foo") -> "foo in regex; marked by <-- HERE in m/%s/"
338 ($name, $category) = ($+{'text'}, undef);
339 $name .=
340 " in regex" . ("; marked by <-- HERE in" x /vFAIL/) . " m/%s/";
341 }
b33c0c71
MH
342 elsif (/$regcomp_call_re/) {
343 # vWARN/ckWARNreg("foo") -> "foo in regex; marked by <-- HERE in m/%s/
344 ($name, $category, $routine) = ($+{'text'}, undef, $+{'routine'});
345 $name .= " in regex; marked by <-- HERE in m/%s/";
346 $category = 'WARN_REGEXP';
347 if ($routine =~ /dep/) {
348 $category .= ',WARN_DEPRECATED';
349 }
350 }
78cd53af
DM
351 else {
352 next;
353 }
354
3cfe9c80
FC
355 # Try to guess what the severity should be. In the case of
356 # Perl_ck_warner and other _ck_ functions, we can tell whether it is
357 # a severe/default warning or no by the _d suffix. In the case of
358 # other warn functions we cannot tell, because Perl_warner may be pre-
359 # ceded by if(ckWARN) or if(ckWARN_d).
b33c0c71
MH
360 my $severity = !$routine ? '[PFX]'
361 : $routine =~ /warn.*_d\z/ ? '[DS]'
3cfe9c80 362 : $routine =~ /ck_warn/ ? 'W'
ff9c1ae8
FC
363 : $routine =~ /warner/ ? '[WDS]'
364 : $routine =~ /warn/ ? 'S'
3cfe9c80 365 : $routine =~ /ckWARN.*dep/ ? 'D'
0008e927 366 : $routine =~ /ckWARN\d*reg_d/? 'S'
3cfe9c80 367 : $routine =~ /ckWARN\d*reg/ ? 'W'
b33c0c71
MH
368 : $routine =~ /vWARN\d/ ? '[WDS]'
369 : '[PFX]';
62f5f54d 370 my $categories;
49a5993e 371 if (defined $category) {
64fbf0dd 372 $category =~ s/__/::/g;
62f5f54d
FC
373 $categories =
374 join ", ",
375 sort map {s/^WARN_//; lc $_} split /\s*[|,]\s*/, $category;
1b1ee2ef 376 }
c4ea5f2e 377 if ($listed_as and $listed_as_line == $. - $multiline) {
c0a76f06 378 $name = $listed_as;
1b1ee2ef 379 } else {
c0a76f06
DM
380 # The form listed in perldiag ignores most sorts of fancy printf
381 # formatting, or makes it more perlish.
4111bb7b 382 $name =~ s/%%/%/g;
c0a76f06
DM
383 $name =~ s/%l[ud]/%d/g;
384 $name =~ s/%\.(\d+|\*)s/\%s/g;
ca53083a 385 $name =~ s/(?:%s){2,}/%s/g;
de78ba8e 386 $name =~ s/(\\")|("\s*[A-Z_]+\s*")/$1 ? '"' : '%s'/egg;
c0a76f06 387 $name =~ s/\\t/\t/g;
366fc280 388 $name =~ s/\\n/\n/g;
c0a76f06
DM
389 $name =~ s/\s+$//;
390 $name =~ s/(\\)\\/$1/g;
391 }
fe13d51d 392
c0a76f06
DM
393 # Extra explanatory info on an already-listed error, doesn't
394 # need it's own listing.
395 next if $name =~ m/^\t/;
fe13d51d 396
c0a76f06
DM
397 # Happens fairly often with PL_no_modify.
398 next if $name eq '%s';
fe13d51d 399
c0a76f06
DM
400 # Special syntax for magic comment, allows ignoring the fact
401 # that it isn't listed. Only use in very special circumstances,
402 # like this script failing to notice that the Perl_croak call is
403 # inside an #if 0 block.
404 next if $name eq 'SKIPME';
fe13d51d 405
ff20b672
YO
406 next if $name=~/\[TESTING\]/; # ignore these as they are works in progress
407
62f5f54d 408 check_message(standardize($name),$codefn,$severity,$categories);
366fc280
FC
409 }
410}
411
412sub check_message {
62f5f54d 413 my($name,$codefn,$severity,$categories,$partial) = @_;
366fc280
FC
414 my $key = $name =~ y/\n/ /r;
415 my $ret;
2c86d456 416
b33c0c71
MH
417 # Try to reduce printf() formats to simplest forms
418 # Really this should be matching %s, etc like diagnostics.pm does
419
420 # Kill flags
421 $key =~ s/%[#0\-+]/%/g;
422
423 # Kill width
424 $key =~ s/\%(\d+|\*)/%/g;
425
426 # Kill precision
427 $key =~ s/\%\.(\d+|\*)/%/g;
428
beb1a06e
FC
429 if (exists $entries{$key} and
430 # todo + cattodo means it is not found and it is not in the
431 # regular todo list, either
432 !$entries{$key}{todo} || !$entries{$key}{cattodo}) {
366fc280
FC
433 $ret = 1;
434 if ( $entries{$key}{seen}++ ) {
c0a76f06 435 # no need to repeat entries we've tested
207e3571 436 } elsif ($entries{$key}{todo}) {
87a63fff 437 TODO: {
c0a76f06
DM
438 no warnings 'once';
439 local $::TODO = 'in DATA';
440 # There is no listing, but it is in the list of exceptions. TODO FAIL.
207e3571 441 fail($key);
c0a76f06
DM
442 diag(
443 " Message '$name'\n from $codefn line $. is not listed in $pod\n".
444 " (but it wasn't documented in 5.10 either, so marking it TODO)."
445 );
87a63fff 446 }
c0a76f06
DM
447 } else {
448 # We found an actual valid entry in perldiag.pod for this error.
b8d24c3d 449 pass($key);
62f5f54d 450
4a32881b
NC
451 return $ret
452 if $entries{$key}{cattodo};
453
62f5f54d
FC
454 # Now check the category and severity
455
456 # Cache our severity qr thingies
4a32881b 457 use feature 'state';
62f5f54d
FC
458 state %qrs;
459 my $qr = $qrs{$severity} ||= qr/$severity/;
460
4a32881b 461 like($entries{$key}{severity}, $qr,
3cfe9c80
FC
462 $severity =~ /\[/
463 ? "severity is one of $severity for $key"
4a32881b 464 : "severity is $severity for $key");
6fbc9859 465
4a32881b 466 is($entries{$key}{category}, $categories,
62f5f54d 467 ($categories ? "categories are [$categories]" : "no category")
4a32881b 468 . " for $key");
fe13d51d 469 }
366fc280
FC
470 } elsif ($partial) {
471 # noop
c0a76f06 472 } else {
366fc280
FC
473 my $ok;
474 if ($name =~ /\n/) {
475 $ok = 1;
62f5f54d
FC
476 check_message($_,$codefn,$severity,$categories,1) or $ok = 0, last
477 for split /\n/, $name;
366fc280
FC
478 }
479 if ($ok) {
480 # noop
481 } elsif ($make_exceptions_list) {
c0a76f06
DM
482 # We're making an updated version of the exception list, to
483 # stick in the __DATA__ section. I honestly can't think of
484 # a situation where this is the right thing to do, but I'm
485 # leaving it here, just in case one of my descendents thinks
486 # it's a good idea.
366fc280 487 print STDERR "$key\n";
c0a76f06
DM
488 } else {
489 # No listing found, and no excuse either.
490 # Find the correct place in perldiag.pod, and add a stanza beginning =item $name.
491 fail($name);
492 diag(" Message '$name'\n from $codefn line $. is not listed in $pod");
493 }
494 # seen it, so only fail once for this message
495 $entries{$name}{seen}++;
496 }
fe13d51d 497
c0a76f06 498 die if $name =~ /%$/;
366fc280 499 return $ret;
fe13d51d 500}
c0a76f06 501
93f09d7b 502# Lists all missing things as of the inauguration of this script, so we
87a63fff 503# don't have to go from "meh" to perfect all at once.
b0227916
JM
504#
505# PLEASE DO NOT ADD TO THIS LIST. Instead, write an entry in
675fa9ff
FC
506# pod/perldiag.pod for your new (warning|error). Nevertheless,
507# listing exceptions here when this script is not smart enough
508# to recognize the messages is not so bad, as long as there are
509# entries in perldiag.
fed3ba5d 510
62f5f54d
FC
511# Entries after __CATEGORIES__ are those that are in perldiag but fail the
512# severity/category test.
513
fed3ba5d
NC
514# Also FIXME this test, as the first entry in TODO *is* covered by the
515# description: Malformed UTF-8 character (%s)
87a63fff 516__DATA__
78d0fecf 517Malformed UTF-8 character (unexpected non-continuation byte 0x%x, immediately after start byte 0x%x)
fed3ba5d 518
5f2c6f7e 519Cannot apply "%s" in non-PerlIO perl
f36743d5 520Cannot set timer
043fb3eb 521Can't find DLL name for the module `%s' by the handle %d, rc=%u=%x
5f2c6f7e 522Can't find string terminator %c%s%c anywhere before EOF
87a63fff
JM
523Can't fix broken locale name "%s"
524Can't get short module name from a handle
043fb3eb 525Can't load DLL `%s', possible problematic module `%s'
c8028aa6 526Can't locate %s: %s
5f2c6f7e 527Can't pipe "%s": %s
043fb3eb 528Can't set type on DOS
5f2c6f7e 529Can't spawn: %s
87a63fff
JM
530Can't spawn "%s": %s
531Can't %s script `%s' with ARGV[0] being `%s'
532Can't %s "%s": %s
87a63fff 533Can't %s `%s' with ARGV[0] being `%s' (looking for executables only, not found)
973a7615 534Can't use string ("%s"%s) as a subroutine ref while "strict refs" in use
87a63fff 535Character(s) in '%c' format wrapped in %s
5f2c6f7e
FC
536chown not implemented!
537clear %s
87a63fff
JM
538Code missing after '/' in pack
539Code missing after '/' in unpack
f36743d5
FC
540Could not find version 1.1 of winsock dll
541Could not find version 2.0 of winsock dll
87a63fff 542'%c' outside of string in pack
ca53083a 543Debug leaking scalars child failed%s with errno %d: %s
043fb3eb
FC
544detach of a thread which could not start
545detach on an already detached thread
546detach on a thread with a waiter
5f2c6f7e 547'/' does not take a repeat count in %s
87a63fff 548-Dp not implemented on this platform
043fb3eb 549Empty array reference given to mod2fname
f36743d5
FC
550endhostent not implemented!
551endnetent not implemented!
552endprotoent not implemented!
553endservent not implemented!
31b4070e 554Error loading module '%s': %s
87a63fff 555Error reading "%s": %s
5f2c6f7e
FC
556execl not implemented!
557EVAL without pos change exceeded limit in regex
87a63fff
JM
558Filehandle opened only for %sput
559Filehandle %s opened only for %sput
560Filehandle STD%s reopened as %s only for input
043fb3eb 561file_type not implemented on DOS
5f2c6f7e 562filter_del can only delete in reverse order (currently)
91c1e9d9 563fork() not available
482291d6 564fork() not implemented!
87a63fff 565YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET! FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!
5f2c6f7e 566free %s
f36743d5 567Free to wrong pool %p not %p
c80bcca7
FC
568Function "endnetent" not implemented in this version of perl.
569Function "endprotoent" not implemented in this version of perl.
570Function "endservent" not implemented in this version of perl.
571Function "getnetbyaddr" not implemented in this version of perl.
572Function "getnetbyname" not implemented in this version of perl.
573Function "getnetent" not implemented in this version of perl.
574Function "getprotobyname" not implemented in this version of perl.
575Function "getprotobynumber" not implemented in this version of perl.
576Function "getprotoent" not implemented in this version of perl.
577Function "getservbyport" not implemented in this version of perl.
578Function "getservent" not implemented in this version of perl.
579Function "getsockopt" not implemented in this version of perl.
580Function "recvmsg" not implemented in this version of perl.
581Function "sendmsg" not implemented in this version of perl.
582Function "sethostent" not implemented in this version of perl.
583Function "setnetent" not implemented in this version of perl.
584Function "setprotoent" not implemented in this version of perl.
585Function "setservent" not implemented in this version of perl.
586Function "setsockopt" not implemented in this version of perl.
587Function "tcdrain" not implemented in this version of perl.
588Function "tcflow" not implemented in this version of perl.
589Function "tcflush" not implemented in this version of perl.
590Function "tcsendbreak" not implemented in this version of perl.
87a63fff 591get %s %p %p %p
482291d6 592gethostent not implemented!
f36743d5
FC
593getnetbyaddr not implemented!
594getnetbyname not implemented!
595getnetent not implemented!
596getprotoent not implemented!
5f2c6f7e 597getpwnam returned invalid UIC %o for user "%s"
f36743d5 598getservent not implemented!
87a63fff
JM
599glob failed (can't start child: %s)
600glob failed (child exited with status %d%s)
043fb3eb 601Got an error from DosAllocMem: %i
87a63fff
JM
602Goto undefined subroutine
603Goto undefined subroutine &%s
5f2c6f7e
FC
604Got signal %d
605()-group starts with a count in %s
606Illegal binary digit '%c' ignored
87a63fff 607Illegal character %sin prototype for %s : %s
5f2c6f7e
FC
608Illegal hexadecimal digit '%c' ignored
609Illegal octal digit '%c' ignored
043fb3eb 610INSTALL_PREFIX too long: `%s'
5f2c6f7e 611Invalid argument to sv_cat_decode
87a63fff
JM
612Invalid range "%c-%c" in transliteration operator
613Invalid separator character %c%c%c in PerlIO layer specification %s
614Invalid TOKEN object ignored
615Invalid type '%c' in pack
616Invalid type '%c' in %s
617Invalid type '%c' in unpack
618Invalid type ',' in %s
f36743d5 619ioctl implemented only on sockets
5f2c6f7e 620ioctlsocket not implemented!
043fb3eb 621join with a thread with a waiter
5f2c6f7e 622killpg not implemented!
5f2c6f7e 623List form of pipe open not implemented
043fb3eb 624Looks like we have no PM; will not load DLL %s without $ENV{PERL_ASIF_PM}
5f2c6f7e 625Malformed integer in [] in %s
043fb3eb 626Malformed %s
87a63fff 627Malformed UTF-8 character (fatal)
87a63fff
JM
628Missing (suid) fd script name
629More than one argument to open
630More than one argument to open(,':%s')
043fb3eb 631No message queue
5f2c6f7e
FC
632No %s allowed while running setgid
633No %s allowed with (suid) fdscript
87a63fff 634Not an XSUB reference
043fb3eb
FC
635Not a reference given to mod2fname
636Not array reference given to mod2fname
87a63fff 637Operator or semicolon missing before %c%s
928729ea 638Out of memory during list extend
043fb3eb 639panic queryaddr
1bac45e4 640Parse error
c999563f 641PerlApp::TextQuery: no arguments, please
b26f9440 642POSIX syntax [%c %c] is reserved for future extensions in regex; marked by <-- HERE in m/%s/
78d0fecf 643ptr wrong %p != %p fl=%x nl=%p e=%p for %d
043fb3eb 644QUITing...
87a63fff 645Recompile perl with -DDEBUGGING to use -D switch (did you mean -d ?)
32352119 646recursion detected in %s
b26f9440 647Regexp *+ operand could be empty in regex; marked by <-- HERE in m/%s/
87a63fff 648Reversed %c= operator
043fb3eb 649%s: Can't parse EXE/DLL name: '%s'
78d0fecf 650%s(%f) failed
87a63fff 651%sCompilation failed in require
043fb3eb 652%s: Error stripping dirs from EXE/DLL/INSTALLDIR name
f36743d5
FC
653sethostent not implemented!
654setnetent not implemented!
655setprotoent not implemented!
87a63fff 656set %s %p %p %p
f36743d5 657setservent not implemented!
87a63fff
JM
658%s free() ignored (RMAGIC, PERL_CORE)
659%s has too many errors.
660SIG%s handler "%s" not defined.
87a63fff
JM
661%s in %s
662Size magic not implemented
043fb3eb 663%s: name `%s' too long
f36743d5 664%s not implemented!
87a63fff 665%s number > %s non-portable
87a63fff 666%srealloc() %signored
5f2c6f7e 667%s in regex m/%s/
ca53083a 668%s on %s %s
5f2c6f7e 669socketpair not implemented!
043fb3eb 670%s: %s
87a63fff
JM
671Starting Full Screen process with flag=%d, mytype=%d
672Starting PM process with flag=%d, mytype=%d
5f2c6f7e 673sv_2iv assumed (U_V(fabs((double)SvNVX(sv))) < (UV)IV_MAX) but SvNVX(sv)=%f U_V is 0x%x, IV_MAX is 0x%x
5f2c6f7e
FC
674switching effective gid is not implemented
675switching effective uid is not implemented
676System V IPC is not implemented on this machine
5f2c6f7e 677Terminating on signal SIG%s(%d)
5f2c6f7e 678The crypt() function is not implemented on NetWare
87a63fff
JM
679The flock() function is not implemented on NetWare
680The rewinddir() function is not implemented on NetWare
681The seekdir() function is not implemented on NetWare
87a63fff 682The telldir() function is not implemented on NetWare
043fb3eb
FC
683This perl was compiled without taint support. Cowardly refusing to run with -t or -T flags
684This version of OS/2 does not support %s.%s
87a63fff 685Too deeply nested ()-groups in %s
87a63fff
JM
686Too many args on %s line of "%s"
687U0 mode on a byte string
5f2c6f7e 688unable to find VMSPIPE.COM for i/o piping
f36743d5 689Unable to locate winsock library!
043fb3eb 690Unexpected program mode %d when morphing back from PM
5f2c6f7e 691Unrecognized character %s; marked by <-- HERE after %s<-- HERE near column %d
87a63fff 692Unstable directory path, current directory changed unexpectedly
87a63fff 693Unterminated compressed integer in unpack
a17f90da 694Usage: %s(%s)
87a63fff 695Usage: %s::%s(%s)
a17f90da 696Usage: CODE(0x%x)(%s)
5f2c6f7e
FC
697Usage: File::Copy::rmscopy(from,to[,date_flag])
698Usage: VMS::Filespec::candelete(spec)
699Usage: VMS::Filespec::fileify(spec)
700Usage: VMS::Filespec::pathify(spec)
701Usage: VMS::Filespec::rmsexpand(spec[,defspec])
702Usage: VMS::Filespec::unixify(spec)
703Usage: VMS::Filespec::unixpath(spec)
87a63fff 704Usage: VMS::Filespec::unixrealpath(spec)
5f2c6f7e
FC
705Usage: VMS::Filespec::vmsify(spec)
706Usage: VMS::Filespec::vmspath(spec)
87a63fff 707Usage: VMS::Filespec::vmsrealpath(spec)
78d0fecf 708utf8 "\x%X" does not map to Unicode
87a63fff 709Value of logical "%s" too long. Truncating to %i bytes
5f2c6f7e 710waitpid: process %x is not a child of process %x
87a63fff
JM
711Wide character
712Wide character in $/
f36743d5
FC
713win32_get_osfhandle() TBD on this platform
714win32_open_osfhandle() TBD on this platform
5f2c6f7e 715Within []-length '*' not allowed in %s
87a63fff 716Within []-length '%c' not allowed in %s
043fb3eb 717Wrong size of loadOrdinals array: expected %d, actual %d
87a63fff 718Wrong syntax (suid) fd script name "%s"
5f2c6f7e 719'X' outside of string in %s
87a63fff 720'X' outside of string in unpack
62f5f54d
FC
721
722__CATEGORIES__
09d15bae
KW
723
724# This is a warning, but is currently followed immediately by a croak (toke.c)
62f5f54d 725Illegal character \%o (carriage return)
09d15bae
KW
726
727# Because uses WARN_MISSING as a synonym for WARN_UNINITIALIZED (sv.c)
62f5f54d 728Missing argument in %s
09d15bae
KW
729
730# This message can be both fatal and non-
17d13b54 731False [] range "%s" in regex; marked by <-- HERE in m/%s/