Merge branches/pep-0384.
This commit is contained in:
parent
c4df784514
commit
4d0d471a80
|
@ -239,14 +239,14 @@ the same library that the Python runtime is using.
|
|||
be parsed or compiled.
|
||||
|
||||
|
||||
.. c:function:: PyObject* PyEval_EvalCode(PyCodeObject *co, PyObject *globals, PyObject *locals)
|
||||
.. c:function:: PyObject* PyEval_EvalCode(PyObject *co, PyObject *globals, PyObject *locals)
|
||||
|
||||
This is a simplified interface to :c:func:`PyEval_EvalCodeEx`, with just
|
||||
the code object, and the dictionaries of global and local variables.
|
||||
The other arguments are set to *NULL*.
|
||||
|
||||
|
||||
.. c:function:: PyObject* PyEval_EvalCodeEx(PyCodeObject *co, PyObject *globals, PyObject *locals, PyObject **args, int argcount, PyObject **kws, int kwcount, PyObject **defs, int defcount, PyObject *closure)
|
||||
.. c:function:: PyObject* PyEval_EvalCodeEx(PyObject *co, PyObject *globals, PyObject *locals, PyObject **args, int argcount, PyObject **kws, int kwcount, PyObject **defs, int defcount, PyObject *closure)
|
||||
|
||||
Evaluate a precompiled code object, given a particular environment for its
|
||||
evaluation. This environment consists of dictionaries of global and local
|
||||
|
|
|
@ -379,7 +379,7 @@ complete example using the GNU readline library (you may want to ignore
|
|||
if (ps1 == prompt || /* ">>> " or */
|
||||
'\n' == code[i + j - 1]) /* "... " and double '\n' */
|
||||
{ /* so execute it */
|
||||
dum = PyEval_EvalCode ((PyCodeObject *)src, glb, loc);
|
||||
dum = PyEval_EvalCode (src, glb, loc);
|
||||
Py_XDECREF (dum);
|
||||
Py_XDECREF (src);
|
||||
free (code);
|
||||
|
|
|
@ -49,6 +49,24 @@
|
|||
|
||||
This article explains the new features in Python 3.2, compared to 3.1.
|
||||
|
||||
PEP 382: Defining a Stable ABI
|
||||
==============================
|
||||
|
||||
In the past, extension modules built for one Python version were often
|
||||
not usable with other Python versions. Particularly on Windows, every
|
||||
feature release of Python required rebuilding all extension modules that
|
||||
one wanted to use. This requirement was the result of the free access to
|
||||
Python interpreter internals that extension modules could use.
|
||||
|
||||
With Python 3.2, an alternative approach becomes available: extension
|
||||
modules with restrict themselves to a limited API (by defining
|
||||
Py_LIMITED_API) cannot use many of the internals, but are constrained
|
||||
to a set of API functions that are promised to be stable for several
|
||||
releases. As a consequence, extension modules built for 3.2 in that
|
||||
mode will also work with 3.3, 3.4, and so on. Extension modules that
|
||||
make use of details of memory structures can still be built, but will
|
||||
need to be recompiled for every feature release.
|
||||
|
||||
|
||||
PEP 391: Dictionary Based Configuration for Logging
|
||||
====================================================
|
||||
|
|
|
@ -66,6 +66,7 @@
|
|||
|
||||
#include "object.h"
|
||||
#include "objimpl.h"
|
||||
#include "typeslots.h"
|
||||
|
||||
#include "pydebug.h"
|
||||
|
||||
|
@ -100,6 +101,7 @@
|
|||
#include "weakrefobject.h"
|
||||
#include "structseq.h"
|
||||
|
||||
|
||||
#include "codecs.h"
|
||||
#include "pyerrors.h"
|
||||
|
||||
|
@ -130,7 +132,9 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
/* _Py_Mangle is defined in compile.c */
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject*) _Py_Mangle(PyObject *p, PyObject *name);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -387,7 +387,9 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
|
|||
PyAPI_FUNC(Py_ssize_t) PyObject_Length(PyObject *o);
|
||||
#define PyObject_Length PyObject_Size
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(Py_ssize_t) _PyObject_LengthHint(PyObject *o, Py_ssize_t);
|
||||
#endif
|
||||
|
||||
/*
|
||||
Guess the size of object o using len(o) or o.__length_hint__().
|
||||
|
@ -765,9 +767,11 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
|
|||
that can accept a char* naming integral's type.
|
||||
*/
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) _PyNumber_ConvertIntegralToInt(
|
||||
PyObject *integral,
|
||||
const char* error_format);
|
||||
#endif
|
||||
|
||||
/*
|
||||
Returns the object converted to Py_ssize_t by going through
|
||||
|
@ -1057,11 +1061,13 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/
|
|||
Use __contains__ if possible, else _PySequence_IterSearch().
|
||||
*/
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
#define PY_ITERSEARCH_COUNT 1
|
||||
#define PY_ITERSEARCH_INDEX 2
|
||||
#define PY_ITERSEARCH_CONTAINS 3
|
||||
PyAPI_FUNC(Py_ssize_t) _PySequence_IterSearch(PyObject *seq,
|
||||
PyObject *obj, int operation);
|
||||
#endif
|
||||
/*
|
||||
Iterate over seq. Result depends on the operation:
|
||||
PY_ITERSEARCH_COUNT: return # of times obj appears in seq; -1 if
|
||||
|
@ -1228,6 +1234,7 @@ PyAPI_FUNC(int) PyObject_IsSubclass(PyObject *object, PyObject *typeorclass);
|
|||
/* issubclass(object, typeorclass) */
|
||||
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(int) _PyObject_RealIsInstance(PyObject *inst, PyObject *cls);
|
||||
|
||||
PyAPI_FUNC(int) _PyObject_RealIsSubclass(PyObject *derived, PyObject *cls);
|
||||
|
@ -1235,6 +1242,7 @@ PyAPI_FUNC(int) _PyObject_RealIsSubclass(PyObject *derived, PyObject *cls);
|
|||
PyAPI_FUNC(char *const *) _PySequence_BytesToCharpArray(PyObject* self);
|
||||
|
||||
PyAPI_FUNC(void) _Py_FreeCharPArray(char *const array[]);
|
||||
#endif
|
||||
|
||||
/* For internal use by buffer API functions */
|
||||
PyAPI_FUNC(void) _Py_add_one_to_index_F(int nd, Py_ssize_t *index,
|
||||
|
|
|
@ -19,6 +19,7 @@ extern "C" {
|
|||
*/
|
||||
|
||||
/* Object layout */
|
||||
#ifndef Py_LIMITED_API
|
||||
typedef struct {
|
||||
PyObject_VAR_HEAD
|
||||
/* XXX(nnorwitz): should ob_exports be Py_ssize_t? */
|
||||
|
@ -26,6 +27,7 @@ typedef struct {
|
|||
Py_ssize_t ob_alloc; /* How many bytes allocated */
|
||||
char *ob_bytes;
|
||||
} PyByteArrayObject;
|
||||
#endif
|
||||
|
||||
/* Type object */
|
||||
PyAPI_DATA(PyTypeObject) PyByteArray_Type;
|
||||
|
@ -44,12 +46,14 @@ PyAPI_FUNC(char *) PyByteArray_AsString(PyObject *);
|
|||
PyAPI_FUNC(int) PyByteArray_Resize(PyObject *, Py_ssize_t);
|
||||
|
||||
/* Macros, trading safety for speed */
|
||||
#ifndef Py_LIMITED_API
|
||||
#define PyByteArray_AS_STRING(self) \
|
||||
(assert(PyByteArray_Check(self)), \
|
||||
Py_SIZE(self) ? ((PyByteArrayObject *)(self))->ob_bytes : _PyByteArray_empty_string)
|
||||
#define PyByteArray_GET_SIZE(self) (assert(PyByteArray_Check(self)),Py_SIZE(self))
|
||||
|
||||
PyAPI_DATA(char) _PyByteArray_empty_string[];
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifndef Py_LIMITED_API
|
||||
#ifndef Py_BYTES_CTYPE_H
|
||||
#define Py_BYTES_CTYPE_H
|
||||
|
||||
|
@ -42,3 +43,4 @@ extern const char _Py_maketrans__doc__[];
|
|||
#define PyDoc_STRVAR_shared(name,str) const char name[] = PyDoc_STR(str)
|
||||
|
||||
#endif /* !Py_BYTES_CTYPE_H */
|
||||
#endif /* !Py_LIMITED_API */
|
||||
|
|
|
@ -27,6 +27,7 @@ functions should be applied to nil objects.
|
|||
/* Caching the hash (ob_shash) saves recalculation of a string's hash value.
|
||||
This significantly speeds up dict lookups. */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
typedef struct {
|
||||
PyObject_VAR_HEAD
|
||||
Py_hash_t ob_shash;
|
||||
|
@ -38,6 +39,7 @@ typedef struct {
|
|||
* ob_shash is the hash of the string or -1 if not computed yet.
|
||||
*/
|
||||
} PyBytesObject;
|
||||
#endif
|
||||
|
||||
PyAPI_DATA(PyTypeObject) PyBytes_Type;
|
||||
PyAPI_DATA(PyTypeObject) PyBytesIter_Type;
|
||||
|
@ -58,21 +60,27 @@ PyAPI_FUNC(char *) PyBytes_AsString(PyObject *);
|
|||
PyAPI_FUNC(PyObject *) PyBytes_Repr(PyObject *, int);
|
||||
PyAPI_FUNC(void) PyBytes_Concat(PyObject **, PyObject *);
|
||||
PyAPI_FUNC(void) PyBytes_ConcatAndDel(PyObject **, PyObject *);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(int) _PyBytes_Resize(PyObject **, Py_ssize_t);
|
||||
PyAPI_FUNC(PyObject *) _PyBytes_FormatLong(PyObject*, int, int,
|
||||
int, char**, int*);
|
||||
#endif
|
||||
PyAPI_FUNC(PyObject *) PyBytes_DecodeEscape(const char *, Py_ssize_t,
|
||||
const char *, Py_ssize_t,
|
||||
const char *);
|
||||
|
||||
/* Macro, trading safety for speed */
|
||||
#ifndef Py_LIMITED_API
|
||||
#define PyBytes_AS_STRING(op) (assert(PyBytes_Check(op)), \
|
||||
(((PyBytesObject *)(op))->ob_sval))
|
||||
#define PyBytes_GET_SIZE(op) (assert(PyBytes_Check(op)),Py_SIZE(op))
|
||||
#endif
|
||||
|
||||
/* _PyBytes_Join(sep, x) is like sep.join(x). sep must be PyBytesObject*,
|
||||
x must be an iterable object. */
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) _PyBytes_Join(PyObject *sep, PyObject *x);
|
||||
#endif
|
||||
|
||||
/* Provides access to the internal data buffer and size of a string
|
||||
object or the default encoded version of an Unicode object. Passing
|
||||
|
@ -90,7 +98,7 @@ PyAPI_FUNC(int) PyBytes_AsStringAndSize(
|
|||
/* Using the current locale, insert the thousands grouping
|
||||
into the string pointed to by buffer. For the argument descriptions,
|
||||
see Objects/stringlib/localeutil.h */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGroupingLocale(char *buffer,
|
||||
Py_ssize_t n_buffer,
|
||||
char *digits,
|
||||
|
@ -107,6 +115,7 @@ PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGrouping(char *buffer,
|
|||
Py_ssize_t min_width,
|
||||
const char *grouping,
|
||||
const char *thousands_sep);
|
||||
#endif
|
||||
|
||||
/* Flags used by string formatting */
|
||||
#define F_LJUST (1<<0)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* Cell object interface */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
#ifndef Py_CELLOBJECT_H
|
||||
#define Py_CELLOBJECT_H
|
||||
#ifdef __cplusplus
|
||||
|
@ -26,3 +26,4 @@ PyAPI_FUNC(int) PyCell_Set(PyObject *, PyObject *);
|
|||
}
|
||||
#endif
|
||||
#endif /* !Py_TUPLEOBJECT_H */
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
|
|
@ -20,8 +20,10 @@ PyAPI_FUNC(PyObject *) PyEval_CallMethod(PyObject *obj,
|
|||
const char *methodname,
|
||||
const char *format, ...);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *);
|
||||
PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *);
|
||||
#endif
|
||||
|
||||
struct _frame; /* Avoid including frameobject.h */
|
||||
|
||||
|
@ -33,7 +35,9 @@ PyAPI_FUNC(struct _frame *) PyEval_GetFrame(void);
|
|||
/* Look at the current frame's (if any) code's co_flags, and turn on
|
||||
the corresponding compiler flags in cf->cf_flags. Return 1 if any
|
||||
flag was set, else return 0. */
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(int) PyEval_MergeCompilerFlags(PyCompilerFlags *cf);
|
||||
#endif
|
||||
|
||||
PyAPI_FUNC(int) Py_AddPendingCall(int (*func)(void *), void *arg);
|
||||
PyAPI_FUNC(int) Py_MakePendingCalls(void);
|
||||
|
@ -167,8 +171,10 @@ PyAPI_FUNC(void) PyEval_AcquireThread(PyThreadState *tstate);
|
|||
PyAPI_FUNC(void) PyEval_ReleaseThread(PyThreadState *tstate);
|
||||
PyAPI_FUNC(void) PyEval_ReInitThreads(void);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(void) _PyEval_SetSwitchInterval(unsigned long microseconds);
|
||||
PyAPI_FUNC(unsigned long) _PyEval_GetSwitchInterval(void);
|
||||
#endif
|
||||
|
||||
#define Py_BEGIN_ALLOW_THREADS { \
|
||||
PyThreadState *_save; \
|
||||
|
@ -187,8 +193,10 @@ PyAPI_FUNC(unsigned long) _PyEval_GetSwitchInterval(void);
|
|||
|
||||
#endif /* !WITH_THREAD */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *);
|
||||
PyAPI_FUNC(void) _PyEval_SignalAsyncExc(void);
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
/* Revealing some structures (not for general use) */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
#ifndef Py_CLASSOBJECT_H
|
||||
#define Py_CLASSOBJECT_H
|
||||
#ifdef __cplusplus
|
||||
|
@ -54,3 +55,4 @@ PyAPI_FUNC(PyObject *) PyInstanceMethod_Function(PyObject *);
|
|||
}
|
||||
#endif
|
||||
#endif /* !Py_CLASSOBJECT_H */
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/* Definitions for bytecode */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
#ifndef Py_CODE_H
|
||||
#define Py_CODE_H
|
||||
#ifdef __cplusplus
|
||||
|
@ -93,8 +94,10 @@ typedef struct _addr_pair {
|
|||
/* Update *bounds to describe the first and one-past-the-last instructions in the
|
||||
same line as lasti. Return the number of that line.
|
||||
*/
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(int) _PyCode_CheckLineNumber(PyCodeObject* co,
|
||||
int lasti, PyAddrPair *bounds);
|
||||
#endif
|
||||
|
||||
PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts,
|
||||
PyObject *names, PyObject *lineno_obj);
|
||||
|
@ -103,3 +106,4 @@ PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts,
|
|||
}
|
||||
#endif
|
||||
#endif /* !Py_CODE_H */
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
|
|
@ -45,9 +45,11 @@ PyAPI_FUNC(int) PyCodec_Register(
|
|||
|
||||
*/
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) _PyCodec_Lookup(
|
||||
const char *encoding
|
||||
);
|
||||
#endif
|
||||
|
||||
/* Codec registry encoding check API.
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
|
||||
#ifndef Py_LIMITED_API
|
||||
#ifndef Py_COMPILE_H
|
||||
#define Py_COMPILE_H
|
||||
|
||||
|
@ -38,3 +38,4 @@ PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *);
|
|||
}
|
||||
#endif
|
||||
#endif /* !Py_COMPILE_H */
|
||||
#endif /* !Py_LIMITED_API */
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
typedef struct {
|
||||
double real;
|
||||
double imag;
|
||||
|
@ -28,7 +29,7 @@ PyAPI_FUNC(Py_complex) c_prod(Py_complex, Py_complex);
|
|||
PyAPI_FUNC(Py_complex) c_quot(Py_complex, Py_complex);
|
||||
PyAPI_FUNC(Py_complex) c_pow(Py_complex, Py_complex);
|
||||
PyAPI_FUNC(double) c_abs(Py_complex);
|
||||
|
||||
#endif
|
||||
|
||||
/* Complex object interface */
|
||||
|
||||
|
@ -36,29 +37,36 @@ PyAPI_FUNC(double) c_abs(Py_complex);
|
|||
PyComplexObject represents a complex number with double-precision
|
||||
real and imaginary parts.
|
||||
*/
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
Py_complex cval;
|
||||
} PyComplexObject;
|
||||
} PyComplexObject;
|
||||
#endif
|
||||
|
||||
PyAPI_DATA(PyTypeObject) PyComplex_Type;
|
||||
|
||||
#define PyComplex_Check(op) PyObject_TypeCheck(op, &PyComplex_Type)
|
||||
#define PyComplex_CheckExact(op) (Py_TYPE(op) == &PyComplex_Type)
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) PyComplex_FromCComplex(Py_complex);
|
||||
#endif
|
||||
PyAPI_FUNC(PyObject *) PyComplex_FromDoubles(double real, double imag);
|
||||
|
||||
PyAPI_FUNC(double) PyComplex_RealAsDouble(PyObject *op);
|
||||
PyAPI_FUNC(double) PyComplex_ImagAsDouble(PyObject *op);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(Py_complex) PyComplex_AsCComplex(PyObject *op);
|
||||
#endif
|
||||
|
||||
/* Format the object based on the format_spec, as defined in PEP 3101
|
||||
(Advanced String Formatting). */
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) _PyComplex_FormatAdvanced(PyObject *obj,
|
||||
Py_UNICODE *format_spec,
|
||||
Py_ssize_t format_spec_len);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* datetime.h
|
||||
*/
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
#ifndef DATETIME_H
|
||||
#define DATETIME_H
|
||||
#ifdef __cplusplus
|
||||
|
@ -234,3 +234,4 @@ static PyDateTime_CAPI *PyDateTimeAPI = NULL;
|
|||
}
|
||||
#endif
|
||||
#endif
|
||||
#endif /* !Py_LIMITED_API */
|
||||
|
|
|
@ -16,6 +16,7 @@ typedef struct PyGetSetDef {
|
|||
void *closure;
|
||||
} PyGetSetDef;
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
typedef PyObject *(*wrapperfunc)(PyObject *self, PyObject *args,
|
||||
void *wrapped);
|
||||
|
||||
|
@ -68,6 +69,7 @@ typedef struct {
|
|||
struct wrapperbase *d_base;
|
||||
void *d_wrapped; /* This can be any function pointer */
|
||||
} PyWrapperDescrObject;
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
||||
PyAPI_DATA(PyTypeObject) PyClassMethodDescr_Type;
|
||||
PyAPI_DATA(PyTypeObject) PyGetSetDescr_Type;
|
||||
|
@ -78,13 +80,16 @@ PyAPI_DATA(PyTypeObject) PyDictProxy_Type;
|
|||
|
||||
PyAPI_FUNC(PyObject *) PyDescr_NewMethod(PyTypeObject *, PyMethodDef *);
|
||||
PyAPI_FUNC(PyObject *) PyDescr_NewClassMethod(PyTypeObject *, PyMethodDef *);
|
||||
struct PyMemberDef; /* forward declaration for following prototype */
|
||||
PyAPI_FUNC(PyObject *) PyDescr_NewMember(PyTypeObject *,
|
||||
struct PyMemberDef *);
|
||||
PyAPI_FUNC(PyObject *) PyDescr_NewGetSet(PyTypeObject *,
|
||||
struct PyGetSetDef *);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) PyDescr_NewWrapper(PyTypeObject *,
|
||||
struct wrapperbase *, void *);
|
||||
#define PyDescr_IsData(d) (Py_TYPE(d)->tp_descr_set != NULL)
|
||||
#endif
|
||||
|
||||
PyAPI_FUNC(PyObject *) PyDictProxy_New(PyObject *);
|
||||
PyAPI_FUNC(PyObject *) PyWrapper_New(PyObject *, PyObject *);
|
||||
|
|
|
@ -45,6 +45,7 @@ meaning otherwise.
|
|||
* majority of dicts (consisting mostly of usually-small instance dicts and
|
||||
* usually-small dicts created to pass keyword arguments).
|
||||
*/
|
||||
#ifndef Py_LIMITED_API
|
||||
#define PyDict_MINSIZE 8
|
||||
|
||||
typedef struct {
|
||||
|
@ -84,6 +85,7 @@ struct _dictobject {
|
|||
PyDictEntry *(*ma_lookup)(PyDictObject *mp, PyObject *key, Py_hash_t hash);
|
||||
PyDictEntry ma_smalltable[PyDict_MINSIZE];
|
||||
};
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
||||
PyAPI_DATA(PyTypeObject) PyDict_Type;
|
||||
PyAPI_DATA(PyTypeObject) PyDictIterKey_Type;
|
||||
|
@ -112,18 +114,22 @@ PyAPI_FUNC(int) PyDict_DelItem(PyObject *mp, PyObject *key);
|
|||
PyAPI_FUNC(void) PyDict_Clear(PyObject *mp);
|
||||
PyAPI_FUNC(int) PyDict_Next(
|
||||
PyObject *mp, Py_ssize_t *pos, PyObject **key, PyObject **value);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(int) _PyDict_Next(
|
||||
PyObject *mp, Py_ssize_t *pos, PyObject **key, PyObject **value, Py_hash_t *hash);
|
||||
#endif
|
||||
PyAPI_FUNC(PyObject *) PyDict_Keys(PyObject *mp);
|
||||
PyAPI_FUNC(PyObject *) PyDict_Values(PyObject *mp);
|
||||
PyAPI_FUNC(PyObject *) PyDict_Items(PyObject *mp);
|
||||
PyAPI_FUNC(Py_ssize_t) PyDict_Size(PyObject *mp);
|
||||
PyAPI_FUNC(PyObject *) PyDict_Copy(PyObject *mp);
|
||||
PyAPI_FUNC(int) PyDict_Contains(PyObject *mp, PyObject *key);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(int) _PyDict_Contains(PyObject *mp, PyObject *key, Py_hash_t hash);
|
||||
PyAPI_FUNC(PyObject *) _PyDict_NewPresized(Py_ssize_t minused);
|
||||
PyAPI_FUNC(void) _PyDict_MaybeUntrack(PyObject *mp);
|
||||
PyAPI_FUNC(int) _PyDict_HasOnlyStringKeys(PyObject *mp);
|
||||
#endif
|
||||
|
||||
/* PyDict_Update(mp, other) is equivalent to PyDict_Merge(mp, other, 1). */
|
||||
PyAPI_FUNC(int) PyDict_Update(PyObject *mp, PyObject *other);
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifndef Py_LIMITED_API
|
||||
#ifndef PY_NO_SHORT_FLOAT_REPR
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
@ -13,3 +14,4 @@ PyAPI_FUNC(void) _Py_dg_freedtoa(char *s);
|
|||
}
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -7,9 +7,9 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
PyAPI_FUNC(PyObject *) PyEval_EvalCode(PyCodeObject *, PyObject *, PyObject *);
|
||||
PyAPI_FUNC(PyObject *) PyEval_EvalCode(PyObject *, PyObject *, PyObject *);
|
||||
|
||||
PyAPI_FUNC(PyObject *) PyEval_EvalCodeEx(PyCodeObject *co,
|
||||
PyAPI_FUNC(PyObject *) PyEval_EvalCodeEx(PyObject *co,
|
||||
PyObject *globals,
|
||||
PyObject *locals,
|
||||
PyObject **args, int argc,
|
||||
|
@ -17,7 +17,9 @@ PyAPI_FUNC(PyObject *) PyEval_EvalCodeEx(PyCodeObject *co,
|
|||
PyObject **defs, int defc,
|
||||
PyObject *kwdefs, PyObject *closure);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) _PyEval_CallTracing(PyObject *func, PyObject *args);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -14,7 +14,9 @@ PyAPI_FUNC(PyObject *) PyFile_GetLine(PyObject *, int);
|
|||
PyAPI_FUNC(int) PyFile_WriteObject(PyObject *, PyObject *, int);
|
||||
PyAPI_FUNC(int) PyFile_WriteString(const char *, PyObject *);
|
||||
PyAPI_FUNC(int) PyObject_AsFileDescriptor(PyObject *);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(char *) Py_UniversalNewlineFgets(char *, int, FILE*, PyObject *);
|
||||
#endif
|
||||
|
||||
/* The default encoding used by the platform file system APIs
|
||||
If non-NULL, this is different than the default encoding for strings
|
||||
|
@ -26,6 +28,7 @@ PyAPI_DATA(int) Py_HasFileSystemDefaultEncoding;
|
|||
|
||||
The std printer acts as a preliminary sys.stderr until the new io
|
||||
infrastructure is in place. */
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) PyFile_NewStdPrinter(int);
|
||||
PyAPI_DATA(PyTypeObject) PyStdPrinter_Type;
|
||||
|
||||
|
@ -39,6 +42,7 @@ int _PyVerify_fd(int fd);
|
|||
#else
|
||||
#define _PyVerify_fd(A) (1) /* dummy */
|
||||
#endif
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -11,10 +11,12 @@ PyFloatObject represents a (double precision) floating point number.
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
double ob_fval;
|
||||
} PyFloatObject;
|
||||
#endif
|
||||
|
||||
PyAPI_DATA(PyTypeObject) PyFloat_Type;
|
||||
|
||||
|
@ -45,8 +47,11 @@ PyAPI_FUNC(PyObject *) PyFloat_FromDouble(double);
|
|||
/* Extract C double from Python float. The macro version trades safety for
|
||||
speed. */
|
||||
PyAPI_FUNC(double) PyFloat_AsDouble(PyObject *);
|
||||
#ifndef Py_LIMITED_API
|
||||
#define PyFloat_AS_DOUBLE(op) (((PyFloatObject *)(op))->ob_fval)
|
||||
#endif
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
/* _PyFloat_{Pack,Unpack}{4,8}
|
||||
*
|
||||
* The struct and pickle (at least) modules need an efficient platform-
|
||||
|
@ -110,6 +115,7 @@ PyAPI_FUNC(int) PyFloat_ClearFreeList(void);
|
|||
PyAPI_FUNC(PyObject *) _PyFloat_FormatAdvanced(PyObject *obj,
|
||||
Py_UNICODE *format_spec,
|
||||
Py_ssize_t format_spec_len);
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
|
||||
/* Frame object interface */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
#ifndef Py_FRAMEOBJECT_H
|
||||
#define Py_FRAMEOBJECT_H
|
||||
#ifdef __cplusplus
|
||||
|
@ -85,3 +86,4 @@ PyAPI_FUNC(int) PyFrame_GetLineNumber(PyFrameObject *);
|
|||
}
|
||||
#endif
|
||||
#endif /* !Py_FRAMEOBJECT_H */
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
/* Function object interface */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
#ifndef Py_FUNCOBJECT_H
|
||||
#define Py_FUNCOBJECT_H
|
||||
#ifdef __cplusplus
|
||||
|
@ -84,3 +84,4 @@ PyAPI_FUNC(PyObject *) PyStaticMethod_New(PyObject *);
|
|||
}
|
||||
#endif
|
||||
#endif /* !Py_FUNCOBJECT_H */
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
|
||||
/* Generator object interface */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
#ifndef Py_GENOBJECT_H
|
||||
#define Py_GENOBJECT_H
|
||||
#ifdef __cplusplus
|
||||
|
@ -38,3 +39,4 @@ PyAPI_FUNC(int) PyGen_NeedsFinalizing(PyGenObject *);
|
|||
}
|
||||
#endif
|
||||
#endif /* !Py_GENOBJECT_H */
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
|
|
@ -30,6 +30,7 @@ PyAPI_FUNC(PyObject *) PyImport_ReloadModule(PyObject *m);
|
|||
PyAPI_FUNC(void) PyImport_Cleanup(void);
|
||||
PyAPI_FUNC(int) PyImport_ImportFrozenModule(char *);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
#ifdef WITH_THREAD
|
||||
PyAPI_FUNC(void) _PyImport_AcquireLock(void);
|
||||
PyAPI_FUNC(int) _PyImport_ReleaseLock(void);
|
||||
|
@ -49,13 +50,15 @@ struct _inittab {
|
|||
char *name;
|
||||
PyObject* (*initfunc)(void);
|
||||
};
|
||||
PyAPI_DATA(struct _inittab *) PyImport_Inittab;
|
||||
PyAPI_FUNC(int) PyImport_ExtendInittab(struct _inittab *newtab);
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
||||
PyAPI_DATA(PyTypeObject) PyNullImporter_Type;
|
||||
PyAPI_DATA(struct _inittab *) PyImport_Inittab;
|
||||
|
||||
PyAPI_FUNC(int) PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void));
|
||||
PyAPI_FUNC(int) PyImport_ExtendInittab(struct _inittab *newtab);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
struct _frozen {
|
||||
char *name;
|
||||
unsigned char *code;
|
||||
|
@ -66,6 +69,7 @@ struct _frozen {
|
|||
collection of frozen modules: */
|
||||
|
||||
PyAPI_DATA(struct _frozen *) PyImport_FrozenModules;
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ returned item's reference count.
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
typedef struct {
|
||||
PyObject_VAR_HEAD
|
||||
/* Vector of pointers to list elements. list[0] is ob_item[0], etc. */
|
||||
|
@ -37,6 +38,7 @@ typedef struct {
|
|||
*/
|
||||
Py_ssize_t allocated;
|
||||
} PyListObject;
|
||||
#endif
|
||||
|
||||
PyAPI_DATA(PyTypeObject) PyList_Type;
|
||||
PyAPI_DATA(PyTypeObject) PyListIter_Type;
|
||||
|
@ -58,12 +60,16 @@ PyAPI_FUNC(int) PyList_SetSlice(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *);
|
|||
PyAPI_FUNC(int) PyList_Sort(PyObject *);
|
||||
PyAPI_FUNC(int) PyList_Reverse(PyObject *);
|
||||
PyAPI_FUNC(PyObject *) PyList_AsTuple(PyObject *);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) _PyList_Extend(PyListObject *, PyObject *);
|
||||
#endif
|
||||
|
||||
/* Macro, trading safety for speed */
|
||||
#ifndef Py_LIMITED_API
|
||||
#define PyList_GET_ITEM(op, i) (((PyListObject *)(op))->ob_item[i])
|
||||
#define PyList_SET_ITEM(op, i, v) (((PyListObject *)(op))->ob_item[i] = (v))
|
||||
#define PyList_GET_SIZE(op) Py_SIZE(op)
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifndef Py_LIMITED_API
|
||||
#ifndef Py_LONGINTREPR_H
|
||||
#define Py_LONGINTREPR_H
|
||||
#ifdef __cplusplus
|
||||
|
@ -99,3 +100,4 @@ PyAPI_FUNC(PyObject *) _PyLong_Copy(PyLongObject *src);
|
|||
}
|
||||
#endif
|
||||
#endif /* !Py_LONGINTREPR_H */
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
|
|
@ -50,7 +50,9 @@ PyAPI_FUNC(PyObject *) PyLong_GetInfo(void);
|
|||
#endif /* SIZEOF_PID_T */
|
||||
|
||||
/* Used by Python/mystrtoul.c. */
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_DATA(unsigned char) _PyLong_DigitValue[256];
|
||||
#endif
|
||||
|
||||
/* _PyLong_Frexp returns a double x and an exponent e such that the
|
||||
true value is approximately equal to x * 2**e. e is >= 0. x is
|
||||
|
@ -58,7 +60,9 @@ PyAPI_DATA(unsigned char) _PyLong_DigitValue[256];
|
|||
zeroes); otherwise, 0.5 <= abs(x) < 1.0. On overflow, which is
|
||||
possible if the number of bits doesn't fit into a Py_ssize_t, sets
|
||||
OverflowError and returns -1.0 for x, 0 for e. */
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(double) _PyLong_Frexp(PyLongObject *a, Py_ssize_t *e);
|
||||
#endif
|
||||
|
||||
PyAPI_FUNC(double) PyLong_AsDouble(PyObject *);
|
||||
PyAPI_FUNC(PyObject *) PyLong_FromVoidPtr(void *);
|
||||
|
@ -74,8 +78,11 @@ PyAPI_FUNC(PY_LONG_LONG) PyLong_AsLongLongAndOverflow(PyObject *, int *);
|
|||
#endif /* HAVE_LONG_LONG */
|
||||
|
||||
PyAPI_FUNC(PyObject *) PyLong_FromString(char *, char **, int);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) PyLong_FromUnicode(Py_UNICODE*, Py_ssize_t, int);
|
||||
#endif
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
/* _PyLong_Sign. Return 0 if v is 0, -1 if v < 0, +1 if v > 0.
|
||||
v must not be NULL, and must be a normalized long.
|
||||
There are no error cases.
|
||||
|
@ -150,6 +157,7 @@ PyAPI_FUNC(PyObject *) _PyLong_Format(PyObject *aa, int base);
|
|||
PyAPI_FUNC(PyObject *) _PyLong_FormatAdvanced(PyObject *obj,
|
||||
Py_UNICODE *format_spec,
|
||||
Py_ssize_t format_spec_len);
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
||||
/* These aren't really part of the long object, but they're handy. The
|
||||
functions are in Python/mystrtoul.c.
|
||||
|
|
|
@ -13,10 +13,12 @@ PyAPI_FUNC(void) PyMarshal_WriteLongToFile(long, FILE *, int);
|
|||
PyAPI_FUNC(void) PyMarshal_WriteObjectToFile(PyObject *, FILE *, int);
|
||||
PyAPI_FUNC(PyObject *) PyMarshal_WriteObjectToString(PyObject *, int);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(long) PyMarshal_ReadLongFromFile(FILE *);
|
||||
PyAPI_FUNC(int) PyMarshal_ReadShortFromFile(FILE *);
|
||||
PyAPI_FUNC(PyObject *) PyMarshal_ReadObjectFromFile(FILE *);
|
||||
PyAPI_FUNC(PyObject *) PyMarshal_ReadLastObjectFromFile(FILE *);
|
||||
#endif
|
||||
PyAPI_FUNC(PyObject *) PyMarshal_ReadObjectFromString(char *, Py_ssize_t);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -10,10 +10,12 @@ PyAPI_DATA(PyTypeObject) PyMemoryView_Type;
|
|||
|
||||
#define PyMemoryView_Check(op) (Py_TYPE(op) == &PyMemoryView_Type)
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
/* Get a pointer to the underlying Py_buffer of a memoryview object. */
|
||||
#define PyMemoryView_GET_BUFFER(op) (&((PyMemoryViewObject *)(op))->view)
|
||||
/* Get a pointer to the PyObject from which originates a memoryview object. */
|
||||
#define PyMemoryView_GET_BASE(op) (((PyMemoryViewObject *)(op))->view.obj)
|
||||
#endif
|
||||
|
||||
|
||||
PyAPI_FUNC(PyObject *) PyMemoryView_GetContiguous(PyObject *base,
|
||||
|
@ -61,11 +63,12 @@ PyAPI_FUNC(PyObject *) PyMemoryView_FromBuffer(Py_buffer *info);
|
|||
/* The struct is declared here so that macros can work, but it shouldn't
|
||||
be considered public. Don't access those fields directly, use the macros
|
||||
and functions instead! */
|
||||
#ifndef Py_LIMITED_API
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
Py_buffer view;
|
||||
} PyMemoryViewObject;
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -26,12 +26,14 @@ PyAPI_FUNC(int) PyCFunction_GetFlags(PyObject *);
|
|||
|
||||
/* Macros for direct access to these values. Type checks are *not*
|
||||
done, so use with care. */
|
||||
#ifndef Py_LIMITED_API
|
||||
#define PyCFunction_GET_FUNCTION(func) \
|
||||
(((PyCFunctionObject *)func) -> m_ml -> ml_meth)
|
||||
#define PyCFunction_GET_SELF(func) \
|
||||
(((PyCFunctionObject *)func) -> m_self)
|
||||
#define PyCFunction_GET_FLAGS(func) \
|
||||
(((PyCFunctionObject *)func) -> m_ml -> ml_flags)
|
||||
#endif
|
||||
PyAPI_FUNC(PyObject *) PyCFunction_Call(PyObject *, PyObject *, PyObject *);
|
||||
|
||||
struct PyMethodDef {
|
||||
|
@ -68,12 +70,14 @@ PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *,
|
|||
|
||||
#define METH_COEXIST 0x0040
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
PyMethodDef *m_ml; /* Description of the C function to call */
|
||||
PyObject *m_self; /* Passed as 'self' arg to the C func, can be NULL */
|
||||
PyObject *m_module; /* The __module__ attribute, can be anything */
|
||||
} PyCFunctionObject;
|
||||
#endif
|
||||
|
||||
PyAPI_FUNC(int) PyCFunction_ClearFreeList(void);
|
||||
|
||||
|
|
|
@ -31,7 +31,9 @@ PyAPI_FUNC(int) PyArg_ValidateKeywordArguments(PyObject *);
|
|||
PyAPI_FUNC(int) PyArg_UnpackTuple(PyObject *, const char *, Py_ssize_t, Py_ssize_t, ...);
|
||||
PyAPI_FUNC(PyObject *) Py_BuildValue(const char *, ...);
|
||||
PyAPI_FUNC(PyObject *) _Py_BuildValue_SizeT(const char *, ...);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(int) _PyArg_NoKeywords(const char *funcname, PyObject *kw);
|
||||
#endif
|
||||
|
||||
PyAPI_FUNC(int) PyArg_VaParse(PyObject *, const char *, va_list);
|
||||
PyAPI_FUNC(int) PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *,
|
||||
|
@ -92,6 +94,12 @@ PyAPI_FUNC(int) PyModule_AddStringConstant(PyObject *, const char *, const char
|
|||
9-Jan-1995 GvR Initial version (incompatible with older API)
|
||||
*/
|
||||
|
||||
/* The PYTHON_ABI_VERSION is introduced in PEP 384. For the lifetime of
|
||||
Python 3, it will stay at the value of 3; changes to the limited API
|
||||
must be performed in a strictly backwards-compatible manner. */
|
||||
#define PYTHON_ABI_VERSION 3
|
||||
#define PYTHON_ABI_STRING "3"
|
||||
|
||||
#ifdef Py_TRACE_REFS
|
||||
/* When we are tracing reference counts, rename PyModule_Create2 so
|
||||
modules compiled with incompatible settings will generate a
|
||||
|
@ -102,10 +110,17 @@ PyAPI_FUNC(int) PyModule_AddStringConstant(PyObject *, const char *, const char
|
|||
PyAPI_FUNC(PyObject *) PyModule_Create2(struct PyModuleDef*,
|
||||
int apiver);
|
||||
|
||||
#ifdef Py_LIMITED_API
|
||||
#define PyModule_Create(module) \
|
||||
PyModule_Create2(module, PYTHON_ABI_VERSION)
|
||||
#else
|
||||
#define PyModule_Create(module) \
|
||||
PyModule_Create2(module, PYTHON_API_VERSION)
|
||||
#endif
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_DATA(char *) _Py_PackageContext;
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -17,7 +17,9 @@ PyAPI_FUNC(PyObject *) PyModule_GetDict(PyObject *);
|
|||
PyAPI_FUNC(const char *) PyModule_GetName(PyObject *);
|
||||
PyAPI_FUNC(const char *) PyModule_GetFilename(PyObject *);
|
||||
PyAPI_FUNC(PyObject *) PyModule_GetFilenameObject(PyObject *);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(void) _PyModule_Clear(PyObject *);
|
||||
#endif
|
||||
PyAPI_FUNC(struct PyModuleDef*) PyModule_GetDef(PyObject*);
|
||||
PyAPI_FUNC(void*) PyModule_GetState(PyObject*);
|
||||
|
||||
|
|
|
@ -61,6 +61,10 @@ whose size is determined when the object is allocated.
|
|||
#define Py_REF_DEBUG
|
||||
#endif
|
||||
|
||||
#if defined(Py_LIMITED_API) && defined(Py_REF_DEBUG)
|
||||
#error Py_LIMITED_API is incompatible with Py_DEBUG, Py_TRACE_REFS, and Py_REF_DEBUG
|
||||
#endif
|
||||
|
||||
#ifdef Py_TRACE_REFS
|
||||
/* Define pointers to support a doubly-linked list of all live heap objects. */
|
||||
#define _PyObject_HEAD_EXTRA \
|
||||
|
@ -196,6 +200,7 @@ typedef int (*objobjproc)(PyObject *, PyObject *);
|
|||
typedef int (*visitproc)(PyObject *, void *);
|
||||
typedef int (*traverseproc)(PyObject *, visitproc, void *);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
typedef struct {
|
||||
/* Number implementations must check *both*
|
||||
arguments for proper type and implement the necessary conversions
|
||||
|
@ -265,10 +270,17 @@ typedef struct {
|
|||
getbufferproc bf_getbuffer;
|
||||
releasebufferproc bf_releasebuffer;
|
||||
} PyBufferProcs;
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
||||
typedef void (*freefunc)(void *);
|
||||
typedef void (*destructor)(PyObject *);
|
||||
#ifndef Py_LIMITED_API
|
||||
/* We can't provide a full compile-time check that limited-API
|
||||
users won't implement tp_print. However, not defining printfunc
|
||||
and making tp_print of a different function pointer type
|
||||
should at least cause a warning in most cases. */
|
||||
typedef int (*printfunc)(PyObject *, FILE *, int);
|
||||
#endif
|
||||
typedef PyObject *(*getattrfunc)(PyObject *, char *);
|
||||
typedef PyObject *(*getattrofunc)(PyObject *, PyObject *);
|
||||
typedef int (*setattrfunc)(PyObject *, char *, PyObject *);
|
||||
|
@ -284,6 +296,9 @@ typedef int (*initproc)(PyObject *, PyObject *, PyObject *);
|
|||
typedef PyObject *(*newfunc)(struct _typeobject *, PyObject *, PyObject *);
|
||||
typedef PyObject *(*allocfunc)(struct _typeobject *, Py_ssize_t);
|
||||
|
||||
#ifdef Py_LIMITED_API
|
||||
typedef struct _typeobject PyTypeObject; /* opaque */
|
||||
#else
|
||||
typedef struct _typeobject {
|
||||
PyObject_VAR_HEAD
|
||||
const char *tp_name; /* For printing, in format "<module>.<name>" */
|
||||
|
@ -371,8 +386,25 @@ typedef struct _typeobject {
|
|||
struct _typeobject *tp_next;
|
||||
#endif
|
||||
} PyTypeObject;
|
||||
#endif
|
||||
|
||||
typedef struct{
|
||||
int slot; /* slot id, see below */
|
||||
void *pfunc; /* function pointer */
|
||||
} PyType_Slot;
|
||||
|
||||
typedef struct{
|
||||
const char* name;
|
||||
const char* doc;
|
||||
int basicsize;
|
||||
int itemsize;
|
||||
int flags;
|
||||
PyType_Slot *slots; /* terminated by slot==0. */
|
||||
} PyType_Spec;
|
||||
|
||||
PyAPI_FUNC(PyObject*) PyType_FromSpec(PyType_Spec*);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
/* The *real* layout of a type object when allocated on the heap */
|
||||
typedef struct _heaptypeobject {
|
||||
/* Note: there's a dependency on the order of these members
|
||||
|
@ -393,7 +425,7 @@ typedef struct _heaptypeobject {
|
|||
/* access macro to the members which are floating "behind" the object */
|
||||
#define PyHeapType_GET_MEMBERS(etype) \
|
||||
((PyMemberDef *)(((char *)etype) + Py_TYPE(etype)->tp_basicsize))
|
||||
|
||||
#endif
|
||||
|
||||
/* Generic type check */
|
||||
PyAPI_FUNC(int) PyType_IsSubtype(PyTypeObject *, PyTypeObject *);
|
||||
|
@ -412,15 +444,19 @@ PyAPI_FUNC(int) PyType_Ready(PyTypeObject *);
|
|||
PyAPI_FUNC(PyObject *) PyType_GenericAlloc(PyTypeObject *, Py_ssize_t);
|
||||
PyAPI_FUNC(PyObject *) PyType_GenericNew(PyTypeObject *,
|
||||
PyObject *, PyObject *);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) _PyType_Lookup(PyTypeObject *, PyObject *);
|
||||
PyAPI_FUNC(PyObject *) _PyObject_LookupSpecial(PyObject *, char *, PyObject **);
|
||||
#endif
|
||||
PyAPI_FUNC(unsigned int) PyType_ClearCache(void);
|
||||
PyAPI_FUNC(void) PyType_Modified(PyTypeObject *);
|
||||
|
||||
/* Generic operations on objects */
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(int) PyObject_Print(PyObject *, FILE *, int);
|
||||
PyAPI_FUNC(void) _Py_BreakPoint(void);
|
||||
PyAPI_FUNC(void) _PyObject_Dump(PyObject *);
|
||||
#endif
|
||||
PyAPI_FUNC(PyObject *) PyObject_Repr(PyObject *);
|
||||
PyAPI_FUNC(PyObject *) PyObject_Str(PyObject *);
|
||||
PyAPI_FUNC(PyObject *) PyObject_ASCII(PyObject *);
|
||||
|
@ -433,9 +469,13 @@ PyAPI_FUNC(int) PyObject_HasAttrString(PyObject *, const char *);
|
|||
PyAPI_FUNC(PyObject *) PyObject_GetAttr(PyObject *, PyObject *);
|
||||
PyAPI_FUNC(int) PyObject_SetAttr(PyObject *, PyObject *, PyObject *);
|
||||
PyAPI_FUNC(int) PyObject_HasAttr(PyObject *, PyObject *);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject **) _PyObject_GetDictPtr(PyObject *);
|
||||
#endif
|
||||
PyAPI_FUNC(PyObject *) PyObject_SelfIter(PyObject *);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) _PyObject_NextNotImplemented(PyObject *);
|
||||
#endif
|
||||
PyAPI_FUNC(PyObject *) PyObject_GenericGetAttr(PyObject *, PyObject *);
|
||||
PyAPI_FUNC(int) PyObject_GenericSetAttr(PyObject *,
|
||||
PyObject *, PyObject *);
|
||||
|
@ -469,8 +509,10 @@ PyAPI_FUNC(int) Py_ReprEnter(PyObject *);
|
|||
PyAPI_FUNC(void) Py_ReprLeave(PyObject *);
|
||||
|
||||
/* Helpers for hash functions */
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(Py_hash_t) _Py_HashDouble(double);
|
||||
PyAPI_FUNC(Py_hash_t) _Py_HashPointer(void*);
|
||||
#endif
|
||||
|
||||
/* Helper for passing objects to printf and the like */
|
||||
#define PyObject_REPR(obj) _PyUnicode_AsString(PyObject_Repr(obj))
|
||||
|
@ -649,9 +691,13 @@ PyAPI_FUNC(void) _Py_AddToAllObjects(PyObject *, int force);
|
|||
|
||||
#define _Py_ForgetReference(op) _Py_INC_TPFREES(op)
|
||||
|
||||
#ifdef Py_LIMITED_API
|
||||
PyAPI_FUNC(void) _Py_Dealloc(PyObject *);
|
||||
#else
|
||||
#define _Py_Dealloc(op) ( \
|
||||
_Py_INC_TPFREES(op) _Py_COUNT_ALLOCS_COMMA \
|
||||
(*Py_TYPE(op)->tp_dealloc)((PyObject *)(op)))
|
||||
#endif
|
||||
#endif /* !Py_TRACE_REFS */
|
||||
|
||||
#define Py_INCREF(op) ( \
|
||||
|
|
|
@ -246,6 +246,7 @@ PyAPI_FUNC(PyVarObject *) _PyObject_GC_Resize(PyVarObject *, Py_ssize_t);
|
|||
#define _PyObject_GC_Del PyObject_GC_Del
|
||||
|
||||
/* GC information is stored BEFORE the object structure. */
|
||||
#ifndef Py_LIMITED_API
|
||||
typedef union _gc_head {
|
||||
struct {
|
||||
union _gc_head *gc_next;
|
||||
|
@ -298,7 +299,7 @@ extern PyGC_Head *_PyGC_generation0;
|
|||
#define _PyObject_GC_MAY_BE_TRACKED(obj) \
|
||||
(PyObject_IS_GC(obj) && \
|
||||
(!PyTuple_CheckExact(obj) || _PyObject_GC_IS_TRACKED(obj)))
|
||||
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
||||
PyAPI_FUNC(PyObject *) _PyObject_GC_Malloc(size_t);
|
||||
PyAPI_FUNC(PyObject *) _PyObject_GC_New(PyTypeObject *);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
/* Parser-tokenizer link interface */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
#ifndef Py_PARSETOK_H
|
||||
#define Py_PARSETOK_H
|
||||
#ifdef __cplusplus
|
||||
|
@ -64,3 +64,4 @@ PyAPI_FUNC(void) PyParser_SetError(perrdetail *);
|
|||
}
|
||||
#endif
|
||||
#endif /* !Py_PARSETOK_H */
|
||||
#endif /* !Py_LIMITED_API */
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/* An arena-like memory interface for the compiler.
|
||||
*/
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
#ifndef Py_PYARENA_H
|
||||
#define Py_PYARENA_H
|
||||
|
||||
|
@ -60,3 +61,4 @@ extern "C" {
|
|||
#endif
|
||||
|
||||
#endif /* !Py_PYARENA_H */
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifndef Py_LIMITED_API
|
||||
#ifndef Py_ATOMIC_H
|
||||
#define Py_ATOMIC_H
|
||||
/* XXX: When compilers start offering a stdatomic.h with lock-free
|
||||
|
@ -177,3 +178,4 @@ _Py_ANNOTATE_MEMORY_ORDER(const volatile void *address, _Py_memory_order order)
|
|||
#endif
|
||||
|
||||
#endif /* Py_ATOMIC_H */
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifndef Py_LIMITED_API
|
||||
#ifndef PYCTYPE_H
|
||||
#define PYCTYPE_H
|
||||
|
||||
|
@ -29,3 +30,4 @@ extern const unsigned char _Py_ctype_toupper[256];
|
|||
#define Py_TOUPPER(c) (_Py_ctype_toupper[Py_CHARMASK(c)])
|
||||
|
||||
#endif /* !PYCTYPE_H */
|
||||
#endif /* !Py_LIMITED_API */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
|
||||
#ifndef Py_LIMITED_API
|
||||
#ifndef Py_PYDEBUG_H
|
||||
#define Py_PYDEBUG_H
|
||||
#ifdef __cplusplus
|
||||
|
@ -31,3 +31,4 @@ PyAPI_FUNC(void) Py_FatalError(const char *message);
|
|||
}
|
||||
#endif
|
||||
#endif /* !Py_PYDEBUG_H */
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
|
|
@ -6,6 +6,7 @@ extern "C" {
|
|||
|
||||
/* Error objects */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
/* PyException_HEAD defines the initial segment of every exception class. */
|
||||
#define PyException_HEAD PyObject_HEAD PyObject *dict;\
|
||||
PyObject *args; PyObject *traceback;\
|
||||
|
@ -55,6 +56,7 @@ typedef struct {
|
|||
PyObject *winerror;
|
||||
} PyWindowsErrorObject;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Error handling definitions */
|
||||
|
||||
|
@ -68,8 +70,9 @@ PyAPI_FUNC(PyObject *) PyErr_Occurred(void);
|
|||
PyAPI_FUNC(void) PyErr_Clear(void);
|
||||
PyAPI_FUNC(void) PyErr_Fetch(PyObject **, PyObject **, PyObject **);
|
||||
PyAPI_FUNC(void) PyErr_Restore(PyObject *, PyObject *, PyObject *);
|
||||
PyAPI_FUNC(void) Py_FatalError(const char *message);
|
||||
|
||||
#ifdef Py_DEBUG
|
||||
#if defined(Py_DEBUG) || defined(Py_LIMITED_API)
|
||||
#define _PyErr_OCCURRED() PyErr_Occurred()
|
||||
#else
|
||||
#define _PyErr_OCCURRED() (_PyThreadState_Current->curexc_type)
|
||||
|
@ -183,7 +186,7 @@ PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilename(
|
|||
PyObject *exc,
|
||||
const char *filename /* decoded from the filesystem encoding */
|
||||
);
|
||||
#ifdef MS_WINDOWS
|
||||
#if defined(MS_WINDOWS) && !defined(Py_LIMITED_API)
|
||||
PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithUnicodeFilename(
|
||||
PyObject *, const Py_UNICODE *);
|
||||
#endif /* MS_WINDOWS */
|
||||
|
@ -199,15 +202,20 @@ PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilenameObject(
|
|||
int, const char *);
|
||||
PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilename(
|
||||
int, const char *);
|
||||
#ifndef Py_LIMITED_API
|
||||
/* XXX redeclare to use WSTRING */
|
||||
PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithUnicodeFilename(
|
||||
int, const Py_UNICODE *);
|
||||
#endif
|
||||
PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErr(int);
|
||||
PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObject(
|
||||
PyObject *,int, PyObject *);
|
||||
PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilename(
|
||||
PyObject *,int, const char *);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithUnicodeFilename(
|
||||
PyObject *,int, const Py_UNICODE *);
|
||||
#endif
|
||||
PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErr(PyObject *, int);
|
||||
#endif /* MS_WINDOWS */
|
||||
|
||||
|
@ -230,7 +238,9 @@ PyAPI_FUNC(int) PyErr_CheckSignals(void);
|
|||
PyAPI_FUNC(void) PyErr_SetInterrupt(void);
|
||||
|
||||
/* In signalmodule.c */
|
||||
#ifndef Py_LIMITED_API
|
||||
int PySignal_SetWakeupFd(int fd);
|
||||
#endif
|
||||
|
||||
/* Support for adding program text to SyntaxErrors */
|
||||
PyAPI_FUNC(void) PyErr_SyntaxLocation(const char *, int);
|
||||
|
@ -245,12 +255,16 @@ PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_Create(
|
|||
const char *, const char *, Py_ssize_t, Py_ssize_t, Py_ssize_t, const char *);
|
||||
|
||||
/* create a UnicodeEncodeError object */
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_Create(
|
||||
const char *, const Py_UNICODE *, Py_ssize_t, Py_ssize_t, Py_ssize_t, const char *);
|
||||
#endif
|
||||
|
||||
/* create a UnicodeTranslateError object */
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_Create(
|
||||
const Py_UNICODE *, Py_ssize_t, Py_ssize_t, Py_ssize_t, const char *);
|
||||
#endif
|
||||
|
||||
/* get the encoding attribute */
|
||||
PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetEncoding(PyObject *);
|
||||
|
|
|
@ -5,9 +5,11 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_DATA(int) _PyOS_opterr;
|
||||
PyAPI_DATA(int) _PyOS_optind;
|
||||
PyAPI_DATA(wchar_t *) _PyOS_optarg;
|
||||
#endif
|
||||
|
||||
PyAPI_FUNC(int) _PyOS_GetOpt(int argc, wchar_t **argv, wchar_t *optstring);
|
||||
|
||||
|
|
|
@ -67,6 +67,7 @@ extern double copysign(double, double);
|
|||
nothing. */
|
||||
|
||||
/* we take double rounding as evidence of x87 usage */
|
||||
#ifndef Py_LIMITED_API
|
||||
#ifndef Py_FORCE_DOUBLE
|
||||
# ifdef X87_DOUBLE_ROUNDING
|
||||
PyAPI_FUNC(double) _Py_force_double(double);
|
||||
|
@ -75,11 +76,14 @@ PyAPI_FUNC(double) _Py_force_double(double);
|
|||
# define Py_FORCE_DOUBLE(X) (X)
|
||||
# endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
#ifdef HAVE_GCC_ASM_FOR_X87
|
||||
PyAPI_FUNC(unsigned short) _Py_get_387controlword(void);
|
||||
PyAPI_FUNC(void) _Py_set_387controlword(unsigned short);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Py_IS_NAN(X)
|
||||
* Return 1 if float or double arg is a NaN, else 0.
|
||||
|
|
|
@ -13,6 +13,9 @@ extern "C" {
|
|||
struct _ts; /* Forward */
|
||||
struct _is; /* Forward */
|
||||
|
||||
#ifdef Py_LIMITED_API
|
||||
typedef struct _is PyInterpreterState;
|
||||
#else
|
||||
typedef struct _is {
|
||||
|
||||
struct _is *next;
|
||||
|
@ -37,12 +40,14 @@ typedef struct _is {
|
|||
#endif
|
||||
|
||||
} PyInterpreterState;
|
||||
#endif
|
||||
|
||||
|
||||
/* State unique per thread */
|
||||
|
||||
struct _frame; /* Avoid including frameobject.h */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
/* Py_tracefunc return -1 when raising an exception, or 0 for success. */
|
||||
typedef int (*Py_tracefunc)(PyObject *, struct _frame *, int, PyObject *);
|
||||
|
||||
|
@ -54,7 +59,11 @@ typedef int (*Py_tracefunc)(PyObject *, struct _frame *, int, PyObject *);
|
|||
#define PyTrace_C_CALL 4
|
||||
#define PyTrace_C_EXCEPTION 5
|
||||
#define PyTrace_C_RETURN 6
|
||||
#endif
|
||||
|
||||
#ifdef Py_LIMITED_API
|
||||
typedef struct _ts PyThreadState;
|
||||
#else
|
||||
typedef struct _ts {
|
||||
/* See Python/ceval.c for comments explaining most fields */
|
||||
|
||||
|
@ -106,6 +115,7 @@ typedef struct _ts {
|
|||
/* XXX signal handlers should also be here */
|
||||
|
||||
} PyThreadState;
|
||||
#endif
|
||||
|
||||
|
||||
PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_New(void);
|
||||
|
@ -133,9 +143,11 @@ PyAPI_FUNC(int) PyThreadState_SetAsyncExc(long, PyObject *);
|
|||
|
||||
/* Assuming the current thread holds the GIL, this is the
|
||||
PyThreadState for the current thread. */
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_DATA(_Py_atomic_address) _PyThreadState_Current;
|
||||
#endif
|
||||
|
||||
#ifdef Py_DEBUG
|
||||
#if defined(Py_DEBUG) || defined(Py_LIMITED_API)
|
||||
#define PyThreadState_GET() PyThreadState_Get()
|
||||
#else
|
||||
#define PyThreadState_GET() \
|
||||
|
@ -190,19 +202,25 @@ PyAPI_FUNC(PyThreadState *) PyGILState_GetThisThreadState(void);
|
|||
/* The implementation of sys._current_frames() Returns a dict mapping
|
||||
thread id to that thread's current frame.
|
||||
*/
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) _PyThread_CurrentFrames(void);
|
||||
#endif
|
||||
|
||||
/* Routines for advanced debuggers, requested by David Beazley.
|
||||
Don't use unless you know what you are doing! */
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Head(void);
|
||||
PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Next(PyInterpreterState *);
|
||||
PyAPI_FUNC(PyThreadState *) PyInterpreterState_ThreadHead(PyInterpreterState *);
|
||||
PyAPI_FUNC(PyThreadState *) PyThreadState_Next(PyThreadState *);
|
||||
|
||||
typedef struct _frame *(*PyThreadFrameGetter)(PyThreadState *self_);
|
||||
#endif
|
||||
|
||||
/* hook for PyEval_GetFrame(), requested for Psyco */
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_DATA(PyThreadFrameGetter) _PyThreadState_GetFrame;
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -18,7 +18,9 @@ PyAPI_FUNC(char *) PyOS_double_to_string(double val,
|
|||
int flags,
|
||||
int *type);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(double) _Py_parse_inf_or_nan(const char *p, char **endptr);
|
||||
#endif
|
||||
|
||||
|
||||
/* PyOS_double_to_string's "flags" parameter can be set to 0 or more of: */
|
||||
|
|
|
@ -16,9 +16,11 @@ extern "C" {
|
|||
#define PyCF_ONLY_AST 0x0400
|
||||
#define PyCF_IGNORE_COOKIE 0x0800
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
typedef struct {
|
||||
int cf_flags; /* bitmask of CO_xxx flags relevant to future */
|
||||
} PyCompilerFlags;
|
||||
#endif
|
||||
|
||||
PyAPI_FUNC(void) Py_SetProgramName(wchar_t *);
|
||||
PyAPI_FUNC(wchar_t *) Py_GetProgramName(void);
|
||||
|
@ -33,9 +35,10 @@ PyAPI_FUNC(int) Py_IsInitialized(void);
|
|||
PyAPI_FUNC(PyThreadState *) Py_NewInterpreter(void);
|
||||
PyAPI_FUNC(void) Py_EndInterpreter(PyThreadState *);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(int) PyRun_SimpleStringFlags(const char *, PyCompilerFlags *);
|
||||
PyAPI_FUNC(int) PyRun_AnyFileFlags(FILE *, const char *, PyCompilerFlags *);
|
||||
PyAPI_FUNC(int) PyRun_AnyFileExFlags(FILE *, const char *, int, PyCompilerFlags *);
|
||||
PyAPI_FUNC(int) PyRun_SimpleStringFlags(const char *, PyCompilerFlags *);
|
||||
PyAPI_FUNC(int) PyRun_SimpleFileExFlags(FILE *, const char *, int, PyCompilerFlags *);
|
||||
PyAPI_FUNC(int) PyRun_InteractiveOneFlags(FILE *, const char *, PyCompilerFlags *);
|
||||
PyAPI_FUNC(int) PyRun_InteractiveLoopFlags(FILE *, const char *, PyCompilerFlags *);
|
||||
|
@ -48,25 +51,35 @@ PyAPI_FUNC(struct _mod *) PyParser_ASTFromFile(FILE *, const char *,
|
|||
char *, char *,
|
||||
PyCompilerFlags *, int *,
|
||||
PyArena *);
|
||||
#endif
|
||||
|
||||
#ifndef PyParser_SimpleParseString
|
||||
#define PyParser_SimpleParseString(S, B) \
|
||||
PyParser_SimpleParseStringFlags(S, B, 0)
|
||||
#define PyParser_SimpleParseFile(FP, S, B) \
|
||||
PyParser_SimpleParseFileFlags(FP, S, B, 0)
|
||||
#endif
|
||||
PyAPI_FUNC(struct _node *) PyParser_SimpleParseStringFlags(const char *, int,
|
||||
int);
|
||||
PyAPI_FUNC(struct _node *) PyParser_SimpleParseFileFlags(FILE *, const char *,
|
||||
int, int);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) PyRun_StringFlags(const char *, int, PyObject *,
|
||||
PyObject *, PyCompilerFlags *);
|
||||
|
||||
PyAPI_FUNC(PyObject *) PyRun_FileExFlags(FILE *, const char *, int,
|
||||
PyObject *, PyObject *, int,
|
||||
PyCompilerFlags *);
|
||||
#endif
|
||||
|
||||
#ifdef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) Py_CompileStringFlags(const char *, const char *, int);
|
||||
#else
|
||||
#define Py_CompileString(str, p, s) Py_CompileStringFlags(str, p, s, NULL)
|
||||
PyAPI_FUNC(PyObject *) Py_CompileStringFlags(const char *, const char *, int,
|
||||
PyCompilerFlags *);
|
||||
#endif
|
||||
PyAPI_FUNC(struct symtable *) Py_SymtableString(const char *, const char *, int);
|
||||
|
||||
PyAPI_FUNC(void) PyErr_Print(void);
|
||||
|
@ -76,19 +89,24 @@ PyAPI_FUNC(void) PyErr_Display(PyObject *, PyObject *, PyObject *);
|
|||
/* Py_PyAtExit is for the atexit module, Py_AtExit is for low-level
|
||||
* exit functions.
|
||||
*/
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(void) _Py_PyAtExit(void (*func)(void));
|
||||
#endif
|
||||
PyAPI_FUNC(int) Py_AtExit(void (*func)(void));
|
||||
|
||||
PyAPI_FUNC(void) Py_Exit(int);
|
||||
|
||||
/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL. */
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(void) _Py_RestoreSignals(void);
|
||||
|
||||
PyAPI_FUNC(int) Py_FdIsInteractive(FILE *, const char *);
|
||||
#endif
|
||||
|
||||
/* Bootstrap */
|
||||
PyAPI_FUNC(int) Py_Main(int argc, wchar_t **argv);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
/* Use macros for a bunch of old variants */
|
||||
#define PyRun_String(str, s, g, l) PyRun_StringFlags(str, s, g, l, NULL)
|
||||
#define PyRun_AnyFile(fp, name) PyRun_AnyFileExFlags(fp, name, 0, NULL)
|
||||
|
@ -107,6 +125,7 @@ PyAPI_FUNC(int) Py_Main(int argc, wchar_t **argv);
|
|||
PyRun_FileExFlags(fp, p, s, g, l, c, NULL)
|
||||
#define PyRun_FileFlags(fp, p, s, g, l, flags) \
|
||||
PyRun_FileExFlags(fp, p, s, g, l, 0, flags)
|
||||
#endif
|
||||
|
||||
/* In getpath.c */
|
||||
PyAPI_FUNC(wchar_t *) Py_GetProgramFullPath(void);
|
||||
|
@ -114,6 +133,9 @@ PyAPI_FUNC(wchar_t *) Py_GetPrefix(void);
|
|||
PyAPI_FUNC(wchar_t *) Py_GetExecPrefix(void);
|
||||
PyAPI_FUNC(wchar_t *) Py_GetPath(void);
|
||||
PyAPI_FUNC(void) Py_SetPath(const wchar_t *);
|
||||
#ifdef MS_WINDOWS
|
||||
int _Py_CheckPython3();
|
||||
#endif
|
||||
|
||||
/* In their own files */
|
||||
PyAPI_FUNC(const char *) Py_GetVersion(void);
|
||||
|
@ -121,11 +143,14 @@ PyAPI_FUNC(const char *) Py_GetPlatform(void);
|
|||
PyAPI_FUNC(const char *) Py_GetCopyright(void);
|
||||
PyAPI_FUNC(const char *) Py_GetCompiler(void);
|
||||
PyAPI_FUNC(const char *) Py_GetBuildInfo(void);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(const char *) _Py_svnversion(void);
|
||||
PyAPI_FUNC(const char *) Py_SubversionRevision(void);
|
||||
PyAPI_FUNC(const char *) Py_SubversionShortBranch(void);
|
||||
#endif
|
||||
|
||||
/* Internal -- various one-time initializations */
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) _PyBuiltin_Init(void);
|
||||
PyAPI_FUNC(PyObject *) _PySys_Init(void);
|
||||
PyAPI_FUNC(void) _PyImport_Init(void);
|
||||
|
@ -134,8 +159,10 @@ PyAPI_FUNC(void) _PyImportHooks_Init(void);
|
|||
PyAPI_FUNC(int) _PyFrame_Init(void);
|
||||
PyAPI_FUNC(void) _PyFloat_Init(void);
|
||||
PyAPI_FUNC(int) PyByteArray_Init(void);
|
||||
#endif
|
||||
|
||||
/* Various internal finalizers */
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(void) _PyExc_Fini(void);
|
||||
PyAPI_FUNC(void) _PyImport_Fini(void);
|
||||
PyAPI_FUNC(void) PyMethod_Fini(void);
|
||||
|
@ -150,12 +177,17 @@ PyAPI_FUNC(void) PyByteArray_Fini(void);
|
|||
PyAPI_FUNC(void) PyFloat_Fini(void);
|
||||
PyAPI_FUNC(void) PyOS_FiniInterrupts(void);
|
||||
PyAPI_FUNC(void) _PyGC_Fini(void);
|
||||
#endif
|
||||
|
||||
/* Stuff with no proper home (yet) */
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(char *) PyOS_Readline(FILE *, FILE *, char *);
|
||||
#endif
|
||||
PyAPI_DATA(int) (*PyOS_InputHook)(void);
|
||||
PyAPI_DATA(char) *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, char *);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_DATA(PyThreadState*) _PyOS_ReadlineTState;
|
||||
#endif
|
||||
|
||||
/* Stack size, in "pointers" (so we get extra safety margins
|
||||
on 64-bit platforms). On a 32-bit platform, this translates
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifndef Py_LIMITED_API
|
||||
#ifndef Py_PYTIME_H
|
||||
#define Py_PYTIME_H
|
||||
|
||||
|
@ -44,3 +45,4 @@ PyAPI_FUNC(void) _PyTime_Init(void);
|
|||
#endif
|
||||
|
||||
#endif /* Py_PYTIME_H */
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
|
|
@ -18,7 +18,7 @@ Note: .pop() abuses the hash field of an Unused or Dummy slot to
|
|||
hold a search finger. The hash field of Unused or Dummy slots has
|
||||
no meaning otherwise.
|
||||
*/
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
#define PySet_MINSIZE 8
|
||||
|
||||
typedef struct {
|
||||
|
@ -56,6 +56,7 @@ struct _setobject {
|
|||
Py_hash_t hash; /* only used by frozenset objects */
|
||||
PyObject *weakreflist; /* List of weak references */
|
||||
};
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
||||
PyAPI_DATA(PyTypeObject) PySet_Type;
|
||||
PyAPI_DATA(PyTypeObject) PyFrozenSet_Type;
|
||||
|
@ -85,14 +86,20 @@ PyAPI_DATA(PyTypeObject) PySetIter_Type;
|
|||
PyAPI_FUNC(PyObject *) PySet_New(PyObject *);
|
||||
PyAPI_FUNC(PyObject *) PyFrozenSet_New(PyObject *);
|
||||
PyAPI_FUNC(Py_ssize_t) PySet_Size(PyObject *anyset);
|
||||
#ifndef Py_LIMITED_API
|
||||
#define PySet_GET_SIZE(so) (((PySetObject *)(so))->used)
|
||||
#endif
|
||||
PyAPI_FUNC(int) PySet_Clear(PyObject *set);
|
||||
PyAPI_FUNC(int) PySet_Contains(PyObject *anyset, PyObject *key);
|
||||
PyAPI_FUNC(int) PySet_Discard(PyObject *set, PyObject *key);
|
||||
PyAPI_FUNC(int) PySet_Add(PyObject *set, PyObject *key);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(int) _PySet_NextEntry(PyObject *set, Py_ssize_t *pos, PyObject **key, Py_hash_t *hash);
|
||||
#endif
|
||||
PyAPI_FUNC(PyObject *) PySet_Pop(PyObject *set);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(int) _PySet_Update(PyObject *set, PyObject *iterable);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -18,11 +18,12 @@ A slice object containing start, stop, and step data members (the
|
|||
names are from range). After much talk with Guido, it was decided to
|
||||
let these be any arbitrary python type. Py_None stands for omitted values.
|
||||
*/
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
PyObject *start, *stop, *step; /* not NULL */
|
||||
} PySliceObject;
|
||||
#endif
|
||||
|
||||
PyAPI_DATA(PyTypeObject) PySlice_Type;
|
||||
PyAPI_DATA(PyTypeObject) PyEllipsis_Type;
|
||||
|
@ -31,10 +32,12 @@ PyAPI_DATA(PyTypeObject) PyEllipsis_Type;
|
|||
|
||||
PyAPI_FUNC(PyObject *) PySlice_New(PyObject* start, PyObject* stop,
|
||||
PyObject* step);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) _PySlice_FromIndices(Py_ssize_t start, Py_ssize_t stop);
|
||||
PyAPI_FUNC(int) PySlice_GetIndices(PySliceObject *r, Py_ssize_t length,
|
||||
#endif
|
||||
PyAPI_FUNC(int) PySlice_GetIndices(PyObject *r, Py_ssize_t length,
|
||||
Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step);
|
||||
PyAPI_FUNC(int) PySlice_GetIndicesEx(PySliceObject *r, Py_ssize_t length,
|
||||
PyAPI_FUNC(int) PySlice_GetIndicesEx(PyObject *r, Py_ssize_t length,
|
||||
Py_ssize_t *start, Py_ssize_t *stop,
|
||||
Py_ssize_t *step, Py_ssize_t *slicelength);
|
||||
|
||||
|
|
|
@ -21,18 +21,25 @@ typedef struct PyStructSequence_Desc {
|
|||
|
||||
extern char* PyStructSequence_UnnamedField;
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(void) PyStructSequence_InitType(PyTypeObject *type,
|
||||
PyStructSequence_Desc *desc);
|
||||
#endif
|
||||
PyAPI_FUNC(PyTypeObject*) PyStructSequence_NewType(PyStructSequence_Desc *desc);
|
||||
|
||||
PyAPI_FUNC(PyObject *) PyStructSequence_New(PyTypeObject* type);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
typedef PyTupleObject PyStructSequence;
|
||||
|
||||
/* Macro, *only* to be used to fill in brand new objects */
|
||||
#define PyStructSequence_SET_ITEM(op, i, v) PyTuple_SET_ITEM(op, i, v)
|
||||
|
||||
#define PyStructSequence_GET_ITEM(op, i) PyTuple_GET_ITEM(op, i)
|
||||
#endif
|
||||
|
||||
PyAPI_FUNC(void) PyStructSequence_SetItem(PyObject*, Py_ssize_t, PyObject*);
|
||||
PyAPI_FUNC(PyObject*) PyStructSequence_GetItem(PyObject*, Py_ssize_t);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#ifndef Py_LIMITED_API
|
||||
#ifndef Py_SYMTABLE_H
|
||||
#define Py_SYMTABLE_H
|
||||
|
||||
|
@ -102,3 +103,4 @@ PyAPI_FUNC(void) PySymtable_Free(struct symtable *);
|
|||
}
|
||||
#endif
|
||||
#endif /* !Py_SYMTABLE_H */
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
|
|
@ -20,7 +20,9 @@ PyAPI_FUNC(void) PySys_WriteStderr(const char *format, ...)
|
|||
PyAPI_FUNC(void) PySys_FormatStdout(const char *format, ...);
|
||||
PyAPI_FUNC(void) PySys_FormatStderr(const char *format, ...);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_DATA(PyObject *) _PySys_TraceFunc, *_PySys_ProfileFunc;
|
||||
#endif
|
||||
|
||||
PyAPI_FUNC(void) PySys_ResetWarnOptions(void);
|
||||
PyAPI_FUNC(void) PySys_AddWarnOption(const wchar_t *);
|
||||
|
|
|
@ -14,7 +14,9 @@ extern "C" {
|
|||
* to fit in a time_t. ValueError is set on return iff the return
|
||||
* value is (time_t)-1 and PyErr_Occurred().
|
||||
*/
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(time_t) _PyTime_DoubleToTimet(double x);
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
/* Token types */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
#ifndef Py_TOKEN_H
|
||||
#define Py_TOKEN_H
|
||||
#ifdef __cplusplus
|
||||
|
@ -85,3 +85,4 @@ PyAPI_FUNC(int) PyToken_ThreeChars(int, int, int);
|
|||
}
|
||||
#endif
|
||||
#endif /* !Py_TOKEN_H */
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
|
|
@ -8,7 +8,7 @@ extern "C" {
|
|||
struct _frame;
|
||||
|
||||
/* Traceback interface */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
typedef struct _traceback {
|
||||
PyObject_HEAD
|
||||
struct _traceback *tb_next;
|
||||
|
@ -16,10 +16,13 @@ typedef struct _traceback {
|
|||
int tb_lasti;
|
||||
int tb_lineno;
|
||||
} PyTracebackObject;
|
||||
#endif
|
||||
|
||||
PyAPI_FUNC(int) PyTraceBack_Here(struct _frame *);
|
||||
PyAPI_FUNC(int) PyTraceBack_Print(PyObject *, PyObject *);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(int) _Py_DisplaySourceLine(PyObject *, PyObject *, int, int);
|
||||
#endif
|
||||
|
||||
/* Reveal traceback type so we can typecheck traceback objects */
|
||||
PyAPI_DATA(PyTypeObject) PyTraceBack_Type;
|
||||
|
|
|
@ -21,6 +21,7 @@ inserted in the tuple. Similarly, PyTuple_GetItem does not increment the
|
|||
returned item's reference count.
|
||||
*/
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
typedef struct {
|
||||
PyObject_VAR_HEAD
|
||||
PyObject *ob_item[1];
|
||||
|
@ -30,6 +31,7 @@ typedef struct {
|
|||
* the tuple is not yet visible outside the function that builds it.
|
||||
*/
|
||||
} PyTupleObject;
|
||||
#endif
|
||||
|
||||
PyAPI_DATA(PyTypeObject) PyTuple_Type;
|
||||
PyAPI_DATA(PyTypeObject) PyTupleIter_Type;
|
||||
|
@ -43,16 +45,22 @@ PyAPI_FUNC(Py_ssize_t) PyTuple_Size(PyObject *);
|
|||
PyAPI_FUNC(PyObject *) PyTuple_GetItem(PyObject *, Py_ssize_t);
|
||||
PyAPI_FUNC(int) PyTuple_SetItem(PyObject *, Py_ssize_t, PyObject *);
|
||||
PyAPI_FUNC(PyObject *) PyTuple_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(int) _PyTuple_Resize(PyObject **, Py_ssize_t);
|
||||
#endif
|
||||
PyAPI_FUNC(PyObject *) PyTuple_Pack(Py_ssize_t, ...);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(void) _PyTuple_MaybeUntrack(PyObject *);
|
||||
#endif
|
||||
|
||||
/* Macro, trading safety for speed */
|
||||
#ifndef Py_LIMITED_API
|
||||
#define PyTuple_GET_ITEM(op, i) (((PyTupleObject *)(op))->ob_item[i])
|
||||
#define PyTuple_GET_SIZE(op) Py_SIZE(op)
|
||||
|
||||
/* Macro, *only* to be used to fill in brand new tuples */
|
||||
#define PyTuple_SET_ITEM(op, i, v) (((PyTupleObject *)(op))->ob_item[i] = v)
|
||||
#endif
|
||||
|
||||
PyAPI_FUNC(int) PyTuple_ClearFreeList(void);
|
||||
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
#define Py_bf_getbuffer 1
|
||||
#define Py_bf_releasebuffer 2
|
||||
#define Py_mp_ass_subscript 3
|
||||
#define Py_mp_length 4
|
||||
#define Py_mp_subscript 5
|
||||
#define Py_nb_absolute 6
|
||||
#define Py_nb_add 7
|
||||
#define Py_nb_and 8
|
||||
#define Py_nb_bool 9
|
||||
#define Py_nb_divmod 10
|
||||
#define Py_nb_float 11
|
||||
#define Py_nb_floor_divide 12
|
||||
#define Py_nb_index 13
|
||||
#define Py_nb_inplace_add 14
|
||||
#define Py_nb_inplace_and 15
|
||||
#define Py_nb_inplace_floor_divide 16
|
||||
#define Py_nb_inplace_lshift 17
|
||||
#define Py_nb_inplace_multiply 18
|
||||
#define Py_nb_inplace_or 19
|
||||
#define Py_nb_inplace_power 20
|
||||
#define Py_nb_inplace_remainder 21
|
||||
#define Py_nb_inplace_rshift 22
|
||||
#define Py_nb_inplace_subtract 23
|
||||
#define Py_nb_inplace_true_divide 24
|
||||
#define Py_nb_inplace_xor 25
|
||||
#define Py_nb_int 26
|
||||
#define Py_nb_invert 27
|
||||
#define Py_nb_lshift 28
|
||||
#define Py_nb_multiply 29
|
||||
#define Py_nb_negative 30
|
||||
#define Py_nb_or 31
|
||||
#define Py_nb_positive 32
|
||||
#define Py_nb_power 33
|
||||
#define Py_nb_remainder 34
|
||||
#define Py_nb_rshift 35
|
||||
#define Py_nb_subtract 36
|
||||
#define Py_nb_true_divide 37
|
||||
#define Py_nb_xor 38
|
||||
#define Py_sq_ass_item 39
|
||||
#define Py_sq_concat 40
|
||||
#define Py_sq_contains 41
|
||||
#define Py_sq_inplace_concat 42
|
||||
#define Py_sq_inplace_repeat 43
|
||||
#define Py_sq_item 44
|
||||
#define Py_sq_length 45
|
||||
#define Py_sq_repeat 46
|
||||
#define Py_tp_alloc 47
|
||||
#define Py_tp_base 48
|
||||
#define Py_tp_bases 49
|
||||
#define Py_tp_call 50
|
||||
#define Py_tp_clear 51
|
||||
#define Py_tp_dealloc 52
|
||||
#define Py_tp_del 53
|
||||
#define Py_tp_descr_get 54
|
||||
#define Py_tp_descr_set 55
|
||||
#define Py_tp_doc 56
|
||||
#define Py_tp_getattr 57
|
||||
#define Py_tp_getattro 58
|
||||
#define Py_tp_hash 59
|
||||
#define Py_tp_init 60
|
||||
#define Py_tp_is_gc 61
|
||||
#define Py_tp_iter 62
|
||||
#define Py_tp_iternext 63
|
||||
#define Py_tp_methods 64
|
||||
#define Py_tp_new 65
|
||||
#define Py_tp_repr 66
|
||||
#define Py_tp_richcompare 67
|
||||
#define Py_tp_setattr 68
|
||||
#define Py_tp_setattro 69
|
||||
#define Py_tp_str 70
|
||||
#define Py_tp_traverse 71
|
|
@ -1,5 +1,5 @@
|
|||
/* Unicode name database interface */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
#ifndef Py_UCNHASH_H
|
||||
#define Py_UCNHASH_H
|
||||
#ifdef __cplusplus
|
||||
|
@ -31,3 +31,4 @@ typedef struct {
|
|||
}
|
||||
#endif
|
||||
#endif /* !Py_UCNHASH_H */
|
||||
#endif /* !Py_LIMITED_API */
|
||||
|
|
|
@ -131,7 +131,9 @@ typedef unsigned long Py_UCS4;
|
|||
Python and represents a single Unicode element in the Unicode
|
||||
type. */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
typedef PY_UNICODE_TYPE Py_UNICODE;
|
||||
#endif
|
||||
|
||||
/* --- UCS-2/UCS-4 Name Mangling ------------------------------------------ */
|
||||
|
||||
|
@ -318,6 +320,7 @@ typedef PY_UNICODE_TYPE Py_UNICODE;
|
|||
_Py_ascii_whitespace (see below) with an inlined check.
|
||||
|
||||
*/
|
||||
#ifndef Py_LIMITED_API
|
||||
#define Py_UNICODE_ISSPACE(ch) \
|
||||
((ch) < 128U ? _Py_ascii_whitespace[(ch)] : _PyUnicode_IsWhitespace(ch))
|
||||
|
||||
|
@ -362,6 +365,7 @@ typedef PY_UNICODE_TYPE Py_UNICODE;
|
|||
((*((string)->str + (offset)) == *((substring)->str)) && \
|
||||
((*((string)->str + (offset) + (substring)->length-1) == *((substring)->str + (substring)->length-1))) && \
|
||||
!memcmp((string)->str + (offset), (substring)->str, (substring)->length*sizeof(Py_UNICODE)))
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
@ -369,6 +373,7 @@ extern "C" {
|
|||
|
||||
/* --- Unicode Type ------------------------------------------------------- */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
Py_ssize_t length; /* Length of raw Unicode data in buffer */
|
||||
|
@ -381,6 +386,7 @@ typedef struct {
|
|||
string, or NULL; this is used for
|
||||
implementing the buffer protocol */
|
||||
} PyUnicodeObject;
|
||||
#endif
|
||||
|
||||
PyAPI_DATA(PyTypeObject) PyUnicode_Type;
|
||||
PyAPI_DATA(PyTypeObject) PyUnicodeIter_Type;
|
||||
|
@ -394,6 +400,7 @@ PyAPI_DATA(PyTypeObject) PyUnicodeIter_Type;
|
|||
#define PyUnicode_CheckExact(op) (Py_TYPE(op) == &PyUnicode_Type)
|
||||
|
||||
/* Fast access macros */
|
||||
#ifndef Py_LIMITED_API
|
||||
#define PyUnicode_GET_SIZE(op) \
|
||||
(assert(PyUnicode_Check(op)),(((PyUnicodeObject *)(op))->length))
|
||||
#define PyUnicode_GET_DATA_SIZE(op) \
|
||||
|
@ -402,6 +409,7 @@ PyAPI_DATA(PyTypeObject) PyUnicodeIter_Type;
|
|||
(assert(PyUnicode_Check(op)),(((PyUnicodeObject *)(op))->str))
|
||||
#define PyUnicode_AS_DATA(op) \
|
||||
(assert(PyUnicode_Check(op)),((const char *)((PyUnicodeObject *)(op))->str))
|
||||
#endif
|
||||
|
||||
/* --- Constants ---------------------------------------------------------- */
|
||||
|
||||
|
@ -426,10 +434,12 @@ PyAPI_DATA(PyTypeObject) PyUnicodeIter_Type;
|
|||
|
||||
The buffer is copied into the new object. */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject*) PyUnicode_FromUnicode(
|
||||
const Py_UNICODE *u, /* Unicode buffer */
|
||||
Py_ssize_t size /* size of buffer */
|
||||
);
|
||||
#endif
|
||||
|
||||
/* Similar to PyUnicode_FromUnicode(), but u points to UTF-8 encoded bytes */
|
||||
PyAPI_FUNC(PyObject*) PyUnicode_FromStringAndSize(
|
||||
|
@ -446,9 +456,11 @@ PyAPI_FUNC(PyObject*) PyUnicode_FromString(
|
|||
/* Return a read-only pointer to the Unicode object's internal
|
||||
Py_UNICODE buffer. */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicode(
|
||||
PyObject *unicode /* Unicode object */
|
||||
);
|
||||
#endif
|
||||
|
||||
/* Get the length of the Unicode object. */
|
||||
|
||||
|
@ -456,8 +468,10 @@ PyAPI_FUNC(Py_ssize_t) PyUnicode_GetSize(
|
|||
PyObject *unicode /* Unicode object */
|
||||
);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
/* Get the maximum ordinal for a Unicode character. */
|
||||
PyAPI_FUNC(Py_UNICODE) PyUnicode_GetMax(void);
|
||||
#endif
|
||||
|
||||
/* Resize an already allocated Unicode object to the new size length.
|
||||
|
||||
|
@ -527,16 +541,20 @@ PyAPI_FUNC(PyObject *) PyUnicode_FromFormat(
|
|||
...
|
||||
);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
/* Format the object based on the format_spec, as defined in PEP 3101
|
||||
(Advanced String Formatting). */
|
||||
PyAPI_FUNC(PyObject *) _PyUnicode_FormatAdvanced(PyObject *obj,
|
||||
Py_UNICODE *format_spec,
|
||||
Py_ssize_t format_spec_len);
|
||||
#endif
|
||||
|
||||
PyAPI_FUNC(void) PyUnicode_InternInPlace(PyObject **);
|
||||
PyAPI_FUNC(void) PyUnicode_InternImmortal(PyObject **);
|
||||
PyAPI_FUNC(PyObject *) PyUnicode_InternFromString(const char *);
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(void) _Py_ReleaseInternedUnicodeStrings(void);
|
||||
#endif
|
||||
|
||||
/* Use only if you know it's a string */
|
||||
#define PyUnicode_CHECK_INTERNED(op) (((PyUnicodeObject *)(op))->state)
|
||||
|
@ -568,7 +586,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_FromWideChar(
|
|||
error. */
|
||||
|
||||
PyAPI_FUNC(Py_ssize_t) PyUnicode_AsWideChar(
|
||||
PyUnicodeObject *unicode, /* Unicode object */
|
||||
PyObject *unicode, /* Unicode object */
|
||||
register wchar_t *w, /* wchar_t buffer */
|
||||
Py_ssize_t size /* size of buffer */
|
||||
);
|
||||
|
@ -646,9 +664,11 @@ PyAPI_FUNC(int) PyUnicode_ClearFreeList(void);
|
|||
|
||||
*/
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) _PyUnicode_AsDefaultEncodedString(
|
||||
PyObject *unicode,
|
||||
const char *errors);
|
||||
#endif
|
||||
|
||||
/* Returns a pointer to the default encoding (UTF-8) of the
|
||||
Unicode object unicode and the size of the encoded representation
|
||||
|
@ -664,9 +684,11 @@ PyAPI_FUNC(PyObject *) _PyUnicode_AsDefaultEncodedString(
|
|||
|
||||
*/
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(char *) _PyUnicode_AsStringAndSize(
|
||||
PyObject *unicode,
|
||||
Py_ssize_t *size);
|
||||
#endif
|
||||
|
||||
/* Returns a pointer to the default encoding (UTF-8) of the
|
||||
Unicode object unicode.
|
||||
|
@ -682,7 +704,9 @@ PyAPI_FUNC(char *) _PyUnicode_AsStringAndSize(
|
|||
|
||||
*/
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(char *) _PyUnicode_AsString(PyObject *unicode);
|
||||
#endif
|
||||
|
||||
/* Returns "utf-8". */
|
||||
|
||||
|
@ -721,12 +745,14 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsDecodedUnicode(
|
|||
/* Encodes a Py_UNICODE buffer of the given size and returns a
|
||||
Python string object. */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject*) PyUnicode_Encode(
|
||||
const Py_UNICODE *s, /* Unicode char buffer */
|
||||
Py_ssize_t size, /* number of Py_UNICODE chars to encode */
|
||||
const char *encoding, /* encoding */
|
||||
const char *errors /* error handling */
|
||||
);
|
||||
#endif
|
||||
|
||||
/* Encodes a Unicode object and returns the result as Python
|
||||
object. */
|
||||
|
@ -776,6 +802,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF7Stateful(
|
|||
Py_ssize_t *consumed /* bytes consumed */
|
||||
);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF7(
|
||||
const Py_UNICODE *data, /* Unicode char buffer */
|
||||
Py_ssize_t length, /* number of Py_UNICODE chars to encode */
|
||||
|
@ -783,6 +810,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF7(
|
|||
int base64WhiteSpace, /* Encode whitespace (sp, ht, nl, cr) in base64 */
|
||||
const char *errors /* error handling */
|
||||
);
|
||||
#endif
|
||||
|
||||
/* --- UTF-8 Codecs ------------------------------------------------------- */
|
||||
|
||||
|
@ -803,11 +831,13 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsUTF8String(
|
|||
PyObject *unicode /* Unicode object */
|
||||
);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF8(
|
||||
const Py_UNICODE *data, /* Unicode char buffer */
|
||||
Py_ssize_t length, /* number of Py_UNICODE chars to encode */
|
||||
const char *errors /* error handling */
|
||||
);
|
||||
#endif
|
||||
|
||||
/* --- UTF-32 Codecs ------------------------------------------------------ */
|
||||
|
||||
|
@ -876,12 +906,14 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsUTF32String(
|
|||
|
||||
*/
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF32(
|
||||
const Py_UNICODE *data, /* Unicode char buffer */
|
||||
Py_ssize_t length, /* number of Py_UNICODE chars to encode */
|
||||
const char *errors, /* error handling */
|
||||
int byteorder /* byteorder to use 0=BOM+native;-1=LE,1=BE */
|
||||
);
|
||||
#endif
|
||||
|
||||
/* --- UTF-16 Codecs ------------------------------------------------------ */
|
||||
|
||||
|
@ -954,12 +986,14 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsUTF16String(
|
|||
|
||||
*/
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF16(
|
||||
const Py_UNICODE *data, /* Unicode char buffer */
|
||||
Py_ssize_t length, /* number of Py_UNICODE chars to encode */
|
||||
const char *errors, /* error handling */
|
||||
int byteorder /* byteorder to use 0=BOM+native;-1=LE,1=BE */
|
||||
);
|
||||
#endif
|
||||
|
||||
/* --- Unicode-Escape Codecs ---------------------------------------------- */
|
||||
|
||||
|
@ -973,10 +1007,12 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsUnicodeEscapeString(
|
|||
PyObject *unicode /* Unicode object */
|
||||
);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject*) PyUnicode_EncodeUnicodeEscape(
|
||||
const Py_UNICODE *data, /* Unicode char buffer */
|
||||
Py_ssize_t length /* Number of Py_UNICODE chars to encode */
|
||||
);
|
||||
#endif
|
||||
|
||||
/* --- Raw-Unicode-Escape Codecs ------------------------------------------ */
|
||||
|
||||
|
@ -990,20 +1026,24 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsRawUnicodeEscapeString(
|
|||
PyObject *unicode /* Unicode object */
|
||||
);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject*) PyUnicode_EncodeRawUnicodeEscape(
|
||||
const Py_UNICODE *data, /* Unicode char buffer */
|
||||
Py_ssize_t length /* Number of Py_UNICODE chars to encode */
|
||||
);
|
||||
#endif
|
||||
|
||||
/* --- Unicode Internal Codec ---------------------------------------------
|
||||
|
||||
Only for internal use in _codecsmodule.c */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyObject *_PyUnicode_DecodeUnicodeInternal(
|
||||
const char *string,
|
||||
Py_ssize_t length,
|
||||
const char *errors
|
||||
);
|
||||
#endif
|
||||
|
||||
/* --- Latin-1 Codecs -----------------------------------------------------
|
||||
|
||||
|
@ -1021,11 +1061,13 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsLatin1String(
|
|||
PyObject *unicode /* Unicode object */
|
||||
);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject*) PyUnicode_EncodeLatin1(
|
||||
const Py_UNICODE *data, /* Unicode char buffer */
|
||||
Py_ssize_t length, /* Number of Py_UNICODE chars to encode */
|
||||
const char *errors /* error handling */
|
||||
);
|
||||
#endif
|
||||
|
||||
/* --- ASCII Codecs -------------------------------------------------------
|
||||
|
||||
|
@ -1043,11 +1085,13 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsASCIIString(
|
|||
PyObject *unicode /* Unicode object */
|
||||
);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject*) PyUnicode_EncodeASCII(
|
||||
const Py_UNICODE *data, /* Unicode char buffer */
|
||||
Py_ssize_t length, /* Number of Py_UNICODE chars to encode */
|
||||
const char *errors /* error handling */
|
||||
);
|
||||
#endif
|
||||
|
||||
/* --- Character Map Codecs -----------------------------------------------
|
||||
|
||||
|
@ -1085,6 +1129,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsCharmapString(
|
|||
(unicode ordinal -> char ordinal) */
|
||||
);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject*) PyUnicode_EncodeCharmap(
|
||||
const Py_UNICODE *data, /* Unicode char buffer */
|
||||
Py_ssize_t length, /* Number of Py_UNICODE chars to encode */
|
||||
|
@ -1092,6 +1137,7 @@ PyAPI_FUNC(PyObject*) PyUnicode_EncodeCharmap(
|
|||
(unicode ordinal -> char ordinal) */
|
||||
const char *errors /* error handling */
|
||||
);
|
||||
#endif
|
||||
|
||||
/* Translate a Py_UNICODE buffer of the given length by applying a
|
||||
character mapping table to it and return the resulting Unicode
|
||||
|
@ -1106,12 +1152,14 @@ PyAPI_FUNC(PyObject*) PyUnicode_EncodeCharmap(
|
|||
|
||||
*/
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject *) PyUnicode_TranslateCharmap(
|
||||
const Py_UNICODE *data, /* Unicode char buffer */
|
||||
Py_ssize_t length, /* Number of Py_UNICODE chars to encode */
|
||||
PyObject *table, /* Translate table */
|
||||
const char *errors /* error handling */
|
||||
);
|
||||
#endif
|
||||
|
||||
#ifdef MS_WIN32
|
||||
|
||||
|
@ -1134,11 +1182,13 @@ PyAPI_FUNC(PyObject*) PyUnicode_AsMBCSString(
|
|||
PyObject *unicode /* Unicode object */
|
||||
);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject*) PyUnicode_EncodeMBCS(
|
||||
const Py_UNICODE *data, /* Unicode char buffer */
|
||||
Py_ssize_t length, /* Number of Py_UNICODE chars to encode */
|
||||
const char *errors /* error handling */
|
||||
);
|
||||
#endif
|
||||
|
||||
#endif /* MS_WIN32 */
|
||||
|
||||
|
@ -1166,12 +1216,14 @@ PyAPI_FUNC(PyObject*) PyUnicode_EncodeMBCS(
|
|||
|
||||
*/
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(int) PyUnicode_EncodeDecimal(
|
||||
Py_UNICODE *s, /* Unicode buffer */
|
||||
Py_ssize_t length, /* Number of Py_UNICODE chars to encode */
|
||||
char *output, /* Output buffer; must have size >= length */
|
||||
const char *errors /* error handling */
|
||||
);
|
||||
#endif
|
||||
|
||||
/* --- File system encoding ---------------------------------------------- */
|
||||
|
||||
|
@ -1438,26 +1490,31 @@ PyAPI_FUNC(int) PyUnicode_Contains(
|
|||
|
||||
PyAPI_FUNC(int) PyUnicode_IsIdentifier(PyObject *s);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
/* Externally visible for str.strip(unicode) */
|
||||
PyAPI_FUNC(PyObject *) _PyUnicode_XStrip(
|
||||
PyUnicodeObject *self,
|
||||
int striptype,
|
||||
PyObject *sepobj
|
||||
);
|
||||
#endif
|
||||
|
||||
/* Using the current locale, insert the thousands grouping
|
||||
into the string pointed to by buffer. For the argument descriptions,
|
||||
see Objects/stringlib/localeutil.h */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(Py_ssize_t) _PyUnicode_InsertThousandsGroupingLocale(Py_UNICODE *buffer,
|
||||
Py_ssize_t n_buffer,
|
||||
Py_UNICODE *digits,
|
||||
Py_ssize_t n_digits,
|
||||
Py_ssize_t min_width);
|
||||
#endif
|
||||
|
||||
/* Using explicit passed-in values, insert the thousands grouping
|
||||
into the string pointed to by buffer. For the argument descriptions,
|
||||
see Objects/stringlib/localeutil.h */
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(Py_ssize_t) _PyUnicode_InsertThousandsGrouping(Py_UNICODE *buffer,
|
||||
Py_ssize_t n_buffer,
|
||||
Py_UNICODE *digits,
|
||||
|
@ -1465,10 +1522,12 @@ PyAPI_FUNC(Py_ssize_t) _PyUnicode_InsertThousandsGrouping(Py_UNICODE *buffer,
|
|||
Py_ssize_t min_width,
|
||||
const char *grouping,
|
||||
const char *thousands_sep);
|
||||
#endif
|
||||
/* === Characters Type APIs =============================================== */
|
||||
|
||||
/* Helper array used by Py_UNICODE_ISSPACE(). */
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_DATA(const unsigned char) _Py_ascii_whitespace[];
|
||||
|
||||
/* These should not be used directly. Use the Py_UNICODE_IS* and
|
||||
|
@ -1594,6 +1653,7 @@ PyAPI_FUNC(Py_UNICODE*) Py_UNICODE_strrchr(
|
|||
PyAPI_FUNC(Py_UNICODE*) PyUnicode_AsUnicodeCopy(
|
||||
PyObject *unicode
|
||||
);
|
||||
#endif /* Py_LIMITED_API */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -4,7 +4,9 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(PyObject*) _PyWarnings_Init(void);
|
||||
#endif
|
||||
|
||||
PyAPI_FUNC(int) PyErr_WarnEx(PyObject *, const char *, Py_ssize_t);
|
||||
PyAPI_FUNC(int) PyErr_WarnFormat(PyObject *, Py_ssize_t, const char *, ...);
|
||||
|
@ -12,7 +14,9 @@ PyAPI_FUNC(int) PyErr_WarnExplicit(PyObject *, const char *, const char *, int,
|
|||
const char *, PyObject *);
|
||||
|
||||
/* DEPRECATED: Use PyErr_WarnEx() instead. */
|
||||
#ifndef Py_LIMITED_API
|
||||
#define PyErr_Warn(category, msg) PyErr_WarnEx(category, msg, 1)
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ typedef struct _PyWeakReference PyWeakReference;
|
|||
/* PyWeakReference is the base struct for the Python ReferenceType, ProxyType,
|
||||
* and CallableProxyType.
|
||||
*/
|
||||
#ifndef Py_LIMITED_API
|
||||
struct _PyWeakReference {
|
||||
PyObject_HEAD
|
||||
|
||||
|
@ -37,6 +38,7 @@ struct _PyWeakReference {
|
|||
PyWeakReference *wr_prev;
|
||||
PyWeakReference *wr_next;
|
||||
};
|
||||
#endif
|
||||
|
||||
PyAPI_DATA(PyTypeObject) _PyWeakref_RefType;
|
||||
PyAPI_DATA(PyTypeObject) _PyWeakref_ProxyType;
|
||||
|
@ -62,9 +64,11 @@ PyAPI_FUNC(PyObject *) PyWeakref_NewProxy(PyObject *ob,
|
|||
PyObject *callback);
|
||||
PyAPI_FUNC(PyObject *) PyWeakref_GetObject(PyObject *ref);
|
||||
|
||||
#ifndef Py_LIMITED_API
|
||||
PyAPI_FUNC(Py_ssize_t) _PyWeakref_GetWeakrefCount(PyWeakReference *head);
|
||||
|
||||
PyAPI_FUNC(void) _PyWeakref_ClearRef(PyWeakReference *self);
|
||||
#endif
|
||||
|
||||
#define PyWeakref_GET_OBJECT(ref) (((PyWeakReference *)(ref))->wr_object)
|
||||
|
||||
|
|
|
@ -641,6 +641,9 @@ Python/formatter_unicode.o: $(srcdir)/Python/formatter_unicode.c \
|
|||
$(BYTESTR_DEPS) \
|
||||
$(srcdir)/Objects/stringlib/formatter.h
|
||||
|
||||
Objects/typeobject.o: $(srcdir)/Objects/typeslots.inc
|
||||
$(srcdir)/Objects/typeslots.inc: $(srcdir)/Include/typeslots.h $(srcdir)/Objects/typeslots.py
|
||||
$(PYTHON) $(srcdir)/Objects/typeslots.py < $(srcdir)/Include/typeslots.h > $(srcdir)/Objects/typeslots.inc
|
||||
|
||||
############################################################################
|
||||
# Header files
|
||||
|
|
|
@ -10,6 +10,8 @@ What's New in Python 3.2 Beta 1?
|
|||
Core and Builtins
|
||||
-----------------
|
||||
|
||||
- PEP 384 (Defining a Stable ABI) is implemented.
|
||||
|
||||
- Issue #2690: Range objects support negative indices and slicing
|
||||
|
||||
- Issue #9915: Speed up sorting with a key.
|
||||
|
|
|
@ -1155,7 +1155,7 @@ WCharArray_set_value(CDataObject *self, PyObject *value)
|
|||
result = -1;
|
||||
goto done;
|
||||
}
|
||||
result = PyUnicode_AsWideChar((PyUnicodeObject *)value,
|
||||
result = PyUnicode_AsWideChar(value,
|
||||
(wchar_t *)self->b_ptr,
|
||||
self->b_size/sizeof(wchar_t));
|
||||
if (result >= 0 && (size_t)result < self->b_size/sizeof(wchar_t))
|
||||
|
@ -4174,7 +4174,7 @@ Array_subscript(PyObject *_self, PyObject *item)
|
|||
PyObject *np;
|
||||
Py_ssize_t start, stop, step, slicelen, cur, i;
|
||||
|
||||
if (PySlice_GetIndicesEx((PySliceObject *)item,
|
||||
if (PySlice_GetIndicesEx(item,
|
||||
self->b_length, &start, &stop,
|
||||
&step, &slicelen) < 0) {
|
||||
return NULL;
|
||||
|
@ -4308,7 +4308,7 @@ Array_ass_subscript(PyObject *_self, PyObject *item, PyObject *value)
|
|||
else if (PySlice_Check(item)) {
|
||||
Py_ssize_t start, stop, step, slicelen, otherlen, i, cur;
|
||||
|
||||
if (PySlice_GetIndicesEx((PySliceObject *)item,
|
||||
if (PySlice_GetIndicesEx(item,
|
||||
self->b_length, &start, &stop,
|
||||
&step, &slicelen) < 0) {
|
||||
return -1;
|
||||
|
|
|
@ -1214,7 +1214,7 @@ u_set(void *ptr, PyObject *value, Py_ssize_t size)
|
|||
} else
|
||||
Py_INCREF(value);
|
||||
|
||||
len = PyUnicode_AsWideChar((PyUnicodeObject *)value, chars, 2);
|
||||
len = PyUnicode_AsWideChar(value, chars, 2);
|
||||
if (len != 1) {
|
||||
Py_DECREF(value);
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
|
@ -1292,7 +1292,7 @@ U_set(void *ptr, PyObject *value, Py_ssize_t length)
|
|||
} else if (size < length-1)
|
||||
/* copy terminating NUL character if there is space */
|
||||
size += 1;
|
||||
PyUnicode_AsWideChar((PyUnicodeObject *)value, (wchar_t *)ptr, size);
|
||||
PyUnicode_AsWideChar(value, (wchar_t *)ptr, size);
|
||||
return value;
|
||||
}
|
||||
|
||||
|
|
|
@ -1272,7 +1272,7 @@ element_subscr(PyObject* self_, PyObject* item)
|
|||
if (!self->extra)
|
||||
return PyList_New(0);
|
||||
|
||||
if (PySlice_GetIndicesEx((PySliceObject *)item,
|
||||
if (PySlice_GetIndicesEx(item,
|
||||
self->extra->length,
|
||||
&start, &stop, &step, &slicelen) < 0) {
|
||||
return NULL;
|
||||
|
@ -1331,7 +1331,7 @@ element_ass_subscr(PyObject* self_, PyObject* item, PyObject* value)
|
|||
if (!self->extra)
|
||||
element_new_extra(self, NULL);
|
||||
|
||||
if (PySlice_GetIndicesEx((PySliceObject *)item,
|
||||
if (PySlice_GetIndicesEx(item,
|
||||
self->extra->length,
|
||||
&start, &stop, &step, &slicelen) < 0) {
|
||||
return -1;
|
||||
|
|
|
@ -1398,7 +1398,7 @@ unicode_aswidechar(PyObject *self, PyObject *args)
|
|||
if (buffer == NULL)
|
||||
return PyErr_NoMemory();
|
||||
|
||||
size = PyUnicode_AsWideChar((PyUnicodeObject*)unicode, buffer, buflen);
|
||||
size = PyUnicode_AsWideChar(unicode, buffer, buflen);
|
||||
if (size == -1) {
|
||||
PyMem_Free(buffer);
|
||||
return NULL;
|
||||
|
|
|
@ -2112,7 +2112,7 @@ array_subscr(arrayobject* self, PyObject* item)
|
|||
arrayobject* ar;
|
||||
int itemsize = self->ob_descr->itemsize;
|
||||
|
||||
if (PySlice_GetIndicesEx((PySliceObject*)item, Py_SIZE(self),
|
||||
if (PySlice_GetIndicesEx(item, Py_SIZE(self),
|
||||
&start, &stop, &step, &slicelength) < 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
@ -2183,7 +2183,7 @@ array_ass_subscr(arrayobject* self, PyObject* item, PyObject* value)
|
|||
return (*self->ob_descr->setitem)(self, i, value);
|
||||
}
|
||||
else if (PySlice_Check(item)) {
|
||||
if (PySlice_GetIndicesEx((PySliceObject *)item,
|
||||
if (PySlice_GetIndicesEx(item,
|
||||
Py_SIZE(self), &start, &stop,
|
||||
&step, &slicelength) < 0) {
|
||||
return -1;
|
||||
|
|
|
@ -361,7 +361,7 @@ search_for_exec_prefix(wchar_t *argv0_path, wchar_t *home, wchar_t *_exec_prefix
|
|||
decoded = PyUnicode_DecodeUTF8(buf, n, "surrogateescape");
|
||||
if (decoded != NULL) {
|
||||
Py_ssize_t k;
|
||||
k = PyUnicode_AsWideChar((PyUnicodeObject*)decoded,
|
||||
k = PyUnicode_AsWideChar(decoded,
|
||||
rel_builddir_path, MAXPATHLEN);
|
||||
Py_DECREF(decoded);
|
||||
if (k >= 0) {
|
||||
|
|
|
@ -762,7 +762,7 @@ mmap_subscript(mmap_object *self, PyObject *item)
|
|||
else if (PySlice_Check(item)) {
|
||||
Py_ssize_t start, stop, step, slicelen;
|
||||
|
||||
if (PySlice_GetIndicesEx((PySliceObject *)item, self->size,
|
||||
if (PySlice_GetIndicesEx(item, self->size,
|
||||
&start, &stop, &step, &slicelen) < 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
@ -888,7 +888,7 @@ mmap_ass_subscript(mmap_object *self, PyObject *item, PyObject *value)
|
|||
Py_ssize_t start, stop, step, slicelen;
|
||||
Py_buffer vbuf;
|
||||
|
||||
if (PySlice_GetIndicesEx((PySliceObject *)item,
|
||||
if (PySlice_GetIndicesEx(item,
|
||||
self->size, &start, &stop,
|
||||
&step, &slicelen) < 0) {
|
||||
return -1;
|
||||
|
|
|
@ -0,0 +1,283 @@
|
|||
|
||||
/* Use this file as a template to start implementing a module that
|
||||
also declares object types. All occurrences of 'Xxo' should be changed
|
||||
to something reasonable for your objects. After that, all other
|
||||
occurrences of 'xx' should be changed to something reasonable for your
|
||||
module. If your module is named foo your sourcefile should be named
|
||||
foomodule.c.
|
||||
|
||||
You will probably want to delete all references to 'x_attr' and add
|
||||
your own types of attributes instead. Maybe you want to name your
|
||||
local variables other than 'self'. If your object type is needed in
|
||||
other files, you'll have to create a file "foobarobject.h"; see
|
||||
floatobject.h for an example. */
|
||||
|
||||
/* Xxo objects */
|
||||
|
||||
#include "Python.h"
|
||||
|
||||
static PyObject *ErrorObject;
|
||||
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
PyObject *x_attr; /* Attributes dictionary */
|
||||
} XxoObject;
|
||||
|
||||
static PyObject *Xxo_Type;
|
||||
|
||||
#define XxoObject_Check(v) (Py_TYPE(v) == Xxo_Type)
|
||||
|
||||
static XxoObject *
|
||||
newXxoObject(PyObject *arg)
|
||||
{
|
||||
XxoObject *self;
|
||||
self = PyObject_New(XxoObject, (PyTypeObject*)Xxo_Type);
|
||||
if (self == NULL)
|
||||
return NULL;
|
||||
self->x_attr = NULL;
|
||||
return self;
|
||||
}
|
||||
|
||||
/* Xxo methods */
|
||||
|
||||
static void
|
||||
Xxo_dealloc(XxoObject *self)
|
||||
{
|
||||
Py_XDECREF(self->x_attr);
|
||||
PyObject_Del(self);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
Xxo_demo(XxoObject *self, PyObject *args)
|
||||
{
|
||||
if (!PyArg_ParseTuple(args, ":demo"))
|
||||
return NULL;
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
static PyMethodDef Xxo_methods[] = {
|
||||
{"demo", (PyCFunction)Xxo_demo, METH_VARARGS,
|
||||
PyDoc_STR("demo() -> None")},
|
||||
{NULL, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
static PyObject *
|
||||
Xxo_getattro(XxoObject *self, PyObject *name)
|
||||
{
|
||||
if (self->x_attr != NULL) {
|
||||
PyObject *v = PyDict_GetItem(self->x_attr, name);
|
||||
if (v != NULL) {
|
||||
Py_INCREF(v);
|
||||
return v;
|
||||
}
|
||||
}
|
||||
return PyObject_GenericGetAttr((PyObject *)self, name);
|
||||
}
|
||||
|
||||
static int
|
||||
Xxo_setattr(XxoObject *self, char *name, PyObject *v)
|
||||
{
|
||||
if (self->x_attr == NULL) {
|
||||
self->x_attr = PyDict_New();
|
||||
if (self->x_attr == NULL)
|
||||
return -1;
|
||||
}
|
||||
if (v == NULL) {
|
||||
int rv = PyDict_DelItemString(self->x_attr, name);
|
||||
if (rv < 0)
|
||||
PyErr_SetString(PyExc_AttributeError,
|
||||
"delete non-existing Xxo attribute");
|
||||
return rv;
|
||||
}
|
||||
else
|
||||
return PyDict_SetItemString(self->x_attr, name, v);
|
||||
}
|
||||
|
||||
static PyType_Slot Xxo_Type_slots[] = {
|
||||
{Py_tp_dealloc, Xxo_dealloc},
|
||||
{Py_tp_getattro, Xxo_getattro},
|
||||
{Py_tp_setattr, Xxo_setattr},
|
||||
{Py_tp_methods, Xxo_methods},
|
||||
{0, 0},
|
||||
};
|
||||
|
||||
static PyType_Spec Xxo_Type_spec = {
|
||||
"xxmodule.Xxo",
|
||||
NULL,
|
||||
sizeof(XxoObject),
|
||||
0,
|
||||
Py_TPFLAGS_DEFAULT,
|
||||
Xxo_Type_slots
|
||||
};
|
||||
|
||||
/* --------------------------------------------------------------------- */
|
||||
|
||||
/* Function of two integers returning integer */
|
||||
|
||||
PyDoc_STRVAR(xx_foo_doc,
|
||||
"foo(i,j)\n\
|
||||
\n\
|
||||
Return the sum of i and j.");
|
||||
|
||||
static PyObject *
|
||||
xx_foo(PyObject *self, PyObject *args)
|
||||
{
|
||||
long i, j;
|
||||
long res;
|
||||
if (!PyArg_ParseTuple(args, "ll:foo", &i, &j))
|
||||
return NULL;
|
||||
res = i+j; /* XXX Do something here */
|
||||
return PyLong_FromLong(res);
|
||||
}
|
||||
|
||||
|
||||
/* Function of no arguments returning new Xxo object */
|
||||
|
||||
static PyObject *
|
||||
xx_new(PyObject *self, PyObject *args)
|
||||
{
|
||||
XxoObject *rv;
|
||||
|
||||
if (!PyArg_ParseTuple(args, ":new"))
|
||||
return NULL;
|
||||
rv = newXxoObject(args);
|
||||
if (rv == NULL)
|
||||
return NULL;
|
||||
return (PyObject *)rv;
|
||||
}
|
||||
|
||||
/* Test bad format character */
|
||||
|
||||
static PyObject *
|
||||
xx_roj(PyObject *self, PyObject *args)
|
||||
{
|
||||
PyObject *a;
|
||||
long b;
|
||||
if (!PyArg_ParseTuple(args, "O#:roj", &a, &b))
|
||||
return NULL;
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
|
||||
/* ---------- */
|
||||
|
||||
static PyType_Slot Str_Type_slots[] = {
|
||||
{Py_tp_base, NULL}, /* filled out in module init function */
|
||||
{0, 0},
|
||||
};
|
||||
|
||||
static PyType_Spec Str_Type_spec = {
|
||||
"xxlimited.Str",
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
|
||||
Str_Type_slots
|
||||
};
|
||||
|
||||
/* ---------- */
|
||||
|
||||
static PyObject *
|
||||
null_richcompare(PyObject *self, PyObject *other, int op)
|
||||
{
|
||||
Py_INCREF(Py_NotImplemented);
|
||||
return Py_NotImplemented;
|
||||
}
|
||||
|
||||
static PyType_Slot Null_Type_slots[] = {
|
||||
{Py_tp_base, NULL}, /* filled out in module init */
|
||||
{Py_tp_new, NULL},
|
||||
{Py_tp_richcompare, null_richcompare},
|
||||
{0, 0}
|
||||
};
|
||||
|
||||
static PyType_Spec Null_Type_spec = {
|
||||
"xxlimited.Null",
|
||||
NULL, /* doc */
|
||||
0, /* basicsize */
|
||||
0, /* itemsize */
|
||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
|
||||
Null_Type_slots
|
||||
};
|
||||
|
||||
/* ---------- */
|
||||
|
||||
/* List of functions defined in the module */
|
||||
|
||||
static PyMethodDef xx_methods[] = {
|
||||
{"roj", xx_roj, METH_VARARGS,
|
||||
PyDoc_STR("roj(a,b) -> None")},
|
||||
{"foo", xx_foo, METH_VARARGS,
|
||||
xx_foo_doc},
|
||||
{"new", xx_new, METH_VARARGS,
|
||||
PyDoc_STR("new() -> new Xx object")},
|
||||
{NULL, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
PyDoc_STRVAR(module_doc,
|
||||
"This is a template module just for instruction.");
|
||||
|
||||
/* Initialization function for the module (*must* be called PyInit_xx) */
|
||||
|
||||
|
||||
static struct PyModuleDef xxmodule = {
|
||||
PyModuleDef_HEAD_INIT,
|
||||
"xx",
|
||||
module_doc,
|
||||
-1,
|
||||
xx_methods,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
PyMODINIT_FUNC
|
||||
PyInit_xxlimited(void)
|
||||
{
|
||||
PyObject *m = NULL;
|
||||
PyObject *o;
|
||||
|
||||
/* Due to cross platform compiler issues the slots must be filled
|
||||
* here. It's required for portability to Windows without requiring
|
||||
* C++. */
|
||||
Null_Type_slots[0].pfunc = &PyBaseObject_Type;
|
||||
Null_Type_slots[1].pfunc = PyType_GenericNew;
|
||||
Str_Type_slots[0].pfunc = &PyUnicode_Type;
|
||||
|
||||
Xxo_Type = PyType_FromSpec(&Xxo_Type_spec);
|
||||
if (Xxo_Type == NULL)
|
||||
goto fail;
|
||||
|
||||
/* Create the module and add the functions */
|
||||
m = PyModule_Create(&xxmodule);
|
||||
if (m == NULL)
|
||||
goto fail;
|
||||
|
||||
/* Add some symbolic constants to the module */
|
||||
if (ErrorObject == NULL) {
|
||||
ErrorObject = PyErr_NewException("xx.error", NULL, NULL);
|
||||
if (ErrorObject == NULL)
|
||||
goto fail;
|
||||
}
|
||||
Py_INCREF(ErrorObject);
|
||||
PyModule_AddObject(m, "error", ErrorObject);
|
||||
|
||||
/* Add Str */
|
||||
o = PyType_FromSpec(&Str_Type_spec);
|
||||
if (o == NULL)
|
||||
goto fail;
|
||||
PyModule_AddObject(m, "Str", o);
|
||||
|
||||
/* Add Null */
|
||||
o = PyType_FromSpec(&Null_Type_spec);
|
||||
if (o == NULL)
|
||||
goto fail;
|
||||
PyModule_AddObject(m, "Null", o);
|
||||
return m;
|
||||
fail:
|
||||
Py_XDECREF(m);
|
||||
return NULL;
|
||||
}
|
|
@ -389,7 +389,7 @@ bytearray_subscript(PyByteArrayObject *self, PyObject *index)
|
|||
}
|
||||
else if (PySlice_Check(index)) {
|
||||
Py_ssize_t start, stop, step, slicelength, cur, i;
|
||||
if (PySlice_GetIndicesEx((PySliceObject *)index,
|
||||
if (PySlice_GetIndicesEx(index,
|
||||
PyByteArray_GET_SIZE(self),
|
||||
&start, &stop, &step, &slicelength) < 0) {
|
||||
return NULL;
|
||||
|
@ -573,7 +573,7 @@ bytearray_ass_subscript(PyByteArrayObject *self, PyObject *index, PyObject *valu
|
|||
}
|
||||
}
|
||||
else if (PySlice_Check(index)) {
|
||||
if (PySlice_GetIndicesEx((PySliceObject *)index,
|
||||
if (PySlice_GetIndicesEx(index,
|
||||
PyByteArray_GET_SIZE(self),
|
||||
&start, &stop, &step, &slicelen) < 0) {
|
||||
return -1;
|
||||
|
|
|
@ -911,7 +911,7 @@ bytes_subscript(PyBytesObject* self, PyObject* item)
|
|||
char* result_buf;
|
||||
PyObject* result;
|
||||
|
||||
if (PySlice_GetIndicesEx((PySliceObject*)item,
|
||||
if (PySlice_GetIndicesEx(item,
|
||||
PyBytes_GET_SIZE(self),
|
||||
&start, &stop, &step, &slicelength) < 0) {
|
||||
return NULL;
|
||||
|
|
|
@ -627,7 +627,7 @@ function_call(PyObject *func, PyObject *arg, PyObject *kw)
|
|||
}
|
||||
|
||||
result = PyEval_EvalCodeEx(
|
||||
(PyCodeObject *)PyFunction_GET_CODE(func),
|
||||
PyFunction_GET_CODE(func),
|
||||
PyFunction_GET_GLOBALS(func), (PyObject *)NULL,
|
||||
&PyTuple_GET_ITEM(arg, 0), PyTuple_GET_SIZE(arg),
|
||||
k, nk, d, nd,
|
||||
|
|
|
@ -2397,7 +2397,7 @@ list_subscript(PyListObject* self, PyObject* item)
|
|||
PyObject* it;
|
||||
PyObject **src, **dest;
|
||||
|
||||
if (PySlice_GetIndicesEx((PySliceObject*)item, Py_SIZE(self),
|
||||
if (PySlice_GetIndicesEx(item, Py_SIZE(self),
|
||||
&start, &stop, &step, &slicelength) < 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
@ -2446,7 +2446,7 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
|
|||
else if (PySlice_Check(item)) {
|
||||
Py_ssize_t start, stop, step, slicelength;
|
||||
|
||||
if (PySlice_GetIndicesEx((PySliceObject*)item, Py_SIZE(self),
|
||||
if (PySlice_GetIndicesEx(item, Py_SIZE(self),
|
||||
&start, &stop, &step, &slicelength) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -599,7 +599,7 @@ memory_subscript(PyMemoryViewObject *self, PyObject *key)
|
|||
else if (PySlice_Check(key)) {
|
||||
Py_ssize_t start, stop, step, slicelength;
|
||||
|
||||
if (PySlice_GetIndicesEx((PySliceObject*)key, get_shape0(view),
|
||||
if (PySlice_GetIndicesEx(key, get_shape0(view),
|
||||
&start, &stop, &step, &slicelength) < 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
@ -678,7 +678,7 @@ memory_ass_sub(PyMemoryViewObject *self, PyObject *key, PyObject *value)
|
|||
else if (PySlice_Check(key)) {
|
||||
Py_ssize_t stop, step;
|
||||
|
||||
if (PySlice_GetIndicesEx((PySliceObject*)key, get_shape0(view),
|
||||
if (PySlice_GetIndicesEx(key, get_shape0(view),
|
||||
&start, &stop, &step, &len) < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -74,7 +74,7 @@ PyModule_Create2(struct PyModuleDef* module, int module_api_version)
|
|||
module->m_base.m_index = max_module_number;
|
||||
}
|
||||
name = module->m_name;
|
||||
if (module_api_version != PYTHON_API_VERSION) {
|
||||
if (module_api_version != PYTHON_API_VERSION && module_api_version != PYTHON_ABI_VERSION) {
|
||||
int err;
|
||||
err = PyErr_WarnFormat(PyExc_RuntimeWarning, 1,
|
||||
"Python C API version mismatch for module %.100s: "
|
||||
|
|
|
@ -1755,7 +1755,6 @@ _Py_GetObjects(PyObject *self, PyObject *args)
|
|||
|
||||
#endif
|
||||
|
||||
|
||||
/* Hack to force loading of pycapsule.o */
|
||||
PyTypeObject *_PyCapsule_hack = &PyCapsule_Type;
|
||||
|
||||
|
@ -1900,6 +1899,19 @@ _PyTrash_destroy_chain(void)
|
|||
}
|
||||
}
|
||||
|
||||
#ifndef Py_TRACE_REFS
|
||||
/* For Py_LIMITED_API, we need an out-of-line version of _Py_Dealloc.
|
||||
Define this here, so we can undefine the macro. */
|
||||
#undef _Py_Dealloc
|
||||
PyAPI_FUNC(void) _Py_Dealloc(PyObject *);
|
||||
void
|
||||
_Py_Dealloc(PyObject *op)
|
||||
{
|
||||
_Py_INC_TPFREES(op) _Py_COUNT_ALLOCS_COMMA
|
||||
(*Py_TYPE(op)->tp_dealloc)(op);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -431,7 +431,6 @@ range_subscript(rangeobject* self, PyObject* item)
|
|||
return range_item(self, i);
|
||||
}
|
||||
if (PySlice_Check(item)) {
|
||||
PySliceObject *slice = (PySliceObject*)item;
|
||||
Py_ssize_t start, stop, step, len, rlen;
|
||||
rangeobject *result;
|
||||
PyObject *substart = NULL, *substep = NULL, *substop = NULL;
|
||||
|
@ -441,7 +440,7 @@ range_subscript(rangeobject* self, PyObject* item)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
if (PySlice_GetIndicesEx(slice, rlen,
|
||||
if (PySlice_GetIndicesEx(item, rlen,
|
||||
&start, &stop, &step, &len) < 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
@ -450,7 +449,7 @@ range_subscript(rangeobject* self, PyObject* item)
|
|||
Py_INCREF(substep);
|
||||
} else {
|
||||
/* NB: slice step != Py_None here */
|
||||
substep = PyNumber_Multiply(self->step, slice->step);
|
||||
substep = PyNumber_Multiply(self->step, ((PySliceObject*)item)->step);
|
||||
if (substep == NULL)
|
||||
goto fail;
|
||||
}
|
||||
|
|
|
@ -99,9 +99,10 @@ _PySlice_FromIndices(Py_ssize_t istart, Py_ssize_t istop)
|
|||
}
|
||||
|
||||
int
|
||||
PySlice_GetIndices(PySliceObject *r, Py_ssize_t length,
|
||||
PySlice_GetIndices(PyObject *_r, Py_ssize_t length,
|
||||
Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
|
||||
{
|
||||
PySliceObject *r = (PySliceObject*)_r;
|
||||
/* XXX support long ints */
|
||||
if (r->step == Py_None) {
|
||||
*step = 1;
|
||||
|
@ -130,10 +131,11 @@ PySlice_GetIndices(PySliceObject *r, Py_ssize_t length,
|
|||
}
|
||||
|
||||
int
|
||||
PySlice_GetIndicesEx(PySliceObject *r, Py_ssize_t length,
|
||||
PySlice_GetIndicesEx(PyObject *_r, Py_ssize_t length,
|
||||
Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step,
|
||||
Py_ssize_t *slicelength)
|
||||
{
|
||||
PySliceObject *r = (PySliceObject*)_r;
|
||||
/* this is harder to get right than you might think */
|
||||
|
||||
Py_ssize_t defstart, defstop;
|
||||
|
@ -256,7 +258,7 @@ slice_indices(PySliceObject* self, PyObject* len)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
if (PySlice_GetIndicesEx(self, ilen, &start, &stop,
|
||||
if (PySlice_GetIndicesEx((PyObject*)self, ilen, &start, &stop,
|
||||
&step, &slicelength) < 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -43,6 +43,18 @@ PyStructSequence_New(PyTypeObject *type)
|
|||
return (PyObject*)obj;
|
||||
}
|
||||
|
||||
void
|
||||
PyStructSequence_SetItem(PyObject* op, Py_ssize_t i, PyObject* v)
|
||||
{
|
||||
PyStructSequence_SET_ITEM(op, i, v);
|
||||
}
|
||||
|
||||
PyObject*
|
||||
PyStructSequence_GetItem(PyObject* op, Py_ssize_t i)
|
||||
{
|
||||
return PyStructSequence_GET_ITEM(op, i);
|
||||
}
|
||||
|
||||
static void
|
||||
structseq_dealloc(PyStructSequence *obj)
|
||||
{
|
||||
|
@ -365,3 +377,11 @@ PyStructSequence_InitType(PyTypeObject *type, PyStructSequence_Desc *desc)
|
|||
SET_DICT_FROM_INT(real_length_key, n_members);
|
||||
SET_DICT_FROM_INT(unnamed_fields_key, n_unnamed_members);
|
||||
}
|
||||
|
||||
PyTypeObject*
|
||||
PyStructSequence_NewType(PyStructSequence_Desc *desc)
|
||||
{
|
||||
PyTypeObject *result = (PyTypeObject*)PyType_GenericAlloc(&PyType_Type, 0);
|
||||
PyStructSequence_InitType(result, desc);
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -689,7 +689,7 @@ tuplesubscript(PyTupleObject* self, PyObject* item)
|
|||
PyObject* it;
|
||||
PyObject **src, **dest;
|
||||
|
||||
if (PySlice_GetIndicesEx((PySliceObject*)item,
|
||||
if (PySlice_GetIndicesEx(item,
|
||||
PyTuple_GET_SIZE(self),
|
||||
&start, &stop, &step, &slicelength) < 0) {
|
||||
return NULL;
|
||||
|
|
|
@ -2304,6 +2304,44 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds)
|
|||
return (PyObject *)type;
|
||||
}
|
||||
|
||||
static short slotoffsets[] = {
|
||||
-1, /* invalid slot */
|
||||
#include "typeslots.inc"
|
||||
};
|
||||
|
||||
PyObject* PyType_FromSpec(PyType_Spec *spec)
|
||||
{
|
||||
PyHeapTypeObject *res = (PyHeapTypeObject*)PyType_GenericAlloc(&PyType_Type, 0);
|
||||
char *res_start = (char*)res;
|
||||
PyType_Slot *slot;
|
||||
|
||||
res->ht_name = PyUnicode_FromString(spec->name);
|
||||
if (!res->ht_name)
|
||||
goto fail;
|
||||
res->ht_type.tp_name = _PyUnicode_AsString(res->ht_name);
|
||||
if (!res->ht_type.tp_name)
|
||||
goto fail;
|
||||
|
||||
res->ht_type.tp_basicsize = spec->basicsize;
|
||||
res->ht_type.tp_itemsize = spec->itemsize;
|
||||
res->ht_type.tp_flags = spec->flags | Py_TPFLAGS_HEAPTYPE;
|
||||
|
||||
for (slot = spec->slots; slot->slot; slot++) {
|
||||
if (slot->slot >= sizeof(slotoffsets)/sizeof(slotoffsets[0])) {
|
||||
PyErr_SetString(PyExc_RuntimeError, "invalid slot offset");
|
||||
goto fail;
|
||||
}
|
||||
*(void**)(res_start + slotoffsets[slot->slot]) = slot->pfunc;
|
||||
}
|
||||
|
||||
return (PyObject*)res;
|
||||
|
||||
fail:
|
||||
Py_DECREF(res);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/* Internal API to look for a name through the MRO.
|
||||
This returns a borrowed reference, and doesn't set an exception! */
|
||||
PyObject *
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
offsetof(PyHeapTypeObject, as_buffer.bf_getbuffer),
|
||||
offsetof(PyHeapTypeObject, as_buffer.bf_releasebuffer),
|
||||
offsetof(PyHeapTypeObject, as_mapping.mp_ass_subscript),
|
||||
offsetof(PyHeapTypeObject, as_mapping.mp_length),
|
||||
offsetof(PyHeapTypeObject, as_mapping.mp_subscript),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_absolute),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_add),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_and),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_bool),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_divmod),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_float),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_floor_divide),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_index),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_inplace_add),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_inplace_and),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_inplace_floor_divide),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_inplace_lshift),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_inplace_multiply),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_inplace_or),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_inplace_power),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_inplace_remainder),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_inplace_rshift),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_inplace_subtract),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_inplace_true_divide),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_inplace_xor),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_int),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_invert),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_lshift),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_multiply),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_negative),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_or),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_positive),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_power),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_remainder),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_rshift),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_subtract),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_true_divide),
|
||||
offsetof(PyHeapTypeObject, as_number.nb_xor),
|
||||
offsetof(PyHeapTypeObject, as_sequence.sq_ass_item),
|
||||
offsetof(PyHeapTypeObject, as_sequence.sq_concat),
|
||||
offsetof(PyHeapTypeObject, as_sequence.sq_contains),
|
||||
offsetof(PyHeapTypeObject, as_sequence.sq_inplace_concat),
|
||||
offsetof(PyHeapTypeObject, as_sequence.sq_inplace_repeat),
|
||||
offsetof(PyHeapTypeObject, as_sequence.sq_item),
|
||||
offsetof(PyHeapTypeObject, as_sequence.sq_length),
|
||||
offsetof(PyHeapTypeObject, as_sequence.sq_repeat),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_alloc),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_base),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_bases),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_call),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_clear),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_dealloc),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_del),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_descr_get),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_descr_set),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_doc),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_getattr),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_getattro),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_hash),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_init),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_is_gc),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_iter),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_iternext),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_methods),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_new),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_repr),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_richcompare),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_setattr),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_setattro),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_str),
|
||||
offsetof(PyHeapTypeObject, ht_type.tp_traverse),
|
|
@ -0,0 +1,24 @@
|
|||
#!/usr/bin/python
|
||||
# Usage: typeslots.py < Include/typeslots.h > typeslots.inc
|
||||
|
||||
import sys, re
|
||||
|
||||
res = {}
|
||||
for line in sys.stdin:
|
||||
m = re.match("#define Py_([a-z_]+) ([0-9]+)", line)
|
||||
member = m.group(1)
|
||||
if member.startswith("tp_"):
|
||||
member = "ht_type."+member
|
||||
elif member.startswith("nb_"):
|
||||
member = "as_number."+member
|
||||
elif member.startswith("mp_"):
|
||||
member = "as_mapping."+member
|
||||
elif member.startswith("sq_"):
|
||||
member = "as_sequence."+member
|
||||
elif member.startswith("bf_"):
|
||||
member = "as_buffer."+member
|
||||
res[int(m.group(2))] = member
|
||||
|
||||
M = max(res.keys())+1
|
||||
for i in range(1,M):
|
||||
print "offsetof(PyHeapTypeObject, %s)," % res[i]
|
|
@ -1263,7 +1263,7 @@ unicode_aswidechar(PyUnicodeObject *unicode,
|
|||
}
|
||||
|
||||
Py_ssize_t
|
||||
PyUnicode_AsWideChar(PyUnicodeObject *unicode,
|
||||
PyUnicode_AsWideChar(PyObject *unicode,
|
||||
wchar_t *w,
|
||||
Py_ssize_t size)
|
||||
{
|
||||
|
@ -1271,7 +1271,7 @@ PyUnicode_AsWideChar(PyUnicodeObject *unicode,
|
|||
PyErr_BadInternalCall();
|
||||
return -1;
|
||||
}
|
||||
return unicode_aswidechar(unicode, w, size);
|
||||
return unicode_aswidechar((PyUnicodeObject*)unicode, w, size);
|
||||
}
|
||||
|
||||
wchar_t*
|
||||
|
@ -9222,7 +9222,7 @@ unicode_subscript(PyUnicodeObject* self, PyObject* item)
|
|||
Py_UNICODE* result_buf;
|
||||
PyObject* result;
|
||||
|
||||
if (PySlice_GetIndicesEx((PySliceObject*)item, PyUnicode_GET_SIZE(self),
|
||||
if (PySlice_GetIndicesEx(item, PyUnicode_GET_SIZE(self),
|
||||
&start, &stop, &step, &slicelength) < 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -707,3 +707,38 @@ Py_GetProgramFullPath(void)
|
|||
calculate_path();
|
||||
return progpath;
|
||||
}
|
||||
|
||||
/* Load python3.dll before loading any extension module that might refer
|
||||
to it. That way, we can be sure that always the python3.dll corresponding
|
||||
to this python DLL is loaded, not a python3.dll that might be on the path
|
||||
by chance.
|
||||
Return whether the DLL was found.
|
||||
*/
|
||||
static int python3_checked = 0;
|
||||
static HANDLE hPython3;
|
||||
int
|
||||
_Py_CheckPython3()
|
||||
{
|
||||
wchar_t py3path[MAXPATHLEN+1];
|
||||
wchar_t *s;
|
||||
if (python3_checked)
|
||||
return hPython3 != NULL;
|
||||
python3_checked = 1;
|
||||
|
||||
/* If there is a python3.dll next to the python3y.dll,
|
||||
assume this is a build tree; use that DLL */
|
||||
wcscpy(py3path, dllpath);
|
||||
s = wcsrchr(py3path, L'\\');
|
||||
if (!s)
|
||||
s = py3path;
|
||||
wcscpy(s, L"\\python3.dll");
|
||||
hPython3 = LoadLibraryExW(py3path, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
|
||||
if (hPython3 != NULL)
|
||||
return 1;
|
||||
|
||||
/* Check sys.prefix\DLLs\python3.dll */
|
||||
wcscpy(py3path, Py_GetPrefix());
|
||||
wcscat(py3path, L"\\DLLs\\python3.dll");
|
||||
hPython3 = LoadLibraryExW(py3path, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
|
||||
return hPython3 != NULL;
|
||||
}
|
||||
|
|
|
@ -318,8 +318,10 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */
|
|||
/* So MSVC users need not specify the .lib file in
|
||||
their Makefile (other compilers are generally
|
||||
taken care of by distutils.) */
|
||||
# ifdef _DEBUG
|
||||
# if defined(_DEBUG)
|
||||
# pragma comment(lib,"python32_d.lib")
|
||||
# elif defined(Py_LIMITED_API)
|
||||
# pragma comment(lib,"python3.lib")
|
||||
# else
|
||||
# pragma comment(lib,"python32.lib")
|
||||
# endif /* _DEBUG */
|
||||
|
|
|
@ -0,0 +1,698 @@
|
|||
LIBRARY "python3"
|
||||
EXPORTS
|
||||
PyArg_Parse=python32.PyArg_Parse
|
||||
PyArg_ParseTuple=python32.PyArg_ParseTuple
|
||||
PyArg_ParseTupleAndKeywords=python32.PyArg_ParseTupleAndKeywords
|
||||
PyArg_UnpackTuple=python32.PyArg_UnpackTuple
|
||||
PyArg_VaParse=python32.PyArg_VaParse
|
||||
PyArg_VaParseTupleAndKeywords=python32.PyArg_VaParseTupleAndKeywords
|
||||
PyArg_ValidateKeywordArguments=python32.PyArg_ValidateKeywordArguments
|
||||
PyBaseObject_Type=python32.PyBaseObject_Type DATA
|
||||
PyBool_FromLong=python32.PyBool_FromLong
|
||||
PyBool_Type=python32.PyBool_Type DATA
|
||||
PyBuffer_FillContiguousStrides=python32.PyBuffer_FillContiguousStrides
|
||||
PyBuffer_FillInfo=python32.PyBuffer_FillInfo
|
||||
PyBuffer_FromContiguous=python32.PyBuffer_FromContiguous
|
||||
PyBuffer_GetPointer=python32.PyBuffer_GetPointer
|
||||
PyBuffer_IsContiguous=python32.PyBuffer_IsContiguous
|
||||
PyBuffer_Release=python32.PyBuffer_Release
|
||||
PyBuffer_ToContiguous=python32.PyBuffer_ToContiguous
|
||||
PyByteArrayIter_Type=python32.PyByteArrayIter_Type DATA
|
||||
PyByteArray_AsString=python32.PyByteArray_AsString
|
||||
PyByteArray_Concat=python32.PyByteArray_Concat
|
||||
PyByteArray_FromObject=python32.PyByteArray_FromObject
|
||||
PyByteArray_FromStringAndSize=python32.PyByteArray_FromStringAndSize
|
||||
PyByteArray_Resize=python32.PyByteArray_Resize
|
||||
PyByteArray_Size=python32.PyByteArray_Size
|
||||
PyByteArray_Type=python32.PyByteArray_Type DATA
|
||||
PyBytesIter_Type=python32.PyBytesIter_Type DATA
|
||||
PyBytes_AsString=python32.PyBytes_AsString
|
||||
PyBytes_AsStringAndSize=python32.PyBytes_AsStringAndSize
|
||||
PyBytes_Concat=python32.PyBytes_Concat
|
||||
PyBytes_ConcatAndDel=python32.PyBytes_ConcatAndDel
|
||||
PyBytes_DecodeEscape=python32.PyBytes_DecodeEscape
|
||||
PyBytes_FromFormat=python32.PyBytes_FromFormat
|
||||
PyBytes_FromFormatV=python32.PyBytes_FromFormatV
|
||||
PyBytes_FromObject=python32.PyBytes_FromObject
|
||||
PyBytes_FromString=python32.PyBytes_FromString
|
||||
PyBytes_FromStringAndSize=python32.PyBytes_FromStringAndSize
|
||||
PyBytes_Repr=python32.PyBytes_Repr
|
||||
PyBytes_Size=python32.PyBytes_Size
|
||||
PyBytes_Type=python32.PyBytes_Type DATA
|
||||
PyCFunction_Call=python32.PyCFunction_Call
|
||||
PyCFunction_ClearFreeList=python32.PyCFunction_ClearFreeList
|
||||
PyCFunction_GetFlags=python32.PyCFunction_GetFlags
|
||||
PyCFunction_GetFunction=python32.PyCFunction_GetFunction
|
||||
PyCFunction_GetSelf=python32.PyCFunction_GetSelf
|
||||
PyCFunction_NewEx=python32.PyCFunction_NewEx
|
||||
PyCFunction_Type=python32.PyCFunction_Type DATA
|
||||
PyCallIter_New=python32.PyCallIter_New
|
||||
PyCallIter_Type=python32.PyCallIter_Type DATA
|
||||
PyCallable_Check=python32.PyCallable_Check
|
||||
PyCapsule_GetContext=python32.PyCapsule_GetContext
|
||||
PyCapsule_GetDestructor=python32.PyCapsule_GetDestructor
|
||||
PyCapsule_GetName=python32.PyCapsule_GetName
|
||||
PyCapsule_GetPointer=python32.PyCapsule_GetPointer
|
||||
PyCapsule_Import=python32.PyCapsule_Import
|
||||
PyCapsule_IsValid=python32.PyCapsule_IsValid
|
||||
PyCapsule_New=python32.PyCapsule_New
|
||||
PyCapsule_SetContext=python32.PyCapsule_SetContext
|
||||
PyCapsule_SetDestructor=python32.PyCapsule_SetDestructor
|
||||
PyCapsule_SetName=python32.PyCapsule_SetName
|
||||
PyCapsule_SetPointer=python32.PyCapsule_SetPointer
|
||||
PyCapsule_Type=python32.PyCapsule_Type DATA
|
||||
PyClassMethodDescr_Type=python32.PyClassMethodDescr_Type DATA
|
||||
PyCodec_BackslashReplaceErrors=python32.PyCodec_BackslashReplaceErrors
|
||||
PyCodec_Decode=python32.PyCodec_Decode
|
||||
PyCodec_Decoder=python32.PyCodec_Decoder
|
||||
PyCodec_Encode=python32.PyCodec_Encode
|
||||
PyCodec_Encoder=python32.PyCodec_Encoder
|
||||
PyCodec_IgnoreErrors=python32.PyCodec_IgnoreErrors
|
||||
PyCodec_IncrementalDecoder=python32.PyCodec_IncrementalDecoder
|
||||
PyCodec_IncrementalEncoder=python32.PyCodec_IncrementalEncoder
|
||||
PyCodec_KnownEncoding=python32.PyCodec_KnownEncoding
|
||||
PyCodec_LookupError=python32.PyCodec_LookupError
|
||||
PyCodec_Register=python32.PyCodec_Register
|
||||
PyCodec_RegisterError=python32.PyCodec_RegisterError
|
||||
PyCodec_ReplaceErrors=python32.PyCodec_ReplaceErrors
|
||||
PyCodec_StreamReader=python32.PyCodec_StreamReader
|
||||
PyCodec_StreamWriter=python32.PyCodec_StreamWriter
|
||||
PyCodec_StrictErrors=python32.PyCodec_StrictErrors
|
||||
PyCodec_XMLCharRefReplaceErrors=python32.PyCodec_XMLCharRefReplaceErrors
|
||||
PyComplex_FromDoubles=python32.PyComplex_FromDoubles
|
||||
PyComplex_ImagAsDouble=python32.PyComplex_ImagAsDouble
|
||||
PyComplex_RealAsDouble=python32.PyComplex_RealAsDouble
|
||||
PyComplex_Type=python32.PyComplex_Type DATA
|
||||
PyDescr_NewClassMethod=python32.PyDescr_NewClassMethod
|
||||
PyDescr_NewGetSet=python32.PyDescr_NewGetSet
|
||||
PyDescr_NewMember=python32.PyDescr_NewMember
|
||||
PyDescr_NewMethod=python32.PyDescr_NewMethod
|
||||
PyDictItems_Type=python32.PyDictItems_Type DATA
|
||||
PyDictIterItem_Type=python32.PyDictIterItem_Type DATA
|
||||
PyDictIterKey_Type=python32.PyDictIterKey_Type DATA
|
||||
PyDictIterValue_Type=python32.PyDictIterValue_Type DATA
|
||||
PyDictKeys_Type=python32.PyDictKeys_Type DATA
|
||||
PyDictProxy_New=python32.PyDictProxy_New
|
||||
PyDictProxy_Type=python32.PyDictProxy_Type DATA
|
||||
PyDictValues_Type=python32.PyDictValues_Type DATA
|
||||
PyDict_Clear=python32.PyDict_Clear
|
||||
PyDict_Contains=python32.PyDict_Contains
|
||||
PyDict_Copy=python32.PyDict_Copy
|
||||
PyDict_DelItem=python32.PyDict_DelItem
|
||||
PyDict_DelItemString=python32.PyDict_DelItemString
|
||||
PyDict_GetItem=python32.PyDict_GetItem
|
||||
PyDict_GetItemString=python32.PyDict_GetItemString
|
||||
PyDict_GetItemWithError=python32.PyDict_GetItemWithError
|
||||
PyDict_Items=python32.PyDict_Items
|
||||
PyDict_Keys=python32.PyDict_Keys
|
||||
PyDict_Merge=python32.PyDict_Merge
|
||||
PyDict_MergeFromSeq2=python32.PyDict_MergeFromSeq2
|
||||
PyDict_New=python32.PyDict_New
|
||||
PyDict_Next=python32.PyDict_Next
|
||||
PyDict_SetItem=python32.PyDict_SetItem
|
||||
PyDict_SetItemString=python32.PyDict_SetItemString
|
||||
PyDict_Size=python32.PyDict_Size
|
||||
PyDict_Type=python32.PyDict_Type DATA
|
||||
PyDict_Update=python32.PyDict_Update
|
||||
PyDict_Values=python32.PyDict_Values
|
||||
PyEllipsis_Type=python32.PyEllipsis_Type DATA
|
||||
PyEnum_Type=python32.PyEnum_Type DATA
|
||||
PyErr_BadArgument=python32.PyErr_BadArgument
|
||||
PyErr_BadInternalCall=python32.PyErr_BadInternalCall
|
||||
PyErr_CheckSignals=python32.PyErr_CheckSignals
|
||||
PyErr_Clear=python32.PyErr_Clear
|
||||
PyErr_Display=python32.PyErr_Display
|
||||
PyErr_ExceptionMatches=python32.PyErr_ExceptionMatches
|
||||
PyErr_Fetch=python32.PyErr_Fetch
|
||||
PyErr_Format=python32.PyErr_Format
|
||||
PyErr_GivenExceptionMatches=python32.PyErr_GivenExceptionMatches
|
||||
PyErr_NewException=python32.PyErr_NewException
|
||||
PyErr_NewExceptionWithDoc=python32.PyErr_NewExceptionWithDoc
|
||||
PyErr_NoMemory=python32.PyErr_NoMemory
|
||||
PyErr_NormalizeException=python32.PyErr_NormalizeException
|
||||
PyErr_Occurred=python32.PyErr_Occurred
|
||||
PyErr_Print=python32.PyErr_Print
|
||||
PyErr_PrintEx=python32.PyErr_PrintEx
|
||||
PyErr_ProgramText=python32.PyErr_ProgramText
|
||||
PyErr_Restore=python32.PyErr_Restore
|
||||
PyErr_SetFromErrno=python32.PyErr_SetFromErrno
|
||||
PyErr_SetFromErrnoWithFilename=python32.PyErr_SetFromErrnoWithFilename
|
||||
PyErr_SetFromErrnoWithFilenameObject=python32.PyErr_SetFromErrnoWithFilenameObject
|
||||
PyErr_SetInterrupt=python32.PyErr_SetInterrupt
|
||||
PyErr_SetNone=python32.PyErr_SetNone
|
||||
PyErr_SetObject=python32.PyErr_SetObject
|
||||
PyErr_SetString=python32.PyErr_SetString
|
||||
PyErr_SyntaxLocation=python32.PyErr_SyntaxLocation
|
||||
PyErr_WarnEx=python32.PyErr_WarnEx
|
||||
PyErr_WarnExplicit=python32.PyErr_WarnExplicit
|
||||
PyErr_WarnFormat=python32.PyErr_WarnFormat
|
||||
PyErr_WriteUnraisable=python32.PyErr_WriteUnraisable
|
||||
PyEval_AcquireLock=python32.PyEval_AcquireLock
|
||||
PyEval_AcquireThread=python32.PyEval_AcquireThread
|
||||
PyEval_CallFunction=python32.PyEval_CallFunction
|
||||
PyEval_CallMethod=python32.PyEval_CallMethod
|
||||
PyEval_CallObjectWithKeywords=python32.PyEval_CallObjectWithKeywords
|
||||
PyEval_EvalCode=python32.PyEval_EvalCode
|
||||
PyEval_EvalCodeEx=python32.PyEval_EvalCodeEx
|
||||
PyEval_EvalFrame=python32.PyEval_EvalFrame
|
||||
PyEval_EvalFrameEx=python32.PyEval_EvalFrameEx
|
||||
PyEval_GetBuiltins=python32.PyEval_GetBuiltins
|
||||
PyEval_GetCallStats=python32.PyEval_GetCallStats
|
||||
PyEval_GetFrame=python32.PyEval_GetFrame
|
||||
PyEval_GetFuncDesc=python32.PyEval_GetFuncDesc
|
||||
PyEval_GetFuncName=python32.PyEval_GetFuncName
|
||||
PyEval_GetGlobals=python32.PyEval_GetGlobals
|
||||
PyEval_GetLocals=python32.PyEval_GetLocals
|
||||
PyEval_InitThreads=python32.PyEval_InitThreads
|
||||
PyEval_ReInitThreads=python32.PyEval_ReInitThreads
|
||||
PyEval_ReleaseLock=python32.PyEval_ReleaseLock
|
||||
PyEval_ReleaseThread=python32.PyEval_ReleaseThread
|
||||
PyEval_RestoreThread=python32.PyEval_RestoreThread
|
||||
PyEval_SaveThread=python32.PyEval_SaveThread
|
||||
PyEval_ThreadsInitialized=python32.PyEval_ThreadsInitialized
|
||||
PyExc_ArithmeticError=python32.PyExc_ArithmeticError DATA
|
||||
PyExc_AssertionError=python32.PyExc_AssertionError DATA
|
||||
PyExc_AttributeError=python32.PyExc_AttributeError DATA
|
||||
PyExc_BaseException=python32.PyExc_BaseException DATA
|
||||
PyExc_BufferError=python32.PyExc_BufferError DATA
|
||||
PyExc_BytesWarning=python32.PyExc_BytesWarning DATA
|
||||
PyExc_DeprecationWarning=python32.PyExc_DeprecationWarning DATA
|
||||
PyExc_EOFError=python32.PyExc_EOFError DATA
|
||||
PyExc_EnvironmentError=python32.PyExc_EnvironmentError DATA
|
||||
PyExc_Exception=python32.PyExc_Exception DATA
|
||||
PyExc_FloatingPointError=python32.PyExc_FloatingPointError DATA
|
||||
PyExc_FutureWarning=python32.PyExc_FutureWarning DATA
|
||||
PyExc_GeneratorExit=python32.PyExc_GeneratorExit DATA
|
||||
PyExc_IOError=python32.PyExc_IOError DATA
|
||||
PyExc_ImportError=python32.PyExc_ImportError DATA
|
||||
PyExc_ImportWarning=python32.PyExc_ImportWarning DATA
|
||||
PyExc_IndentationError=python32.PyExc_IndentationError DATA
|
||||
PyExc_IndexError=python32.PyExc_IndexError DATA
|
||||
PyExc_KeyError=python32.PyExc_KeyError DATA
|
||||
PyExc_KeyboardInterrupt=python32.PyExc_KeyboardInterrupt DATA
|
||||
PyExc_LookupError=python32.PyExc_LookupError DATA
|
||||
PyExc_MemoryError=python32.PyExc_MemoryError DATA
|
||||
PyExc_MemoryErrorInst=python32.PyExc_MemoryErrorInst DATA
|
||||
PyExc_NameError=python32.PyExc_NameError DATA
|
||||
PyExc_NotImplementedError=python32.PyExc_NotImplementedError DATA
|
||||
PyExc_OSError=python32.PyExc_OSError DATA
|
||||
PyExc_OverflowError=python32.PyExc_OverflowError DATA
|
||||
PyExc_PendingDeprecationWarning=python32.PyExc_PendingDeprecationWarning DATA
|
||||
PyExc_RecursionErrorInst=python32.PyExc_RecursionErrorInst DATA
|
||||
PyExc_ReferenceError=python32.PyExc_ReferenceError DATA
|
||||
PyExc_RuntimeError=python32.PyExc_RuntimeError DATA
|
||||
PyExc_RuntimeWarning=python32.PyExc_RuntimeWarning DATA
|
||||
PyExc_StopIteration=python32.PyExc_StopIteration DATA
|
||||
PyExc_SyntaxError=python32.PyExc_SyntaxError DATA
|
||||
PyExc_SyntaxWarning=python32.PyExc_SyntaxWarning DATA
|
||||
PyExc_SystemError=python32.PyExc_SystemError DATA
|
||||
PyExc_SystemExit=python32.PyExc_SystemExit DATA
|
||||
PyExc_TabError=python32.PyExc_TabError DATA
|
||||
PyExc_TypeError=python32.PyExc_TypeError DATA
|
||||
PyExc_UnboundLocalError=python32.PyExc_UnboundLocalError DATA
|
||||
PyExc_UnicodeDecodeError=python32.PyExc_UnicodeDecodeError DATA
|
||||
PyExc_UnicodeEncodeError=python32.PyExc_UnicodeEncodeError DATA
|
||||
PyExc_UnicodeError=python32.PyExc_UnicodeError DATA
|
||||
PyExc_UnicodeTranslateError=python32.PyExc_UnicodeTranslateError DATA
|
||||
PyExc_UnicodeWarning=python32.PyExc_UnicodeWarning DATA
|
||||
PyExc_UserWarning=python32.PyExc_UserWarning DATA
|
||||
PyExc_ValueError=python32.PyExc_ValueError DATA
|
||||
PyExc_Warning=python32.PyExc_Warning DATA
|
||||
PyExc_ZeroDivisionError=python32.PyExc_ZeroDivisionError DATA
|
||||
PyException_GetCause=python32.PyException_GetCause
|
||||
PyException_GetContext=python32.PyException_GetContext
|
||||
PyException_GetTraceback=python32.PyException_GetTraceback
|
||||
PyException_SetCause=python32.PyException_SetCause
|
||||
PyException_SetContext=python32.PyException_SetContext
|
||||
PyException_SetTraceback=python32.PyException_SetTraceback
|
||||
PyFile_FromFd=python32.PyFile_FromFd
|
||||
PyFile_GetLine=python32.PyFile_GetLine
|
||||
PyFile_WriteObject=python32.PyFile_WriteObject
|
||||
PyFile_WriteString=python32.PyFile_WriteString
|
||||
PyFilter_Type=python32.PyFilter_Type DATA
|
||||
PyFloat_AsDouble=python32.PyFloat_AsDouble
|
||||
PyFloat_FromDouble=python32.PyFloat_FromDouble
|
||||
PyFloat_FromString=python32.PyFloat_FromString
|
||||
PyFloat_GetInfo=python32.PyFloat_GetInfo
|
||||
PyFloat_GetMax=python32.PyFloat_GetMax
|
||||
PyFloat_GetMin=python32.PyFloat_GetMin
|
||||
PyFloat_Type=python32.PyFloat_Type DATA
|
||||
PyFrozenSet_New=python32.PyFrozenSet_New
|
||||
PyFrozenSet_Type=python32.PyFrozenSet_Type DATA
|
||||
PyGC_Collect=python32.PyGC_Collect
|
||||
PyGILState_Ensure=python32.PyGILState_Ensure
|
||||
PyGILState_GetThisThreadState=python32.PyGILState_GetThisThreadState
|
||||
PyGILState_Release=python32.PyGILState_Release
|
||||
PyGetSetDescr_Type=python32.PyGetSetDescr_Type DATA
|
||||
PyImport_AddModule=python32.PyImport_AddModule
|
||||
PyImport_AppendInittab=python32.PyImport_AppendInittab
|
||||
PyImport_Cleanup=python32.PyImport_Cleanup
|
||||
PyImport_ExecCodeModule=python32.PyImport_ExecCodeModule
|
||||
PyImport_ExecCodeModuleEx=python32.PyImport_ExecCodeModuleEx
|
||||
PyImport_ExecCodeModuleWithPathnames=python32.PyImport_ExecCodeModuleWithPathnames
|
||||
PyImport_GetImporter=python32.PyImport_GetImporter
|
||||
PyImport_GetMagicNumber=python32.PyImport_GetMagicNumber
|
||||
PyImport_GetMagicTag=python32.PyImport_GetMagicTag
|
||||
PyImport_GetModuleDict=python32.PyImport_GetModuleDict
|
||||
PyImport_Import=python32.PyImport_Import
|
||||
PyImport_ImportFrozenModule=python32.PyImport_ImportFrozenModule
|
||||
PyImport_ImportModule=python32.PyImport_ImportModule
|
||||
PyImport_ImportModuleLevel=python32.PyImport_ImportModuleLevel
|
||||
PyImport_ImportModuleNoBlock=python32.PyImport_ImportModuleNoBlock
|
||||
PyImport_ReloadModule=python32.PyImport_ReloadModule
|
||||
PyInterpreterState_Clear=python32.PyInterpreterState_Clear
|
||||
PyInterpreterState_Delete=python32.PyInterpreterState_Delete
|
||||
PyInterpreterState_New=python32.PyInterpreterState_New
|
||||
PyIter_Next=python32.PyIter_Next
|
||||
PyListIter_Type=python32.PyListIter_Type DATA
|
||||
PyListRevIter_Type=python32.PyListRevIter_Type DATA
|
||||
PyList_Append=python32.PyList_Append
|
||||
PyList_AsTuple=python32.PyList_AsTuple
|
||||
PyList_GetItem=python32.PyList_GetItem
|
||||
PyList_GetSlice=python32.PyList_GetSlice
|
||||
PyList_Insert=python32.PyList_Insert
|
||||
PyList_New=python32.PyList_New
|
||||
PyList_Reverse=python32.PyList_Reverse
|
||||
PyList_SetItem=python32.PyList_SetItem
|
||||
PyList_SetSlice=python32.PyList_SetSlice
|
||||
PyList_Size=python32.PyList_Size
|
||||
PyList_Sort=python32.PyList_Sort
|
||||
PyList_Type=python32.PyList_Type DATA
|
||||
PyLongRangeIter_Type=python32.PyLongRangeIter_Type DATA
|
||||
PyLong_AsDouble=python32.PyLong_AsDouble
|
||||
PyLong_AsLong=python32.PyLong_AsLong
|
||||
PyLong_AsLongAndOverflow=python32.PyLong_AsLongAndOverflow
|
||||
PyLong_AsLongLong=python32.PyLong_AsLongLong
|
||||
PyLong_AsLongLongAndOverflow=python32.PyLong_AsLongLongAndOverflow
|
||||
PyLong_AsSize_t=python32.PyLong_AsSize_t
|
||||
PyLong_AsSsize_t=python32.PyLong_AsSsize_t
|
||||
PyLong_AsUnsignedLong=python32.PyLong_AsUnsignedLong
|
||||
PyLong_AsUnsignedLongLong=python32.PyLong_AsUnsignedLongLong
|
||||
PyLong_AsUnsignedLongLongMask=python32.PyLong_AsUnsignedLongLongMask
|
||||
PyLong_AsUnsignedLongMask=python32.PyLong_AsUnsignedLongMask
|
||||
PyLong_AsVoidPtr=python32.PyLong_AsVoidPtr
|
||||
PyLong_FromDouble=python32.PyLong_FromDouble
|
||||
PyLong_FromLong=python32.PyLong_FromLong
|
||||
PyLong_FromLongLong=python32.PyLong_FromLongLong
|
||||
PyLong_FromSize_t=python32.PyLong_FromSize_t
|
||||
PyLong_FromSsize_t=python32.PyLong_FromSsize_t
|
||||
PyLong_FromString=python32.PyLong_FromString
|
||||
PyLong_FromUnsignedLong=python32.PyLong_FromUnsignedLong
|
||||
PyLong_FromUnsignedLongLong=python32.PyLong_FromUnsignedLongLong
|
||||
PyLong_FromVoidPtr=python32.PyLong_FromVoidPtr
|
||||
PyLong_GetInfo=python32.PyLong_GetInfo
|
||||
PyLong_Type=python32.PyLong_Type DATA
|
||||
PyMap_Type=python32.PyMap_Type DATA
|
||||
PyMapping_Check=python32.PyMapping_Check
|
||||
PyMapping_GetItemString=python32.PyMapping_GetItemString
|
||||
PyMapping_HasKey=python32.PyMapping_HasKey
|
||||
PyMapping_HasKeyString=python32.PyMapping_HasKeyString
|
||||
PyMapping_Items=python32.PyMapping_Items
|
||||
PyMapping_Keys=python32.PyMapping_Keys
|
||||
PyMapping_Length=python32.PyMapping_Length
|
||||
PyMapping_SetItemString=python32.PyMapping_SetItemString
|
||||
PyMapping_Size=python32.PyMapping_Size
|
||||
PyMapping_Values=python32.PyMapping_Values
|
||||
PyMem_Free=python32.PyMem_Free
|
||||
PyMem_Malloc=python32.PyMem_Malloc
|
||||
PyMem_Realloc=python32.PyMem_Realloc
|
||||
PyMemberDescr_Type=python32.PyMemberDescr_Type DATA
|
||||
PyMemoryView_FromBuffer=python32.PyMemoryView_FromBuffer
|
||||
PyMemoryView_FromObject=python32.PyMemoryView_FromObject
|
||||
PyMemoryView_GetContiguous=python32.PyMemoryView_GetContiguous
|
||||
PyMemoryView_Type=python32.PyMemoryView_Type DATA
|
||||
PyMethodDescr_Type=python32.PyMethodDescr_Type DATA
|
||||
PyModule_AddIntConstant=python32.PyModule_AddIntConstant
|
||||
PyModule_AddObject=python32.PyModule_AddObject
|
||||
PyModule_AddStringConstant=python32.PyModule_AddStringConstant
|
||||
PyModule_Create2=python32.PyModule_Create2
|
||||
PyModule_GetDef=python32.PyModule_GetDef
|
||||
PyModule_GetDict=python32.PyModule_GetDict
|
||||
PyModule_GetFilename=python32.PyModule_GetFilename
|
||||
PyModule_GetFilenameObject=python32.PyModule_GetFilenameObject
|
||||
PyModule_GetName=python32.PyModule_GetName
|
||||
PyModule_GetState=python32.PyModule_GetState
|
||||
PyModule_New=python32.PyModule_New
|
||||
PyModule_Type=python32.PyModule_Type DATA
|
||||
PyNullImporter_Type=python32.PyNullImporter_Type DATA
|
||||
PyNumber_Absolute=python32.PyNumber_Absolute
|
||||
PyNumber_Add=python32.PyNumber_Add
|
||||
PyNumber_And=python32.PyNumber_And
|
||||
PyNumber_AsSsize_t=python32.PyNumber_AsSsize_t
|
||||
PyNumber_Check=python32.PyNumber_Check
|
||||
PyNumber_Divmod=python32.PyNumber_Divmod
|
||||
PyNumber_Float=python32.PyNumber_Float
|
||||
PyNumber_FloorDivide=python32.PyNumber_FloorDivide
|
||||
PyNumber_InPlaceAdd=python32.PyNumber_InPlaceAdd
|
||||
PyNumber_InPlaceAnd=python32.PyNumber_InPlaceAnd
|
||||
PyNumber_InPlaceFloorDivide=python32.PyNumber_InPlaceFloorDivide
|
||||
PyNumber_InPlaceLshift=python32.PyNumber_InPlaceLshift
|
||||
PyNumber_InPlaceMultiply=python32.PyNumber_InPlaceMultiply
|
||||
PyNumber_InPlaceOr=python32.PyNumber_InPlaceOr
|
||||
PyNumber_InPlacePower=python32.PyNumber_InPlacePower
|
||||
PyNumber_InPlaceRemainder=python32.PyNumber_InPlaceRemainder
|
||||
PyNumber_InPlaceRshift=python32.PyNumber_InPlaceRshift
|
||||
PyNumber_InPlaceSubtract=python32.PyNumber_InPlaceSubtract
|
||||
PyNumber_InPlaceTrueDivide=python32.PyNumber_InPlaceTrueDivide
|
||||
PyNumber_InPlaceXor=python32.PyNumber_InPlaceXor
|
||||
PyNumber_Index=python32.PyNumber_Index
|
||||
PyNumber_Invert=python32.PyNumber_Invert
|
||||
PyNumber_Long=python32.PyNumber_Long
|
||||
PyNumber_Lshift=python32.PyNumber_Lshift
|
||||
PyNumber_Multiply=python32.PyNumber_Multiply
|
||||
PyNumber_Negative=python32.PyNumber_Negative
|
||||
PyNumber_Or=python32.PyNumber_Or
|
||||
PyNumber_Positive=python32.PyNumber_Positive
|
||||
PyNumber_Power=python32.PyNumber_Power
|
||||
PyNumber_Remainder=python32.PyNumber_Remainder
|
||||
PyNumber_Rshift=python32.PyNumber_Rshift
|
||||
PyNumber_Subtract=python32.PyNumber_Subtract
|
||||
PyNumber_ToBase=python32.PyNumber_ToBase
|
||||
PyNumber_TrueDivide=python32.PyNumber_TrueDivide
|
||||
PyNumber_Xor=python32.PyNumber_Xor
|
||||
PyOS_AfterFork=python32.PyOS_AfterFork
|
||||
PyOS_InitInterrupts=python32.PyOS_InitInterrupts
|
||||
PyOS_InputHook=python32.PyOS_InputHook DATA
|
||||
PyOS_InterruptOccurred=python32.PyOS_InterruptOccurred
|
||||
PyOS_ReadlineFunctionPointer=python32.PyOS_ReadlineFunctionPointer DATA
|
||||
PyOS_double_to_string=python32.PyOS_double_to_string
|
||||
PyOS_getsig=python32.PyOS_getsig
|
||||
PyOS_mystricmp=python32.PyOS_mystricmp
|
||||
PyOS_mystrnicmp=python32.PyOS_mystrnicmp
|
||||
PyOS_setsig=python32.PyOS_setsig
|
||||
PyOS_snprintf=python32.PyOS_snprintf
|
||||
PyOS_string_to_double=python32.PyOS_string_to_double
|
||||
PyOS_strtol=python32.PyOS_strtol
|
||||
PyOS_strtoul=python32.PyOS_strtoul
|
||||
PyOS_vsnprintf=python32.PyOS_vsnprintf
|
||||
PyObject_ASCII=python32.PyObject_ASCII
|
||||
PyObject_AsCharBuffer=python32.PyObject_AsCharBuffer
|
||||
PyObject_AsFileDescriptor=python32.PyObject_AsFileDescriptor
|
||||
PyObject_AsReadBuffer=python32.PyObject_AsReadBuffer
|
||||
PyObject_AsWriteBuffer=python32.PyObject_AsWriteBuffer
|
||||
PyObject_Bytes=python32.PyObject_Bytes
|
||||
PyObject_Call=python32.PyObject_Call
|
||||
PyObject_CallFunction=python32.PyObject_CallFunction
|
||||
PyObject_CallFunctionObjArgs=python32.PyObject_CallFunctionObjArgs
|
||||
PyObject_CallMethod=python32.PyObject_CallMethod
|
||||
PyObject_CallMethodObjArgs=python32.PyObject_CallMethodObjArgs
|
||||
PyObject_CallObject=python32.PyObject_CallObject
|
||||
PyObject_CheckReadBuffer=python32.PyObject_CheckReadBuffer
|
||||
PyObject_ClearWeakRefs=python32.PyObject_ClearWeakRefs
|
||||
PyObject_CopyData=python32.PyObject_CopyData
|
||||
PyObject_DelItem=python32.PyObject_DelItem
|
||||
PyObject_DelItemString=python32.PyObject_DelItemString
|
||||
PyObject_Dir=python32.PyObject_Dir
|
||||
PyObject_Format=python32.PyObject_Format
|
||||
PyObject_Free=python32.PyObject_Free
|
||||
PyObject_GC_Del=python32.PyObject_GC_Del
|
||||
PyObject_GC_Track=python32.PyObject_GC_Track
|
||||
PyObject_GC_UnTrack=python32.PyObject_GC_UnTrack
|
||||
PyObject_GenericGetAttr=python32.PyObject_GenericGetAttr
|
||||
PyObject_GenericSetAttr=python32.PyObject_GenericSetAttr
|
||||
PyObject_GetAttr=python32.PyObject_GetAttr
|
||||
PyObject_GetAttrString=python32.PyObject_GetAttrString
|
||||
PyObject_GetBuffer=python32.PyObject_GetBuffer
|
||||
PyObject_GetItem=python32.PyObject_GetItem
|
||||
PyObject_GetIter=python32.PyObject_GetIter
|
||||
PyObject_HasAttr=python32.PyObject_HasAttr
|
||||
PyObject_HasAttrString=python32.PyObject_HasAttrString
|
||||
PyObject_Hash=python32.PyObject_Hash
|
||||
PyObject_HashNotImplemented=python32.PyObject_HashNotImplemented
|
||||
PyObject_Init=python32.PyObject_Init
|
||||
PyObject_InitVar=python32.PyObject_InitVar
|
||||
PyObject_IsInstance=python32.PyObject_IsInstance
|
||||
PyObject_IsSubclass=python32.PyObject_IsSubclass
|
||||
PyObject_IsTrue=python32.PyObject_IsTrue
|
||||
PyObject_Length=python32.PyObject_Length
|
||||
PyObject_Malloc=python32.PyObject_Malloc
|
||||
PyObject_Not=python32.PyObject_Not
|
||||
PyObject_Realloc=python32.PyObject_Realloc
|
||||
PyObject_Repr=python32.PyObject_Repr
|
||||
PyObject_RichCompare=python32.PyObject_RichCompare
|
||||
PyObject_RichCompareBool=python32.PyObject_RichCompareBool
|
||||
PyObject_SelfIter=python32.PyObject_SelfIter
|
||||
PyObject_SetAttr=python32.PyObject_SetAttr
|
||||
PyObject_SetAttrString=python32.PyObject_SetAttrString
|
||||
PyObject_SetItem=python32.PyObject_SetItem
|
||||
PyObject_Size=python32.PyObject_Size
|
||||
PyObject_Str=python32.PyObject_Str
|
||||
PyObject_Type=python32.PyObject_Type DATA
|
||||
PyParser_SimpleParseFileFlags=python32.PyParser_SimpleParseFileFlags
|
||||
PyParser_SimpleParseStringFlags=python32.PyParser_SimpleParseStringFlags
|
||||
PyProperty_Type=python32.PyProperty_Type DATA
|
||||
PyRangeIter_Type=python32.PyRangeIter_Type DATA
|
||||
PyRange_Type=python32.PyRange_Type DATA
|
||||
PyReversed_Type=python32.PyReversed_Type DATA
|
||||
PySeqIter_New=python32.PySeqIter_New
|
||||
PySeqIter_Type=python32.PySeqIter_Type DATA
|
||||
PySequence_Check=python32.PySequence_Check
|
||||
PySequence_Concat=python32.PySequence_Concat
|
||||
PySequence_Contains=python32.PySequence_Contains
|
||||
PySequence_Count=python32.PySequence_Count
|
||||
PySequence_DelItem=python32.PySequence_DelItem
|
||||
PySequence_DelSlice=python32.PySequence_DelSlice
|
||||
PySequence_Fast=python32.PySequence_Fast
|
||||
PySequence_GetItem=python32.PySequence_GetItem
|
||||
PySequence_GetSlice=python32.PySequence_GetSlice
|
||||
PySequence_In=python32.PySequence_In
|
||||
PySequence_InPlaceConcat=python32.PySequence_InPlaceConcat
|
||||
PySequence_InPlaceRepeat=python32.PySequence_InPlaceRepeat
|
||||
PySequence_Index=python32.PySequence_Index
|
||||
PySequence_Length=python32.PySequence_Length
|
||||
PySequence_List=python32.PySequence_List
|
||||
PySequence_Repeat=python32.PySequence_Repeat
|
||||
PySequence_SetItem=python32.PySequence_SetItem
|
||||
PySequence_SetSlice=python32.PySequence_SetSlice
|
||||
PySequence_Size=python32.PySequence_Size
|
||||
PySequence_Tuple=python32.PySequence_Tuple
|
||||
PySetIter_Type=python32.PySetIter_Type DATA
|
||||
PySet_Add=python32.PySet_Add
|
||||
PySet_Clear=python32.PySet_Clear
|
||||
PySet_Contains=python32.PySet_Contains
|
||||
PySet_Discard=python32.PySet_Discard
|
||||
PySet_New=python32.PySet_New
|
||||
PySet_Pop=python32.PySet_Pop
|
||||
PySet_Size=python32.PySet_Size
|
||||
PySet_Type=python32.PySet_Type DATA
|
||||
PySlice_GetIndices=python32.PySlice_GetIndices
|
||||
PySlice_GetIndicesEx=python32.PySlice_GetIndicesEx
|
||||
PySlice_New=python32.PySlice_New
|
||||
PySlice_Type=python32.PySlice_Type DATA
|
||||
PySortWrapper_Type=python32.PySortWrapper_Type DATA
|
||||
PyState_FindModule=python32.PyState_FindModule
|
||||
PyStructSequence_GetItem=python32.PyStructSequence_GetItem
|
||||
PyStructSequence_New=python32.PyStructSequence_New
|
||||
PyStructSequence_NewType=python32.PyStructSequence_NewType
|
||||
PyStructSequence_SetItem=python32.PyStructSequence_SetItem
|
||||
PySuper_Type=python32.PySuper_Type DATA
|
||||
PySys_AddWarnOption=python32.PySys_AddWarnOption
|
||||
PySys_AddWarnOptionUnicode=python32.PySys_AddWarnOptionUnicode
|
||||
PySys_FormatStderr=python32.PySys_FormatStderr
|
||||
PySys_FormatStdout=python32.PySys_FormatStdout
|
||||
PySys_GetObject=python32.PySys_GetObject
|
||||
PySys_HasWarnOptions=python32.PySys_HasWarnOptions
|
||||
PySys_ResetWarnOptions=python32.PySys_ResetWarnOptions
|
||||
PySys_SetArgv=python32.PySys_SetArgv
|
||||
PySys_SetArgvEx=python32.PySys_SetArgvEx
|
||||
PySys_SetObject=python32.PySys_SetObject
|
||||
PySys_SetPath=python32.PySys_SetPath
|
||||
PySys_WriteStderr=python32.PySys_WriteStderr
|
||||
PySys_WriteStdout=python32.PySys_WriteStdout
|
||||
PyThreadState_Clear=python32.PyThreadState_Clear
|
||||
PyThreadState_Delete=python32.PyThreadState_Delete
|
||||
PyThreadState_DeleteCurrent=python32.PyThreadState_DeleteCurrent
|
||||
PyThreadState_Get=python32.PyThreadState_Get
|
||||
PyThreadState_GetDict=python32.PyThreadState_GetDict
|
||||
PyThreadState_New=python32.PyThreadState_New
|
||||
PyThreadState_SetAsyncExc=python32.PyThreadState_SetAsyncExc
|
||||
PyThreadState_Swap=python32.PyThreadState_Swap
|
||||
PyTraceBack_Here=python32.PyTraceBack_Here
|
||||
PyTraceBack_Print=python32.PyTraceBack_Print
|
||||
PyTraceBack_Type=python32.PyTraceBack_Type DATA
|
||||
PyTupleIter_Type=python32.PyTupleIter_Type DATA
|
||||
PyTuple_ClearFreeList=python32.PyTuple_ClearFreeList
|
||||
PyTuple_GetItem=python32.PyTuple_GetItem
|
||||
PyTuple_GetSlice=python32.PyTuple_GetSlice
|
||||
PyTuple_New=python32.PyTuple_New
|
||||
PyTuple_Pack=python32.PyTuple_Pack
|
||||
PyTuple_SetItem=python32.PyTuple_SetItem
|
||||
PyTuple_Size=python32.PyTuple_Size
|
||||
PyTuple_Type=python32.PyTuple_Type DATA
|
||||
PyType_ClearCache=python32.PyType_ClearCache
|
||||
PyType_FromSpec=python32.PyType_FromSpec
|
||||
PyType_GenericAlloc=python32.PyType_GenericAlloc
|
||||
PyType_GenericNew=python32.PyType_GenericNew
|
||||
PyType_IsSubtype=python32.PyType_IsSubtype
|
||||
PyType_Modified=python32.PyType_Modified
|
||||
PyType_Ready=python32.PyType_Ready
|
||||
PyType_Type=python32.PyType_Type DATA
|
||||
PyUnicodeDecodeError_Create=python32.PyUnicodeDecodeError_Create
|
||||
PyUnicodeDecodeError_GetEncoding=python32.PyUnicodeDecodeError_GetEncoding
|
||||
PyUnicodeDecodeError_GetEnd=python32.PyUnicodeDecodeError_GetEnd
|
||||
PyUnicodeDecodeError_GetObject=python32.PyUnicodeDecodeError_GetObject
|
||||
PyUnicodeDecodeError_GetReason=python32.PyUnicodeDecodeError_GetReason
|
||||
PyUnicodeDecodeError_GetStart=python32.PyUnicodeDecodeError_GetStart
|
||||
PyUnicodeDecodeError_SetEnd=python32.PyUnicodeDecodeError_SetEnd
|
||||
PyUnicodeDecodeError_SetReason=python32.PyUnicodeDecodeError_SetReason
|
||||
PyUnicodeDecodeError_SetStart=python32.PyUnicodeDecodeError_SetStart
|
||||
PyUnicodeEncodeError_GetEncoding=python32.PyUnicodeEncodeError_GetEncoding
|
||||
PyUnicodeEncodeError_GetEnd=python32.PyUnicodeEncodeError_GetEnd
|
||||
PyUnicodeEncodeError_GetObject=python32.PyUnicodeEncodeError_GetObject
|
||||
PyUnicodeEncodeError_GetReason=python32.PyUnicodeEncodeError_GetReason
|
||||
PyUnicodeEncodeError_GetStart=python32.PyUnicodeEncodeError_GetStart
|
||||
PyUnicodeEncodeError_SetEnd=python32.PyUnicodeEncodeError_SetEnd
|
||||
PyUnicodeEncodeError_SetReason=python32.PyUnicodeEncodeError_SetReason
|
||||
PyUnicodeEncodeError_SetStart=python32.PyUnicodeEncodeError_SetStart
|
||||
PyUnicodeIter_Type=python32.PyUnicodeIter_Type DATA
|
||||
PyUnicodeTranslateError_GetEnd=python32.PyUnicodeTranslateError_GetEnd
|
||||
PyUnicodeTranslateError_GetObject=python32.PyUnicodeTranslateError_GetObject
|
||||
PyUnicodeTranslateError_GetReason=python32.PyUnicodeTranslateError_GetReason
|
||||
PyUnicodeTranslateError_GetStart=python32.PyUnicodeTranslateError_GetStart
|
||||
PyUnicodeTranslateError_SetEnd=python32.PyUnicodeTranslateError_SetEnd
|
||||
PyUnicodeTranslateError_SetReason=python32.PyUnicodeTranslateError_SetReason
|
||||
PyUnicodeTranslateError_SetStart=python32.PyUnicodeTranslateError_SetStart
|
||||
PyUnicode_Append=python32.PyUnicodeUCS2_Append
|
||||
PyUnicode_AppendAndDel=python32.PyUnicodeUCS2_AppendAndDel
|
||||
PyUnicode_AsASCIIString=python32.PyUnicodeUCS2_AsASCIIString
|
||||
PyUnicode_AsCharmapString=python32.PyUnicodeUCS2_AsCharmapString
|
||||
PyUnicode_AsDecodedObject=python32.PyUnicodeUCS2_AsDecodedObject
|
||||
PyUnicode_AsDecodedUnicode=python32.PyUnicodeUCS2_AsDecodedUnicode
|
||||
PyUnicode_AsEncodedObject=python32.PyUnicodeUCS2_AsEncodedObject
|
||||
PyUnicode_AsEncodedString=python32.PyUnicodeUCS2_AsEncodedString
|
||||
PyUnicode_AsEncodedUnicode=python32.PyUnicodeUCS2_AsEncodedUnicode
|
||||
PyUnicode_AsLatin1String=python32.PyUnicodeUCS2_AsLatin1String
|
||||
PyUnicode_AsRawUnicodeEscapeString=python32.PyUnicodeUCS2_AsRawUnicodeEscapeString
|
||||
PyUnicode_AsUTF16String=python32.PyUnicodeUCS2_AsUTF16String
|
||||
PyUnicode_AsUTF32String=python32.PyUnicodeUCS2_AsUTF32String
|
||||
PyUnicode_AsUTF8String=python32.PyUnicodeUCS2_AsUTF8String
|
||||
PyUnicode_AsUnicodeEscapeString=python32.PyUnicodeUCS2_AsUnicodeEscapeString
|
||||
PyUnicode_AsWideChar=python32.PyUnicodeUCS2_AsWideChar
|
||||
PyUnicode_ClearFreelist=python32.PyUnicodeUCS2_ClearFreelist
|
||||
PyUnicode_Compare=python32.PyUnicodeUCS2_Compare
|
||||
PyUnicode_Concat=python32.PyUnicodeUCS2_Concat
|
||||
PyUnicode_Contains=python32.PyUnicodeUCS2_Contains
|
||||
PyUnicode_Count=python32.PyUnicodeUCS2_Count
|
||||
PyUnicode_Decode=python32.PyUnicodeUCS2_Decode
|
||||
PyUnicode_DecodeASCII=python32.PyUnicodeUCS2_DecodeASCII
|
||||
PyUnicode_DecodeCharmap=python32.PyUnicodeUCS2_DecodeCharmap
|
||||
PyUnicode_DecodeFSDefault=python32.PyUnicodeUCS2_DecodeFSDefault
|
||||
PyUnicode_DecodeFSDefaultAndSize=python32.PyUnicodeUCS2_DecodeFSDefaultAndSize
|
||||
PyUnicode_DecodeLatin1=python32.PyUnicodeUCS2_DecodeLatin1
|
||||
PyUnicode_DecodeRawUnicodeEscape=python32.PyUnicodeUCS2_DecodeRawUnicodeEscape
|
||||
PyUnicode_DecodeUTF16=python32.PyUnicodeUCS2_DecodeUTF16
|
||||
PyUnicode_DecodeUTF16Stateful=python32.PyUnicodeUCS2_DecodeUTF16Stateful
|
||||
PyUnicode_DecodeUTF32=python32.PyUnicodeUCS2_DecodeUTF32
|
||||
PyUnicode_DecodeUTF32Stateful=python32.PyUnicodeUCS2_DecodeUTF32Stateful
|
||||
PyUnicode_DecodeUTF8=python32.PyUnicodeUCS2_DecodeUTF8
|
||||
PyUnicode_DecodeUTF8Stateful=python32.PyUnicodeUCS2_DecodeUTF8Stateful
|
||||
PyUnicode_DecodeUnicodeEscape=python32.PyUnicodeUCS2_DecodeUnicodeEscape
|
||||
PyUnicode_FSConverter=python32.PyUnicodeUCS2_FSConverter
|
||||
PyUnicode_FSDecoder=python32.PyUnicodeUCS2_FSDecoder
|
||||
PyUnicode_Find=python32.PyUnicodeUCS2_Find
|
||||
PyUnicode_Format=python32.PyUnicodeUCS2_Format
|
||||
PyUnicode_FromEncodedObject=python32.PyUnicodeUCS2_FromEncodedObject
|
||||
PyUnicode_FromFormat=python32.PyUnicodeUCS2_FromFormat
|
||||
PyUnicode_FromFormatV=python32.PyUnicodeUCS2_FromFormatV
|
||||
PyUnicode_FromObject=python32.PyUnicodeUCS2_FromObject
|
||||
PyUnicode_FromOrdinal=python32.PyUnicodeUCS2_FromOrdinal
|
||||
PyUnicode_FromString=python32.PyUnicodeUCS2_FromString
|
||||
PyUnicode_FromStringAndSize=python32.PyUnicodeUCS2_FromStringAndSize
|
||||
PyUnicode_FromWideChar=python32.PyUnicodeUCS2_FromWideChar
|
||||
PyUnicode_GetDefaultEncoding=python32.PyUnicodeUCS2_GetDefaultEncoding
|
||||
PyUnicode_GetSize=python32.PyUnicodeUCS2_GetSize
|
||||
PyUnicode_IsIdentifier=python32.PyUnicodeUCS2_IsIdentifier
|
||||
PyUnicode_Join=python32.PyUnicodeUCS2_Join
|
||||
PyUnicode_Partition=python32.PyUnicodeUCS2_Partition
|
||||
PyUnicode_RPartition=python32.PyUnicodeUCS2_RPartition
|
||||
PyUnicode_RSplit=python32.PyUnicodeUCS2_RSplit
|
||||
PyUnicode_Replace=python32.PyUnicodeUCS2_Replace
|
||||
PyUnicode_Resize=python32.PyUnicodeUCS2_Resize
|
||||
PyUnicode_RichCompare=python32.PyUnicodeUCS2_RichCompare
|
||||
PyUnicode_SetDefaultEncoding=python32.PyUnicodeUCS2_SetDefaultEncoding
|
||||
PyUnicode_Split=python32.PyUnicodeUCS2_Split
|
||||
PyUnicode_Splitlines=python32.PyUnicodeUCS2_Splitlines
|
||||
PyUnicode_Tailmatch=python32.PyUnicodeUCS2_Tailmatch
|
||||
PyUnicode_Translate=python32.PyUnicodeUCS2_Translate
|
||||
PyUnicode_BuildEncodingMap=python32.PyUnicode_BuildEncodingMap
|
||||
PyUnicode_CompareWithASCIIString=python32.PyUnicode_CompareWithASCIIString
|
||||
PyUnicode_DecodeUTF7=python32.PyUnicode_DecodeUTF7
|
||||
PyUnicode_DecodeUTF7Stateful=python32.PyUnicode_DecodeUTF7Stateful
|
||||
PyUnicode_EncodeFSDefault=python32.PyUnicode_EncodeFSDefault
|
||||
PyUnicode_InternFromString=python32.PyUnicode_InternFromString
|
||||
PyUnicode_InternImmortal=python32.PyUnicode_InternImmortal
|
||||
PyUnicode_InternInPlace=python32.PyUnicode_InternInPlace
|
||||
PyUnicode_Type=python32.PyUnicode_Type DATA
|
||||
PyWeakref_GetObject=python32.PyWeakref_GetObject DATA
|
||||
PyWeakref_NewProxy=python32.PyWeakref_NewProxy
|
||||
PyWeakref_NewRef=python32.PyWeakref_NewRef
|
||||
PyWrapperDescr_Type=python32.PyWrapperDescr_Type DATA
|
||||
PyWrapper_New=python32.PyWrapper_New
|
||||
PyZip_Type=python32.PyZip_Type DATA
|
||||
Py_AddPendingCall=python32.Py_AddPendingCall
|
||||
Py_AtExit=python32.Py_AtExit
|
||||
Py_BuildValue=python32.Py_BuildValue
|
||||
Py_CompileStringFlags=python32.Py_CompileStringFlags
|
||||
Py_DecRef=python32.Py_DecRef
|
||||
Py_EndInterpreter=python32.Py_EndInterpreter
|
||||
Py_Exit=python32.Py_Exit
|
||||
Py_FatalError=python32.Py_FatalError
|
||||
Py_FileSystemDefaultEncoding=python32.Py_FileSystemDefaultEncoding DATA
|
||||
Py_Finalize=python32.Py_Finalize
|
||||
Py_GetBuildInfo=python32.Py_GetBuildInfo
|
||||
Py_GetCompiler=python32.Py_GetCompiler
|
||||
Py_GetCopyright=python32.Py_GetCopyright
|
||||
Py_GetExecPrefix=python32.Py_GetExecPrefix
|
||||
Py_GetPath=python32.Py_GetPath
|
||||
Py_GetPlatform=python32.Py_GetPlatform
|
||||
Py_GetPrefix=python32.Py_GetPrefix
|
||||
Py_GetProgramFullPath=python32.Py_GetProgramFullPath
|
||||
Py_GetProgramName=python32.Py_GetProgramName
|
||||
Py_GetPythonHome=python32.Py_GetPythonHome
|
||||
Py_GetRecursionLimit=python32.Py_GetRecursionLimit
|
||||
Py_GetVersion=python32.Py_GetVersion
|
||||
Py_HasFileSystemDefaultEncoding=python32.Py_HasFileSystemDefaultEncoding DATA
|
||||
Py_IncRef=python32.Py_IncRef
|
||||
Py_Initialize=python32.Py_Initialize
|
||||
Py_InitializeEx=python32.Py_InitializeEx
|
||||
Py_IsInitialized=python32.Py_IsInitialized
|
||||
Py_Main=python32.Py_Main
|
||||
Py_MakePendingCalls=python32.Py_MakePendingCalls
|
||||
Py_NewInterpreter=python32.Py_NewInterpreter
|
||||
Py_ReprEnter=python32.Py_ReprEnter
|
||||
Py_ReprLeave=python32.Py_ReprLeave
|
||||
Py_SetProgramName=python32.Py_SetProgramName
|
||||
Py_SetPythonHome=python32.Py_SetPythonHome
|
||||
Py_SetRecursionLimit=python32.Py_SetRecursionLimit
|
||||
Py_SymtableString=python32.Py_SymtableString
|
||||
Py_VaBuildValue=python32.Py_VaBuildValue
|
||||
_PyErr_BadInternalCall=python32._PyErr_BadInternalCall
|
||||
_PyObject_CallFunction_SizeT=python32._PyObject_CallFunction_SizeT
|
||||
_PyObject_CallMethod_SizeT=python32._PyObject_CallMethod_SizeT
|
||||
_PyObject_GC_Malloc=python32._PyObject_GC_Malloc
|
||||
_PyObject_GC_New=python32._PyObject_GC_New
|
||||
_PyObject_GC_NewVar=python32._PyObject_GC_NewVar
|
||||
_PyObject_GC_Resize=python32._PyObject_GC_Resize
|
||||
_PyObject_New=python32._PyObject_New
|
||||
_PyObject_NewVar=python32._PyObject_NewVar
|
||||
_PyState_AddModule=python32._PyState_AddModule
|
||||
_PyThreadState_Init=python32._PyThreadState_Init
|
||||
_PyThreadState_Prealloc=python32._PyThreadState_Prealloc
|
||||
_PyTrash_delete_later=python32._PyTrash_delete_later DATA
|
||||
_PyTrash_delete_nesting=python32._PyTrash_delete_nesting DATA
|
||||
_PyTrash_deposit_object=python32._PyTrash_deposit_object
|
||||
_PyTrash_destroy_chain=python32._PyTrash_destroy_chain
|
||||
_PyWeakref_CallableProxyType=python32._PyWeakref_CallableProxyType DATA
|
||||
_PyWeakref_ProxyType=python32._PyWeakref_ProxyType DATA
|
||||
_PyWeakref_RefType=python32._PyWeakref_RefType DATA
|
||||
_Py_BuildValue_SizeT=python32._Py_BuildValue_SizeT
|
||||
_Py_CheckRecursionLimit=python32._Py_CheckRecursionLimit DATA
|
||||
_Py_CheckRecursiveCall=python32._Py_CheckRecursiveCall
|
||||
_Py_Dealloc=python32._Py_Dealloc
|
||||
_Py_EllipsisObject=python32._Py_EllipsisObject DATA
|
||||
_Py_FalseStruct=python32._Py_FalseStruct DATA
|
||||
_Py_NoneStruct=python32.Py_GetCopyright
|
||||
_Py_NotImplementedStruct=python32._Py_NotImplementedStruct DATA
|
||||
_Py_SwappedOp=python32._Py_SwappedOp DATA
|
||||
_Py_TrueStruct=python32._Py_TrueStruct DATA
|
||||
_Py_VaBuildValue_SizeT=python32._Py_VaBuildValue_SizeT
|
|
@ -0,0 +1,9 @@
|
|||
#include <windows.h>
|
||||
|
||||
BOOL WINAPI
|
||||
DllMain(HINSTANCE hInstDLL,
|
||||
DWORD fdwReason,
|
||||
LPVOID lpReserved)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
|
@ -133,6 +133,13 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ssl", "ssl.vcproj", "{E5B04
|
|||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "kill_python", "kill_python.vcproj", "{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "python3dll", "python3dll.vcproj", "{885D4898-D08D-4091-9C40-C700CFE3FC5A}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26} = {CF7AC3D1-E2DF-41D2-BEA6-1E2556CDEA26}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xxlimited", "xxlimited.vcproj", "{F749B822-B489-4CA5-A3AD-CE078F5F338A}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
|
@ -553,6 +560,32 @@ Global
|
|||
{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|Win32.Build.0 = Release|Win32
|
||||
{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|x64.ActiveCfg = Release|x64
|
||||
{6DE10744-E396-40A5-B4E2-1B69AA7C8D31}.Release|x64.Build.0 = Release|x64
|
||||
{885D4898-D08D-4091-9C40-C700CFE3FC5A}.Debug|Win32.ActiveCfg = PGUpdate|Win32
|
||||
{885D4898-D08D-4091-9C40-C700CFE3FC5A}.Debug|x64.ActiveCfg = PGUpdate|x64
|
||||
{885D4898-D08D-4091-9C40-C700CFE3FC5A}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
|
||||
{885D4898-D08D-4091-9C40-C700CFE3FC5A}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
|
||||
{885D4898-D08D-4091-9C40-C700CFE3FC5A}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
|
||||
{885D4898-D08D-4091-9C40-C700CFE3FC5A}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
|
||||
{885D4898-D08D-4091-9C40-C700CFE3FC5A}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
|
||||
{885D4898-D08D-4091-9C40-C700CFE3FC5A}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
|
||||
{885D4898-D08D-4091-9C40-C700CFE3FC5A}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{885D4898-D08D-4091-9C40-C700CFE3FC5A}.Release|Win32.Build.0 = Release|Win32
|
||||
{885D4898-D08D-4091-9C40-C700CFE3FC5A}.Release|x64.ActiveCfg = Release|x64
|
||||
{F749B822-B489-4CA5-A3AD-CE078F5F338A}.Debug|Win32.ActiveCfg = PGUpdate|x64
|
||||
{F749B822-B489-4CA5-A3AD-CE078F5F338A}.Debug|x64.ActiveCfg = PGUpdate|x64
|
||||
{F749B822-B489-4CA5-A3AD-CE078F5F338A}.Debug|x64.Build.0 = PGUpdate|x64
|
||||
{F749B822-B489-4CA5-A3AD-CE078F5F338A}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32
|
||||
{F749B822-B489-4CA5-A3AD-CE078F5F338A}.PGInstrument|Win32.Build.0 = PGInstrument|Win32
|
||||
{F749B822-B489-4CA5-A3AD-CE078F5F338A}.PGInstrument|x64.ActiveCfg = PGInstrument|x64
|
||||
{F749B822-B489-4CA5-A3AD-CE078F5F338A}.PGInstrument|x64.Build.0 = PGInstrument|x64
|
||||
{F749B822-B489-4CA5-A3AD-CE078F5F338A}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32
|
||||
{F749B822-B489-4CA5-A3AD-CE078F5F338A}.PGUpdate|Win32.Build.0 = PGUpdate|Win32
|
||||
{F749B822-B489-4CA5-A3AD-CE078F5F338A}.PGUpdate|x64.ActiveCfg = PGUpdate|x64
|
||||
{F749B822-B489-4CA5-A3AD-CE078F5F338A}.PGUpdate|x64.Build.0 = PGUpdate|x64
|
||||
{F749B822-B489-4CA5-A3AD-CE078F5F338A}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{F749B822-B489-4CA5-A3AD-CE078F5F338A}.Release|Win32.Build.0 = Release|Win32
|
||||
{F749B822-B489-4CA5-A3AD-CE078F5F338A}.Release|x64.ActiveCfg = Release|x64
|
||||
{F749B822-B489-4CA5-A3AD-CE078F5F338A}.Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
|
|
@ -0,0 +1,434 @@
|
|||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9,00"
|
||||
Name="python3dll"
|
||||
ProjectGUID="{885D4898-D08D-4091-9C40-C700CFE3FC5A}"
|
||||
RootNamespace="python3dll"
|
||||
Keyword="Win32Proj"
|
||||
TargetFrameworkVersion="196613"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
<Platform
|
||||
Name="x64"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;PYTHON3DLL_EXPORTS"
|
||||
RuntimeLibrary="2"
|
||||
BufferSecurityCheck="false"
|
||||
EnableFunctionLevelLinking="true"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="..\PC\python32.lib"
|
||||
OutputFile="$(OutDir)\python3.dll"
|
||||
LinkIncremental="1"
|
||||
IgnoreAllDefaultLibraries="true"
|
||||
ModuleDefinitionFile="..\PC\python3.def"
|
||||
GenerateDebugInformation="true"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
EntryPointSymbol="DllMain"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|x64"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\python3.dll"
|
||||
ModuleDefinitionFile="..\PC\python3.def"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="PGInstrument|Win32"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pginstrument.vsprops"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="python32.lib"
|
||||
OutputFile="$(OutDir)\python3.dll"
|
||||
ModuleDefinitionFile="..\PC\python3.def"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="PGInstrument|x64"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pginstrument.vsprops"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\python3.dll"
|
||||
ModuleDefinitionFile="..\PC\python3.def"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="PGUpdate|Win32"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets=".\pyproject.vsprops;.\release.vsprops;.\pgupdate.vsprops"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="python32.lib"
|
||||
OutputFile="$(OutDir)\python3.dll"
|
||||
ModuleDefinitionFile="..\PC\python3.def"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="PGUpdate|x64"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets=".\pyproject.vsprops;.\x64.vsprops;.\release.vsprops;.\pgupdate.vsprops"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)\python3.dll"
|
||||
ModuleDefinitionFile="..\PC\python3.def"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\PC\python3.def"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\PC\python3dll.c"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\PC\python_nt.rc"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
|
@ -0,0 +1,417 @@
|
|||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9,00"
|
||||
Name="xxlimited"
|
||||
ProjectGUID="{F749B822-B489-4CA5-A3AD-CE078F5F338A}"
|
||||
RootNamespace="xxlimited"
|
||||
Keyword="Win32Proj"
|
||||
TargetFrameworkVersion="196613"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
<Platform
|
||||
Name="x64"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets=".\pyd.vsprops"
|
||||
CharacterSet="0"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
PreprocessorDefinitions="NDEBUG;_WIN32;_WINDLL;Py_LIMITED_API;$(NOINHERIT)"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="wsock32.lib"
|
||||
IgnoreDefaultLibraryNames="libc"
|
||||
BaseAddress="0x1D110000"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|x64"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops"
|
||||
CharacterSet="0"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="wsock32.lib"
|
||||
IgnoreDefaultLibraryNames="libc"
|
||||
BaseAddress="0x1D110000"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="PGInstrument|Win32"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets=".\pyd.vsprops;.\pginstrument.vsprops"
|
||||
CharacterSet="0"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
PreprocessorDefinitions="Py_LIMITED_API"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="wsock32.lib"
|
||||
IgnoreDefaultLibraryNames="libc"
|
||||
BaseAddress="0x1D110000"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="PGInstrument|x64"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pginstrument.vsprops"
|
||||
CharacterSet="0"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="wsock32.lib"
|
||||
IgnoreDefaultLibraryNames="libc"
|
||||
BaseAddress="0x1D110000"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="PGUpdate|Win32"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets=".\pyd.vsprops;.\pgupdate.vsprops"
|
||||
CharacterSet="0"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
PreprocessorDefinitions="Py_LIMITED_API"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="wsock32.lib"
|
||||
IgnoreDefaultLibraryNames="libc"
|
||||
BaseAddress="0x1D110000"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="PGUpdate|x64"
|
||||
ConfigurationType="2"
|
||||
InheritedPropertySheets=".\pyd.vsprops;.\x64.vsprops;.\pgupdate.vsprops"
|
||||
CharacterSet="0"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
TargetEnvironment="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="wsock32.lib"
|
||||
IgnoreDefaultLibraryNames="libc"
|
||||
BaseAddress="0x1D110000"
|
||||
TargetMachine="17"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\Modules\xxlimited.c"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
|
@ -727,7 +727,7 @@ builtin_eval(PyObject *self, PyObject *args)
|
|||
"code object passed to eval() may not contain free variables");
|
||||
return NULL;
|
||||
}
|
||||
return PyEval_EvalCode((PyCodeObject *) cmd, globals, locals);
|
||||
return PyEval_EvalCode(cmd, globals, locals);
|
||||
}
|
||||
|
||||
cf.cf_flags = PyCF_SOURCE_IS_UTF8;
|
||||
|
@ -803,7 +803,7 @@ builtin_exec(PyObject *self, PyObject *args)
|
|||
"contain free variables");
|
||||
return NULL;
|
||||
}
|
||||
v = PyEval_EvalCode((PyCodeObject *) prog, globals, locals);
|
||||
v = PyEval_EvalCode(prog, globals, locals);
|
||||
}
|
||||
else {
|
||||
char *str;
|
||||
|
|
|
@ -755,7 +755,7 @@ static int _Py_TracingPossible = 0;
|
|||
|
||||
|
||||
PyObject *
|
||||
PyEval_EvalCode(PyCodeObject *co, PyObject *globals, PyObject *locals)
|
||||
PyEval_EvalCode(PyObject *co, PyObject *globals, PyObject *locals)
|
||||
{
|
||||
return PyEval_EvalCodeEx(co,
|
||||
globals, locals,
|
||||
|
@ -3059,10 +3059,11 @@ exit_eval_frame:
|
|||
the test in the if statements in Misc/gdbinit (pystack and pystackv). */
|
||||
|
||||
PyObject *
|
||||
PyEval_EvalCodeEx(PyCodeObject *co, PyObject *globals, PyObject *locals,
|
||||
PyEval_EvalCodeEx(PyObject *_co, PyObject *globals, PyObject *locals,
|
||||
PyObject **args, int argcount, PyObject **kws, int kwcount,
|
||||
PyObject **defs, int defcount, PyObject *kwdefs, PyObject *closure)
|
||||
{
|
||||
PyCodeObject* co = (PyCodeObject*)_co;
|
||||
register PyFrameObject *f;
|
||||
register PyObject *retval = NULL;
|
||||
register PyObject **fastlocals, **freevars;
|
||||
|
@ -3968,7 +3969,7 @@ fast_function(PyObject *func, PyObject ***pp_stack, int n, int na, int nk)
|
|||
d = &PyTuple_GET_ITEM(argdefs, 0);
|
||||
nd = Py_SIZE(argdefs);
|
||||
}
|
||||
return PyEval_EvalCodeEx(co, globals,
|
||||
return PyEval_EvalCodeEx((PyObject*)co, globals,
|
||||
(PyObject *)NULL, (*pp_stack)-n, na,
|
||||
(*pp_stack)-2*nk, nk, d, nd, kwdefs,
|
||||
PyFunction_GET_CLOSURE(func));
|
||||
|
|
|
@ -53,6 +53,8 @@ const struct filedescr _PyImport_DynLoadFiletab[] = {
|
|||
#else /* !__VMS */
|
||||
{"." SOABI ".so", "rb", C_EXTENSION},
|
||||
{"module." SOABI ".so", "rb", C_EXTENSION},
|
||||
{".abi" PYTHON_ABI_STRING ".so", "rb", C_EXTENSION},
|
||||
{"module.abi" PYTHON_ABI_STRING ".so", "rb", C_EXTENSION},
|
||||
{".so", "rb", C_EXTENSION},
|
||||
{"module.so", "rb", C_EXTENSION},
|
||||
#endif /* __VMS */
|
||||
|
|
|
@ -134,6 +134,15 @@ static char *GetPythonImport (HINSTANCE hModule)
|
|||
!strncmp(import_name,"python",6)) {
|
||||
char *pch;
|
||||
|
||||
#ifndef _DEBUG
|
||||
/* In a release version, don't claim that python3.dll is
|
||||
a Python DLL. */
|
||||
if (strcmp(import_name, "python3.dll") == 0) {
|
||||
import_data += 20;
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Ensure python prefix is followed only
|
||||
by numbers to the end of the basename */
|
||||
pch = import_name + 6;
|
||||
|
@ -162,13 +171,16 @@ static char *GetPythonImport (HINSTANCE hModule)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
|
||||
const char *pathname, FILE *fp)
|
||||
{
|
||||
dl_funcptr p;
|
||||
char funcname[258], *import_python;
|
||||
|
||||
#ifndef _DEBUG
|
||||
_Py_CheckPython3();
|
||||
#endif
|
||||
|
||||
PyOS_snprintf(funcname, sizeof(funcname), "PyInit_%.200s", shortname);
|
||||
|
||||
{
|
||||
|
|
|
@ -806,7 +806,7 @@ PyImport_ExecCodeModuleWithPathnames(char *name, PyObject *co, char *pathname,
|
|||
PyErr_Clear(); /* Not important enough to report */
|
||||
Py_DECREF(v);
|
||||
|
||||
v = PyEval_EvalCode((PyCodeObject *)co, d, d);
|
||||
v = PyEval_EvalCode(co, d, d);
|
||||
if (v == NULL)
|
||||
goto error;
|
||||
Py_DECREF(v);
|
||||
|
|
|
@ -1755,7 +1755,7 @@ run_mod(mod_ty mod, const char *filename, PyObject *globals, PyObject *locals,
|
|||
co = PyAST_Compile(mod, filename, flags, arena);
|
||||
if (co == NULL)
|
||||
return NULL;
|
||||
v = PyEval_EvalCode(co, globals, locals);
|
||||
v = PyEval_EvalCode((PyObject*)co, globals, locals);
|
||||
Py_DECREF(co);
|
||||
return v;
|
||||
}
|
||||
|
@ -1785,7 +1785,7 @@ run_pyc_file(FILE *fp, const char *filename, PyObject *globals,
|
|||
return NULL;
|
||||
}
|
||||
co = (PyCodeObject *)v;
|
||||
v = PyEval_EvalCode(co, globals, locals);
|
||||
v = PyEval_EvalCode((PyObject*)co, globals, locals);
|
||||
if (v && flags)
|
||||
flags->cf_flags |= (co->co_flags & PyCF_MASK);
|
||||
Py_DECREF(co);
|
||||
|
@ -1817,6 +1817,14 @@ Py_CompileStringFlags(const char *str, const char *filename, int start,
|
|||
return (PyObject *)co;
|
||||
}
|
||||
|
||||
/* For use in Py_LIMITED_API */
|
||||
#undef Py_CompileString
|
||||
PyObject *
|
||||
PyCompileString(const char *str, const char *filename, int start)
|
||||
{
|
||||
return Py_CompileStringFlags(str, filename, start, NULL);
|
||||
}
|
||||
|
||||
struct symtable *
|
||||
Py_SymtableString(const char *str, const char *filename, int start)
|
||||
{
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue