[pypy-svn] r27401 - in pypy/dist/pypy/rpython: ootypesystem test

antocuni at codespeak.net antocuni at codespeak.net
Thu May 18 12:36:57 CEST 2006


Author: antocuni
Date: Thu May 18 12:36:51 2006
New Revision: 27401

Modified:
   pypy/dist/pypy/rpython/ootypesystem/ll_str.py
   pypy/dist/pypy/rpython/ootypesystem/ootype.py
   pypy/dist/pypy/rpython/test/test_rstr.py
Log:
Fixed a bug in ootypesystem hex() and oct() function.



Modified: pypy/dist/pypy/rpython/ootypesystem/ll_str.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/ll_str.py	(original)
+++ pypy/dist/pypy/rpython/ootypesystem/ll_str.py	Thu May 18 12:36:51 2006
@@ -1,4 +1,4 @@
-from pypy.rpython.ootypesystem import ootype
+from pypy.rpython.ootypesystem.ootype import new, oostring, StringBuilder
 
 def const(c):
     return c
@@ -7,14 +7,33 @@
     return ll_int2dec(i)
 
 def ll_int2dec(i):
-    return ootype.oostring(i, const(10))
+    return oostring(i, const(10))
 
-# TODO: add support for addPrefix == False
 def ll_int2hex(i, addPrefix):
-    #assert addPrefix
-    return ootype.oostring(i, const(16))
+    if not addPrefix:
+        return oostring(i, const(16))
+
+    buf = new(StringBuilder)
+    if i<0:
+        i = -i
+        buf.ll_append_char('-')
+
+    buf.ll_append_char('0')
+    buf.ll_append_char('x')
+    buf.ll_append(oostring(i, const(16)))
+    return buf.ll_build()
 
 def ll_int2oct(i, addPrefix):
-    #assert addPrefix
-    return ootype.oostring(i, const(8))
+    if not addPrefix or i==0:
+        return oostring(i, const(8))
+
+    buf = new(StringBuilder)
+    if i<0:
+        i = -i
+        buf.ll_append_char('-')
+
+    buf.ll_append_char('0')
+    buf.ll_append(oostring(i, const(8)))
+    return buf.ll_build()
+
 

Modified: pypy/dist/pypy/rpython/ootypesystem/ootype.py
==============================================================================
--- pypy/dist/pypy/rpython/ootypesystem/ootype.py	(original)
+++ pypy/dist/pypy/rpython/ootypesystem/ootype.py	Thu May 18 12:36:51 2006
@@ -1169,8 +1169,8 @@
     """
     if isinstance(obj, int):
         assert base in (-1, 8, 10, 16)
-        fn = {-1: str, 8: oct, 10: str, 16: hex}[base]
-        obj = fn(obj)
+        fmt = {-1:'%d', 8:'%o', 10:'%d', 16:'%x'}[base]
+        obj = fmt % obj
     elif isinstance(obj, _view):
         obj = '<%s object>' % obj._inst._TYPE._name
     return make_string(str(obj))

Modified: pypy/dist/pypy/rpython/test/test_rstr.py
==============================================================================
--- pypy/dist/pypy/rpython/test/test_rstr.py	(original)
+++ pypy/dist/pypy/rpython/test/test_rstr.py	Thu May 18 12:36:51 2006
@@ -356,8 +356,6 @@
 
 
     def test_strformat(self):
-        self._skip_oo('string formatting')
-        
         def percentS(s):
             return "before %s after" % (s,)
 



More information about the Pypy-commit mailing list