summaryrefslogtreecommitdiff
path: root/util.c
diff options
context:
space:
mode:
authorKarl Williamson <khw@khw-desktop.(none)>2010-04-19 20:16:50 -0600
committerRafael Garcia-Suarez <rgs@consttype.org>2010-04-26 10:20:09 +0200
commitf9d1352942831df20889dc83ce32232f9c13590f (patch)
tree7e8f2112c8428c041dfbb5bc7b1244e89dd722f0 /util.c
parent353c9b6f16dec626f888894e7df6f8819303bd11 (diff)
downloadperl-f9d1352942831df20889dc83ce32232f9c13590f.tar.gz
Deal with "\c{", and its kin
make regen is needed This patch forbids non-ascii following the "\c". It also terminates for "\c{" with a message to contact p5p if there is need for continuing its current definition. And if the character following the "\c" causes the result to not be a control character, a warning is issued. This is currently 'deprecated', which by default is turned on. This can easily be changed later. This patch is the initial patch. It does not do any fancy showing the context where the problematic construct occurs. This can be added later. It gathers the 3 occurrences of evaluating \c and puts them in one common routine.
Diffstat (limited to 'util.c')
-rw-r--r--util.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/util.c b/util.c
index 89fea231a6..a1a71df126 100644
--- a/util.c
+++ b/util.c
@@ -3683,6 +3683,39 @@ Perl_ebcdic_control(pTHX_ int ch)
}
#endif
+/* XXX Add documentation after final interface and behavior is decided */
+/* May want to show context for error, so would pass Perl_bslash_c(pTHX_ const char* current, const char* start, const bool output_warning)
+ U8 source = *current;
+
+ May want to add eg, WARN_REGEX
+*/
+
+char
+Perl_grok_bslash_c(pTHX_ const char source, const bool output_warning)
+{
+
+ U8 result;
+
+ if (! isASCII(source)) {
+ Perl_croak(aTHX_ "Character following \"\\c\" must be ASCII");
+ }
+
+ result = toCTRL(source);
+ if (! isCNTRL(result)) {
+ if (source == '{') {
+ Perl_croak(aTHX_ "It is proposed that \"\\c{\" no longer be valid. It has historically evaluated to\n \";\". If you disagree with this proposal, send email to perl5-porters@perl.org\nOtherwise, or in the meantime, you can work around this failure by changing\n\"\\c{\" to \";\"");
+ }
+ else if (output_warning) {
+ Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED),
+ "\"\\c%c\" more clearly written simply as \"%c\"",
+ source,
+ result);
+ }
+ }
+
+ return result;
+}
+
/* To workaround core dumps from the uninitialised tm_zone we get the
* system to give us a reasonable struct to copy. This fix means that
* strftime uses the tm_zone and tm_gmtoff values returned by