68 lines
1.8 KiB
C
68 lines
1.8 KiB
C
/* dquote_inline.h
|
|
*
|
|
* Copyright (C) 2015 by Larry Wall and others
|
|
*
|
|
* You may distribute under the terms of either the GNU General Public
|
|
* License or the Artistic License, as specified in the README file.
|
|
*/
|
|
|
|
#ifndef PERL_DQUOTE_INLINE_H_ /* Guard against nested #inclusion */
|
|
#define PERL_DQUOTE_INLINE_H_
|
|
|
|
/*
|
|
- regcurly - a little FSA that accepts {\d+,?\d*}
|
|
Pulled from reg.c.
|
|
*/
|
|
PERL_STATIC_INLINE I32
|
|
S_regcurly(const char *s)
|
|
{
|
|
PERL_ARGS_ASSERT_REGCURLY;
|
|
|
|
if (*s++ != '{')
|
|
return FALSE;
|
|
if (!isDIGIT(*s))
|
|
return FALSE;
|
|
while (isDIGIT(*s))
|
|
s++;
|
|
if (*s == ',') {
|
|
s++;
|
|
while (isDIGIT(*s))
|
|
s++;
|
|
}
|
|
|
|
return *s == '}';
|
|
}
|
|
|
|
/* This is inline not for speed, but because it is so tiny */
|
|
|
|
PERL_STATIC_INLINE char*
|
|
S_form_short_octal_warning(pTHX_
|
|
const char * const s, /* Points to first non-octal */
|
|
const STRLEN len /* Length of octals string, so
|
|
(s-len) points to first
|
|
octal */
|
|
)
|
|
{
|
|
/* Return a character string consisting of a warning message for when a
|
|
* string constant in octal is weird, like "\078". */
|
|
|
|
const char * sans_leading_zeros = s - len;
|
|
|
|
PERL_ARGS_ASSERT_FORM_SHORT_OCTAL_WARNING;
|
|
|
|
assert(*s == '8' || *s == '9');
|
|
|
|
/* Remove the leading zeros, retaining one zero so won't be zero length */
|
|
while (*sans_leading_zeros == '0') sans_leading_zeros++;
|
|
if (sans_leading_zeros == s) {
|
|
sans_leading_zeros--;
|
|
}
|
|
|
|
return Perl_form(aTHX_
|
|
"'%.*s' resolved to '\\o{%.*s}%c'",
|
|
(int) (len + 2), s - len - 1,
|
|
(int) (s - sans_leading_zeros), sans_leading_zeros,
|
|
*s);
|
|
}
|
|
#endif /* PERL_DQUOTE_INLINE_H_ */
|