summaryrefslogtreecommitdiff
path: root/toke.c
diff options
context:
space:
mode:
authorBrian Fraser <fraserbn@gmail.com>2011-08-06 07:55:06 +0100
committerFather Chrysostomos <sprout@cpan.org>2012-03-22 20:23:52 -0700
commite2f06df0a8c96f7d9a5f3214fc5bf2daf34588c3 (patch)
treea1bc5701968fa0828540eb6221e3b3cbfb798135 /toke.c
parent734ab32188dca45b1704abc89cd0f08809758da3 (diff)
downloadperl-e2f06df0a8c96f7d9a5f3214fc5bf2daf34588c3.tar.gz
toke.c: 'Unrecognized character' croak cleanup.
Diffstat (limited to 'toke.c')
-rw-r--r--toke.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/toke.c b/toke.c
index 3a3cddb760..c0a5cdaf09 100644
--- a/toke.c
+++ b/toke.c
@@ -4765,7 +4765,12 @@ Perl_yylex(pTHX)
if (isIDFIRST_lazy_if(s,UTF))
goto keylookup;
{
- unsigned char c = *s;
+ SV *dsv = newSVpvs_flags("", SVs_TEMP);
+ const char *c = UTF ? savepv(sv_uni_display(dsv, newSVpvn_flags(s,
+ UTF8SKIP(s),
+ SVs_TEMP | SVf_UTF8),
+ 10, UNI_DISPLAY_ISPRINT))
+ : Perl_form(aTHX_ "\\x%02X", (unsigned char)*s);
len = UTF ? Perl_utf8_length(aTHX_ (U8 *) PL_linestart, (U8 *) s) : (STRLEN) (s - PL_linestart);
if (len > UNRECOGNIZED_PRECEDE_COUNT) {
d = UTF ? (char *) Perl_utf8_hop(aTHX_ (U8 *) s, -UNRECOGNIZED_PRECEDE_COUNT) : s - UNRECOGNIZED_PRECEDE_COUNT;
@@ -4773,7 +4778,10 @@ Perl_yylex(pTHX)
d = PL_linestart;
}
*s = '\0';
- Perl_croak(aTHX_ "Unrecognized character \\x%02X; marked by <-- HERE after %s<-- HERE near column %d", c, d, (int) len + 1);
+ sv_setpv(dsv, d);
+ if (UTF)
+ SvUTF8_on(dsv);
+ Perl_croak(aTHX_ "Unrecognized character %s; marked by <-- HERE after %"SVf"<-- HERE near column %d", c, SVfARG(dsv), (int) len + 1);
}
case 4:
case 26: