goto integer;
case 'D':
+#ifdef IV_IS_QUAD
+ /* nothing */
+#else
intsize = 'l';
+#endif
/* FALL THROUGH */
case 'd':
case 'i':
if (args) {
switch (intsize) {
case 'h': iv = (short)va_arg(*args, int); break;
+#ifdef IV_IS_QUAD
+ default: iv = va_arg(*args, IV); break;
+#else
default: iv = va_arg(*args, int); break;
+#endif
case 'l': iv = va_arg(*args, long); break;
case 'V': iv = va_arg(*args, IV); break;
#ifdef HAS_QUAD
iv = (svix < svmax) ? SvIVx(svargs[svix++]) : 0;
switch (intsize) {
case 'h': iv = (short)iv; break;
+#ifdef IV_IS_QUAD
+ default: break;
+#else
default: iv = (int)iv; break;
+#endif
case 'l': iv = (long)iv; break;
case 'V': break;
#ifdef HAS_QUAD
goto integer;
case 'U':
+#ifdef IV_IS_QUAD
+ /* nothing */
+#else
intsize = 'l';
+#endif
/* FALL THROUGH */
case 'u':
base = 10;
goto uns_integer;
case 'O':
+#ifdef IV_IS_QUAD
+ /* nothing */
+#else
intsize = 'l';
+#endif
/* FALL THROUGH */
case 'o':
base = 8;
if (args) {
switch (intsize) {
case 'h': uv = (unsigned short)va_arg(*args, unsigned); break;
+#ifdef UV_IS_QUAD
+ default: uv = va_arg(*args, UV); break;
+#else
default: uv = va_arg(*args, unsigned); break;
+#endif
case 'l': uv = va_arg(*args, unsigned long); break;
case 'V': uv = va_arg(*args, UV); break;
#ifdef HAS_QUAD
uv = (svix < svmax) ? SvUVx(svargs[svix++]) : 0;
switch (intsize) {
case 'h': uv = (unsigned short)uv; break;
+#ifdef UV_IS_QUAD
+ default: break;
+#else
default: uv = (unsigned)uv; break;
+#endif
case 'l': uv = (unsigned long)uv; break;
case 'V': break;
#ifdef HAS_QUAD
if (args) {
switch (intsize) {
case 'h': *(va_arg(*args, short*)) = i; break;
+#ifdef IV_IS_QUAD
+ default: *(va_arg(*args, IV*)) = i; break;
+#else
default: *(va_arg(*args, int*)) = i; break;
+#endif
case 'l': *(va_arg(*args, long*)) = i; break;
case 'V': *(va_arg(*args, IV*)) = i; break;
#ifdef HAS_QUAD
SV *msg = sv_newmortal();
Perl_sv_setpvf(aTHX_ msg, "Invalid conversion in %s: ",
(PL_op->op_type == OP_PRTF) ? "printf" : "sprintf");
- if (c)
- Perl_sv_catpvf(aTHX_ msg, isPRINT(c) ? "\"%%%c\"" : "\"%%\\%03o\"",
- c & 0xFF);
- else
+ if (c) {
+#ifdef UV_IS_QUAD
+ if (isPRINT(c))
+ Perl_sv_catpvf(aTHX_ msg,
+ "\"%%%c\"", c & 0xFF);
+ else
+ Perl_sv_catpvf(aTHX_ msg,
+ "\"%%\\%03" PERL_PRIo64 "\"",
+ (UV)c & 0xFF);
+#else
+ Perl_sv_catpvf(aTHX_ msg, isPRINT(c) ?
+ "\"%%%c\"" : "\"%%\\%03o\"",
+ c & 0xFF);
+#endif
+ } else
sv_catpv(msg, "end of string");
Perl_warner(aTHX_ WARN_PRINTF, "%_", msg); /* yes, this is reentrant */
}