mirror of
https://github.com/python/cpython.git
synced 2025-07-19 01:05:26 +00:00
Derived from Martin's SF patch 110609: support unbounded ints in %d,i,u,x,X,o formats.
Note a curious extension to the std C rules: x, X and o formatting can never produce a sign character in C, so the '+' and ' ' flags are meaningless for them. But unbounded ints *can* produce a sign character under these conversions (no fixed- width bitstring is wide enough to hold all negative values in 2's-comp form). So these flags become meaningful in Python when formatting a Python long which is too big to fit in a C long. This required shuffling around existing code, which hacked x and X conversions to death when both the '#' and '0' flags were specified: the hacks weren't strong enough to deal with the simultaneous possibility of the ' ' or '+' flags too, since signs were always meaningless before for x and X conversions. Isomorphic shuffling was required in unicodeobject.c. Also added dozens of non-trivial new unbounded-int test cases to test_format.py.
This commit is contained in:
parent
31575ce817
commit
38fd5b6413
4 changed files with 409 additions and 75 deletions
|
@ -59,6 +59,8 @@ extern DL_IMPORT(void) PyString_Concat(PyObject **, PyObject *);
|
|||
extern DL_IMPORT(void) PyString_ConcatAndDel(PyObject **, PyObject *);
|
||||
extern DL_IMPORT(int) _PyString_Resize(PyObject **, int);
|
||||
extern DL_IMPORT(PyObject *) PyString_Format(PyObject *, PyObject *);
|
||||
extern DL_IMPORT(PyObject *) _PyString_FormatLong(PyObject*, int, int,
|
||||
int, char**, int*);
|
||||
|
||||
#ifdef INTERN_STRINGS
|
||||
extern DL_IMPORT(void) PyString_InternInPlace(PyObject **);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue