From d4c2bddd0c768da12d0cefd3c405b10e75fa5aa9 Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Thu, 5 Jun 2014 19:44:54 +0100
Subject: [PATCH] py: Raise TypeError when trying to format non-int with
 %x,%o,%X.

This behaviour follows Python 3.5 standard (in 3.4 it's a
DeprecationWarning which we'd rather make a TypeError).
---
 py/objstr.c                         | 4 ++--
 tests/float/string-format-modulo.py | 6 ++++++
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/py/objstr.c b/py/objstr.c
index 4100b69beb..593c39cb09 100644
--- a/py/objstr.c
+++ b/py/objstr.c
@@ -1273,7 +1273,7 @@ not_enough_args:
                 if (alt) {
                     flags |= (PF_FLAG_SHOW_PREFIX | PF_FLAG_SHOW_OCTAL_LETTER);
                 }
-                pfenv_print_mp_int(&pfenv_vstr, arg_as_int(arg), 1, 8, 'a', flags, fill, width);
+                pfenv_print_mp_int(&pfenv_vstr, arg, 1, 8, 'a', flags, fill, width);
                 break;
 
             case 'r':
@@ -1296,7 +1296,7 @@ not_enough_args:
 
             case 'X':
             case 'x':
-                pfenv_print_mp_int(&pfenv_vstr, arg_as_int(arg), 1, 16, *str - ('X' - 'A'), flags | alt, fill, width);
+                pfenv_print_mp_int(&pfenv_vstr, arg, 1, 16, *str - ('X' - 'A'), flags | alt, fill, width);
                 break;
 
             default:
diff --git a/tests/float/string-format-modulo.py b/tests/float/string-format-modulo.py
index 549b09c1c0..ddca0b5555 100644
--- a/tests/float/string-format-modulo.py
+++ b/tests/float/string-format-modulo.py
@@ -5,6 +5,12 @@ print("%d" % 1.0)
 print("%i" % 1.0)
 print("%u" % 1.0)
 
+# these 3 have different behaviour in Python 3.x versions
+# uPy raises a TypeError, following Python 3.5 (earlier versions don't)
+#print("%x" % 18.0)
+#print("%o" % 18.0)
+#print("%X" % 18.0)
+
 print("%e" % 1.23456)
 print("%E" % 1.23456)
 print("%f" % 1.23456)