From 97eb901d2f2a70940d8b0cfa133eb3cdfee12f30 Mon Sep 17 00:00:00 2001 From: Brian Fraser Date: Fri, 23 Mar 2012 17:42:55 -0700 Subject: toke.c: "Illegal character in prototype" for Latin-1 protos --- t/lib/warnings/op | 20 +++++++++++++++++--- toke.c | 10 +++++++--- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/t/lib/warnings/op b/t/lib/warnings/op index f2270dc01a..de74d2e360 100644 --- a/t/lib/warnings/op +++ b/t/lib/warnings/op @@ -857,7 +857,7 @@ use open qw( :utf8 :std ); use warnings; eval "sub fòò (\$\0) {}"; EXPECT -Illegal character in prototype for main::fòò : $\x{0} at (eval 1) line 1. +Illegal character in prototype for main::fòò : $\0 at (eval 1) line 1. ######## # op.c use utf8; @@ -865,7 +865,7 @@ use open qw( :utf8 :std ); use warnings; eval "sub foo (\0) {}"; EXPECT -Illegal character in prototype for main::foo : \x{0} at (eval 1) line 1. +Illegal character in prototype for main::foo : \0 at (eval 1) line 1. ######## # op.c use utf8; @@ -882,7 +882,21 @@ use open qw( :utf8 :std ); use warnings; BEGIN { eval "sub foo (\0) {}"; } EXPECT -Illegal character in prototype for main::foo : \x{0} at (eval 1) line 1. +Illegal character in prototype for main::foo : \0 at (eval 1) line 1. +######## +# op.c +use warnings; +eval "sub foo (\xAB) {}"; +EXPECT +Illegal character in prototype for main::foo : \x{ab} at (eval 1) line 1. +######## +# op.c +use utf8; +use open qw( :utf8 :std ); +use warnings; +BEGIN { eval "sub foo (\x{30cb}) {}"; } +EXPECT +Illegal character in prototype for main::foo : \x{30cb} at (eval 1) line 1. ######## # op.c use utf8; diff --git a/toke.c b/toke.c index 5cfcc6788d..1d7a44fcf0 100644 --- a/toke.c +++ b/toke.c @@ -8231,9 +8231,13 @@ Perl_yylex(pTHX) "Illegal character %sin prototype for %"SVf" : %s", seen_underscore ? "after '_' " : "", SVfARG(PL_subname), - sv_uni_display(dsv, - newSVpvn_flags(d, tmp, SVs_TEMP | SvUTF8(PL_lex_stuff)), - tmp, UNI_DISPLAY_ISPRINT)); + SvUTF8(PL_lex_stuff) + ? sv_uni_display(dsv, + newSVpvn_flags(d, tmp, SVs_TEMP | SVf_UTF8), + tmp, + UNI_DISPLAY_ISPRINT) + : pv_pretty(dsv, d, tmp, 60, NULL, NULL, + PERL_PV_ESCAPE_NONASCII)); } SvCUR_set(PL_lex_stuff, tmp); have_proto = TRUE; -- cgit v1.2.1