#ifndef Py_INTERNAL_LONG_H #define Py_INTERNAL_LONG_H #ifdef __cplusplus extern "C" { #endif #ifndef Py_BUILD_CORE # error "this header requires Py_BUILD_CORE define" #endif #include "pycore_global_objects.h" // _PY_NSMALLNEGINTS #include "pycore_runtime.h" // _PyRuntime /* * Default int base conversion size limitation: Denial of Service prevention. * * Chosen such that this isn't wildly slow on modern hardware and so that * everyone's existing deployed numpy test suite passes before * https://github.com/numpy/numpy/issues/22098 is widely available. * * $ python -m timeit -s 's = "1"*4300' 'int(s)' * 2000 loops, best of 5: 125 usec per loop * $ python -m timeit -s 's = "1"*4300; v = int(s)' 'str(v)' * 1000 loops, best of 5: 311 usec per loop * (zen2 cloud VM) * * 4300 decimal digits fits a ~14284 bit number. */ #define _PY_LONG_DEFAULT_MAX_STR_DIGITS 4300 /* * Threshold for max digits check. For performance reasons int() and * int.__str__() don't checks values that are smaller than this * threshold. Acts as a guaranteed minimum size limit for bignums that * applications can expect from CPython. * * % python -m timeit -s 's = "1"*640; v = int(s)' 'str(int(s))' * 20000 loops, best of 5: 12 usec per loop * * "640 digits should be enough for anyone." - gps * fits a ~2126 bit decimal number. */ #define _PY_LONG_MAX_STR_DIGITS_THRESHOLD 640 #if ((_PY_LONG_DEFAULT_MAX_STR_DIGITS != 0) && \ (_PY_LONG_DEFAULT_MAX_STR_DIGITS < _PY_LONG_MAX_STR_DIGITS_THRESHOLD)) # error "_PY_LONG_DEFAULT_MAX_STR_DIGITS smaller than threshold." #endif /* runtime lifecycle */ extern PyStatus _PyLong_InitTypes(PyInterpreterState *); extern void _PyLong_FiniTypes(PyInterpreterState *interp); /* other API */ #define _PyLong_SMALL_INTS _Py_SINGLETON(small_ints) // _PyLong_GetZero() and _PyLong_GetOne() must always be available // _PyLong_FromUnsignedChar must always be available #if _PY_NSMALLPOSINTS < 257 # error "_PY_NSMALLPOSINTS must be greater than or equal to 257" #endif // Return a borrowed reference to the zero singleton. // The function cannot return NULL. static inline PyObject* _PyLong_GetZero(void) { return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS]; } // Return a borrowed reference to the one singleton. // The function cannot return NULL. static inline PyObject* _PyLong_GetOne(void) { return (PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+1]; } static inline PyObject* _PyLong_FromUnsignedChar(unsigned char i) { return Py_NewRef((PyObject *)&_PyLong_SMALL_INTS[_PY_NSMALLNEGINTS+i]); } PyObject *_PyLong_Add(PyLongObject *left, PyLongObject *right); PyObject *_PyLong_Multiply(PyLongObject *left, PyLongObject *right); PyObject *_PyLong_Subtract(PyLongObject *left, PyLongObject *right); /* Used by Python/mystrtoul.c, _PyBytes_FromHex(), _PyBytes_DecodeEscape(), etc. */ PyAPI_DATA(unsigned char) _PyLong_DigitValue[256]; /* Format the object based on the format_spec, as defined in PEP 3101 (Advanced String Formatting). */ PyAPI_FUNC(int) _PyLong_FormatAdvancedWriter( _PyUnicodeWriter *writer, PyObject *obj, PyObject *format_spec, Py_ssize_t start, Py_ssize_t end); PyAPI_FUNC(int) _PyLong_FormatWriter( _PyUnicodeWriter *writer, PyObject *obj, int base, int alternate); PyAPI_FUNC(char*) _PyLong_FormatBytesWriter( _PyBytesWriter *writer, char *str, PyObject *obj, int base, int alternate); #ifdef __cplusplus } #endif #endif /* !Py_INTERNAL_LONG_H */
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
pycore_abstract.h | File | 611 B | 0644 |
|
pycore_accu.h | File | 1.1 KB | 0644 |
|
pycore_asdl.h | File | 2.96 KB | 0644 |
|
pycore_ast.h | File | 28.63 KB | 0644 |
|
pycore_ast_state.h | File | 6.4 KB | 0644 |
|
pycore_atomic.h | File | 16.58 KB | 0644 |
|
pycore_atomic_funcs.h | File | 2.38 KB | 0644 |
|
pycore_bitutils.h | File | 5.92 KB | 0644 |
|
pycore_blocks_output_buffer.h | File | 8.48 KB | 0644 |
|
pycore_bytes_methods.h | File | 3.3 KB | 0644 |
|
pycore_bytesobject.h | File | 1.39 KB | 0644 |
|
pycore_call.h | File | 3.39 KB | 0644 |
|
pycore_ceval.h | File | 4.31 KB | 0644 |
|
pycore_code.h | File | 15.56 KB | 0644 |
|
pycore_compile.h | File | 1.02 KB | 0644 |
|
pycore_condvar.h | File | 2.77 KB | 0644 |
|
pycore_context.h | File | 1.21 KB | 0644 |
|
pycore_dict.h | File | 5.55 KB | 0644 |
|
pycore_dtoa.h | File | 704 B | 0644 |
|
pycore_emscripten_signal.h | File | 562 B | 0644 |
|
pycore_exceptions.h | File | 842 B | 0644 |
|
pycore_fileutils.h | File | 7.23 KB | 0644 |
|
pycore_floatobject.h | File | 1.28 KB | 0644 |
|
pycore_format.h | File | 480 B | 0644 |
|
pycore_frame.h | File | 7.39 KB | 0644 |
|
pycore_function.h | File | 413 B | 0644 |
|
pycore_gc.h | File | 6.73 KB | 0644 |
|
pycore_genobject.h | File | 1.14 KB | 0644 |
|
pycore_getopt.h | File | 490 B | 0644 |
|
pycore_gil.h | File | 1.53 KB | 0644 |
|
pycore_global_objects.h | File | 1.4 KB | 0644 |
|
pycore_global_strings.h | File | 12.68 KB | 0644 |
|
pycore_hamt.h | File | 3.61 KB | 0644 |
|
pycore_hashtable.h | File | 4.1 KB | 0644 |
|
pycore_import.h | File | 743 B | 0644 |
|
pycore_initconfig.h | File | 5.66 KB | 0644 |
|
pycore_interp.h | File | 6.51 KB | 0644 |
|
pycore_interpreteridobject.h | File | 562 B | 0644 |
|
pycore_list.h | File | 1.32 KB | 0644 |
|
pycore_long.h | File | 3.43 KB | 0644 |
|
pycore_moduleobject.h | File | 1.02 KB | 0644 |
|
pycore_namespace.h | File | 392 B | 0644 |
|
pycore_object.h | File | 9.8 KB | 0644 |
|
pycore_opcode.h | File | 18.54 KB | 0644 |
|
pycore_parser.h | File | 626 B | 0644 |
|
pycore_pathconfig.h | File | 606 B | 0644 |
|
pycore_pyarena.h | File | 2.67 KB | 0644 |
|
pycore_pyerrors.h | File | 2.44 KB | 0644 |
|
pycore_pyhash.h | File | 206 B | 0644 |
|
pycore_pylifecycle.h | File | 3.42 KB | 0644 |
|
pycore_pymath.h | File | 9.21 KB | 0644 |
|
pycore_pymem.h | File | 3.62 KB | 0644 |
|
pycore_pystate.h | File | 4.15 KB | 0644 |
|
pycore_runtime.h | File | 5.85 KB | 0644 |
|
pycore_runtime_init.h | File | 47.94 KB | 0644 |
|
pycore_signal.h | File | 937 B | 0644 |
|
pycore_sliceobject.h | File | 336 B | 0644 |
|
pycore_strhex.h | File | 937 B | 0644 |
|
pycore_structseq.h | File | 580 B | 0644 |
|
pycore_symtable.h | File | 5.51 KB | 0644 |
|
pycore_sysmodule.h | File | 605 B | 0644 |
|
pycore_traceback.h | File | 3.42 KB | 0644 |
|
pycore_tuple.h | File | 2.04 KB | 0644 |
|
pycore_typeobject.h | File | 1.13 KB | 0644 |
|
pycore_ucnhash.h | File | 898 B | 0644 |
|
pycore_unicodeobject.h | File | 1.68 KB | 0644 |
|
pycore_unionobject.h | File | 678 B | 0644 |
|
pycore_warnings.h | File | 740 B | 0644 |
|