This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Reinstate UTF8f
authorFather Chrysostomos <sprout@cpan.org>
Wed, 26 Jun 2013 03:31:54 +0000 (20:31 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Fri, 28 Jun 2013 07:07:36 +0000 (00:07 -0700)
commitb17a067929304f6d2e8d21b1afec3c13df924d29
tree7a65d2cb7916ba2ea8a12e466ab0d6bcdadea27c
parent72e8be865ba96e46b95723197c54710357d148a3
Reinstate UTF8f

This format string allows char*s to be interpolated with the
utf8ness and length specified as well, avoiding the need to create
extra SVs:

Perl_croak(aTHX_ "Couldn't twiggle the twoggle in \"%"UTF8f"\"",
                  UTF8fARG(is_utf8, len, s));

This is the second attempt.

I screwed up in commits 1c8b67b38f0a5 and b3e714770ee1 because
I didn’t really understand how varargs functions receive their
arguments.

They are like structs, in that different members can be different
sizes.  So therefore both ends--the caller and the called--*must* get
the casts right, or the data will be corrupted.

The main mistake I made was to use %u in the format for the first
argument and then retrieve it as UV (a simple typo, I meant unsigned
int or U32--I don’t remember).

To be on the safe side, I added a UTF8fARG macro (after SVfARG), which
(unlike SVfARG) takes three arguments and casts them explicitly, mak-
ing it much harder to get this wrong at call sites.
gv.c
op.c
perl.h
pp.c
pp_ctl.c
sv.c
t/porting/diag.t
toke.c