mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-22 21:32:31 +00:00
Make numerous improvements
- Python static hello world now 1.8mb - Python static fully loaded now 10mb - Python HTTPS client now uses MbedTLS - Python REPL now completes import stmts - Increase stack size for Python for now - Begin synthesizing posixpath and ntpath - Restore Python \N{UNICODE NAME} support - Restore Python NFKD symbol normalization - Add optimized code path for Intel SHA-NI - Get more Python unit tests passing faster - Get Python help() pagination working on NT - Python hashlib now supports MbedTLS PBKDF2 - Make memcpy/memmove/memcmp/bcmp/etc. faster - Add Mersenne Twister and Vigna to LIBC_RAND - Provide privileged __printf() for error code - Fix zipos opendir() so that it reports ENOTDIR - Add basic chmod() implementation for Windows NT - Add Cosmo's best functions to Python cosmo module - Pin function trace indent depth to that of caller - Show memory diagram on invalid access in MODE=dbg - Differentiate stack overflow on crash in MODE=dbg - Add stb_truetype and tools for analyzing font files - Upgrade to UNICODE 13 and reduce its binary footprint - COMPILE.COM now logs resource usage of build commands - Start implementing basic poll() support on bare metal - Set getauxval(AT_EXECFN) to GetModuleFileName() on NT - Add descriptions to strerror() in non-TINY build modes - Add COUNTBRANCH() macro to help with micro-optimizations - Make error / backtrace / asan / memory code more unbreakable - Add fast perfect C implementation of μ-Law and a-Law audio codecs - Make strtol() functions consistent with other libc implementations - Improve Linenoise implementation (see also github.com/jart/bestline) - COMPILE.COM now suppresses stdout/stderr of successful build commands
This commit is contained in:
parent
fa7b4f5bd1
commit
39bf41f4eb
806 changed files with 77494 additions and 63859 deletions
1
third_party/python/Include/abstract.h
vendored
1
third_party/python/Include/abstract.h
vendored
|
@ -14,7 +14,6 @@ PyObject *PyObject_Call(PyObject *callable_object, PyObject *args,
|
|||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyObject *_PyStack_AsTuple(PyObject **stack, Py_ssize_t nargs);
|
||||
|
||||
PyObject *_PyStack_AsDict(PyObject **values, PyObject *kwnames);
|
||||
|
||||
int _PyStack_UnpackDict(PyObject **args, Py_ssize_t nargs, PyObject *kwargs,
|
||||
|
|
1
third_party/python/Include/ceval.h
vendored
1
third_party/python/Include/ceval.h
vendored
|
@ -124,6 +124,7 @@ const char * PyEval_GetFuncDesc(PyObject *);
|
|||
PyObject * PyEval_GetCallStats(PyObject *);
|
||||
PyObject * PyEval_EvalFrame(struct _frame *);
|
||||
PyObject * PyEval_EvalFrameEx(struct _frame *f, int exc);
|
||||
#define PyEval_EvalFrameEx(fr,st) PyThreadState_GET()->interp->eval_frame(fr,st)
|
||||
#ifndef Py_LIMITED_API
|
||||
PyObject * _PyEval_EvalFrameDefault(struct _frame *f, int exc);
|
||||
#endif
|
||||
|
|
29
third_party/python/Include/ezprint.h
vendored
Normal file
29
third_party/python/Include/ezprint.h
vendored
Normal file
|
@ -0,0 +1,29 @@
|
|||
#ifndef COSMOPOLITAN_THIRD_PARTY_PYTHON_INCLUDE_EZPRINT_H_
|
||||
#define COSMOPOLITAN_THIRD_PARTY_PYTHON_INCLUDE_EZPRINT_H_
|
||||
#include "libc/calls/calls.h"
|
||||
#include "third_party/python/Include/bytesobject.h"
|
||||
#include "third_party/python/Include/pyerrors.h"
|
||||
#include "third_party/python/Include/unicodeobject.h"
|
||||
#if !(__ASSEMBLER__ + __LINKER__ + 0)
|
||||
COSMOPOLITAN_C_START_
|
||||
|
||||
static void EzPrint(PyObject *x, const char *s) {
|
||||
PyObject *u;
|
||||
if (!s) {
|
||||
dprintf(2, "%s = NULL\n", s);
|
||||
} else if (PyBytes_Check(x)) {
|
||||
dprintf(2, "%s = b%`'.*s\n", s, PyBytes_GET_SIZE(x), PyBytes_AS_STRING(x));
|
||||
} else if ((u = PyUnicode_AsUTF8String(x))) {
|
||||
dprintf(2, "%s = u%`'.*s\n", s, PyBytes_GET_SIZE(u), PyBytes_AS_STRING(u));
|
||||
Py_DECREF(u);
|
||||
} else {
|
||||
PyErr_Clear();
|
||||
dprintf(2, "%s = !!!\n", s);
|
||||
}
|
||||
}
|
||||
|
||||
#define EZPRINT(x) EzPrint(x, #x)
|
||||
|
||||
COSMOPOLITAN_C_END_
|
||||
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
|
||||
#endif /* COSMOPOLITAN_THIRD_PARTY_PYTHON_INCLUDE_EZPRINT_H_ */
|
1
third_party/python/Include/longintrepr.h
vendored
1
third_party/python/Include/longintrepr.h
vendored
|
@ -61,6 +61,7 @@ typedef long stwodigits; /* signed variant of twodigits */
|
|||
#else
|
||||
#error "PYLONG_BITS_IN_DIGIT should be 15 or 30"
|
||||
#endif
|
||||
|
||||
#define PyLong_BASE ((digit)1 << PyLong_SHIFT)
|
||||
#define PyLong_MASK ((digit)(PyLong_BASE - 1))
|
||||
|
||||
|
|
2
third_party/python/Include/object.h
vendored
2
third_party/python/Include/object.h
vendored
|
@ -790,7 +790,7 @@ void _Py_Dealloc(PyObject *);
|
|||
do { \
|
||||
PyObject *_py_decref_tmp = (PyObject *)(op); \
|
||||
if (_Py_DEC_REFTOTAL _Py_REF_DEBUG_COMMA \
|
||||
--(_py_decref_tmp)->ob_refcnt != 0) \
|
||||
--(_py_decref_tmp)->ob_refcnt != 0) \
|
||||
_Py_CHECK_REFCNT(_py_decref_tmp) \
|
||||
else \
|
||||
_Py_Dealloc(_py_decref_tmp); \
|
||||
|
|
26
third_party/python/Include/objimpl.h
vendored
26
third_party/python/Include/objimpl.h
vendored
|
@ -9,12 +9,12 @@
|
|||
COSMOPOLITAN_C_START_
|
||||
/* clang-format off */
|
||||
|
||||
void * PyObject_Malloc(size_t size);
|
||||
void * PyObject_Malloc(size_t);
|
||||
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
|
||||
void * PyObject_Calloc(size_t nelem, size_t elsize);
|
||||
void * PyObject_Calloc(size_t, size_t);
|
||||
#endif
|
||||
void * PyObject_Realloc(void *ptr, size_t new_size);
|
||||
void PyObject_Free(void *ptr);
|
||||
void * PyObject_Realloc(void *, size_t);
|
||||
void PyObject_Free(void *);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
/* This function returns the number of allocated memory blocks, regardless of size */
|
||||
|
@ -24,7 +24,7 @@ Py_ssize_t _Py_GetAllocatedBlocks(void);
|
|||
/* Macros */
|
||||
#ifdef WITH_PYMALLOC
|
||||
#ifndef Py_LIMITED_API
|
||||
void _PyObject_DebugMallocStats(FILE *out);
|
||||
void _PyObject_DebugMallocStats(FILE *);
|
||||
#endif /* #ifndef Py_LIMITED_API */
|
||||
#endif
|
||||
|
||||
|
@ -43,8 +43,7 @@ void _PyObject_DebugMallocStats(FILE *out);
|
|||
|
||||
/* Functions */
|
||||
PyObject * PyObject_Init(PyObject *, PyTypeObject *);
|
||||
PyVarObject * PyObject_InitVar(PyVarObject *,
|
||||
PyTypeObject *, Py_ssize_t);
|
||||
PyVarObject * PyObject_InitVar(PyVarObject *, PyTypeObject *, Py_ssize_t);
|
||||
PyObject * _PyObject_New(PyTypeObject *);
|
||||
PyVarObject * _PyObject_NewVar(PyTypeObject *, Py_ssize_t);
|
||||
|
||||
|
@ -243,8 +242,11 @@ extern PyGC_Head *_PyGC_generation0;
|
|||
#endif /* Py_LIMITED_API */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyObject * _PyObject_GC_Malloc(size_t size);
|
||||
PyObject * _PyObject_GC_Calloc(size_t size);
|
||||
PyObject * _PyObject_GC_Alloc(int, size_t);
|
||||
PyObject * _PyObject_GC_Malloc(size_t);
|
||||
PyObject * _PyObject_GC_Calloc(size_t);
|
||||
#define _PyObject_GC_Malloc(sz) _PyObject_GC_Alloc(0, sz)
|
||||
#define _PyObject_GC_Callac(sz) _PyObject_GC_Alloc(1, sz)
|
||||
#endif /* !Py_LIMITED_API */
|
||||
PyObject * _PyObject_GC_New(PyTypeObject *);
|
||||
PyVarObject * _PyObject_GC_NewVar(PyTypeObject *, Py_ssize_t);
|
||||
|
@ -257,6 +259,12 @@ void PyObject_GC_Del(void *);
|
|||
#define PyObject_GC_NewVar(type, typeobj, n) \
|
||||
( (type *) _PyObject_GC_NewVar((typeobj), (n)) )
|
||||
|
||||
#define PyObject_GC_UnTrack(ARG) do { \
|
||||
void *opArg = (ARG); \
|
||||
if (_PyGC_REFS(opArg) != _PyGC_REFS_UNTRACKED) { \
|
||||
_PyObject_GC_UNTRACK(opArg); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/* Utility macro to help write tp_traverse functions.
|
||||
* To use this macro, the tp_traverse function must name its arguments
|
||||
|
|
2
third_party/python/Include/pyatomic.h
vendored
2
third_party/python/Include/pyatomic.h
vendored
|
@ -1,6 +1,5 @@
|
|||
#ifndef Py_ATOMIC_H
|
||||
#define Py_ATOMIC_H
|
||||
#ifdef Py_BUILD_CORE
|
||||
#include "libc/assert.h"
|
||||
#include "third_party/python/Include/dynamic_annotations.h"
|
||||
#include "third_party/python/pyconfig.h"
|
||||
|
@ -242,5 +241,4 @@ _Py_ANNOTATE_MEMORY_ORDER(const volatile void *address, _Py_memory_order order)
|
|||
#define _Py_atomic_load_relaxed(ATOMIC_VAL) \
|
||||
_Py_atomic_load_explicit(ATOMIC_VAL, _Py_memory_order_relaxed)
|
||||
|
||||
#endif /* Py_BUILD_CORE */
|
||||
#endif /* Py_ATOMIC_H */
|
||||
|
|
19
third_party/python/Include/pyerrors.h
vendored
19
third_party/python/Include/pyerrors.h
vendored
|
@ -101,7 +101,7 @@ void PyErr_SetExcInfo(PyObject *, PyObject *, PyObject *);
|
|||
#endif
|
||||
|
||||
/* Defined in Python/pylifecycle.c */
|
||||
void Py_FatalError(const char *message) _Py_NO_RETURN;
|
||||
void Py_FatalError(const char *message) relegated _Py_NO_RETURN;
|
||||
|
||||
#if defined(Py_DEBUG) || defined(Py_LIMITED_API)
|
||||
#define _PyErr_OCCURRED() PyErr_Occurred()
|
||||
|
@ -247,7 +247,7 @@ PyObject * PyErr_SetFromErrnoWithFilename(
|
|||
PyObject *exc,
|
||||
const char *filename /* decoded from the filesystem encoding */
|
||||
);
|
||||
#if defined(MS_WINDOWS) && !defined(Py_LIMITED_API)
|
||||
#if !defined(Py_LIMITED_API)
|
||||
PyObject * PyErr_SetFromErrnoWithUnicodeFilename(
|
||||
PyObject *, const Py_UNICODE *);
|
||||
#endif /* MS_WINDOWS */
|
||||
|
@ -349,7 +349,6 @@ PyObject * _PyErr_TrySetFromCause(
|
|||
);
|
||||
#endif
|
||||
|
||||
|
||||
/* In sigcheck.c or signalmodule.c */
|
||||
int PyErr_CheckSignals(void);
|
||||
void PyErr_SetInterrupt(void);
|
||||
|
@ -477,20 +476,6 @@ int PyUnicodeTranslateError_SetReason(
|
|||
const char *reason /* UTF-8 encoded string */
|
||||
);
|
||||
|
||||
/* These APIs aren't really part of the error implementation, but
|
||||
often needed to format error messages; the native C lib APIs are
|
||||
not available on all platforms, which is why we provide emulations
|
||||
for those platforms in Python/mysnprintf.c,
|
||||
WARNING: The return value of snprintf varies across platforms; do
|
||||
not rely on any particular behavior; eventually the C99 defn may
|
||||
be reliable.
|
||||
*/
|
||||
#if defined(MS_WIN32) && !defined(HAVE_SNPRINTF)
|
||||
# define HAVE_SNPRINTF
|
||||
# define snprintf _snprintf
|
||||
# define vsnprintf _vsnprintf
|
||||
#endif
|
||||
|
||||
int PyOS_snprintf(char *str, size_t size, const char *format, ...)
|
||||
Py_GCC_ATTRIBUTE((format(printf, 3, 4)));
|
||||
int PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va)
|
||||
|
|
3
third_party/python/Include/pystate.h
vendored
3
third_party/python/Include/pystate.h
vendored
|
@ -206,6 +206,9 @@ PyThreadState * PyThreadState_Get(void);
|
|||
/* Similar to PyThreadState_Get(), but don't issue a fatal error
|
||||
* if it is NULL. */
|
||||
PyThreadState * _PyThreadState_UncheckedGet(void);
|
||||
#define _PyThreadState_UncheckedGet() \
|
||||
((PyThreadState *)_Py_atomic_load_relaxed(&_PyThreadState_Current))
|
||||
|
||||
#endif /* !Py_LIMITED_API */
|
||||
|
||||
PyThreadState * PyThreadState_Swap(PyThreadState *);
|
||||
|
|
4
third_party/python/Include/tupleobject.h
vendored
4
third_party/python/Include/tupleobject.h
vendored
|
@ -37,7 +37,7 @@ extern PyTypeObject PyTupleIter_Type;
|
|||
PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TUPLE_SUBCLASS)
|
||||
#define PyTuple_CheckExact(op) (Py_TYPE(op) == &PyTuple_Type)
|
||||
|
||||
PyObject * PyTuple_New(Py_ssize_t size);
|
||||
PyObject * PyTuple_New(Py_ssize_t);
|
||||
Py_ssize_t PyTuple_Size(PyObject *);
|
||||
PyObject * PyTuple_GetItem(PyObject *, Py_ssize_t);
|
||||
int PyTuple_SetItem(PyObject *, Py_ssize_t, PyObject *);
|
||||
|
@ -45,7 +45,7 @@ PyObject * PyTuple_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t);
|
|||
#ifndef Py_LIMITED_API
|
||||
int _PyTuple_Resize(PyObject **, Py_ssize_t);
|
||||
#endif
|
||||
PyObject * PyTuple_Pack(Py_ssize_t, ...);
|
||||
PyObject *PyTuple_Pack(Py_ssize_t, ...);
|
||||
#ifndef Py_LIMITED_API
|
||||
void _PyTuple_MaybeUntrack(PyObject *);
|
||||
#endif
|
||||
|
|
2
third_party/python/Include/unicodeobject.h
vendored
2
third_party/python/Include/unicodeobject.h
vendored
|
@ -118,7 +118,7 @@ typedef uint8_t Py_UCS1;
|
|||
#define Py_UNICODE_MATCH(string, offset, substring) \
|
||||
((*((string)->wstr + (offset)) == *((substring)->wstr)) && \
|
||||
((*((string)->wstr + (offset) + (substring)->wstr_length-1) == *((substring)->wstr + (substring)->wstr_length-1))) && \
|
||||
!memcmp((string)->wstr + (offset), (substring)->wstr, (substring)->wstr_length*sizeof(Py_UNICODE)))
|
||||
!bcmp((string)->wstr + (offset), (substring)->wstr, (substring)->wstr_length*sizeof(Py_UNICODE)))
|
||||
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue