Zapis ruchow do pliku
This commit is contained in:
parent
28d38d7589
commit
2473104b65
@ -8,6 +8,7 @@ from Traversal.DFS import DFS
|
|||||||
from Traversal.BestFS import BestFS
|
from Traversal.BestFS import BestFS
|
||||||
from Traversal.BFS import BFS
|
from Traversal.BFS import BFS
|
||||||
import pygame
|
import pygame
|
||||||
|
|
||||||
class GC(Cell):
|
class GC(Cell):
|
||||||
moves_made = 0
|
moves_made = 0
|
||||||
def __init__(self, x, y, max_rubbish, yellow=0, green=0, blue=0):
|
def __init__(self, x, y, max_rubbish, yellow=0, green=0, blue=0):
|
||||||
@ -103,6 +104,7 @@ class GC(Cell):
|
|||||||
[x,y],result,dump_list = output[0], output[1], output[2]
|
[x,y],result,dump_list = output[0], output[1], output[2]
|
||||||
self.moves.extend(result[1:])
|
self.moves.extend(result[1:])
|
||||||
self.moves.reverse()
|
self.moves.reverse()
|
||||||
|
save_moveset(self.moves)
|
||||||
|
|
||||||
|
|
||||||
def make_actions_from_list(self,environment):
|
def make_actions_from_list(self,environment):
|
||||||
|
637
WENV/Include/Python-ast.h
Normal file
637
WENV/Include/Python-ast.h
Normal file
@ -0,0 +1,637 @@
|
|||||||
|
/* File automatically generated by Parser/asdl_c.py. */
|
||||||
|
|
||||||
|
#include "asdl.h"
|
||||||
|
|
||||||
|
typedef struct _mod *mod_ty;
|
||||||
|
|
||||||
|
typedef struct _stmt *stmt_ty;
|
||||||
|
|
||||||
|
typedef struct _expr *expr_ty;
|
||||||
|
|
||||||
|
typedef enum _expr_context { Load=1, Store=2, Del=3, AugLoad=4, AugStore=5,
|
||||||
|
Param=6 } expr_context_ty;
|
||||||
|
|
||||||
|
typedef struct _slice *slice_ty;
|
||||||
|
|
||||||
|
typedef enum _boolop { And=1, Or=2 } boolop_ty;
|
||||||
|
|
||||||
|
typedef enum _operator { Add=1, Sub=2, Mult=3, MatMult=4, Div=5, Mod=6, Pow=7,
|
||||||
|
LShift=8, RShift=9, BitOr=10, BitXor=11, BitAnd=12,
|
||||||
|
FloorDiv=13 } operator_ty;
|
||||||
|
|
||||||
|
typedef enum _unaryop { Invert=1, Not=2, UAdd=3, USub=4 } unaryop_ty;
|
||||||
|
|
||||||
|
typedef enum _cmpop { Eq=1, NotEq=2, Lt=3, LtE=4, Gt=5, GtE=6, Is=7, IsNot=8,
|
||||||
|
In=9, NotIn=10 } cmpop_ty;
|
||||||
|
|
||||||
|
typedef struct _comprehension *comprehension_ty;
|
||||||
|
|
||||||
|
typedef struct _excepthandler *excepthandler_ty;
|
||||||
|
|
||||||
|
typedef struct _arguments *arguments_ty;
|
||||||
|
|
||||||
|
typedef struct _arg *arg_ty;
|
||||||
|
|
||||||
|
typedef struct _keyword *keyword_ty;
|
||||||
|
|
||||||
|
typedef struct _alias *alias_ty;
|
||||||
|
|
||||||
|
typedef struct _withitem *withitem_ty;
|
||||||
|
|
||||||
|
|
||||||
|
enum _mod_kind {Module_kind=1, Interactive_kind=2, Expression_kind=3,
|
||||||
|
Suite_kind=4};
|
||||||
|
struct _mod {
|
||||||
|
enum _mod_kind kind;
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
asdl_seq *body;
|
||||||
|
} Module;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
asdl_seq *body;
|
||||||
|
} Interactive;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty body;
|
||||||
|
} Expression;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
asdl_seq *body;
|
||||||
|
} Suite;
|
||||||
|
|
||||||
|
} v;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum _stmt_kind {FunctionDef_kind=1, AsyncFunctionDef_kind=2, ClassDef_kind=3,
|
||||||
|
Return_kind=4, Delete_kind=5, Assign_kind=6,
|
||||||
|
AugAssign_kind=7, AnnAssign_kind=8, For_kind=9,
|
||||||
|
AsyncFor_kind=10, While_kind=11, If_kind=12, With_kind=13,
|
||||||
|
AsyncWith_kind=14, Raise_kind=15, Try_kind=16,
|
||||||
|
Assert_kind=17, Import_kind=18, ImportFrom_kind=19,
|
||||||
|
Global_kind=20, Nonlocal_kind=21, Expr_kind=22, Pass_kind=23,
|
||||||
|
Break_kind=24, Continue_kind=25};
|
||||||
|
struct _stmt {
|
||||||
|
enum _stmt_kind kind;
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
identifier name;
|
||||||
|
arguments_ty args;
|
||||||
|
asdl_seq *body;
|
||||||
|
asdl_seq *decorator_list;
|
||||||
|
expr_ty returns;
|
||||||
|
} FunctionDef;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
identifier name;
|
||||||
|
arguments_ty args;
|
||||||
|
asdl_seq *body;
|
||||||
|
asdl_seq *decorator_list;
|
||||||
|
expr_ty returns;
|
||||||
|
} AsyncFunctionDef;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
identifier name;
|
||||||
|
asdl_seq *bases;
|
||||||
|
asdl_seq *keywords;
|
||||||
|
asdl_seq *body;
|
||||||
|
asdl_seq *decorator_list;
|
||||||
|
} ClassDef;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty value;
|
||||||
|
} Return;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
asdl_seq *targets;
|
||||||
|
} Delete;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
asdl_seq *targets;
|
||||||
|
expr_ty value;
|
||||||
|
} Assign;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty target;
|
||||||
|
operator_ty op;
|
||||||
|
expr_ty value;
|
||||||
|
} AugAssign;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty target;
|
||||||
|
expr_ty annotation;
|
||||||
|
expr_ty value;
|
||||||
|
int simple;
|
||||||
|
} AnnAssign;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty target;
|
||||||
|
expr_ty iter;
|
||||||
|
asdl_seq *body;
|
||||||
|
asdl_seq *orelse;
|
||||||
|
} For;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty target;
|
||||||
|
expr_ty iter;
|
||||||
|
asdl_seq *body;
|
||||||
|
asdl_seq *orelse;
|
||||||
|
} AsyncFor;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty test;
|
||||||
|
asdl_seq *body;
|
||||||
|
asdl_seq *orelse;
|
||||||
|
} While;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty test;
|
||||||
|
asdl_seq *body;
|
||||||
|
asdl_seq *orelse;
|
||||||
|
} If;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
asdl_seq *items;
|
||||||
|
asdl_seq *body;
|
||||||
|
} With;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
asdl_seq *items;
|
||||||
|
asdl_seq *body;
|
||||||
|
} AsyncWith;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty exc;
|
||||||
|
expr_ty cause;
|
||||||
|
} Raise;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
asdl_seq *body;
|
||||||
|
asdl_seq *handlers;
|
||||||
|
asdl_seq *orelse;
|
||||||
|
asdl_seq *finalbody;
|
||||||
|
} Try;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty test;
|
||||||
|
expr_ty msg;
|
||||||
|
} Assert;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
asdl_seq *names;
|
||||||
|
} Import;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
identifier module;
|
||||||
|
asdl_seq *names;
|
||||||
|
int level;
|
||||||
|
} ImportFrom;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
asdl_seq *names;
|
||||||
|
} Global;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
asdl_seq *names;
|
||||||
|
} Nonlocal;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty value;
|
||||||
|
} Expr;
|
||||||
|
|
||||||
|
} v;
|
||||||
|
int lineno;
|
||||||
|
int col_offset;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum _expr_kind {BoolOp_kind=1, BinOp_kind=2, UnaryOp_kind=3, Lambda_kind=4,
|
||||||
|
IfExp_kind=5, Dict_kind=6, Set_kind=7, ListComp_kind=8,
|
||||||
|
SetComp_kind=9, DictComp_kind=10, GeneratorExp_kind=11,
|
||||||
|
Await_kind=12, Yield_kind=13, YieldFrom_kind=14,
|
||||||
|
Compare_kind=15, Call_kind=16, Num_kind=17, Str_kind=18,
|
||||||
|
FormattedValue_kind=19, JoinedStr_kind=20, Bytes_kind=21,
|
||||||
|
NameConstant_kind=22, Ellipsis_kind=23, Constant_kind=24,
|
||||||
|
Attribute_kind=25, Subscript_kind=26, Starred_kind=27,
|
||||||
|
Name_kind=28, List_kind=29, Tuple_kind=30};
|
||||||
|
struct _expr {
|
||||||
|
enum _expr_kind kind;
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
boolop_ty op;
|
||||||
|
asdl_seq *values;
|
||||||
|
} BoolOp;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty left;
|
||||||
|
operator_ty op;
|
||||||
|
expr_ty right;
|
||||||
|
} BinOp;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
unaryop_ty op;
|
||||||
|
expr_ty operand;
|
||||||
|
} UnaryOp;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
arguments_ty args;
|
||||||
|
expr_ty body;
|
||||||
|
} Lambda;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty test;
|
||||||
|
expr_ty body;
|
||||||
|
expr_ty orelse;
|
||||||
|
} IfExp;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
asdl_seq *keys;
|
||||||
|
asdl_seq *values;
|
||||||
|
} Dict;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
asdl_seq *elts;
|
||||||
|
} Set;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty elt;
|
||||||
|
asdl_seq *generators;
|
||||||
|
} ListComp;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty elt;
|
||||||
|
asdl_seq *generators;
|
||||||
|
} SetComp;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty key;
|
||||||
|
expr_ty value;
|
||||||
|
asdl_seq *generators;
|
||||||
|
} DictComp;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty elt;
|
||||||
|
asdl_seq *generators;
|
||||||
|
} GeneratorExp;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty value;
|
||||||
|
} Await;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty value;
|
||||||
|
} Yield;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty value;
|
||||||
|
} YieldFrom;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty left;
|
||||||
|
asdl_int_seq *ops;
|
||||||
|
asdl_seq *comparators;
|
||||||
|
} Compare;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty func;
|
||||||
|
asdl_seq *args;
|
||||||
|
asdl_seq *keywords;
|
||||||
|
} Call;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
object n;
|
||||||
|
} Num;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
string s;
|
||||||
|
} Str;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty value;
|
||||||
|
int conversion;
|
||||||
|
expr_ty format_spec;
|
||||||
|
} FormattedValue;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
asdl_seq *values;
|
||||||
|
} JoinedStr;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
bytes s;
|
||||||
|
} Bytes;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
singleton value;
|
||||||
|
} NameConstant;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
constant value;
|
||||||
|
} Constant;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty value;
|
||||||
|
identifier attr;
|
||||||
|
expr_context_ty ctx;
|
||||||
|
} Attribute;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty value;
|
||||||
|
slice_ty slice;
|
||||||
|
expr_context_ty ctx;
|
||||||
|
} Subscript;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty value;
|
||||||
|
expr_context_ty ctx;
|
||||||
|
} Starred;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
identifier id;
|
||||||
|
expr_context_ty ctx;
|
||||||
|
} Name;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
asdl_seq *elts;
|
||||||
|
expr_context_ty ctx;
|
||||||
|
} List;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
asdl_seq *elts;
|
||||||
|
expr_context_ty ctx;
|
||||||
|
} Tuple;
|
||||||
|
|
||||||
|
} v;
|
||||||
|
int lineno;
|
||||||
|
int col_offset;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum _slice_kind {Slice_kind=1, ExtSlice_kind=2, Index_kind=3};
|
||||||
|
struct _slice {
|
||||||
|
enum _slice_kind kind;
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
expr_ty lower;
|
||||||
|
expr_ty upper;
|
||||||
|
expr_ty step;
|
||||||
|
} Slice;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
asdl_seq *dims;
|
||||||
|
} ExtSlice;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
expr_ty value;
|
||||||
|
} Index;
|
||||||
|
|
||||||
|
} v;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _comprehension {
|
||||||
|
expr_ty target;
|
||||||
|
expr_ty iter;
|
||||||
|
asdl_seq *ifs;
|
||||||
|
int is_async;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum _excepthandler_kind {ExceptHandler_kind=1};
|
||||||
|
struct _excepthandler {
|
||||||
|
enum _excepthandler_kind kind;
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
expr_ty type;
|
||||||
|
identifier name;
|
||||||
|
asdl_seq *body;
|
||||||
|
} ExceptHandler;
|
||||||
|
|
||||||
|
} v;
|
||||||
|
int lineno;
|
||||||
|
int col_offset;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _arguments {
|
||||||
|
asdl_seq *args;
|
||||||
|
arg_ty vararg;
|
||||||
|
asdl_seq *kwonlyargs;
|
||||||
|
asdl_seq *kw_defaults;
|
||||||
|
arg_ty kwarg;
|
||||||
|
asdl_seq *defaults;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _arg {
|
||||||
|
identifier arg;
|
||||||
|
expr_ty annotation;
|
||||||
|
int lineno;
|
||||||
|
int col_offset;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _keyword {
|
||||||
|
identifier arg;
|
||||||
|
expr_ty value;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _alias {
|
||||||
|
identifier name;
|
||||||
|
identifier asname;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _withitem {
|
||||||
|
expr_ty context_expr;
|
||||||
|
expr_ty optional_vars;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#define Module(a0, a1) _Py_Module(a0, a1)
|
||||||
|
mod_ty _Py_Module(asdl_seq * body, PyArena *arena);
|
||||||
|
#define Interactive(a0, a1) _Py_Interactive(a0, a1)
|
||||||
|
mod_ty _Py_Interactive(asdl_seq * body, PyArena *arena);
|
||||||
|
#define Expression(a0, a1) _Py_Expression(a0, a1)
|
||||||
|
mod_ty _Py_Expression(expr_ty body, PyArena *arena);
|
||||||
|
#define Suite(a0, a1) _Py_Suite(a0, a1)
|
||||||
|
mod_ty _Py_Suite(asdl_seq * body, PyArena *arena);
|
||||||
|
#define FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7) _Py_FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7)
|
||||||
|
stmt_ty _Py_FunctionDef(identifier name, arguments_ty args, asdl_seq * body,
|
||||||
|
asdl_seq * decorator_list, expr_ty returns, int lineno,
|
||||||
|
int col_offset, PyArena *arena);
|
||||||
|
#define AsyncFunctionDef(a0, a1, a2, a3, a4, a5, a6, a7) _Py_AsyncFunctionDef(a0, a1, a2, a3, a4, a5, a6, a7)
|
||||||
|
stmt_ty _Py_AsyncFunctionDef(identifier name, arguments_ty args, asdl_seq *
|
||||||
|
body, asdl_seq * decorator_list, expr_ty returns,
|
||||||
|
int lineno, int col_offset, PyArena *arena);
|
||||||
|
#define ClassDef(a0, a1, a2, a3, a4, a5, a6, a7) _Py_ClassDef(a0, a1, a2, a3, a4, a5, a6, a7)
|
||||||
|
stmt_ty _Py_ClassDef(identifier name, asdl_seq * bases, asdl_seq * keywords,
|
||||||
|
asdl_seq * body, asdl_seq * decorator_list, int lineno,
|
||||||
|
int col_offset, PyArena *arena);
|
||||||
|
#define Return(a0, a1, a2, a3) _Py_Return(a0, a1, a2, a3)
|
||||||
|
stmt_ty _Py_Return(expr_ty value, int lineno, int col_offset, PyArena *arena);
|
||||||
|
#define Delete(a0, a1, a2, a3) _Py_Delete(a0, a1, a2, a3)
|
||||||
|
stmt_ty _Py_Delete(asdl_seq * targets, int lineno, int col_offset, PyArena
|
||||||
|
*arena);
|
||||||
|
#define Assign(a0, a1, a2, a3, a4) _Py_Assign(a0, a1, a2, a3, a4)
|
||||||
|
stmt_ty _Py_Assign(asdl_seq * targets, expr_ty value, int lineno, int
|
||||||
|
col_offset, PyArena *arena);
|
||||||
|
#define AugAssign(a0, a1, a2, a3, a4, a5) _Py_AugAssign(a0, a1, a2, a3, a4, a5)
|
||||||
|
stmt_ty _Py_AugAssign(expr_ty target, operator_ty op, expr_ty value, int
|
||||||
|
lineno, int col_offset, PyArena *arena);
|
||||||
|
#define AnnAssign(a0, a1, a2, a3, a4, a5, a6) _Py_AnnAssign(a0, a1, a2, a3, a4, a5, a6)
|
||||||
|
stmt_ty _Py_AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int
|
||||||
|
simple, int lineno, int col_offset, PyArena *arena);
|
||||||
|
#define For(a0, a1, a2, a3, a4, a5, a6) _Py_For(a0, a1, a2, a3, a4, a5, a6)
|
||||||
|
stmt_ty _Py_For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq *
|
||||||
|
orelse, int lineno, int col_offset, PyArena *arena);
|
||||||
|
#define AsyncFor(a0, a1, a2, a3, a4, a5, a6) _Py_AsyncFor(a0, a1, a2, a3, a4, a5, a6)
|
||||||
|
stmt_ty _Py_AsyncFor(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq *
|
||||||
|
orelse, int lineno, int col_offset, PyArena *arena);
|
||||||
|
#define While(a0, a1, a2, a3, a4, a5) _Py_While(a0, a1, a2, a3, a4, a5)
|
||||||
|
stmt_ty _Py_While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno,
|
||||||
|
int col_offset, PyArena *arena);
|
||||||
|
#define If(a0, a1, a2, a3, a4, a5) _Py_If(a0, a1, a2, a3, a4, a5)
|
||||||
|
stmt_ty _Py_If(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno,
|
||||||
|
int col_offset, PyArena *arena);
|
||||||
|
#define With(a0, a1, a2, a3, a4) _Py_With(a0, a1, a2, a3, a4)
|
||||||
|
stmt_ty _Py_With(asdl_seq * items, asdl_seq * body, int lineno, int col_offset,
|
||||||
|
PyArena *arena);
|
||||||
|
#define AsyncWith(a0, a1, a2, a3, a4) _Py_AsyncWith(a0, a1, a2, a3, a4)
|
||||||
|
stmt_ty _Py_AsyncWith(asdl_seq * items, asdl_seq * body, int lineno, int
|
||||||
|
col_offset, PyArena *arena);
|
||||||
|
#define Raise(a0, a1, a2, a3, a4) _Py_Raise(a0, a1, a2, a3, a4)
|
||||||
|
stmt_ty _Py_Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset,
|
||||||
|
PyArena *arena);
|
||||||
|
#define Try(a0, a1, a2, a3, a4, a5, a6) _Py_Try(a0, a1, a2, a3, a4, a5, a6)
|
||||||
|
stmt_ty _Py_Try(asdl_seq * body, asdl_seq * handlers, asdl_seq * orelse,
|
||||||
|
asdl_seq * finalbody, int lineno, int col_offset, PyArena
|
||||||
|
*arena);
|
||||||
|
#define Assert(a0, a1, a2, a3, a4) _Py_Assert(a0, a1, a2, a3, a4)
|
||||||
|
stmt_ty _Py_Assert(expr_ty test, expr_ty msg, int lineno, int col_offset,
|
||||||
|
PyArena *arena);
|
||||||
|
#define Import(a0, a1, a2, a3) _Py_Import(a0, a1, a2, a3)
|
||||||
|
stmt_ty _Py_Import(asdl_seq * names, int lineno, int col_offset, PyArena
|
||||||
|
*arena);
|
||||||
|
#define ImportFrom(a0, a1, a2, a3, a4, a5) _Py_ImportFrom(a0, a1, a2, a3, a4, a5)
|
||||||
|
stmt_ty _Py_ImportFrom(identifier module, asdl_seq * names, int level, int
|
||||||
|
lineno, int col_offset, PyArena *arena);
|
||||||
|
#define Global(a0, a1, a2, a3) _Py_Global(a0, a1, a2, a3)
|
||||||
|
stmt_ty _Py_Global(asdl_seq * names, int lineno, int col_offset, PyArena
|
||||||
|
*arena);
|
||||||
|
#define Nonlocal(a0, a1, a2, a3) _Py_Nonlocal(a0, a1, a2, a3)
|
||||||
|
stmt_ty _Py_Nonlocal(asdl_seq * names, int lineno, int col_offset, PyArena
|
||||||
|
*arena);
|
||||||
|
#define Expr(a0, a1, a2, a3) _Py_Expr(a0, a1, a2, a3)
|
||||||
|
stmt_ty _Py_Expr(expr_ty value, int lineno, int col_offset, PyArena *arena);
|
||||||
|
#define Pass(a0, a1, a2) _Py_Pass(a0, a1, a2)
|
||||||
|
stmt_ty _Py_Pass(int lineno, int col_offset, PyArena *arena);
|
||||||
|
#define Break(a0, a1, a2) _Py_Break(a0, a1, a2)
|
||||||
|
stmt_ty _Py_Break(int lineno, int col_offset, PyArena *arena);
|
||||||
|
#define Continue(a0, a1, a2) _Py_Continue(a0, a1, a2)
|
||||||
|
stmt_ty _Py_Continue(int lineno, int col_offset, PyArena *arena);
|
||||||
|
#define BoolOp(a0, a1, a2, a3, a4) _Py_BoolOp(a0, a1, a2, a3, a4)
|
||||||
|
expr_ty _Py_BoolOp(boolop_ty op, asdl_seq * values, int lineno, int col_offset,
|
||||||
|
PyArena *arena);
|
||||||
|
#define BinOp(a0, a1, a2, a3, a4, a5) _Py_BinOp(a0, a1, a2, a3, a4, a5)
|
||||||
|
expr_ty _Py_BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int
|
||||||
|
col_offset, PyArena *arena);
|
||||||
|
#define UnaryOp(a0, a1, a2, a3, a4) _Py_UnaryOp(a0, a1, a2, a3, a4)
|
||||||
|
expr_ty _Py_UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset,
|
||||||
|
PyArena *arena);
|
||||||
|
#define Lambda(a0, a1, a2, a3, a4) _Py_Lambda(a0, a1, a2, a3, a4)
|
||||||
|
expr_ty _Py_Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset,
|
||||||
|
PyArena *arena);
|
||||||
|
#define IfExp(a0, a1, a2, a3, a4, a5) _Py_IfExp(a0, a1, a2, a3, a4, a5)
|
||||||
|
expr_ty _Py_IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int
|
||||||
|
col_offset, PyArena *arena);
|
||||||
|
#define Dict(a0, a1, a2, a3, a4) _Py_Dict(a0, a1, a2, a3, a4)
|
||||||
|
expr_ty _Py_Dict(asdl_seq * keys, asdl_seq * values, int lineno, int
|
||||||
|
col_offset, PyArena *arena);
|
||||||
|
#define Set(a0, a1, a2, a3) _Py_Set(a0, a1, a2, a3)
|
||||||
|
expr_ty _Py_Set(asdl_seq * elts, int lineno, int col_offset, PyArena *arena);
|
||||||
|
#define ListComp(a0, a1, a2, a3, a4) _Py_ListComp(a0, a1, a2, a3, a4)
|
||||||
|
expr_ty _Py_ListComp(expr_ty elt, asdl_seq * generators, int lineno, int
|
||||||
|
col_offset, PyArena *arena);
|
||||||
|
#define SetComp(a0, a1, a2, a3, a4) _Py_SetComp(a0, a1, a2, a3, a4)
|
||||||
|
expr_ty _Py_SetComp(expr_ty elt, asdl_seq * generators, int lineno, int
|
||||||
|
col_offset, PyArena *arena);
|
||||||
|
#define DictComp(a0, a1, a2, a3, a4, a5) _Py_DictComp(a0, a1, a2, a3, a4, a5)
|
||||||
|
expr_ty _Py_DictComp(expr_ty key, expr_ty value, asdl_seq * generators, int
|
||||||
|
lineno, int col_offset, PyArena *arena);
|
||||||
|
#define GeneratorExp(a0, a1, a2, a3, a4) _Py_GeneratorExp(a0, a1, a2, a3, a4)
|
||||||
|
expr_ty _Py_GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno, int
|
||||||
|
col_offset, PyArena *arena);
|
||||||
|
#define Await(a0, a1, a2, a3) _Py_Await(a0, a1, a2, a3)
|
||||||
|
expr_ty _Py_Await(expr_ty value, int lineno, int col_offset, PyArena *arena);
|
||||||
|
#define Yield(a0, a1, a2, a3) _Py_Yield(a0, a1, a2, a3)
|
||||||
|
expr_ty _Py_Yield(expr_ty value, int lineno, int col_offset, PyArena *arena);
|
||||||
|
#define YieldFrom(a0, a1, a2, a3) _Py_YieldFrom(a0, a1, a2, a3)
|
||||||
|
expr_ty _Py_YieldFrom(expr_ty value, int lineno, int col_offset, PyArena
|
||||||
|
*arena);
|
||||||
|
#define Compare(a0, a1, a2, a3, a4, a5) _Py_Compare(a0, a1, a2, a3, a4, a5)
|
||||||
|
expr_ty _Py_Compare(expr_ty left, asdl_int_seq * ops, asdl_seq * comparators,
|
||||||
|
int lineno, int col_offset, PyArena *arena);
|
||||||
|
#define Call(a0, a1, a2, a3, a4, a5) _Py_Call(a0, a1, a2, a3, a4, a5)
|
||||||
|
expr_ty _Py_Call(expr_ty func, asdl_seq * args, asdl_seq * keywords, int
|
||||||
|
lineno, int col_offset, PyArena *arena);
|
||||||
|
#define Num(a0, a1, a2, a3) _Py_Num(a0, a1, a2, a3)
|
||||||
|
expr_ty _Py_Num(object n, int lineno, int col_offset, PyArena *arena);
|
||||||
|
#define Str(a0, a1, a2, a3) _Py_Str(a0, a1, a2, a3)
|
||||||
|
expr_ty _Py_Str(string s, int lineno, int col_offset, PyArena *arena);
|
||||||
|
#define FormattedValue(a0, a1, a2, a3, a4, a5) _Py_FormattedValue(a0, a1, a2, a3, a4, a5)
|
||||||
|
expr_ty _Py_FormattedValue(expr_ty value, int conversion, expr_ty format_spec,
|
||||||
|
int lineno, int col_offset, PyArena *arena);
|
||||||
|
#define JoinedStr(a0, a1, a2, a3) _Py_JoinedStr(a0, a1, a2, a3)
|
||||||
|
expr_ty _Py_JoinedStr(asdl_seq * values, int lineno, int col_offset, PyArena
|
||||||
|
*arena);
|
||||||
|
#define Bytes(a0, a1, a2, a3) _Py_Bytes(a0, a1, a2, a3)
|
||||||
|
expr_ty _Py_Bytes(bytes s, int lineno, int col_offset, PyArena *arena);
|
||||||
|
#define NameConstant(a0, a1, a2, a3) _Py_NameConstant(a0, a1, a2, a3)
|
||||||
|
expr_ty _Py_NameConstant(singleton value, int lineno, int col_offset, PyArena
|
||||||
|
*arena);
|
||||||
|
#define Ellipsis(a0, a1, a2) _Py_Ellipsis(a0, a1, a2)
|
||||||
|
expr_ty _Py_Ellipsis(int lineno, int col_offset, PyArena *arena);
|
||||||
|
#define Constant(a0, a1, a2, a3) _Py_Constant(a0, a1, a2, a3)
|
||||||
|
expr_ty _Py_Constant(constant value, int lineno, int col_offset, PyArena
|
||||||
|
*arena);
|
||||||
|
#define Attribute(a0, a1, a2, a3, a4, a5) _Py_Attribute(a0, a1, a2, a3, a4, a5)
|
||||||
|
expr_ty _Py_Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int
|
||||||
|
lineno, int col_offset, PyArena *arena);
|
||||||
|
#define Subscript(a0, a1, a2, a3, a4, a5) _Py_Subscript(a0, a1, a2, a3, a4, a5)
|
||||||
|
expr_ty _Py_Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int
|
||||||
|
lineno, int col_offset, PyArena *arena);
|
||||||
|
#define Starred(a0, a1, a2, a3, a4) _Py_Starred(a0, a1, a2, a3, a4)
|
||||||
|
expr_ty _Py_Starred(expr_ty value, expr_context_ty ctx, int lineno, int
|
||||||
|
col_offset, PyArena *arena);
|
||||||
|
#define Name(a0, a1, a2, a3, a4) _Py_Name(a0, a1, a2, a3, a4)
|
||||||
|
expr_ty _Py_Name(identifier id, expr_context_ty ctx, int lineno, int
|
||||||
|
col_offset, PyArena *arena);
|
||||||
|
#define List(a0, a1, a2, a3, a4) _Py_List(a0, a1, a2, a3, a4)
|
||||||
|
expr_ty _Py_List(asdl_seq * elts, expr_context_ty ctx, int lineno, int
|
||||||
|
col_offset, PyArena *arena);
|
||||||
|
#define Tuple(a0, a1, a2, a3, a4) _Py_Tuple(a0, a1, a2, a3, a4)
|
||||||
|
expr_ty _Py_Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, int
|
||||||
|
col_offset, PyArena *arena);
|
||||||
|
#define Slice(a0, a1, a2, a3) _Py_Slice(a0, a1, a2, a3)
|
||||||
|
slice_ty _Py_Slice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena);
|
||||||
|
#define ExtSlice(a0, a1) _Py_ExtSlice(a0, a1)
|
||||||
|
slice_ty _Py_ExtSlice(asdl_seq * dims, PyArena *arena);
|
||||||
|
#define Index(a0, a1) _Py_Index(a0, a1)
|
||||||
|
slice_ty _Py_Index(expr_ty value, PyArena *arena);
|
||||||
|
#define comprehension(a0, a1, a2, a3, a4) _Py_comprehension(a0, a1, a2, a3, a4)
|
||||||
|
comprehension_ty _Py_comprehension(expr_ty target, expr_ty iter, asdl_seq *
|
||||||
|
ifs, int is_async, PyArena *arena);
|
||||||
|
#define ExceptHandler(a0, a1, a2, a3, a4, a5) _Py_ExceptHandler(a0, a1, a2, a3, a4, a5)
|
||||||
|
excepthandler_ty _Py_ExceptHandler(expr_ty type, identifier name, asdl_seq *
|
||||||
|
body, int lineno, int col_offset, PyArena
|
||||||
|
*arena);
|
||||||
|
#define arguments(a0, a1, a2, a3, a4, a5, a6) _Py_arguments(a0, a1, a2, a3, a4, a5, a6)
|
||||||
|
arguments_ty _Py_arguments(asdl_seq * args, arg_ty vararg, asdl_seq *
|
||||||
|
kwonlyargs, asdl_seq * kw_defaults, arg_ty kwarg,
|
||||||
|
asdl_seq * defaults, PyArena *arena);
|
||||||
|
#define arg(a0, a1, a2, a3, a4) _Py_arg(a0, a1, a2, a3, a4)
|
||||||
|
arg_ty _Py_arg(identifier arg, expr_ty annotation, int lineno, int col_offset,
|
||||||
|
PyArena *arena);
|
||||||
|
#define keyword(a0, a1, a2) _Py_keyword(a0, a1, a2)
|
||||||
|
keyword_ty _Py_keyword(identifier arg, expr_ty value, PyArena *arena);
|
||||||
|
#define alias(a0, a1, a2) _Py_alias(a0, a1, a2)
|
||||||
|
alias_ty _Py_alias(identifier name, identifier asname, PyArena *arena);
|
||||||
|
#define withitem(a0, a1, a2) _Py_withitem(a0, a1, a2)
|
||||||
|
withitem_ty _Py_withitem(expr_ty context_expr, expr_ty optional_vars, PyArena
|
||||||
|
*arena);
|
||||||
|
|
||||||
|
PyObject* PyAST_mod2obj(mod_ty t);
|
||||||
|
mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode);
|
||||||
|
int PyAST_Check(PyObject* obj);
|
149
WENV/Include/Python.h
Normal file
149
WENV/Include/Python.h
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
#ifndef Py_PYTHON_H
|
||||||
|
#define Py_PYTHON_H
|
||||||
|
/* Since this is a "meta-include" file, no #ifdef __cplusplus / extern "C" { */
|
||||||
|
|
||||||
|
/* Include nearly all Python header files */
|
||||||
|
|
||||||
|
#include "patchlevel.h"
|
||||||
|
#include "pyconfig.h"
|
||||||
|
#include "pymacconfig.h"
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
#ifndef UCHAR_MAX
|
||||||
|
#error "Something's broken. UCHAR_MAX should be defined in limits.h."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if UCHAR_MAX != 255
|
||||||
|
#error "Python's source code assumes C's unsigned char is an 8-bit type."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__sgi) && !defined(_SGI_MP_SOURCE)
|
||||||
|
#define _SGI_MP_SOURCE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#ifndef NULL
|
||||||
|
# error "Python.h requires that stdio.h define NULL."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#ifdef HAVE_ERRNO_H
|
||||||
|
#include <errno.h>
|
||||||
|
#endif
|
||||||
|
#include <stdlib.h>
|
||||||
|
#ifdef HAVE_UNISTD_H
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_CRYPT_H
|
||||||
|
#include <crypt.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* For size_t? */
|
||||||
|
#ifdef HAVE_STDDEF_H
|
||||||
|
#include <stddef.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* CAUTION: Build setups should ensure that NDEBUG is defined on the
|
||||||
|
* compiler command line when building Python in release mode; else
|
||||||
|
* assert() calls won't be removed.
|
||||||
|
*/
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
#include "pyport.h"
|
||||||
|
#include "pymacro.h"
|
||||||
|
|
||||||
|
/* A convenient way for code to know if clang's memory sanitizer is enabled. */
|
||||||
|
#if defined(__has_feature)
|
||||||
|
# if __has_feature(memory_sanitizer)
|
||||||
|
# if !defined(_Py_MEMORY_SANITIZER)
|
||||||
|
# define _Py_MEMORY_SANITIZER
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "pyatomic.h"
|
||||||
|
|
||||||
|
/* Debug-mode build with pymalloc implies PYMALLOC_DEBUG.
|
||||||
|
* PYMALLOC_DEBUG is in error if pymalloc is not in use.
|
||||||
|
*/
|
||||||
|
#if defined(Py_DEBUG) && defined(WITH_PYMALLOC) && !defined(PYMALLOC_DEBUG)
|
||||||
|
#define PYMALLOC_DEBUG
|
||||||
|
#endif
|
||||||
|
#if defined(PYMALLOC_DEBUG) && !defined(WITH_PYMALLOC)
|
||||||
|
#error "PYMALLOC_DEBUG requires WITH_PYMALLOC"
|
||||||
|
#endif
|
||||||
|
#include "pymath.h"
|
||||||
|
#include "pytime.h"
|
||||||
|
#include "pymem.h"
|
||||||
|
|
||||||
|
#include "object.h"
|
||||||
|
#include "objimpl.h"
|
||||||
|
#include "typeslots.h"
|
||||||
|
#include "pyhash.h"
|
||||||
|
|
||||||
|
#include "pydebug.h"
|
||||||
|
|
||||||
|
#include "bytearrayobject.h"
|
||||||
|
#include "bytesobject.h"
|
||||||
|
#include "unicodeobject.h"
|
||||||
|
#include "longobject.h"
|
||||||
|
#include "longintrepr.h"
|
||||||
|
#include "boolobject.h"
|
||||||
|
#include "floatobject.h"
|
||||||
|
#include "complexobject.h"
|
||||||
|
#include "rangeobject.h"
|
||||||
|
#include "memoryobject.h"
|
||||||
|
#include "tupleobject.h"
|
||||||
|
#include "listobject.h"
|
||||||
|
#include "dictobject.h"
|
||||||
|
#include "odictobject.h"
|
||||||
|
#include "enumobject.h"
|
||||||
|
#include "setobject.h"
|
||||||
|
#include "methodobject.h"
|
||||||
|
#include "moduleobject.h"
|
||||||
|
#include "funcobject.h"
|
||||||
|
#include "classobject.h"
|
||||||
|
#include "fileobject.h"
|
||||||
|
#include "pycapsule.h"
|
||||||
|
#include "traceback.h"
|
||||||
|
#include "sliceobject.h"
|
||||||
|
#include "cellobject.h"
|
||||||
|
#include "iterobject.h"
|
||||||
|
#include "genobject.h"
|
||||||
|
#include "descrobject.h"
|
||||||
|
#include "warnings.h"
|
||||||
|
#include "weakrefobject.h"
|
||||||
|
#include "structseq.h"
|
||||||
|
#include "namespaceobject.h"
|
||||||
|
|
||||||
|
#include "codecs.h"
|
||||||
|
#include "pyerrors.h"
|
||||||
|
|
||||||
|
#include "pystate.h"
|
||||||
|
#include "context.h"
|
||||||
|
|
||||||
|
#include "pyarena.h"
|
||||||
|
#include "modsupport.h"
|
||||||
|
#include "compile.h"
|
||||||
|
#include "pythonrun.h"
|
||||||
|
#include "pylifecycle.h"
|
||||||
|
#include "ceval.h"
|
||||||
|
#include "sysmodule.h"
|
||||||
|
#include "osmodule.h"
|
||||||
|
#include "intrcheck.h"
|
||||||
|
#include "import.h"
|
||||||
|
|
||||||
|
#include "abstract.h"
|
||||||
|
#include "bltinmodule.h"
|
||||||
|
|
||||||
|
#include "eval.h"
|
||||||
|
|
||||||
|
#include "pyctype.h"
|
||||||
|
#include "pystrtod.h"
|
||||||
|
#include "pystrcmp.h"
|
||||||
|
#include "dtoa.h"
|
||||||
|
#include "fileutils.h"
|
||||||
|
#include "pyfpe.h"
|
||||||
|
|
||||||
|
#endif /* !Py_PYTHON_H */
|
1109
WENV/Include/abstract.h
Normal file
1109
WENV/Include/abstract.h
Normal file
File diff suppressed because it is too large
Load Diff
37
WENV/Include/accu.h
Normal file
37
WENV/Include/accu.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
#ifndef Py_ACCU_H
|
||||||
|
#define Py_ACCU_H
|
||||||
|
|
||||||
|
/*** This is a private API for use by the interpreter and the stdlib.
|
||||||
|
*** Its definition may be changed or removed at any moment.
|
||||||
|
***/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A two-level accumulator of unicode objects that avoids both the overhead
|
||||||
|
* of keeping a huge number of small separate objects, and the quadratic
|
||||||
|
* behaviour of using a naive repeated concatenation scheme.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef small /* defined by some Windows headers */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyObject *large; /* A list of previously accumulated large strings */
|
||||||
|
PyObject *small; /* Pending small strings */
|
||||||
|
} _PyAccu;
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _PyAccu_Init(_PyAccu *acc);
|
||||||
|
PyAPI_FUNC(int) _PyAccu_Accumulate(_PyAccu *acc, PyObject *unicode);
|
||||||
|
PyAPI_FUNC(PyObject *) _PyAccu_FinishAsList(_PyAccu *acc);
|
||||||
|
PyAPI_FUNC(PyObject *) _PyAccu_Finish(_PyAccu *acc);
|
||||||
|
PyAPI_FUNC(void) _PyAccu_Destroy(_PyAccu *acc);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* Py_ACCU_H */
|
||||||
|
#endif /* Py_LIMITED_API */
|
46
WENV/Include/asdl.h
Normal file
46
WENV/Include/asdl.h
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#ifndef Py_ASDL_H
|
||||||
|
#define Py_ASDL_H
|
||||||
|
|
||||||
|
typedef PyObject * identifier;
|
||||||
|
typedef PyObject * string;
|
||||||
|
typedef PyObject * bytes;
|
||||||
|
typedef PyObject * object;
|
||||||
|
typedef PyObject * singleton;
|
||||||
|
typedef PyObject * constant;
|
||||||
|
|
||||||
|
/* It would be nice if the code generated by asdl_c.py was completely
|
||||||
|
independent of Python, but it is a goal the requires too much work
|
||||||
|
at this stage. So, for example, I'll represent identifiers as
|
||||||
|
interned Python strings.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* XXX A sequence should be typed so that its use can be typechecked. */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
Py_ssize_t size;
|
||||||
|
void *elements[1];
|
||||||
|
} asdl_seq;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
Py_ssize_t size;
|
||||||
|
int elements[1];
|
||||||
|
} asdl_int_seq;
|
||||||
|
|
||||||
|
asdl_seq *_Py_asdl_seq_new(Py_ssize_t size, PyArena *arena);
|
||||||
|
asdl_int_seq *_Py_asdl_int_seq_new(Py_ssize_t size, PyArena *arena);
|
||||||
|
|
||||||
|
#define asdl_seq_GET(S, I) (S)->elements[(I)]
|
||||||
|
#define asdl_seq_LEN(S) ((S) == NULL ? 0 : (S)->size)
|
||||||
|
#ifdef Py_DEBUG
|
||||||
|
#define asdl_seq_SET(S, I, V) \
|
||||||
|
do { \
|
||||||
|
Py_ssize_t _asdl_i = (I); \
|
||||||
|
assert((S) != NULL); \
|
||||||
|
assert(_asdl_i < (S)->size); \
|
||||||
|
(S)->elements[_asdl_i] = (V); \
|
||||||
|
} while (0)
|
||||||
|
#else
|
||||||
|
#define asdl_seq_SET(S, I, V) (S)->elements[I] = (V)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !Py_ASDL_H */
|
29
WENV/Include/ast.h
Normal file
29
WENV/Include/ast.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#ifndef Py_AST_H
|
||||||
|
#define Py_AST_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) PyAST_Validate(mod_ty);
|
||||||
|
PyAPI_FUNC(mod_ty) PyAST_FromNode(
|
||||||
|
const node *n,
|
||||||
|
PyCompilerFlags *flags,
|
||||||
|
const char *filename, /* decoded from the filesystem encoding */
|
||||||
|
PyArena *arena);
|
||||||
|
PyAPI_FUNC(mod_ty) PyAST_FromNodeObject(
|
||||||
|
const node *n,
|
||||||
|
PyCompilerFlags *flags,
|
||||||
|
PyObject *filename,
|
||||||
|
PyArena *arena);
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
|
||||||
|
/* _PyAST_ExprAsUnicode is defined in ast_unparse.c */
|
||||||
|
PyAPI_FUNC(PyObject *) _PyAST_ExprAsUnicode(expr_ty);
|
||||||
|
|
||||||
|
#endif /* !Py_LIMITED_API */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_AST_H */
|
32
WENV/Include/bitset.h
Normal file
32
WENV/Include/bitset.h
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
|
||||||
|
#ifndef Py_BITSET_H
|
||||||
|
#define Py_BITSET_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Bitset interface */
|
||||||
|
|
||||||
|
#define BYTE char
|
||||||
|
|
||||||
|
typedef BYTE *bitset;
|
||||||
|
|
||||||
|
bitset newbitset(int nbits);
|
||||||
|
void delbitset(bitset bs);
|
||||||
|
#define testbit(ss, ibit) (((ss)[BIT2BYTE(ibit)] & BIT2MASK(ibit)) != 0)
|
||||||
|
int addbit(bitset bs, int ibit); /* Returns 0 if already set */
|
||||||
|
int samebitset(bitset bs1, bitset bs2, int nbits);
|
||||||
|
void mergebitset(bitset bs1, bitset bs2, int nbits);
|
||||||
|
|
||||||
|
#define BITSPERBYTE (8*sizeof(BYTE))
|
||||||
|
#define NBYTES(nbits) (((nbits) + BITSPERBYTE - 1) / BITSPERBYTE)
|
||||||
|
|
||||||
|
#define BIT2BYTE(ibit) ((ibit) / BITSPERBYTE)
|
||||||
|
#define BIT2SHIFT(ibit) ((ibit) % BITSPERBYTE)
|
||||||
|
#define BIT2MASK(ibit) (1 << BIT2SHIFT(ibit))
|
||||||
|
#define BYTE2BIT(ibyte) ((ibyte) * BITSPERBYTE)
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_BITSET_H */
|
14
WENV/Include/bltinmodule.h
Normal file
14
WENV/Include/bltinmodule.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#ifndef Py_BLTINMODULE_H
|
||||||
|
#define Py_BLTINMODULE_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyFilter_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyMap_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyZip_Type;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_BLTINMODULE_H */
|
34
WENV/Include/boolobject.h
Normal file
34
WENV/Include/boolobject.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/* Boolean object interface */
|
||||||
|
|
||||||
|
#ifndef Py_BOOLOBJECT_H
|
||||||
|
#define Py_BOOLOBJECT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyBool_Type;
|
||||||
|
|
||||||
|
#define PyBool_Check(x) (Py_TYPE(x) == &PyBool_Type)
|
||||||
|
|
||||||
|
/* Py_False and Py_True are the only two bools in existence.
|
||||||
|
Don't forget to apply Py_INCREF() when returning either!!! */
|
||||||
|
|
||||||
|
/* Don't use these directly */
|
||||||
|
PyAPI_DATA(struct _longobject) _Py_FalseStruct, _Py_TrueStruct;
|
||||||
|
|
||||||
|
/* Use these macros */
|
||||||
|
#define Py_False ((PyObject *) &_Py_FalseStruct)
|
||||||
|
#define Py_True ((PyObject *) &_Py_TrueStruct)
|
||||||
|
|
||||||
|
/* Macros for returning Py_True or Py_False, respectively */
|
||||||
|
#define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True
|
||||||
|
#define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False
|
||||||
|
|
||||||
|
/* Function to return a bool from a C long */
|
||||||
|
PyAPI_FUNC(PyObject *) PyBool_FromLong(long);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_BOOLOBJECT_H */
|
62
WENV/Include/bytearrayobject.h
Normal file
62
WENV/Include/bytearrayobject.h
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
/* ByteArray object interface */
|
||||||
|
|
||||||
|
#ifndef Py_BYTEARRAYOBJECT_H
|
||||||
|
#define Py_BYTEARRAYOBJECT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
/* Type PyByteArrayObject represents a mutable array of bytes.
|
||||||
|
* The Python API is that of a sequence;
|
||||||
|
* the bytes are mapped to ints in [0, 256).
|
||||||
|
* Bytes are not characters; they may be used to encode characters.
|
||||||
|
* The only way to go between bytes and str/unicode is via encoding
|
||||||
|
* and decoding.
|
||||||
|
* For the convenience of C programmers, the bytes type is considered
|
||||||
|
* to contain a char pointer, not an unsigned char pointer.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Object layout */
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
typedef struct {
|
||||||
|
PyObject_VAR_HEAD
|
||||||
|
Py_ssize_t ob_alloc; /* How many bytes allocated in ob_bytes */
|
||||||
|
char *ob_bytes; /* Physical backing buffer */
|
||||||
|
char *ob_start; /* Logical start inside ob_bytes */
|
||||||
|
/* XXX(nnorwitz): should ob_exports be Py_ssize_t? */
|
||||||
|
int ob_exports; /* How many buffer exports */
|
||||||
|
} PyByteArrayObject;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Type object */
|
||||||
|
PyAPI_DATA(PyTypeObject) PyByteArray_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyByteArrayIter_Type;
|
||||||
|
|
||||||
|
/* Type check macros */
|
||||||
|
#define PyByteArray_Check(self) PyObject_TypeCheck(self, &PyByteArray_Type)
|
||||||
|
#define PyByteArray_CheckExact(self) (Py_TYPE(self) == &PyByteArray_Type)
|
||||||
|
|
||||||
|
/* Direct API functions */
|
||||||
|
PyAPI_FUNC(PyObject *) PyByteArray_FromObject(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyByteArray_Concat(PyObject *, PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyByteArray_FromStringAndSize(const char *, Py_ssize_t);
|
||||||
|
PyAPI_FUNC(Py_ssize_t) PyByteArray_Size(PyObject *);
|
||||||
|
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_start : _PyByteArray_empty_string)
|
||||||
|
#define PyByteArray_GET_SIZE(self) (assert(PyByteArray_Check(self)), Py_SIZE(self))
|
||||||
|
|
||||||
|
PyAPI_DATA(char) _PyByteArray_empty_string[];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_BYTEARRAYOBJECT_H */
|
69
WENV/Include/bytes_methods.h
Normal file
69
WENV/Include/bytes_methods.h
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
#ifndef Py_BYTES_CTYPE_H
|
||||||
|
#define Py_BYTES_CTYPE_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The internal implementation behind PyBytes (bytes) and PyByteArray (bytearray)
|
||||||
|
* methods of the given names, they operate on ASCII byte strings.
|
||||||
|
*/
|
||||||
|
extern PyObject* _Py_bytes_isspace(const char *cptr, Py_ssize_t len);
|
||||||
|
extern PyObject* _Py_bytes_isalpha(const char *cptr, Py_ssize_t len);
|
||||||
|
extern PyObject* _Py_bytes_isalnum(const char *cptr, Py_ssize_t len);
|
||||||
|
extern PyObject* _Py_bytes_isascii(const char *cptr, Py_ssize_t len);
|
||||||
|
extern PyObject* _Py_bytes_isdigit(const char *cptr, Py_ssize_t len);
|
||||||
|
extern PyObject* _Py_bytes_islower(const char *cptr, Py_ssize_t len);
|
||||||
|
extern PyObject* _Py_bytes_isupper(const char *cptr, Py_ssize_t len);
|
||||||
|
extern PyObject* _Py_bytes_istitle(const char *cptr, Py_ssize_t len);
|
||||||
|
|
||||||
|
/* These store their len sized answer in the given preallocated *result arg. */
|
||||||
|
extern void _Py_bytes_lower(char *result, const char *cptr, Py_ssize_t len);
|
||||||
|
extern void _Py_bytes_upper(char *result, const char *cptr, Py_ssize_t len);
|
||||||
|
extern void _Py_bytes_title(char *result, const char *s, Py_ssize_t len);
|
||||||
|
extern void _Py_bytes_capitalize(char *result, const char *s, Py_ssize_t len);
|
||||||
|
extern void _Py_bytes_swapcase(char *result, const char *s, Py_ssize_t len);
|
||||||
|
|
||||||
|
extern PyObject *_Py_bytes_find(const char *str, Py_ssize_t len, PyObject *args);
|
||||||
|
extern PyObject *_Py_bytes_index(const char *str, Py_ssize_t len, PyObject *args);
|
||||||
|
extern PyObject *_Py_bytes_rfind(const char *str, Py_ssize_t len, PyObject *args);
|
||||||
|
extern PyObject *_Py_bytes_rindex(const char *str, Py_ssize_t len, PyObject *args);
|
||||||
|
extern PyObject *_Py_bytes_count(const char *str, Py_ssize_t len, PyObject *args);
|
||||||
|
extern int _Py_bytes_contains(const char *str, Py_ssize_t len, PyObject *arg);
|
||||||
|
extern PyObject *_Py_bytes_startswith(const char *str, Py_ssize_t len, PyObject *args);
|
||||||
|
extern PyObject *_Py_bytes_endswith(const char *str, Py_ssize_t len, PyObject *args);
|
||||||
|
|
||||||
|
/* The maketrans() static method. */
|
||||||
|
extern PyObject* _Py_bytes_maketrans(Py_buffer *frm, Py_buffer *to);
|
||||||
|
|
||||||
|
/* Shared __doc__ strings. */
|
||||||
|
extern const char _Py_isspace__doc__[];
|
||||||
|
extern const char _Py_isalpha__doc__[];
|
||||||
|
extern const char _Py_isalnum__doc__[];
|
||||||
|
extern const char _Py_isascii__doc__[];
|
||||||
|
extern const char _Py_isdigit__doc__[];
|
||||||
|
extern const char _Py_islower__doc__[];
|
||||||
|
extern const char _Py_isupper__doc__[];
|
||||||
|
extern const char _Py_istitle__doc__[];
|
||||||
|
extern const char _Py_lower__doc__[];
|
||||||
|
extern const char _Py_upper__doc__[];
|
||||||
|
extern const char _Py_title__doc__[];
|
||||||
|
extern const char _Py_capitalize__doc__[];
|
||||||
|
extern const char _Py_swapcase__doc__[];
|
||||||
|
extern const char _Py_count__doc__[];
|
||||||
|
extern const char _Py_find__doc__[];
|
||||||
|
extern const char _Py_index__doc__[];
|
||||||
|
extern const char _Py_rfind__doc__[];
|
||||||
|
extern const char _Py_rindex__doc__[];
|
||||||
|
extern const char _Py_startswith__doc__[];
|
||||||
|
extern const char _Py_endswith__doc__[];
|
||||||
|
extern const char _Py_maketrans__doc__[];
|
||||||
|
extern const char _Py_expandtabs__doc__[];
|
||||||
|
extern const char _Py_ljust__doc__[];
|
||||||
|
extern const char _Py_rjust__doc__[];
|
||||||
|
extern const char _Py_center__doc__[];
|
||||||
|
extern const char _Py_zfill__doc__[];
|
||||||
|
|
||||||
|
/* this is needed because some docs are shared from the .o, not static */
|
||||||
|
#define PyDoc_STRVAR_shared(name,str) const char name[] = PyDoc_STR(str)
|
||||||
|
|
||||||
|
#endif /* !Py_BYTES_CTYPE_H */
|
||||||
|
#endif /* !Py_LIMITED_API */
|
224
WENV/Include/bytesobject.h
Normal file
224
WENV/Include/bytesobject.h
Normal file
@ -0,0 +1,224 @@
|
|||||||
|
|
||||||
|
/* Bytes (String) object interface */
|
||||||
|
|
||||||
|
#ifndef Py_BYTESOBJECT_H
|
||||||
|
#define Py_BYTESOBJECT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
Type PyBytesObject represents a character string. An extra zero byte is
|
||||||
|
reserved at the end to ensure it is zero-terminated, but a size is
|
||||||
|
present so strings with null bytes in them can be represented. This
|
||||||
|
is an immutable object type.
|
||||||
|
|
||||||
|
There are functions to create new string objects, to test
|
||||||
|
an object for string-ness, and to get the
|
||||||
|
string value. The latter function returns a null pointer
|
||||||
|
if the object is not of the proper type.
|
||||||
|
There is a variant that takes an explicit size as well as a
|
||||||
|
variant that assumes a zero-terminated string. Note that none of the
|
||||||
|
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;
|
||||||
|
char ob_sval[1];
|
||||||
|
|
||||||
|
/* Invariants:
|
||||||
|
* ob_sval contains space for 'ob_size+1' elements.
|
||||||
|
* ob_sval[ob_size] == 0.
|
||||||
|
* 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;
|
||||||
|
|
||||||
|
#define PyBytes_Check(op) \
|
||||||
|
PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
|
||||||
|
#define PyBytes_CheckExact(op) (Py_TYPE(op) == &PyBytes_Type)
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t);
|
||||||
|
PyAPI_FUNC(PyObject *) PyBytes_FromString(const char *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyBytes_FromObject(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyBytes_FromFormatV(const char*, va_list)
|
||||||
|
Py_GCC_ATTRIBUTE((format(printf, 1, 0)));
|
||||||
|
PyAPI_FUNC(PyObject *) PyBytes_FromFormat(const char*, ...)
|
||||||
|
Py_GCC_ATTRIBUTE((format(printf, 1, 2)));
|
||||||
|
PyAPI_FUNC(Py_ssize_t) PyBytes_Size(PyObject *);
|
||||||
|
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_FormatEx(
|
||||||
|
const char *format,
|
||||||
|
Py_ssize_t format_len,
|
||||||
|
PyObject *args,
|
||||||
|
int use_bytearray);
|
||||||
|
PyAPI_FUNC(PyObject*) _PyBytes_FromHex(
|
||||||
|
PyObject *string,
|
||||||
|
int use_bytearray);
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(PyObject *) PyBytes_DecodeEscape(const char *, Py_ssize_t,
|
||||||
|
const char *, Py_ssize_t,
|
||||||
|
const char *);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
/* Helper for PyBytes_DecodeEscape that detects invalid escape chars. */
|
||||||
|
PyAPI_FUNC(PyObject *) _PyBytes_DecodeEscape(const char *, Py_ssize_t,
|
||||||
|
const char *, Py_ssize_t,
|
||||||
|
const char *,
|
||||||
|
const char **);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* 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 a Unicode object. Passing
|
||||||
|
NULL as *len parameter will force the string buffer to be
|
||||||
|
0-terminated (passing a string with embedded NULL characters will
|
||||||
|
cause an exception). */
|
||||||
|
PyAPI_FUNC(int) PyBytes_AsStringAndSize(
|
||||||
|
PyObject *obj, /* string or Unicode object */
|
||||||
|
char **s, /* pointer to buffer variable */
|
||||||
|
Py_ssize_t *len /* pointer to length variable or NULL
|
||||||
|
(only possible for 0-terminated
|
||||||
|
strings) */
|
||||||
|
);
|
||||||
|
|
||||||
|
/* 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,
|
||||||
|
Py_ssize_t n_digits,
|
||||||
|
Py_ssize_t min_width);
|
||||||
|
|
||||||
|
/* 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 */
|
||||||
|
PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGrouping(char *buffer,
|
||||||
|
Py_ssize_t n_buffer,
|
||||||
|
char *digits,
|
||||||
|
Py_ssize_t n_digits,
|
||||||
|
Py_ssize_t min_width,
|
||||||
|
const char *grouping,
|
||||||
|
const char *thousands_sep);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Flags used by string formatting */
|
||||||
|
#define F_LJUST (1<<0)
|
||||||
|
#define F_SIGN (1<<1)
|
||||||
|
#define F_BLANK (1<<2)
|
||||||
|
#define F_ALT (1<<3)
|
||||||
|
#define F_ZERO (1<<4)
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
/* The _PyBytesWriter structure is big: it contains an embedded "stack buffer".
|
||||||
|
A _PyBytesWriter variable must be declared at the end of variables in a
|
||||||
|
function to optimize the memory allocation on the stack. */
|
||||||
|
typedef struct {
|
||||||
|
/* bytes, bytearray or NULL (when the small buffer is used) */
|
||||||
|
PyObject *buffer;
|
||||||
|
|
||||||
|
/* Number of allocated size. */
|
||||||
|
Py_ssize_t allocated;
|
||||||
|
|
||||||
|
/* Minimum number of allocated bytes,
|
||||||
|
incremented by _PyBytesWriter_Prepare() */
|
||||||
|
Py_ssize_t min_size;
|
||||||
|
|
||||||
|
/* If non-zero, use a bytearray instead of a bytes object for buffer. */
|
||||||
|
int use_bytearray;
|
||||||
|
|
||||||
|
/* If non-zero, overallocate the buffer (default: 0).
|
||||||
|
This flag must be zero if use_bytearray is non-zero. */
|
||||||
|
int overallocate;
|
||||||
|
|
||||||
|
/* Stack buffer */
|
||||||
|
int use_small_buffer;
|
||||||
|
char small_buffer[512];
|
||||||
|
} _PyBytesWriter;
|
||||||
|
|
||||||
|
/* Initialize a bytes writer
|
||||||
|
|
||||||
|
By default, the overallocation is disabled. Set the overallocate attribute
|
||||||
|
to control the allocation of the buffer. */
|
||||||
|
PyAPI_FUNC(void) _PyBytesWriter_Init(_PyBytesWriter *writer);
|
||||||
|
|
||||||
|
/* Get the buffer content and reset the writer.
|
||||||
|
Return a bytes object, or a bytearray object if use_bytearray is non-zero.
|
||||||
|
Raise an exception and return NULL on error. */
|
||||||
|
PyAPI_FUNC(PyObject *) _PyBytesWriter_Finish(_PyBytesWriter *writer,
|
||||||
|
void *str);
|
||||||
|
|
||||||
|
/* Deallocate memory of a writer (clear its internal buffer). */
|
||||||
|
PyAPI_FUNC(void) _PyBytesWriter_Dealloc(_PyBytesWriter *writer);
|
||||||
|
|
||||||
|
/* Allocate the buffer to write size bytes.
|
||||||
|
Return the pointer to the beginning of buffer data.
|
||||||
|
Raise an exception and return NULL on error. */
|
||||||
|
PyAPI_FUNC(void*) _PyBytesWriter_Alloc(_PyBytesWriter *writer,
|
||||||
|
Py_ssize_t size);
|
||||||
|
|
||||||
|
/* Ensure that the buffer is large enough to write *size* bytes.
|
||||||
|
Add size to the writer minimum size (min_size attribute).
|
||||||
|
|
||||||
|
str is the current pointer inside the buffer.
|
||||||
|
Return the updated current pointer inside the buffer.
|
||||||
|
Raise an exception and return NULL on error. */
|
||||||
|
PyAPI_FUNC(void*) _PyBytesWriter_Prepare(_PyBytesWriter *writer,
|
||||||
|
void *str,
|
||||||
|
Py_ssize_t size);
|
||||||
|
|
||||||
|
/* Resize the buffer to make it larger.
|
||||||
|
The new buffer may be larger than size bytes because of overallocation.
|
||||||
|
Return the updated current pointer inside the buffer.
|
||||||
|
Raise an exception and return NULL on error.
|
||||||
|
|
||||||
|
Note: size must be greater than the number of allocated bytes in the writer.
|
||||||
|
|
||||||
|
This function doesn't use the writer minimum size (min_size attribute).
|
||||||
|
|
||||||
|
See also _PyBytesWriter_Prepare().
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(void*) _PyBytesWriter_Resize(_PyBytesWriter *writer,
|
||||||
|
void *str,
|
||||||
|
Py_ssize_t size);
|
||||||
|
|
||||||
|
/* Write bytes.
|
||||||
|
Raise an exception and return NULL on error. */
|
||||||
|
PyAPI_FUNC(void*) _PyBytesWriter_WriteBytes(_PyBytesWriter *writer,
|
||||||
|
void *str,
|
||||||
|
const void *bytes,
|
||||||
|
Py_ssize_t size);
|
||||||
|
#endif /* Py_LIMITED_API */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_BYTESOBJECT_H */
|
29
WENV/Include/cellobject.h
Normal file
29
WENV/Include/cellobject.h
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
/* Cell object interface */
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
#ifndef Py_CELLOBJECT_H
|
||||||
|
#define Py_CELLOBJECT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
PyObject *ob_ref; /* Content of the cell or NULL when empty */
|
||||||
|
} PyCellObject;
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyCell_Type;
|
||||||
|
|
||||||
|
#define PyCell_Check(op) (Py_TYPE(op) == &PyCell_Type)
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyCell_New(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyCell_Get(PyObject *);
|
||||||
|
PyAPI_FUNC(int) PyCell_Set(PyObject *, PyObject *);
|
||||||
|
|
||||||
|
#define PyCell_GET(op) (((PyCellObject *)(op))->ob_ref)
|
||||||
|
#define PyCell_SET(op, v) (((PyCellObject *)(op))->ob_ref = v)
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_TUPLEOBJECT_H */
|
||||||
|
#endif /* Py_LIMITED_API */
|
239
WENV/Include/ceval.h
Normal file
239
WENV/Include/ceval.h
Normal file
@ -0,0 +1,239 @@
|
|||||||
|
#ifndef Py_CEVAL_H
|
||||||
|
#define Py_CEVAL_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Interface to random parts in ceval.c */
|
||||||
|
|
||||||
|
/* PyEval_CallObjectWithKeywords(), PyEval_CallObject(), PyEval_CallFunction
|
||||||
|
* and PyEval_CallMethod are kept for backward compatibility: PyObject_Call(),
|
||||||
|
* PyObject_CallFunction() and PyObject_CallMethod() are recommended to call
|
||||||
|
* a callable object.
|
||||||
|
*/
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyEval_CallObjectWithKeywords(
|
||||||
|
PyObject *callable,
|
||||||
|
PyObject *args,
|
||||||
|
PyObject *kwargs);
|
||||||
|
|
||||||
|
/* Inline this */
|
||||||
|
#define PyEval_CallObject(callable, arg) \
|
||||||
|
PyEval_CallObjectWithKeywords(callable, arg, (PyObject *)NULL)
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyEval_CallFunction(PyObject *callable,
|
||||||
|
const char *format, ...);
|
||||||
|
PyAPI_FUNC(PyObject *) PyEval_CallMethod(PyObject *obj,
|
||||||
|
const char *name,
|
||||||
|
const char *format, ...);
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *);
|
||||||
|
PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *);
|
||||||
|
PyAPI_FUNC(void) _PyEval_SetCoroutineOriginTrackingDepth(int new_depth);
|
||||||
|
PyAPI_FUNC(int) _PyEval_GetCoroutineOriginTrackingDepth(void);
|
||||||
|
PyAPI_FUNC(void) _PyEval_SetCoroutineWrapper(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) _PyEval_GetCoroutineWrapper(void);
|
||||||
|
PyAPI_FUNC(void) _PyEval_SetAsyncGenFirstiter(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFirstiter(void);
|
||||||
|
PyAPI_FUNC(void) _PyEval_SetAsyncGenFinalizer(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFinalizer(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct _frame; /* Avoid including frameobject.h */
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyEval_GetBuiltins(void);
|
||||||
|
PyAPI_FUNC(PyObject *) PyEval_GetGlobals(void);
|
||||||
|
PyAPI_FUNC(PyObject *) PyEval_GetLocals(void);
|
||||||
|
PyAPI_FUNC(struct _frame *) PyEval_GetFrame(void);
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
/* Helper to look up a builtin object */
|
||||||
|
PyAPI_FUNC(PyObject *) _PyEval_GetBuiltinId(_Py_Identifier *);
|
||||||
|
/* 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. */
|
||||||
|
PyAPI_FUNC(int) PyEval_MergeCompilerFlags(PyCompilerFlags *cf);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) Py_AddPendingCall(int (*func)(void *), void *arg);
|
||||||
|
PyAPI_FUNC(void) _PyEval_SignalReceived(void);
|
||||||
|
PyAPI_FUNC(int) Py_MakePendingCalls(void);
|
||||||
|
|
||||||
|
/* Protection against deeply nested recursive calls
|
||||||
|
|
||||||
|
In Python 3.0, this protection has two levels:
|
||||||
|
* normal anti-recursion protection is triggered when the recursion level
|
||||||
|
exceeds the current recursion limit. It raises a RecursionError, and sets
|
||||||
|
the "overflowed" flag in the thread state structure. This flag
|
||||||
|
temporarily *disables* the normal protection; this allows cleanup code
|
||||||
|
to potentially outgrow the recursion limit while processing the
|
||||||
|
RecursionError.
|
||||||
|
* "last chance" anti-recursion protection is triggered when the recursion
|
||||||
|
level exceeds "current recursion limit + 50". By construction, this
|
||||||
|
protection can only be triggered when the "overflowed" flag is set. It
|
||||||
|
means the cleanup code has itself gone into an infinite loop, or the
|
||||||
|
RecursionError has been mistakingly ignored. When this protection is
|
||||||
|
triggered, the interpreter aborts with a Fatal Error.
|
||||||
|
|
||||||
|
In addition, the "overflowed" flag is automatically reset when the
|
||||||
|
recursion level drops below "current recursion limit - 50". This heuristic
|
||||||
|
is meant to ensure that the normal anti-recursion protection doesn't get
|
||||||
|
disabled too long.
|
||||||
|
|
||||||
|
Please note: this scheme has its own limitations. See:
|
||||||
|
http://mail.python.org/pipermail/python-dev/2008-August/082106.html
|
||||||
|
for some observations.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(void) Py_SetRecursionLimit(int);
|
||||||
|
PyAPI_FUNC(int) Py_GetRecursionLimit(void);
|
||||||
|
|
||||||
|
#define Py_EnterRecursiveCall(where) \
|
||||||
|
(_Py_MakeRecCheck(PyThreadState_GET()->recursion_depth) && \
|
||||||
|
_Py_CheckRecursiveCall(where))
|
||||||
|
#define Py_LeaveRecursiveCall() \
|
||||||
|
do{ if(_Py_MakeEndRecCheck(PyThreadState_GET()->recursion_depth)) \
|
||||||
|
PyThreadState_GET()->overflowed = 0; \
|
||||||
|
} while(0)
|
||||||
|
PyAPI_FUNC(int) _Py_CheckRecursiveCall(const char *where);
|
||||||
|
|
||||||
|
/* Due to the macros in which it's used, _Py_CheckRecursionLimit is in
|
||||||
|
the stable ABI. It should be removed therefrom when possible.
|
||||||
|
*/
|
||||||
|
PyAPI_DATA(int) _Py_CheckRecursionLimit;
|
||||||
|
|
||||||
|
#ifdef USE_STACKCHECK
|
||||||
|
/* With USE_STACKCHECK, trigger stack checks in _Py_CheckRecursiveCall()
|
||||||
|
on every 64th call to Py_EnterRecursiveCall.
|
||||||
|
*/
|
||||||
|
# define _Py_MakeRecCheck(x) \
|
||||||
|
(++(x) > _Py_CheckRecursionLimit || \
|
||||||
|
++(PyThreadState_GET()->stackcheck_counter) > 64)
|
||||||
|
#else
|
||||||
|
# define _Py_MakeRecCheck(x) (++(x) > _Py_CheckRecursionLimit)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Compute the "lower-water mark" for a recursion limit. When
|
||||||
|
* Py_LeaveRecursiveCall() is called with a recursion depth below this mark,
|
||||||
|
* the overflowed flag is reset to 0. */
|
||||||
|
#define _Py_RecursionLimitLowerWaterMark(limit) \
|
||||||
|
(((limit) > 200) \
|
||||||
|
? ((limit) - 50) \
|
||||||
|
: (3 * ((limit) >> 2)))
|
||||||
|
|
||||||
|
#define _Py_MakeEndRecCheck(x) \
|
||||||
|
(--(x) < _Py_RecursionLimitLowerWaterMark(_Py_CheckRecursionLimit))
|
||||||
|
|
||||||
|
#define Py_ALLOW_RECURSION \
|
||||||
|
do { unsigned char _old = PyThreadState_GET()->recursion_critical;\
|
||||||
|
PyThreadState_GET()->recursion_critical = 1;
|
||||||
|
|
||||||
|
#define Py_END_ALLOW_RECURSION \
|
||||||
|
PyThreadState_GET()->recursion_critical = _old; \
|
||||||
|
} while(0);
|
||||||
|
|
||||||
|
PyAPI_FUNC(const char *) PyEval_GetFuncName(PyObject *);
|
||||||
|
PyAPI_FUNC(const char *) PyEval_GetFuncDesc(PyObject *);
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyEval_EvalFrame(struct _frame *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyEval_EvalFrameEx(struct _frame *f, int exc);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault(struct _frame *f, int exc);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Interface for threads.
|
||||||
|
|
||||||
|
A module that plans to do a blocking system call (or something else
|
||||||
|
that lasts a long time and doesn't touch Python data) can allow other
|
||||||
|
threads to run as follows:
|
||||||
|
|
||||||
|
...preparations here...
|
||||||
|
Py_BEGIN_ALLOW_THREADS
|
||||||
|
...blocking system call here...
|
||||||
|
Py_END_ALLOW_THREADS
|
||||||
|
...interpret result here...
|
||||||
|
|
||||||
|
The Py_BEGIN_ALLOW_THREADS/Py_END_ALLOW_THREADS pair expands to a
|
||||||
|
{}-surrounded block.
|
||||||
|
To leave the block in the middle (e.g., with return), you must insert
|
||||||
|
a line containing Py_BLOCK_THREADS before the return, e.g.
|
||||||
|
|
||||||
|
if (...premature_exit...) {
|
||||||
|
Py_BLOCK_THREADS
|
||||||
|
PyErr_SetFromErrno(PyExc_OSError);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
An alternative is:
|
||||||
|
|
||||||
|
Py_BLOCK_THREADS
|
||||||
|
if (...premature_exit...) {
|
||||||
|
PyErr_SetFromErrno(PyExc_OSError);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
Py_UNBLOCK_THREADS
|
||||||
|
|
||||||
|
For convenience, that the value of 'errno' is restored across
|
||||||
|
Py_END_ALLOW_THREADS and Py_BLOCK_THREADS.
|
||||||
|
|
||||||
|
WARNING: NEVER NEST CALLS TO Py_BEGIN_ALLOW_THREADS AND
|
||||||
|
Py_END_ALLOW_THREADS!!!
|
||||||
|
|
||||||
|
The function PyEval_InitThreads() should be called only from
|
||||||
|
init_thread() in "_threadmodule.c".
|
||||||
|
|
||||||
|
Note that not yet all candidates have been converted to use this
|
||||||
|
mechanism!
|
||||||
|
*/
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyThreadState *) PyEval_SaveThread(void);
|
||||||
|
PyAPI_FUNC(void) PyEval_RestoreThread(PyThreadState *);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) PyEval_ThreadsInitialized(void);
|
||||||
|
PyAPI_FUNC(void) PyEval_InitThreads(void);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(void) _PyEval_FiniThreads(void);
|
||||||
|
#endif /* !Py_LIMITED_API */
|
||||||
|
PyAPI_FUNC(void) PyEval_AcquireLock(void) Py_DEPRECATED(3.2);
|
||||||
|
PyAPI_FUNC(void) PyEval_ReleaseLock(void) /* Py_DEPRECATED(3.2) */;
|
||||||
|
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
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(Py_ssize_t) _PyEval_RequestCodeExtraIndex(freefunc);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define Py_BEGIN_ALLOW_THREADS { \
|
||||||
|
PyThreadState *_save; \
|
||||||
|
_save = PyEval_SaveThread();
|
||||||
|
#define Py_BLOCK_THREADS PyEval_RestoreThread(_save);
|
||||||
|
#define Py_UNBLOCK_THREADS _save = PyEval_SaveThread();
|
||||||
|
#define Py_END_ALLOW_THREADS PyEval_RestoreThread(_save); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *);
|
||||||
|
PyAPI_FUNC(int) _PyEval_SliceIndexNotNone(PyObject *, Py_ssize_t *);
|
||||||
|
PyAPI_FUNC(void) _PyEval_SignalAsyncExc(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Masks and values used by FORMAT_VALUE opcode. */
|
||||||
|
#define FVC_MASK 0x3
|
||||||
|
#define FVC_NONE 0x0
|
||||||
|
#define FVC_STR 0x1
|
||||||
|
#define FVC_REPR 0x2
|
||||||
|
#define FVC_ASCII 0x3
|
||||||
|
#define FVS_MASK 0x4
|
||||||
|
#define FVS_HAVE_SPEC 0x4
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_CEVAL_H */
|
58
WENV/Include/classobject.h
Normal file
58
WENV/Include/classobject.h
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
/* Former class object interface -- now only bound methods are here */
|
||||||
|
|
||||||
|
/* Revealing some structures (not for general use) */
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
#ifndef Py_CLASSOBJECT_H
|
||||||
|
#define Py_CLASSOBJECT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
PyObject *im_func; /* The callable object implementing the method */
|
||||||
|
PyObject *im_self; /* The instance it is bound to */
|
||||||
|
PyObject *im_weakreflist; /* List of weak references */
|
||||||
|
} PyMethodObject;
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyMethod_Type;
|
||||||
|
|
||||||
|
#define PyMethod_Check(op) ((op)->ob_type == &PyMethod_Type)
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyMethod_New(PyObject *, PyObject *);
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyMethod_Function(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyMethod_Self(PyObject *);
|
||||||
|
|
||||||
|
/* Macros for direct access to these values. Type checks are *not*
|
||||||
|
done, so use with care. */
|
||||||
|
#define PyMethod_GET_FUNCTION(meth) \
|
||||||
|
(((PyMethodObject *)meth) -> im_func)
|
||||||
|
#define PyMethod_GET_SELF(meth) \
|
||||||
|
(((PyMethodObject *)meth) -> im_self)
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) PyMethod_ClearFreeList(void);
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
PyObject *func;
|
||||||
|
} PyInstanceMethodObject;
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyInstanceMethod_Type;
|
||||||
|
|
||||||
|
#define PyInstanceMethod_Check(op) ((op)->ob_type == &PyInstanceMethod_Type)
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyInstanceMethod_New(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyInstanceMethod_Function(PyObject *);
|
||||||
|
|
||||||
|
/* Macros for direct access to these values. Type checks are *not*
|
||||||
|
done, so use with care. */
|
||||||
|
#define PyInstanceMethod_GET_FUNCTION(meth) \
|
||||||
|
(((PyInstanceMethodObject *)meth) -> func)
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_CLASSOBJECT_H */
|
||||||
|
#endif /* Py_LIMITED_API */
|
157
WENV/Include/code.h
Normal file
157
WENV/Include/code.h
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
/* Definitions for bytecode */
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
#ifndef Py_CODE_H
|
||||||
|
#define Py_CODE_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef uint16_t _Py_CODEUNIT;
|
||||||
|
|
||||||
|
#ifdef WORDS_BIGENDIAN
|
||||||
|
# define _Py_OPCODE(word) ((word) >> 8)
|
||||||
|
# define _Py_OPARG(word) ((word) & 255)
|
||||||
|
#else
|
||||||
|
# define _Py_OPCODE(word) ((word) & 255)
|
||||||
|
# define _Py_OPARG(word) ((word) >> 8)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Bytecode object */
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
int co_argcount; /* #arguments, except *args */
|
||||||
|
int co_kwonlyargcount; /* #keyword only arguments */
|
||||||
|
int co_nlocals; /* #local variables */
|
||||||
|
int co_stacksize; /* #entries needed for evaluation stack */
|
||||||
|
int co_flags; /* CO_..., see below */
|
||||||
|
int co_firstlineno; /* first source line number */
|
||||||
|
PyObject *co_code; /* instruction opcodes */
|
||||||
|
PyObject *co_consts; /* list (constants used) */
|
||||||
|
PyObject *co_names; /* list of strings (names used) */
|
||||||
|
PyObject *co_varnames; /* tuple of strings (local variable names) */
|
||||||
|
PyObject *co_freevars; /* tuple of strings (free variable names) */
|
||||||
|
PyObject *co_cellvars; /* tuple of strings (cell variable names) */
|
||||||
|
/* The rest aren't used in either hash or comparisons, except for co_name,
|
||||||
|
used in both. This is done to preserve the name and line number
|
||||||
|
for tracebacks and debuggers; otherwise, constant de-duplication
|
||||||
|
would collapse identical functions/lambdas defined on different lines.
|
||||||
|
*/
|
||||||
|
Py_ssize_t *co_cell2arg; /* Maps cell vars which are arguments. */
|
||||||
|
PyObject *co_filename; /* unicode (where it was loaded from) */
|
||||||
|
PyObject *co_name; /* unicode (name, for reference) */
|
||||||
|
PyObject *co_lnotab; /* string (encoding addr<->lineno mapping) See
|
||||||
|
Objects/lnotab_notes.txt for details. */
|
||||||
|
void *co_zombieframe; /* for optimization only (see frameobject.c) */
|
||||||
|
PyObject *co_weakreflist; /* to support weakrefs to code objects */
|
||||||
|
/* Scratch space for extra data relating to the code object.
|
||||||
|
Type is a void* to keep the format private in codeobject.c to force
|
||||||
|
people to go through the proper APIs. */
|
||||||
|
void *co_extra;
|
||||||
|
} PyCodeObject;
|
||||||
|
|
||||||
|
/* Masks for co_flags above */
|
||||||
|
#define CO_OPTIMIZED 0x0001
|
||||||
|
#define CO_NEWLOCALS 0x0002
|
||||||
|
#define CO_VARARGS 0x0004
|
||||||
|
#define CO_VARKEYWORDS 0x0008
|
||||||
|
#define CO_NESTED 0x0010
|
||||||
|
#define CO_GENERATOR 0x0020
|
||||||
|
/* The CO_NOFREE flag is set if there are no free or cell variables.
|
||||||
|
This information is redundant, but it allows a single flag test
|
||||||
|
to determine whether there is any extra work to be done when the
|
||||||
|
call frame it setup.
|
||||||
|
*/
|
||||||
|
#define CO_NOFREE 0x0040
|
||||||
|
|
||||||
|
/* The CO_COROUTINE flag is set for coroutine functions (defined with
|
||||||
|
``async def`` keywords) */
|
||||||
|
#define CO_COROUTINE 0x0080
|
||||||
|
#define CO_ITERABLE_COROUTINE 0x0100
|
||||||
|
#define CO_ASYNC_GENERATOR 0x0200
|
||||||
|
|
||||||
|
/* These are no longer used. */
|
||||||
|
#if 0
|
||||||
|
#define CO_GENERATOR_ALLOWED 0x1000
|
||||||
|
#endif
|
||||||
|
#define CO_FUTURE_DIVISION 0x2000
|
||||||
|
#define CO_FUTURE_ABSOLUTE_IMPORT 0x4000 /* do absolute imports by default */
|
||||||
|
#define CO_FUTURE_WITH_STATEMENT 0x8000
|
||||||
|
#define CO_FUTURE_PRINT_FUNCTION 0x10000
|
||||||
|
#define CO_FUTURE_UNICODE_LITERALS 0x20000
|
||||||
|
|
||||||
|
#define CO_FUTURE_BARRY_AS_BDFL 0x40000
|
||||||
|
#define CO_FUTURE_GENERATOR_STOP 0x80000
|
||||||
|
#define CO_FUTURE_ANNOTATIONS 0x100000
|
||||||
|
|
||||||
|
/* This value is found in the co_cell2arg array when the associated cell
|
||||||
|
variable does not correspond to an argument. */
|
||||||
|
#define CO_CELL_NOT_AN_ARG (-1)
|
||||||
|
|
||||||
|
/* This should be defined if a future statement modifies the syntax.
|
||||||
|
For example, when a keyword is added.
|
||||||
|
*/
|
||||||
|
#define PY_PARSER_REQUIRES_FUTURE_KEYWORD
|
||||||
|
|
||||||
|
#define CO_MAXBLOCKS 20 /* Max static block nesting within a function */
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyCode_Type;
|
||||||
|
|
||||||
|
#define PyCode_Check(op) (Py_TYPE(op) == &PyCode_Type)
|
||||||
|
#define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars))
|
||||||
|
|
||||||
|
/* Public interface */
|
||||||
|
PyAPI_FUNC(PyCodeObject *) PyCode_New(
|
||||||
|
int, int, int, int, int, PyObject *, PyObject *,
|
||||||
|
PyObject *, PyObject *, PyObject *, PyObject *,
|
||||||
|
PyObject *, PyObject *, int, PyObject *);
|
||||||
|
/* same as struct above */
|
||||||
|
|
||||||
|
/* Creates a new empty code object with the specified source location. */
|
||||||
|
PyAPI_FUNC(PyCodeObject *)
|
||||||
|
PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno);
|
||||||
|
|
||||||
|
/* Return the line number associated with the specified bytecode index
|
||||||
|
in this code object. If you just need the line number of a frame,
|
||||||
|
use PyFrame_GetLineNumber() instead. */
|
||||||
|
PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int);
|
||||||
|
|
||||||
|
/* for internal use only */
|
||||||
|
typedef struct _addr_pair {
|
||||||
|
int ap_lower;
|
||||||
|
int ap_upper;
|
||||||
|
} PyAddrPair;
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
/* Update *bounds to describe the first and one-past-the-last instructions in the
|
||||||
|
same line as lasti. Return the number of that line.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(int) _PyCode_CheckLineNumber(PyCodeObject* co,
|
||||||
|
int lasti, PyAddrPair *bounds);
|
||||||
|
|
||||||
|
/* Create a comparable key used to compare constants taking in account the
|
||||||
|
* object type. It is used to make sure types are not coerced (e.g., float and
|
||||||
|
* complex) _and_ to distinguish 0.0 from -0.0 e.g. on IEEE platforms
|
||||||
|
*
|
||||||
|
* Return (type(obj), obj, ...): a tuple with variable size (at least 2 items)
|
||||||
|
* depending on the type and the value. The type is the first item to not
|
||||||
|
* compare bytes and str which can raise a BytesWarning exception. */
|
||||||
|
PyAPI_FUNC(PyObject*) _PyCode_ConstantKey(PyObject *obj);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts,
|
||||||
|
PyObject *names, PyObject *lnotab);
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(int) _PyCode_GetExtra(PyObject *code, Py_ssize_t index,
|
||||||
|
void **extra);
|
||||||
|
PyAPI_FUNC(int) _PyCode_SetExtra(PyObject *code, Py_ssize_t index,
|
||||||
|
void *extra);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_CODE_H */
|
||||||
|
#endif /* Py_LIMITED_API */
|
240
WENV/Include/codecs.h
Normal file
240
WENV/Include/codecs.h
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
#ifndef Py_CODECREGISTRY_H
|
||||||
|
#define Py_CODECREGISTRY_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Python Codec Registry and support functions
|
||||||
|
|
||||||
|
|
||||||
|
Written by Marc-Andre Lemburg (mal@lemburg.com).
|
||||||
|
|
||||||
|
Copyright (c) Corporation for National Research Initiatives.
|
||||||
|
|
||||||
|
------------------------------------------------------------------------ */
|
||||||
|
|
||||||
|
/* Register a new codec search function.
|
||||||
|
|
||||||
|
As side effect, this tries to load the encodings package, if not
|
||||||
|
yet done, to make sure that it is always first in the list of
|
||||||
|
search functions.
|
||||||
|
|
||||||
|
The search_function's refcount is incremented by this function. */
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) PyCodec_Register(
|
||||||
|
PyObject *search_function
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Codec registry lookup API.
|
||||||
|
|
||||||
|
Looks up the given encoding and returns a CodecInfo object with
|
||||||
|
function attributes which implement the different aspects of
|
||||||
|
processing the encoding.
|
||||||
|
|
||||||
|
The encoding string is looked up converted to all lower-case
|
||||||
|
characters. This makes encodings looked up through this mechanism
|
||||||
|
effectively case-insensitive.
|
||||||
|
|
||||||
|
If no codec is found, a KeyError is set and NULL returned.
|
||||||
|
|
||||||
|
As side effect, this tries to load the encodings package, if not
|
||||||
|
yet done. This is part of the lazy load strategy for the encodings
|
||||||
|
package.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(PyObject *) _PyCodec_Lookup(
|
||||||
|
const char *encoding
|
||||||
|
);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _PyCodec_Forget(
|
||||||
|
const char *encoding
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Codec registry encoding check API.
|
||||||
|
|
||||||
|
Returns 1/0 depending on whether there is a registered codec for
|
||||||
|
the given encoding.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) PyCodec_KnownEncoding(
|
||||||
|
const char *encoding
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Generic codec based encoding API.
|
||||||
|
|
||||||
|
object is passed through the encoder function found for the given
|
||||||
|
encoding using the error handling method defined by errors. errors
|
||||||
|
may be NULL to use the default method defined for the codec.
|
||||||
|
|
||||||
|
Raises a LookupError in case no encoder can be found.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyCodec_Encode(
|
||||||
|
PyObject *object,
|
||||||
|
const char *encoding,
|
||||||
|
const char *errors
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Generic codec based decoding API.
|
||||||
|
|
||||||
|
object is passed through the decoder function found for the given
|
||||||
|
encoding using the error handling method defined by errors. errors
|
||||||
|
may be NULL to use the default method defined for the codec.
|
||||||
|
|
||||||
|
Raises a LookupError in case no encoder can be found.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyCodec_Decode(
|
||||||
|
PyObject *object,
|
||||||
|
const char *encoding,
|
||||||
|
const char *errors
|
||||||
|
);
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
/* Text codec specific encoding and decoding API.
|
||||||
|
|
||||||
|
Checks the encoding against a list of codecs which do not
|
||||||
|
implement a str<->bytes encoding before attempting the
|
||||||
|
operation.
|
||||||
|
|
||||||
|
Please note that these APIs are internal and should not
|
||||||
|
be used in Python C extensions.
|
||||||
|
|
||||||
|
XXX (ncoghlan): should we make these, or something like them, public
|
||||||
|
in Python 3.5+?
|
||||||
|
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(PyObject *) _PyCodec_LookupTextEncoding(
|
||||||
|
const char *encoding,
|
||||||
|
const char *alternate_command
|
||||||
|
);
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) _PyCodec_EncodeText(
|
||||||
|
PyObject *object,
|
||||||
|
const char *encoding,
|
||||||
|
const char *errors
|
||||||
|
);
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) _PyCodec_DecodeText(
|
||||||
|
PyObject *object,
|
||||||
|
const char *encoding,
|
||||||
|
const char *errors
|
||||||
|
);
|
||||||
|
|
||||||
|
/* These two aren't actually text encoding specific, but _io.TextIOWrapper
|
||||||
|
* is the only current API consumer.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(PyObject *) _PyCodecInfo_GetIncrementalDecoder(
|
||||||
|
PyObject *codec_info,
|
||||||
|
const char *errors
|
||||||
|
);
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) _PyCodecInfo_GetIncrementalEncoder(
|
||||||
|
PyObject *codec_info,
|
||||||
|
const char *errors
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* --- Codec Lookup APIs --------------------------------------------------
|
||||||
|
|
||||||
|
All APIs return a codec object with incremented refcount and are
|
||||||
|
based on _PyCodec_Lookup(). The same comments w/r to the encoding
|
||||||
|
name also apply to these APIs.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Get an encoder function for the given encoding. */
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyCodec_Encoder(
|
||||||
|
const char *encoding
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Get a decoder function for the given encoding. */
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyCodec_Decoder(
|
||||||
|
const char *encoding
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Get an IncrementalEncoder object for the given encoding. */
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyCodec_IncrementalEncoder(
|
||||||
|
const char *encoding,
|
||||||
|
const char *errors
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Get an IncrementalDecoder object function for the given encoding. */
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyCodec_IncrementalDecoder(
|
||||||
|
const char *encoding,
|
||||||
|
const char *errors
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Get a StreamReader factory function for the given encoding. */
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyCodec_StreamReader(
|
||||||
|
const char *encoding,
|
||||||
|
PyObject *stream,
|
||||||
|
const char *errors
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Get a StreamWriter factory function for the given encoding. */
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyCodec_StreamWriter(
|
||||||
|
const char *encoding,
|
||||||
|
PyObject *stream,
|
||||||
|
const char *errors
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Unicode encoding error handling callback registry API */
|
||||||
|
|
||||||
|
/* Register the error handling callback function error under the given
|
||||||
|
name. This function will be called by the codec when it encounters
|
||||||
|
unencodable characters/undecodable bytes and doesn't know the
|
||||||
|
callback name, when name is specified as the error parameter
|
||||||
|
in the call to the encode/decode function.
|
||||||
|
Return 0 on success, -1 on error */
|
||||||
|
PyAPI_FUNC(int) PyCodec_RegisterError(const char *name, PyObject *error);
|
||||||
|
|
||||||
|
/* Lookup the error handling callback function registered under the given
|
||||||
|
name. As a special case NULL can be passed, in which case
|
||||||
|
the error handling callback for "strict" will be returned. */
|
||||||
|
PyAPI_FUNC(PyObject *) PyCodec_LookupError(const char *name);
|
||||||
|
|
||||||
|
/* raise exc as an exception */
|
||||||
|
PyAPI_FUNC(PyObject *) PyCodec_StrictErrors(PyObject *exc);
|
||||||
|
|
||||||
|
/* ignore the unicode error, skipping the faulty input */
|
||||||
|
PyAPI_FUNC(PyObject *) PyCodec_IgnoreErrors(PyObject *exc);
|
||||||
|
|
||||||
|
/* replace the unicode encode error with ? or U+FFFD */
|
||||||
|
PyAPI_FUNC(PyObject *) PyCodec_ReplaceErrors(PyObject *exc);
|
||||||
|
|
||||||
|
/* replace the unicode encode error with XML character references */
|
||||||
|
PyAPI_FUNC(PyObject *) PyCodec_XMLCharRefReplaceErrors(PyObject *exc);
|
||||||
|
|
||||||
|
/* replace the unicode encode error with backslash escapes (\x, \u and \U) */
|
||||||
|
PyAPI_FUNC(PyObject *) PyCodec_BackslashReplaceErrors(PyObject *exc);
|
||||||
|
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
|
||||||
|
/* replace the unicode encode error with backslash escapes (\N, \x, \u and \U) */
|
||||||
|
PyAPI_FUNC(PyObject *) PyCodec_NameReplaceErrors(PyObject *exc);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_DATA(const char *) Py_hexdigits;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_CODECREGISTRY_H */
|
93
WENV/Include/compile.h
Normal file
93
WENV/Include/compile.h
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
#ifndef Py_COMPILE_H
|
||||||
|
#define Py_COMPILE_H
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
#include "code.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Public interface */
|
||||||
|
struct _node; /* Declare the existence of this type */
|
||||||
|
PyAPI_FUNC(PyCodeObject *) PyNode_Compile(struct _node *, const char *);
|
||||||
|
/* XXX (ncoghlan): Unprefixed type name in a public API! */
|
||||||
|
|
||||||
|
#define PyCF_MASK (CO_FUTURE_DIVISION | CO_FUTURE_ABSOLUTE_IMPORT | \
|
||||||
|
CO_FUTURE_WITH_STATEMENT | CO_FUTURE_PRINT_FUNCTION | \
|
||||||
|
CO_FUTURE_UNICODE_LITERALS | CO_FUTURE_BARRY_AS_BDFL | \
|
||||||
|
CO_FUTURE_GENERATOR_STOP | CO_FUTURE_ANNOTATIONS)
|
||||||
|
#define PyCF_MASK_OBSOLETE (CO_NESTED)
|
||||||
|
#define PyCF_SOURCE_IS_UTF8 0x0100
|
||||||
|
#define PyCF_DONT_IMPLY_DEDENT 0x0200
|
||||||
|
#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
|
||||||
|
|
||||||
|
/* Future feature support */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int ff_features; /* flags set by future statements */
|
||||||
|
int ff_lineno; /* line number of last future statement */
|
||||||
|
} PyFutureFeatures;
|
||||||
|
|
||||||
|
#define FUTURE_NESTED_SCOPES "nested_scopes"
|
||||||
|
#define FUTURE_GENERATORS "generators"
|
||||||
|
#define FUTURE_DIVISION "division"
|
||||||
|
#define FUTURE_ABSOLUTE_IMPORT "absolute_import"
|
||||||
|
#define FUTURE_WITH_STATEMENT "with_statement"
|
||||||
|
#define FUTURE_PRINT_FUNCTION "print_function"
|
||||||
|
#define FUTURE_UNICODE_LITERALS "unicode_literals"
|
||||||
|
#define FUTURE_BARRY_AS_BDFL "barry_as_FLUFL"
|
||||||
|
#define FUTURE_GENERATOR_STOP "generator_stop"
|
||||||
|
#define FUTURE_ANNOTATIONS "annotations"
|
||||||
|
|
||||||
|
struct _mod; /* Declare the existence of this type */
|
||||||
|
#define PyAST_Compile(mod, s, f, ar) PyAST_CompileEx(mod, s, f, -1, ar)
|
||||||
|
PyAPI_FUNC(PyCodeObject *) PyAST_CompileEx(
|
||||||
|
struct _mod *mod,
|
||||||
|
const char *filename, /* decoded from the filesystem encoding */
|
||||||
|
PyCompilerFlags *flags,
|
||||||
|
int optimize,
|
||||||
|
PyArena *arena);
|
||||||
|
PyAPI_FUNC(PyCodeObject *) PyAST_CompileObject(
|
||||||
|
struct _mod *mod,
|
||||||
|
PyObject *filename,
|
||||||
|
PyCompilerFlags *flags,
|
||||||
|
int optimize,
|
||||||
|
PyArena *arena);
|
||||||
|
PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(
|
||||||
|
struct _mod * mod,
|
||||||
|
const char *filename /* decoded from the filesystem encoding */
|
||||||
|
);
|
||||||
|
PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromASTObject(
|
||||||
|
struct _mod * mod,
|
||||||
|
PyObject *filename
|
||||||
|
);
|
||||||
|
|
||||||
|
/* _Py_Mangle is defined in compile.c */
|
||||||
|
PyAPI_FUNC(PyObject*) _Py_Mangle(PyObject *p, PyObject *name);
|
||||||
|
|
||||||
|
#define PY_INVALID_STACK_EFFECT INT_MAX
|
||||||
|
PyAPI_FUNC(int) PyCompile_OpcodeStackEffect(int opcode, int oparg);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _PyAST_Optimize(struct _mod *, PyArena *arena, int optimize);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !Py_LIMITED_API */
|
||||||
|
|
||||||
|
/* These definitions must match corresponding definitions in graminit.h.
|
||||||
|
There's code in compile.c that checks that they are the same. */
|
||||||
|
#define Py_single_input 256
|
||||||
|
#define Py_file_input 257
|
||||||
|
#define Py_eval_input 258
|
||||||
|
|
||||||
|
#endif /* !Py_COMPILE_H */
|
69
WENV/Include/complexobject.h
Normal file
69
WENV/Include/complexobject.h
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/* Complex number structure */
|
||||||
|
|
||||||
|
#ifndef Py_COMPLEXOBJECT_H
|
||||||
|
#define Py_COMPLEXOBJECT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
typedef struct {
|
||||||
|
double real;
|
||||||
|
double imag;
|
||||||
|
} Py_complex;
|
||||||
|
|
||||||
|
/* Operations on complex numbers from complexmodule.c */
|
||||||
|
|
||||||
|
PyAPI_FUNC(Py_complex) _Py_c_sum(Py_complex, Py_complex);
|
||||||
|
PyAPI_FUNC(Py_complex) _Py_c_diff(Py_complex, Py_complex);
|
||||||
|
PyAPI_FUNC(Py_complex) _Py_c_neg(Py_complex);
|
||||||
|
PyAPI_FUNC(Py_complex) _Py_c_prod(Py_complex, Py_complex);
|
||||||
|
PyAPI_FUNC(Py_complex) _Py_c_quot(Py_complex, Py_complex);
|
||||||
|
PyAPI_FUNC(Py_complex) _Py_c_pow(Py_complex, Py_complex);
|
||||||
|
PyAPI_FUNC(double) _Py_c_abs(Py_complex);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Complex object interface */
|
||||||
|
|
||||||
|
/*
|
||||||
|
PyComplexObject represents a complex number with double-precision
|
||||||
|
real and imaginary parts.
|
||||||
|
*/
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
Py_complex cval;
|
||||||
|
} 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(int) _PyComplex_FormatAdvancedWriter(
|
||||||
|
_PyUnicodeWriter *writer,
|
||||||
|
PyObject *obj,
|
||||||
|
PyObject *format_spec,
|
||||||
|
Py_ssize_t start,
|
||||||
|
Py_ssize_t end);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_COMPLEXOBJECT_H */
|
84
WENV/Include/context.h
Normal file
84
WENV/Include/context.h
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
#ifndef Py_CONTEXT_H
|
||||||
|
#define Py_CONTEXT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyContext_Type;
|
||||||
|
typedef struct _pycontextobject PyContext;
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyContextVar_Type;
|
||||||
|
typedef struct _pycontextvarobject PyContextVar;
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyContextToken_Type;
|
||||||
|
typedef struct _pycontexttokenobject PyContextToken;
|
||||||
|
|
||||||
|
|
||||||
|
#define PyContext_CheckExact(o) (Py_TYPE(o) == &PyContext_Type)
|
||||||
|
#define PyContextVar_CheckExact(o) (Py_TYPE(o) == &PyContextVar_Type)
|
||||||
|
#define PyContextToken_CheckExact(o) (Py_TYPE(o) == &PyContextToken_Type)
|
||||||
|
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyContext_New(void);
|
||||||
|
PyAPI_FUNC(PyObject *) PyContext_Copy(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyContext_CopyCurrent(void);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) PyContext_Enter(PyObject *);
|
||||||
|
PyAPI_FUNC(int) PyContext_Exit(PyObject *);
|
||||||
|
|
||||||
|
|
||||||
|
/* Create a new context variable.
|
||||||
|
|
||||||
|
default_value can be NULL.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(PyObject *) PyContextVar_New(
|
||||||
|
const char *name, PyObject *default_value);
|
||||||
|
|
||||||
|
|
||||||
|
/* Get a value for the variable.
|
||||||
|
|
||||||
|
Returns -1 if an error occurred during lookup.
|
||||||
|
|
||||||
|
Returns 0 if value either was or was not found.
|
||||||
|
|
||||||
|
If value was found, *value will point to it.
|
||||||
|
If not, it will point to:
|
||||||
|
|
||||||
|
- default_value, if not NULL;
|
||||||
|
- the default value of "var", if not NULL;
|
||||||
|
- NULL.
|
||||||
|
|
||||||
|
'*value' will be a new ref, if not NULL.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(int) PyContextVar_Get(
|
||||||
|
PyObject *var, PyObject *default_value, PyObject **value);
|
||||||
|
|
||||||
|
|
||||||
|
/* Set a new value for the variable.
|
||||||
|
Returns NULL if an error occurs.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(PyObject *) PyContextVar_Set(PyObject *var, PyObject *value);
|
||||||
|
|
||||||
|
|
||||||
|
/* Reset a variable to its previous value.
|
||||||
|
Returns 0 on success, -1 on error.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(int) PyContextVar_Reset(PyObject *var, PyObject *token);
|
||||||
|
|
||||||
|
|
||||||
|
/* This method is exposed only for CPython tests. Don not use it. */
|
||||||
|
PyAPI_FUNC(PyObject *) _PyContext_NewHamtForTests(void);
|
||||||
|
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) PyContext_ClearFreeList(void);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* !Py_LIMITED_API */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_CONTEXT_H */
|
273
WENV/Include/datetime.h
Normal file
273
WENV/Include/datetime.h
Normal file
@ -0,0 +1,273 @@
|
|||||||
|
/* datetime.h
|
||||||
|
*/
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
#ifndef DATETIME_H
|
||||||
|
#define DATETIME_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Fields are packed into successive bytes, each viewed as unsigned and
|
||||||
|
* big-endian, unless otherwise noted:
|
||||||
|
*
|
||||||
|
* byte offset
|
||||||
|
* 0 year 2 bytes, 1-9999
|
||||||
|
* 2 month 1 byte, 1-12
|
||||||
|
* 3 day 1 byte, 1-31
|
||||||
|
* 4 hour 1 byte, 0-23
|
||||||
|
* 5 minute 1 byte, 0-59
|
||||||
|
* 6 second 1 byte, 0-59
|
||||||
|
* 7 usecond 3 bytes, 0-999999
|
||||||
|
* 10
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* # of bytes for year, month, and day. */
|
||||||
|
#define _PyDateTime_DATE_DATASIZE 4
|
||||||
|
|
||||||
|
/* # of bytes for hour, minute, second, and usecond. */
|
||||||
|
#define _PyDateTime_TIME_DATASIZE 6
|
||||||
|
|
||||||
|
/* # of bytes for year, month, day, hour, minute, second, and usecond. */
|
||||||
|
#define _PyDateTime_DATETIME_DATASIZE 10
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
PyObject_HEAD
|
||||||
|
Py_hash_t hashcode; /* -1 when unknown */
|
||||||
|
int days; /* -MAX_DELTA_DAYS <= days <= MAX_DELTA_DAYS */
|
||||||
|
int seconds; /* 0 <= seconds < 24*3600 is invariant */
|
||||||
|
int microseconds; /* 0 <= microseconds < 1000000 is invariant */
|
||||||
|
} PyDateTime_Delta;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
PyObject_HEAD /* a pure abstract base class */
|
||||||
|
} PyDateTime_TZInfo;
|
||||||
|
|
||||||
|
|
||||||
|
/* The datetime and time types have hashcodes, and an optional tzinfo member,
|
||||||
|
* present if and only if hastzinfo is true.
|
||||||
|
*/
|
||||||
|
#define _PyTZINFO_HEAD \
|
||||||
|
PyObject_HEAD \
|
||||||
|
Py_hash_t hashcode; \
|
||||||
|
char hastzinfo; /* boolean flag */
|
||||||
|
|
||||||
|
/* No _PyDateTime_BaseTZInfo is allocated; it's just to have something
|
||||||
|
* convenient to cast to, when getting at the hastzinfo member of objects
|
||||||
|
* starting with _PyTZINFO_HEAD.
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
_PyTZINFO_HEAD
|
||||||
|
} _PyDateTime_BaseTZInfo;
|
||||||
|
|
||||||
|
/* All time objects are of PyDateTime_TimeType, but that can be allocated
|
||||||
|
* in two ways, with or without a tzinfo member. Without is the same as
|
||||||
|
* tzinfo == None, but consumes less memory. _PyDateTime_BaseTime is an
|
||||||
|
* internal struct used to allocate the right amount of space for the
|
||||||
|
* "without" case.
|
||||||
|
*/
|
||||||
|
#define _PyDateTime_TIMEHEAD \
|
||||||
|
_PyTZINFO_HEAD \
|
||||||
|
unsigned char data[_PyDateTime_TIME_DATASIZE];
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
_PyDateTime_TIMEHEAD
|
||||||
|
} _PyDateTime_BaseTime; /* hastzinfo false */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
_PyDateTime_TIMEHEAD
|
||||||
|
unsigned char fold;
|
||||||
|
PyObject *tzinfo;
|
||||||
|
} PyDateTime_Time; /* hastzinfo true */
|
||||||
|
|
||||||
|
|
||||||
|
/* All datetime objects are of PyDateTime_DateTimeType, but that can be
|
||||||
|
* allocated in two ways too, just like for time objects above. In addition,
|
||||||
|
* the plain date type is a base class for datetime, so it must also have
|
||||||
|
* a hastzinfo member (although it's unused there).
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
_PyTZINFO_HEAD
|
||||||
|
unsigned char data[_PyDateTime_DATE_DATASIZE];
|
||||||
|
} PyDateTime_Date;
|
||||||
|
|
||||||
|
#define _PyDateTime_DATETIMEHEAD \
|
||||||
|
_PyTZINFO_HEAD \
|
||||||
|
unsigned char data[_PyDateTime_DATETIME_DATASIZE];
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
_PyDateTime_DATETIMEHEAD
|
||||||
|
} _PyDateTime_BaseDateTime; /* hastzinfo false */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
_PyDateTime_DATETIMEHEAD
|
||||||
|
unsigned char fold;
|
||||||
|
PyObject *tzinfo;
|
||||||
|
} PyDateTime_DateTime; /* hastzinfo true */
|
||||||
|
|
||||||
|
|
||||||
|
/* Apply for date and datetime instances. */
|
||||||
|
#define PyDateTime_GET_YEAR(o) ((((PyDateTime_Date*)o)->data[0] << 8) | \
|
||||||
|
((PyDateTime_Date*)o)->data[1])
|
||||||
|
#define PyDateTime_GET_MONTH(o) (((PyDateTime_Date*)o)->data[2])
|
||||||
|
#define PyDateTime_GET_DAY(o) (((PyDateTime_Date*)o)->data[3])
|
||||||
|
|
||||||
|
#define PyDateTime_DATE_GET_HOUR(o) (((PyDateTime_DateTime*)o)->data[4])
|
||||||
|
#define PyDateTime_DATE_GET_MINUTE(o) (((PyDateTime_DateTime*)o)->data[5])
|
||||||
|
#define PyDateTime_DATE_GET_SECOND(o) (((PyDateTime_DateTime*)o)->data[6])
|
||||||
|
#define PyDateTime_DATE_GET_MICROSECOND(o) \
|
||||||
|
((((PyDateTime_DateTime*)o)->data[7] << 16) | \
|
||||||
|
(((PyDateTime_DateTime*)o)->data[8] << 8) | \
|
||||||
|
((PyDateTime_DateTime*)o)->data[9])
|
||||||
|
#define PyDateTime_DATE_GET_FOLD(o) (((PyDateTime_DateTime*)o)->fold)
|
||||||
|
|
||||||
|
/* Apply for time instances. */
|
||||||
|
#define PyDateTime_TIME_GET_HOUR(o) (((PyDateTime_Time*)o)->data[0])
|
||||||
|
#define PyDateTime_TIME_GET_MINUTE(o) (((PyDateTime_Time*)o)->data[1])
|
||||||
|
#define PyDateTime_TIME_GET_SECOND(o) (((PyDateTime_Time*)o)->data[2])
|
||||||
|
#define PyDateTime_TIME_GET_MICROSECOND(o) \
|
||||||
|
((((PyDateTime_Time*)o)->data[3] << 16) | \
|
||||||
|
(((PyDateTime_Time*)o)->data[4] << 8) | \
|
||||||
|
((PyDateTime_Time*)o)->data[5])
|
||||||
|
#define PyDateTime_TIME_GET_FOLD(o) (((PyDateTime_Time*)o)->fold)
|
||||||
|
|
||||||
|
/* Apply for time delta instances */
|
||||||
|
#define PyDateTime_DELTA_GET_DAYS(o) (((PyDateTime_Delta*)o)->days)
|
||||||
|
#define PyDateTime_DELTA_GET_SECONDS(o) (((PyDateTime_Delta*)o)->seconds)
|
||||||
|
#define PyDateTime_DELTA_GET_MICROSECONDS(o) \
|
||||||
|
(((PyDateTime_Delta*)o)->microseconds)
|
||||||
|
|
||||||
|
|
||||||
|
/* Define structure for C API. */
|
||||||
|
typedef struct {
|
||||||
|
/* type objects */
|
||||||
|
PyTypeObject *DateType;
|
||||||
|
PyTypeObject *DateTimeType;
|
||||||
|
PyTypeObject *TimeType;
|
||||||
|
PyTypeObject *DeltaType;
|
||||||
|
PyTypeObject *TZInfoType;
|
||||||
|
|
||||||
|
/* singletons */
|
||||||
|
PyObject *TimeZone_UTC;
|
||||||
|
|
||||||
|
/* constructors */
|
||||||
|
PyObject *(*Date_FromDate)(int, int, int, PyTypeObject*);
|
||||||
|
PyObject *(*DateTime_FromDateAndTime)(int, int, int, int, int, int, int,
|
||||||
|
PyObject*, PyTypeObject*);
|
||||||
|
PyObject *(*Time_FromTime)(int, int, int, int, PyObject*, PyTypeObject*);
|
||||||
|
PyObject *(*Delta_FromDelta)(int, int, int, int, PyTypeObject*);
|
||||||
|
PyObject *(*TimeZone_FromTimeZone)(PyObject *offset, PyObject *name);
|
||||||
|
|
||||||
|
/* constructors for the DB API */
|
||||||
|
PyObject *(*DateTime_FromTimestamp)(PyObject*, PyObject*, PyObject*);
|
||||||
|
PyObject *(*Date_FromTimestamp)(PyObject*, PyObject*);
|
||||||
|
|
||||||
|
/* PEP 495 constructors */
|
||||||
|
PyObject *(*DateTime_FromDateAndTimeAndFold)(int, int, int, int, int, int, int,
|
||||||
|
PyObject*, int, PyTypeObject*);
|
||||||
|
PyObject *(*Time_FromTimeAndFold)(int, int, int, int, PyObject*, int, PyTypeObject*);
|
||||||
|
|
||||||
|
} PyDateTime_CAPI;
|
||||||
|
|
||||||
|
#define PyDateTime_CAPSULE_NAME "datetime.datetime_CAPI"
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef Py_BUILD_CORE
|
||||||
|
|
||||||
|
/* Macros for type checking when building the Python core. */
|
||||||
|
#define PyDate_Check(op) PyObject_TypeCheck(op, &PyDateTime_DateType)
|
||||||
|
#define PyDate_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DateType)
|
||||||
|
|
||||||
|
#define PyDateTime_Check(op) PyObject_TypeCheck(op, &PyDateTime_DateTimeType)
|
||||||
|
#define PyDateTime_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DateTimeType)
|
||||||
|
|
||||||
|
#define PyTime_Check(op) PyObject_TypeCheck(op, &PyDateTime_TimeType)
|
||||||
|
#define PyTime_CheckExact(op) (Py_TYPE(op) == &PyDateTime_TimeType)
|
||||||
|
|
||||||
|
#define PyDelta_Check(op) PyObject_TypeCheck(op, &PyDateTime_DeltaType)
|
||||||
|
#define PyDelta_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DeltaType)
|
||||||
|
|
||||||
|
#define PyTZInfo_Check(op) PyObject_TypeCheck(op, &PyDateTime_TZInfoType)
|
||||||
|
#define PyTZInfo_CheckExact(op) (Py_TYPE(op) == &PyDateTime_TZInfoType)
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* Define global variable for the C API and a macro for setting it. */
|
||||||
|
static PyDateTime_CAPI *PyDateTimeAPI = NULL;
|
||||||
|
|
||||||
|
#define PyDateTime_IMPORT \
|
||||||
|
PyDateTimeAPI = (PyDateTime_CAPI *)PyCapsule_Import(PyDateTime_CAPSULE_NAME, 0)
|
||||||
|
|
||||||
|
/* Macro for access to the UTC singleton */
|
||||||
|
#define PyDateTime_TimeZone_UTC PyDateTimeAPI->TimeZone_UTC
|
||||||
|
|
||||||
|
/* Macros for type checking when not building the Python core. */
|
||||||
|
#define PyDate_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateType)
|
||||||
|
#define PyDate_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateType)
|
||||||
|
|
||||||
|
#define PyDateTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateTimeType)
|
||||||
|
#define PyDateTime_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DateTimeType)
|
||||||
|
|
||||||
|
#define PyTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TimeType)
|
||||||
|
#define PyTime_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->TimeType)
|
||||||
|
|
||||||
|
#define PyDelta_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DeltaType)
|
||||||
|
#define PyDelta_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->DeltaType)
|
||||||
|
|
||||||
|
#define PyTZInfo_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TZInfoType)
|
||||||
|
#define PyTZInfo_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->TZInfoType)
|
||||||
|
|
||||||
|
/* Macros for accessing constructors in a simplified fashion. */
|
||||||
|
#define PyDate_FromDate(year, month, day) \
|
||||||
|
PyDateTimeAPI->Date_FromDate(year, month, day, PyDateTimeAPI->DateType)
|
||||||
|
|
||||||
|
#define PyDateTime_FromDateAndTime(year, month, day, hour, min, sec, usec) \
|
||||||
|
PyDateTimeAPI->DateTime_FromDateAndTime(year, month, day, hour, \
|
||||||
|
min, sec, usec, Py_None, PyDateTimeAPI->DateTimeType)
|
||||||
|
|
||||||
|
#define PyDateTime_FromDateAndTimeAndFold(year, month, day, hour, min, sec, usec, fold) \
|
||||||
|
PyDateTimeAPI->DateTime_FromDateAndTimeAndFold(year, month, day, hour, \
|
||||||
|
min, sec, usec, Py_None, fold, PyDateTimeAPI->DateTimeType)
|
||||||
|
|
||||||
|
#define PyTime_FromTime(hour, minute, second, usecond) \
|
||||||
|
PyDateTimeAPI->Time_FromTime(hour, minute, second, usecond, \
|
||||||
|
Py_None, PyDateTimeAPI->TimeType)
|
||||||
|
|
||||||
|
#define PyTime_FromTimeAndFold(hour, minute, second, usecond, fold) \
|
||||||
|
PyDateTimeAPI->Time_FromTimeAndFold(hour, minute, second, usecond, \
|
||||||
|
Py_None, fold, PyDateTimeAPI->TimeType)
|
||||||
|
|
||||||
|
#define PyDelta_FromDSU(days, seconds, useconds) \
|
||||||
|
PyDateTimeAPI->Delta_FromDelta(days, seconds, useconds, 1, \
|
||||||
|
PyDateTimeAPI->DeltaType)
|
||||||
|
|
||||||
|
#define PyTimeZone_FromOffset(offset) \
|
||||||
|
PyDateTimeAPI->TimeZone_FromTimeZone(offset, NULL)
|
||||||
|
|
||||||
|
#define PyTimeZone_FromOffsetAndName(offset, name) \
|
||||||
|
PyDateTimeAPI->TimeZone_FromTimeZone(offset, name)
|
||||||
|
|
||||||
|
/* Macros supporting the DB API. */
|
||||||
|
#define PyDateTime_FromTimestamp(args) \
|
||||||
|
PyDateTimeAPI->DateTime_FromTimestamp( \
|
||||||
|
(PyObject*) (PyDateTimeAPI->DateTimeType), args, NULL)
|
||||||
|
|
||||||
|
#define PyDate_FromTimestamp(args) \
|
||||||
|
PyDateTimeAPI->Date_FromTimestamp( \
|
||||||
|
(PyObject*) (PyDateTimeAPI->DateType), args)
|
||||||
|
|
||||||
|
#endif /* Py_BUILD_CORE */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_LIMITED_API */
|
110
WENV/Include/descrobject.h
Normal file
110
WENV/Include/descrobject.h
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
/* Descriptors */
|
||||||
|
#ifndef Py_DESCROBJECT_H
|
||||||
|
#define Py_DESCROBJECT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef PyObject *(*getter)(PyObject *, void *);
|
||||||
|
typedef int (*setter)(PyObject *, PyObject *, void *);
|
||||||
|
|
||||||
|
typedef struct PyGetSetDef {
|
||||||
|
const char *name;
|
||||||
|
getter get;
|
||||||
|
setter set;
|
||||||
|
const char *doc;
|
||||||
|
void *closure;
|
||||||
|
} PyGetSetDef;
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
typedef PyObject *(*wrapperfunc)(PyObject *self, PyObject *args,
|
||||||
|
void *wrapped);
|
||||||
|
|
||||||
|
typedef PyObject *(*wrapperfunc_kwds)(PyObject *self, PyObject *args,
|
||||||
|
void *wrapped, PyObject *kwds);
|
||||||
|
|
||||||
|
struct wrapperbase {
|
||||||
|
const char *name;
|
||||||
|
int offset;
|
||||||
|
void *function;
|
||||||
|
wrapperfunc wrapper;
|
||||||
|
const char *doc;
|
||||||
|
int flags;
|
||||||
|
PyObject *name_strobj;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Flags for above struct */
|
||||||
|
#define PyWrapperFlag_KEYWORDS 1 /* wrapper function takes keyword args */
|
||||||
|
|
||||||
|
/* Various kinds of descriptor objects */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
PyTypeObject *d_type;
|
||||||
|
PyObject *d_name;
|
||||||
|
PyObject *d_qualname;
|
||||||
|
} PyDescrObject;
|
||||||
|
|
||||||
|
#define PyDescr_COMMON PyDescrObject d_common
|
||||||
|
|
||||||
|
#define PyDescr_TYPE(x) (((PyDescrObject *)(x))->d_type)
|
||||||
|
#define PyDescr_NAME(x) (((PyDescrObject *)(x))->d_name)
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyDescr_COMMON;
|
||||||
|
PyMethodDef *d_method;
|
||||||
|
} PyMethodDescrObject;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyDescr_COMMON;
|
||||||
|
struct PyMemberDef *d_member;
|
||||||
|
} PyMemberDescrObject;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyDescr_COMMON;
|
||||||
|
PyGetSetDef *d_getset;
|
||||||
|
} PyGetSetDescrObject;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyDescr_COMMON;
|
||||||
|
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;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyMemberDescr_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyMethodDescr_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyWrapperDescr_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyDictProxy_Type;
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_DATA(PyTypeObject) _PyMethodWrapper_Type;
|
||||||
|
#endif /* Py_LIMITED_API */
|
||||||
|
|
||||||
|
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 *) _PyMethodDescr_FastCallKeywords(
|
||||||
|
PyObject *descrobj, PyObject *const *stack, Py_ssize_t nargs, PyObject *kwnames);
|
||||||
|
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 *);
|
||||||
|
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyProperty_Type;
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_DESCROBJECT_H */
|
||||||
|
|
179
WENV/Include/dictobject.h
Normal file
179
WENV/Include/dictobject.h
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
#ifndef Py_DICTOBJECT_H
|
||||||
|
#define Py_DICTOBJECT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Dictionary object type -- mapping from hashable object to object */
|
||||||
|
|
||||||
|
/* The distribution includes a separate file, Objects/dictnotes.txt,
|
||||||
|
describing explorations into dictionary design and optimization.
|
||||||
|
It covers typical dictionary use patterns, the parameters for
|
||||||
|
tuning dictionaries, and several ideas for possible optimizations.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
|
||||||
|
typedef struct _dictkeysobject PyDictKeysObject;
|
||||||
|
|
||||||
|
/* The ma_values pointer is NULL for a combined table
|
||||||
|
* or points to an array of PyObject* for a split table
|
||||||
|
*/
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
|
||||||
|
/* Number of items in the dictionary */
|
||||||
|
Py_ssize_t ma_used;
|
||||||
|
|
||||||
|
/* Dictionary version: globally unique, value change each time
|
||||||
|
the dictionary is modified */
|
||||||
|
uint64_t ma_version_tag;
|
||||||
|
|
||||||
|
PyDictKeysObject *ma_keys;
|
||||||
|
|
||||||
|
/* If ma_values is NULL, the table is "combined": keys and values
|
||||||
|
are stored in ma_keys.
|
||||||
|
|
||||||
|
If ma_values is not NULL, the table is splitted:
|
||||||
|
keys are stored in ma_keys and values are stored in ma_values */
|
||||||
|
PyObject **ma_values;
|
||||||
|
} PyDictObject;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
PyDictObject *dv_dict;
|
||||||
|
} _PyDictViewObject;
|
||||||
|
|
||||||
|
#endif /* Py_LIMITED_API */
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyDict_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyDictIterKey_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyDictIterValue_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyDictIterItem_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyDictKeys_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyDictItems_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyDictValues_Type;
|
||||||
|
|
||||||
|
#define PyDict_Check(op) \
|
||||||
|
PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_DICT_SUBCLASS)
|
||||||
|
#define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type)
|
||||||
|
#define PyDictKeys_Check(op) PyObject_TypeCheck(op, &PyDictKeys_Type)
|
||||||
|
#define PyDictItems_Check(op) PyObject_TypeCheck(op, &PyDictItems_Type)
|
||||||
|
#define PyDictValues_Check(op) PyObject_TypeCheck(op, &PyDictValues_Type)
|
||||||
|
/* This excludes Values, since they are not sets. */
|
||||||
|
# define PyDictViewSet_Check(op) \
|
||||||
|
(PyDictKeys_Check(op) || PyDictItems_Check(op))
|
||||||
|
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyDict_New(void);
|
||||||
|
PyAPI_FUNC(PyObject *) PyDict_GetItem(PyObject *mp, PyObject *key);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(PyObject *) _PyDict_GetItem_KnownHash(PyObject *mp, PyObject *key,
|
||||||
|
Py_hash_t hash);
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(PyObject *) PyDict_GetItemWithError(PyObject *mp, PyObject *key);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(PyObject *) _PyDict_GetItemIdWithError(PyObject *dp,
|
||||||
|
struct _Py_Identifier *key);
|
||||||
|
PyAPI_FUNC(PyObject *) PyDict_SetDefault(
|
||||||
|
PyObject *mp, PyObject *key, PyObject *defaultobj);
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(int) PyDict_SetItem(PyObject *mp, PyObject *key, PyObject *item);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(int) _PyDict_SetItem_KnownHash(PyObject *mp, PyObject *key,
|
||||||
|
PyObject *item, Py_hash_t hash);
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(int) PyDict_DelItem(PyObject *mp, PyObject *key);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(int) _PyDict_DelItem_KnownHash(PyObject *mp, PyObject *key,
|
||||||
|
Py_hash_t hash);
|
||||||
|
PyAPI_FUNC(int) _PyDict_DelItemIf(PyObject *mp, PyObject *key,
|
||||||
|
int (*predicate)(PyObject *value));
|
||||||
|
#endif
|
||||||
|
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
|
||||||
|
PyDictKeysObject *_PyDict_NewKeysForClass(void);
|
||||||
|
PyAPI_FUNC(PyObject *) PyObject_GenericGetDict(PyObject *, void *);
|
||||||
|
PyAPI_FUNC(int) _PyDict_Next(
|
||||||
|
PyObject *mp, Py_ssize_t *pos, PyObject **key, PyObject **value, Py_hash_t *hash);
|
||||||
|
PyObject *_PyDictView_New(PyObject *, PyTypeObject *);
|
||||||
|
#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
|
||||||
|
/* Get the number of items of a dictionary. */
|
||||||
|
#define PyDict_GET_SIZE(mp) (assert(PyDict_Check(mp)),((PyDictObject *)mp)->ma_used)
|
||||||
|
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);
|
||||||
|
Py_ssize_t _PyDict_KeysSize(PyDictKeysObject *keys);
|
||||||
|
PyAPI_FUNC(Py_ssize_t) _PyDict_SizeOf(PyDictObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) _PyDict_Pop(PyObject *, PyObject *, PyObject *);
|
||||||
|
PyObject *_PyDict_Pop_KnownHash(PyObject *, PyObject *, Py_hash_t, PyObject *);
|
||||||
|
PyObject *_PyDict_FromKeys(PyObject *, PyObject *, PyObject *);
|
||||||
|
#define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL)
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) PyDict_ClearFreeList(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* PyDict_Update(mp, other) is equivalent to PyDict_Merge(mp, other, 1). */
|
||||||
|
PyAPI_FUNC(int) PyDict_Update(PyObject *mp, PyObject *other);
|
||||||
|
|
||||||
|
/* PyDict_Merge updates/merges from a mapping object (an object that
|
||||||
|
supports PyMapping_Keys() and PyObject_GetItem()). If override is true,
|
||||||
|
the last occurrence of a key wins, else the first. The Python
|
||||||
|
dict.update(other) is equivalent to PyDict_Merge(dict, other, 1).
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(int) PyDict_Merge(PyObject *mp,
|
||||||
|
PyObject *other,
|
||||||
|
int override);
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
/* Like PyDict_Merge, but override can be 0, 1 or 2. If override is 0,
|
||||||
|
the first occurrence of a key wins, if override is 1, the last occurrence
|
||||||
|
of a key wins, if override is 2, a KeyError with conflicting key as
|
||||||
|
argument is raised.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(int) _PyDict_MergeEx(PyObject *mp, PyObject *other, int override);
|
||||||
|
PyAPI_FUNC(PyObject *) _PyDictView_Intersect(PyObject* self, PyObject *other);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* PyDict_MergeFromSeq2 updates/merges from an iterable object producing
|
||||||
|
iterable objects of length 2. If override is true, the last occurrence
|
||||||
|
of a key wins, else the first. The Python dict constructor dict(seq2)
|
||||||
|
is equivalent to dict={}; PyDict_MergeFromSeq(dict, seq2, 1).
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(int) PyDict_MergeFromSeq2(PyObject *d,
|
||||||
|
PyObject *seq2,
|
||||||
|
int override);
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyDict_GetItemString(PyObject *dp, const char *key);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(PyObject *) _PyDict_GetItemId(PyObject *dp, struct _Py_Identifier *key);
|
||||||
|
#endif /* !Py_LIMITED_API */
|
||||||
|
PyAPI_FUNC(int) PyDict_SetItemString(PyObject *dp, const char *key, PyObject *item);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(int) _PyDict_SetItemId(PyObject *dp, struct _Py_Identifier *key, PyObject *item);
|
||||||
|
#endif /* !Py_LIMITED_API */
|
||||||
|
PyAPI_FUNC(int) PyDict_DelItemString(PyObject *dp, const char *key);
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(int) _PyDict_DelItemId(PyObject *mp, struct _Py_Identifier *key);
|
||||||
|
PyAPI_FUNC(void) _PyDict_DebugMallocStats(FILE *out);
|
||||||
|
|
||||||
|
int _PyObjectDict_SetItem(PyTypeObject *tp, PyObject **dictptr, PyObject *name, PyObject *value);
|
||||||
|
PyObject *_PyDict_LoadGlobal(PyDictObject *, PyDictObject *, PyObject *);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_DICTOBJECT_H */
|
19
WENV/Include/dtoa.h
Normal file
19
WENV/Include/dtoa.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
#ifndef PY_NO_SHORT_FLOAT_REPR
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyAPI_FUNC(double) _Py_dg_strtod(const char *str, char **ptr);
|
||||||
|
PyAPI_FUNC(char *) _Py_dg_dtoa(double d, int mode, int ndigits,
|
||||||
|
int *decpt, int *sign, char **rve);
|
||||||
|
PyAPI_FUNC(void) _Py_dg_freedtoa(char *s);
|
||||||
|
PyAPI_FUNC(double) _Py_dg_stdnan(int sign);
|
||||||
|
PyAPI_FUNC(double) _Py_dg_infinity(int sign);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
499
WENV/Include/dynamic_annotations.h
Normal file
499
WENV/Include/dynamic_annotations.h
Normal file
@ -0,0 +1,499 @@
|
|||||||
|
/* Copyright (c) 2008-2009, Google Inc.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Neither the name of Google Inc. nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived from
|
||||||
|
* this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* ---
|
||||||
|
* Author: Kostya Serebryany
|
||||||
|
* Copied to CPython by Jeffrey Yasskin, with all macros renamed to
|
||||||
|
* start with _Py_ to avoid colliding with users embedding Python, and
|
||||||
|
* with deprecated macros removed.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* This file defines dynamic annotations for use with dynamic analysis
|
||||||
|
tool such as valgrind, PIN, etc.
|
||||||
|
|
||||||
|
Dynamic annotation is a source code annotation that affects
|
||||||
|
the generated code (that is, the annotation is not a comment).
|
||||||
|
Each such annotation is attached to a particular
|
||||||
|
instruction and/or to a particular object (address) in the program.
|
||||||
|
|
||||||
|
The annotations that should be used by users are macros in all upper-case
|
||||||
|
(e.g., _Py_ANNOTATE_NEW_MEMORY).
|
||||||
|
|
||||||
|
Actual implementation of these macros may differ depending on the
|
||||||
|
dynamic analysis tool being used.
|
||||||
|
|
||||||
|
See http://code.google.com/p/data-race-test/ for more information.
|
||||||
|
|
||||||
|
This file supports the following dynamic analysis tools:
|
||||||
|
- None (DYNAMIC_ANNOTATIONS_ENABLED is not defined or zero).
|
||||||
|
Macros are defined empty.
|
||||||
|
- ThreadSanitizer, Helgrind, DRD (DYNAMIC_ANNOTATIONS_ENABLED is 1).
|
||||||
|
Macros are defined as calls to non-inlinable empty functions
|
||||||
|
that are intercepted by Valgrind. */
|
||||||
|
|
||||||
|
#ifndef __DYNAMIC_ANNOTATIONS_H__
|
||||||
|
#define __DYNAMIC_ANNOTATIONS_H__
|
||||||
|
|
||||||
|
#ifndef DYNAMIC_ANNOTATIONS_ENABLED
|
||||||
|
# define DYNAMIC_ANNOTATIONS_ENABLED 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if DYNAMIC_ANNOTATIONS_ENABLED != 0
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------
|
||||||
|
Annotations useful when implementing condition variables such as CondVar,
|
||||||
|
using conditional critical sections (Await/LockWhen) and when constructing
|
||||||
|
user-defined synchronization mechanisms.
|
||||||
|
|
||||||
|
The annotations _Py_ANNOTATE_HAPPENS_BEFORE() and
|
||||||
|
_Py_ANNOTATE_HAPPENS_AFTER() can be used to define happens-before arcs in
|
||||||
|
user-defined synchronization mechanisms: the race detector will infer an
|
||||||
|
arc from the former to the latter when they share the same argument
|
||||||
|
pointer.
|
||||||
|
|
||||||
|
Example 1 (reference counting):
|
||||||
|
|
||||||
|
void Unref() {
|
||||||
|
_Py_ANNOTATE_HAPPENS_BEFORE(&refcount_);
|
||||||
|
if (AtomicDecrementByOne(&refcount_) == 0) {
|
||||||
|
_Py_ANNOTATE_HAPPENS_AFTER(&refcount_);
|
||||||
|
delete this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Example 2 (message queue):
|
||||||
|
|
||||||
|
void MyQueue::Put(Type *e) {
|
||||||
|
MutexLock lock(&mu_);
|
||||||
|
_Py_ANNOTATE_HAPPENS_BEFORE(e);
|
||||||
|
PutElementIntoMyQueue(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
Type *MyQueue::Get() {
|
||||||
|
MutexLock lock(&mu_);
|
||||||
|
Type *e = GetElementFromMyQueue();
|
||||||
|
_Py_ANNOTATE_HAPPENS_AFTER(e);
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
Note: when possible, please use the existing reference counting and message
|
||||||
|
queue implementations instead of inventing new ones. */
|
||||||
|
|
||||||
|
/* Report that wait on the condition variable at address "cv" has succeeded
|
||||||
|
and the lock at address "lock" is held. */
|
||||||
|
#define _Py_ANNOTATE_CONDVAR_LOCK_WAIT(cv, lock) \
|
||||||
|
AnnotateCondVarWait(__FILE__, __LINE__, cv, lock)
|
||||||
|
|
||||||
|
/* Report that wait on the condition variable at "cv" has succeeded. Variant
|
||||||
|
w/o lock. */
|
||||||
|
#define _Py_ANNOTATE_CONDVAR_WAIT(cv) \
|
||||||
|
AnnotateCondVarWait(__FILE__, __LINE__, cv, NULL)
|
||||||
|
|
||||||
|
/* Report that we are about to signal on the condition variable at address
|
||||||
|
"cv". */
|
||||||
|
#define _Py_ANNOTATE_CONDVAR_SIGNAL(cv) \
|
||||||
|
AnnotateCondVarSignal(__FILE__, __LINE__, cv)
|
||||||
|
|
||||||
|
/* Report that we are about to signal_all on the condition variable at "cv". */
|
||||||
|
#define _Py_ANNOTATE_CONDVAR_SIGNAL_ALL(cv) \
|
||||||
|
AnnotateCondVarSignalAll(__FILE__, __LINE__, cv)
|
||||||
|
|
||||||
|
/* Annotations for user-defined synchronization mechanisms. */
|
||||||
|
#define _Py_ANNOTATE_HAPPENS_BEFORE(obj) _Py_ANNOTATE_CONDVAR_SIGNAL(obj)
|
||||||
|
#define _Py_ANNOTATE_HAPPENS_AFTER(obj) _Py_ANNOTATE_CONDVAR_WAIT(obj)
|
||||||
|
|
||||||
|
/* Report that the bytes in the range [pointer, pointer+size) are about
|
||||||
|
to be published safely. The race checker will create a happens-before
|
||||||
|
arc from the call _Py_ANNOTATE_PUBLISH_MEMORY_RANGE(pointer, size) to
|
||||||
|
subsequent accesses to this memory.
|
||||||
|
Note: this annotation may not work properly if the race detector uses
|
||||||
|
sampling, i.e. does not observe all memory accesses.
|
||||||
|
*/
|
||||||
|
#define _Py_ANNOTATE_PUBLISH_MEMORY_RANGE(pointer, size) \
|
||||||
|
AnnotatePublishMemoryRange(__FILE__, __LINE__, pointer, size)
|
||||||
|
|
||||||
|
/* Instruct the tool to create a happens-before arc between mu->Unlock() and
|
||||||
|
mu->Lock(). This annotation may slow down the race detector and hide real
|
||||||
|
races. Normally it is used only when it would be difficult to annotate each
|
||||||
|
of the mutex's critical sections individually using the annotations above.
|
||||||
|
This annotation makes sense only for hybrid race detectors. For pure
|
||||||
|
happens-before detectors this is a no-op. For more details see
|
||||||
|
http://code.google.com/p/data-race-test/wiki/PureHappensBeforeVsHybrid . */
|
||||||
|
#define _Py_ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX(mu) \
|
||||||
|
AnnotateMutexIsUsedAsCondVar(__FILE__, __LINE__, mu)
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------
|
||||||
|
Annotations useful when defining memory allocators, or when memory that
|
||||||
|
was protected in one way starts to be protected in another. */
|
||||||
|
|
||||||
|
/* Report that a new memory at "address" of size "size" has been allocated.
|
||||||
|
This might be used when the memory has been retrieved from a free list and
|
||||||
|
is about to be reused, or when the locking discipline for a variable
|
||||||
|
changes. */
|
||||||
|
#define _Py_ANNOTATE_NEW_MEMORY(address, size) \
|
||||||
|
AnnotateNewMemory(__FILE__, __LINE__, address, size)
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------
|
||||||
|
Annotations useful when defining FIFO queues that transfer data between
|
||||||
|
threads. */
|
||||||
|
|
||||||
|
/* Report that the producer-consumer queue (such as ProducerConsumerQueue) at
|
||||||
|
address "pcq" has been created. The _Py_ANNOTATE_PCQ_* annotations should
|
||||||
|
be used only for FIFO queues. For non-FIFO queues use
|
||||||
|
_Py_ANNOTATE_HAPPENS_BEFORE (for put) and _Py_ANNOTATE_HAPPENS_AFTER (for
|
||||||
|
get). */
|
||||||
|
#define _Py_ANNOTATE_PCQ_CREATE(pcq) \
|
||||||
|
AnnotatePCQCreate(__FILE__, __LINE__, pcq)
|
||||||
|
|
||||||
|
/* Report that the queue at address "pcq" is about to be destroyed. */
|
||||||
|
#define _Py_ANNOTATE_PCQ_DESTROY(pcq) \
|
||||||
|
AnnotatePCQDestroy(__FILE__, __LINE__, pcq)
|
||||||
|
|
||||||
|
/* Report that we are about to put an element into a FIFO queue at address
|
||||||
|
"pcq". */
|
||||||
|
#define _Py_ANNOTATE_PCQ_PUT(pcq) \
|
||||||
|
AnnotatePCQPut(__FILE__, __LINE__, pcq)
|
||||||
|
|
||||||
|
/* Report that we've just got an element from a FIFO queue at address "pcq". */
|
||||||
|
#define _Py_ANNOTATE_PCQ_GET(pcq) \
|
||||||
|
AnnotatePCQGet(__FILE__, __LINE__, pcq)
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------
|
||||||
|
Annotations that suppress errors. It is usually better to express the
|
||||||
|
program's synchronization using the other annotations, but these can
|
||||||
|
be used when all else fails. */
|
||||||
|
|
||||||
|
/* Report that we may have a benign race at "pointer", with size
|
||||||
|
"sizeof(*(pointer))". "pointer" must be a non-void* pointer. Insert at the
|
||||||
|
point where "pointer" has been allocated, preferably close to the point
|
||||||
|
where the race happens. See also _Py_ANNOTATE_BENIGN_RACE_STATIC. */
|
||||||
|
#define _Py_ANNOTATE_BENIGN_RACE(pointer, description) \
|
||||||
|
AnnotateBenignRaceSized(__FILE__, __LINE__, pointer, \
|
||||||
|
sizeof(*(pointer)), description)
|
||||||
|
|
||||||
|
/* Same as _Py_ANNOTATE_BENIGN_RACE(address, description), but applies to
|
||||||
|
the memory range [address, address+size). */
|
||||||
|
#define _Py_ANNOTATE_BENIGN_RACE_SIZED(address, size, description) \
|
||||||
|
AnnotateBenignRaceSized(__FILE__, __LINE__, address, size, description)
|
||||||
|
|
||||||
|
/* Request the analysis tool to ignore all reads in the current thread
|
||||||
|
until _Py_ANNOTATE_IGNORE_READS_END is called.
|
||||||
|
Useful to ignore intentional racey reads, while still checking
|
||||||
|
other reads and all writes.
|
||||||
|
See also _Py_ANNOTATE_UNPROTECTED_READ. */
|
||||||
|
#define _Py_ANNOTATE_IGNORE_READS_BEGIN() \
|
||||||
|
AnnotateIgnoreReadsBegin(__FILE__, __LINE__)
|
||||||
|
|
||||||
|
/* Stop ignoring reads. */
|
||||||
|
#define _Py_ANNOTATE_IGNORE_READS_END() \
|
||||||
|
AnnotateIgnoreReadsEnd(__FILE__, __LINE__)
|
||||||
|
|
||||||
|
/* Similar to _Py_ANNOTATE_IGNORE_READS_BEGIN, but ignore writes. */
|
||||||
|
#define _Py_ANNOTATE_IGNORE_WRITES_BEGIN() \
|
||||||
|
AnnotateIgnoreWritesBegin(__FILE__, __LINE__)
|
||||||
|
|
||||||
|
/* Stop ignoring writes. */
|
||||||
|
#define _Py_ANNOTATE_IGNORE_WRITES_END() \
|
||||||
|
AnnotateIgnoreWritesEnd(__FILE__, __LINE__)
|
||||||
|
|
||||||
|
/* Start ignoring all memory accesses (reads and writes). */
|
||||||
|
#define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() \
|
||||||
|
do {\
|
||||||
|
_Py_ANNOTATE_IGNORE_READS_BEGIN();\
|
||||||
|
_Py_ANNOTATE_IGNORE_WRITES_BEGIN();\
|
||||||
|
}while(0)\
|
||||||
|
|
||||||
|
/* Stop ignoring all memory accesses. */
|
||||||
|
#define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_END() \
|
||||||
|
do {\
|
||||||
|
_Py_ANNOTATE_IGNORE_WRITES_END();\
|
||||||
|
_Py_ANNOTATE_IGNORE_READS_END();\
|
||||||
|
}while(0)\
|
||||||
|
|
||||||
|
/* Similar to _Py_ANNOTATE_IGNORE_READS_BEGIN, but ignore synchronization events:
|
||||||
|
RWLOCK* and CONDVAR*. */
|
||||||
|
#define _Py_ANNOTATE_IGNORE_SYNC_BEGIN() \
|
||||||
|
AnnotateIgnoreSyncBegin(__FILE__, __LINE__)
|
||||||
|
|
||||||
|
/* Stop ignoring sync events. */
|
||||||
|
#define _Py_ANNOTATE_IGNORE_SYNC_END() \
|
||||||
|
AnnotateIgnoreSyncEnd(__FILE__, __LINE__)
|
||||||
|
|
||||||
|
|
||||||
|
/* Enable (enable!=0) or disable (enable==0) race detection for all threads.
|
||||||
|
This annotation could be useful if you want to skip expensive race analysis
|
||||||
|
during some period of program execution, e.g. during initialization. */
|
||||||
|
#define _Py_ANNOTATE_ENABLE_RACE_DETECTION(enable) \
|
||||||
|
AnnotateEnableRaceDetection(__FILE__, __LINE__, enable)
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------
|
||||||
|
Annotations useful for debugging. */
|
||||||
|
|
||||||
|
/* Request to trace every access to "address". */
|
||||||
|
#define _Py_ANNOTATE_TRACE_MEMORY(address) \
|
||||||
|
AnnotateTraceMemory(__FILE__, __LINE__, address)
|
||||||
|
|
||||||
|
/* Report the current thread name to a race detector. */
|
||||||
|
#define _Py_ANNOTATE_THREAD_NAME(name) \
|
||||||
|
AnnotateThreadName(__FILE__, __LINE__, name)
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------
|
||||||
|
Annotations useful when implementing locks. They are not
|
||||||
|
normally needed by modules that merely use locks.
|
||||||
|
The "lock" argument is a pointer to the lock object. */
|
||||||
|
|
||||||
|
/* Report that a lock has been created at address "lock". */
|
||||||
|
#define _Py_ANNOTATE_RWLOCK_CREATE(lock) \
|
||||||
|
AnnotateRWLockCreate(__FILE__, __LINE__, lock)
|
||||||
|
|
||||||
|
/* Report that the lock at address "lock" is about to be destroyed. */
|
||||||
|
#define _Py_ANNOTATE_RWLOCK_DESTROY(lock) \
|
||||||
|
AnnotateRWLockDestroy(__FILE__, __LINE__, lock)
|
||||||
|
|
||||||
|
/* Report that the lock at address "lock" has been acquired.
|
||||||
|
is_w=1 for writer lock, is_w=0 for reader lock. */
|
||||||
|
#define _Py_ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) \
|
||||||
|
AnnotateRWLockAcquired(__FILE__, __LINE__, lock, is_w)
|
||||||
|
|
||||||
|
/* Report that the lock at address "lock" is about to be released. */
|
||||||
|
#define _Py_ANNOTATE_RWLOCK_RELEASED(lock, is_w) \
|
||||||
|
AnnotateRWLockReleased(__FILE__, __LINE__, lock, is_w)
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------
|
||||||
|
Annotations useful when implementing barriers. They are not
|
||||||
|
normally needed by modules that merely use barriers.
|
||||||
|
The "barrier" argument is a pointer to the barrier object. */
|
||||||
|
|
||||||
|
/* Report that the "barrier" has been initialized with initial "count".
|
||||||
|
If 'reinitialization_allowed' is true, initialization is allowed to happen
|
||||||
|
multiple times w/o calling barrier_destroy() */
|
||||||
|
#define _Py_ANNOTATE_BARRIER_INIT(barrier, count, reinitialization_allowed) \
|
||||||
|
AnnotateBarrierInit(__FILE__, __LINE__, barrier, count, \
|
||||||
|
reinitialization_allowed)
|
||||||
|
|
||||||
|
/* Report that we are about to enter barrier_wait("barrier"). */
|
||||||
|
#define _Py_ANNOTATE_BARRIER_WAIT_BEFORE(barrier) \
|
||||||
|
AnnotateBarrierWaitBefore(__FILE__, __LINE__, barrier)
|
||||||
|
|
||||||
|
/* Report that we just exited barrier_wait("barrier"). */
|
||||||
|
#define _Py_ANNOTATE_BARRIER_WAIT_AFTER(barrier) \
|
||||||
|
AnnotateBarrierWaitAfter(__FILE__, __LINE__, barrier)
|
||||||
|
|
||||||
|
/* Report that the "barrier" has been destroyed. */
|
||||||
|
#define _Py_ANNOTATE_BARRIER_DESTROY(barrier) \
|
||||||
|
AnnotateBarrierDestroy(__FILE__, __LINE__, barrier)
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------
|
||||||
|
Annotations useful for testing race detectors. */
|
||||||
|
|
||||||
|
/* Report that we expect a race on the variable at "address".
|
||||||
|
Use only in unit tests for a race detector. */
|
||||||
|
#define _Py_ANNOTATE_EXPECT_RACE(address, description) \
|
||||||
|
AnnotateExpectRace(__FILE__, __LINE__, address, description)
|
||||||
|
|
||||||
|
/* A no-op. Insert where you like to test the interceptors. */
|
||||||
|
#define _Py_ANNOTATE_NO_OP(arg) \
|
||||||
|
AnnotateNoOp(__FILE__, __LINE__, arg)
|
||||||
|
|
||||||
|
/* Force the race detector to flush its state. The actual effect depends on
|
||||||
|
* the implementation of the detector. */
|
||||||
|
#define _Py_ANNOTATE_FLUSH_STATE() \
|
||||||
|
AnnotateFlushState(__FILE__, __LINE__)
|
||||||
|
|
||||||
|
|
||||||
|
#else /* DYNAMIC_ANNOTATIONS_ENABLED == 0 */
|
||||||
|
|
||||||
|
#define _Py_ANNOTATE_RWLOCK_CREATE(lock) /* empty */
|
||||||
|
#define _Py_ANNOTATE_RWLOCK_DESTROY(lock) /* empty */
|
||||||
|
#define _Py_ANNOTATE_RWLOCK_ACQUIRED(lock, is_w) /* empty */
|
||||||
|
#define _Py_ANNOTATE_RWLOCK_RELEASED(lock, is_w) /* empty */
|
||||||
|
#define _Py_ANNOTATE_BARRIER_INIT(barrier, count, reinitialization_allowed) /* */
|
||||||
|
#define _Py_ANNOTATE_BARRIER_WAIT_BEFORE(barrier) /* empty */
|
||||||
|
#define _Py_ANNOTATE_BARRIER_WAIT_AFTER(barrier) /* empty */
|
||||||
|
#define _Py_ANNOTATE_BARRIER_DESTROY(barrier) /* empty */
|
||||||
|
#define _Py_ANNOTATE_CONDVAR_LOCK_WAIT(cv, lock) /* empty */
|
||||||
|
#define _Py_ANNOTATE_CONDVAR_WAIT(cv) /* empty */
|
||||||
|
#define _Py_ANNOTATE_CONDVAR_SIGNAL(cv) /* empty */
|
||||||
|
#define _Py_ANNOTATE_CONDVAR_SIGNAL_ALL(cv) /* empty */
|
||||||
|
#define _Py_ANNOTATE_HAPPENS_BEFORE(obj) /* empty */
|
||||||
|
#define _Py_ANNOTATE_HAPPENS_AFTER(obj) /* empty */
|
||||||
|
#define _Py_ANNOTATE_PUBLISH_MEMORY_RANGE(address, size) /* empty */
|
||||||
|
#define _Py_ANNOTATE_UNPUBLISH_MEMORY_RANGE(address, size) /* empty */
|
||||||
|
#define _Py_ANNOTATE_SWAP_MEMORY_RANGE(address, size) /* empty */
|
||||||
|
#define _Py_ANNOTATE_PCQ_CREATE(pcq) /* empty */
|
||||||
|
#define _Py_ANNOTATE_PCQ_DESTROY(pcq) /* empty */
|
||||||
|
#define _Py_ANNOTATE_PCQ_PUT(pcq) /* empty */
|
||||||
|
#define _Py_ANNOTATE_PCQ_GET(pcq) /* empty */
|
||||||
|
#define _Py_ANNOTATE_NEW_MEMORY(address, size) /* empty */
|
||||||
|
#define _Py_ANNOTATE_EXPECT_RACE(address, description) /* empty */
|
||||||
|
#define _Py_ANNOTATE_BENIGN_RACE(address, description) /* empty */
|
||||||
|
#define _Py_ANNOTATE_BENIGN_RACE_SIZED(address, size, description) /* empty */
|
||||||
|
#define _Py_ANNOTATE_PURE_HAPPENS_BEFORE_MUTEX(mu) /* empty */
|
||||||
|
#define _Py_ANNOTATE_MUTEX_IS_USED_AS_CONDVAR(mu) /* empty */
|
||||||
|
#define _Py_ANNOTATE_TRACE_MEMORY(arg) /* empty */
|
||||||
|
#define _Py_ANNOTATE_THREAD_NAME(name) /* empty */
|
||||||
|
#define _Py_ANNOTATE_IGNORE_READS_BEGIN() /* empty */
|
||||||
|
#define _Py_ANNOTATE_IGNORE_READS_END() /* empty */
|
||||||
|
#define _Py_ANNOTATE_IGNORE_WRITES_BEGIN() /* empty */
|
||||||
|
#define _Py_ANNOTATE_IGNORE_WRITES_END() /* empty */
|
||||||
|
#define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_BEGIN() /* empty */
|
||||||
|
#define _Py_ANNOTATE_IGNORE_READS_AND_WRITES_END() /* empty */
|
||||||
|
#define _Py_ANNOTATE_IGNORE_SYNC_BEGIN() /* empty */
|
||||||
|
#define _Py_ANNOTATE_IGNORE_SYNC_END() /* empty */
|
||||||
|
#define _Py_ANNOTATE_ENABLE_RACE_DETECTION(enable) /* empty */
|
||||||
|
#define _Py_ANNOTATE_NO_OP(arg) /* empty */
|
||||||
|
#define _Py_ANNOTATE_FLUSH_STATE() /* empty */
|
||||||
|
|
||||||
|
#endif /* DYNAMIC_ANNOTATIONS_ENABLED */
|
||||||
|
|
||||||
|
/* Use the macros above rather than using these functions directly. */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
void AnnotateRWLockCreate(const char *file, int line,
|
||||||
|
const volatile void *lock);
|
||||||
|
void AnnotateRWLockDestroy(const char *file, int line,
|
||||||
|
const volatile void *lock);
|
||||||
|
void AnnotateRWLockAcquired(const char *file, int line,
|
||||||
|
const volatile void *lock, long is_w);
|
||||||
|
void AnnotateRWLockReleased(const char *file, int line,
|
||||||
|
const volatile void *lock, long is_w);
|
||||||
|
void AnnotateBarrierInit(const char *file, int line,
|
||||||
|
const volatile void *barrier, long count,
|
||||||
|
long reinitialization_allowed);
|
||||||
|
void AnnotateBarrierWaitBefore(const char *file, int line,
|
||||||
|
const volatile void *barrier);
|
||||||
|
void AnnotateBarrierWaitAfter(const char *file, int line,
|
||||||
|
const volatile void *barrier);
|
||||||
|
void AnnotateBarrierDestroy(const char *file, int line,
|
||||||
|
const volatile void *barrier);
|
||||||
|
void AnnotateCondVarWait(const char *file, int line,
|
||||||
|
const volatile void *cv,
|
||||||
|
const volatile void *lock);
|
||||||
|
void AnnotateCondVarSignal(const char *file, int line,
|
||||||
|
const volatile void *cv);
|
||||||
|
void AnnotateCondVarSignalAll(const char *file, int line,
|
||||||
|
const volatile void *cv);
|
||||||
|
void AnnotatePublishMemoryRange(const char *file, int line,
|
||||||
|
const volatile void *address,
|
||||||
|
long size);
|
||||||
|
void AnnotateUnpublishMemoryRange(const char *file, int line,
|
||||||
|
const volatile void *address,
|
||||||
|
long size);
|
||||||
|
void AnnotatePCQCreate(const char *file, int line,
|
||||||
|
const volatile void *pcq);
|
||||||
|
void AnnotatePCQDestroy(const char *file, int line,
|
||||||
|
const volatile void *pcq);
|
||||||
|
void AnnotatePCQPut(const char *file, int line,
|
||||||
|
const volatile void *pcq);
|
||||||
|
void AnnotatePCQGet(const char *file, int line,
|
||||||
|
const volatile void *pcq);
|
||||||
|
void AnnotateNewMemory(const char *file, int line,
|
||||||
|
const volatile void *address,
|
||||||
|
long size);
|
||||||
|
void AnnotateExpectRace(const char *file, int line,
|
||||||
|
const volatile void *address,
|
||||||
|
const char *description);
|
||||||
|
void AnnotateBenignRace(const char *file, int line,
|
||||||
|
const volatile void *address,
|
||||||
|
const char *description);
|
||||||
|
void AnnotateBenignRaceSized(const char *file, int line,
|
||||||
|
const volatile void *address,
|
||||||
|
long size,
|
||||||
|
const char *description);
|
||||||
|
void AnnotateMutexIsUsedAsCondVar(const char *file, int line,
|
||||||
|
const volatile void *mu);
|
||||||
|
void AnnotateTraceMemory(const char *file, int line,
|
||||||
|
const volatile void *arg);
|
||||||
|
void AnnotateThreadName(const char *file, int line,
|
||||||
|
const char *name);
|
||||||
|
void AnnotateIgnoreReadsBegin(const char *file, int line);
|
||||||
|
void AnnotateIgnoreReadsEnd(const char *file, int line);
|
||||||
|
void AnnotateIgnoreWritesBegin(const char *file, int line);
|
||||||
|
void AnnotateIgnoreWritesEnd(const char *file, int line);
|
||||||
|
void AnnotateEnableRaceDetection(const char *file, int line, int enable);
|
||||||
|
void AnnotateNoOp(const char *file, int line,
|
||||||
|
const volatile void *arg);
|
||||||
|
void AnnotateFlushState(const char *file, int line);
|
||||||
|
|
||||||
|
/* Return non-zero value if running under valgrind.
|
||||||
|
|
||||||
|
If "valgrind.h" is included into dynamic_annotations.c,
|
||||||
|
the regular valgrind mechanism will be used.
|
||||||
|
See http://valgrind.org/docs/manual/manual-core-adv.html about
|
||||||
|
RUNNING_ON_VALGRIND and other valgrind "client requests".
|
||||||
|
The file "valgrind.h" may be obtained by doing
|
||||||
|
svn co svn://svn.valgrind.org/valgrind/trunk/include
|
||||||
|
|
||||||
|
If for some reason you can't use "valgrind.h" or want to fake valgrind,
|
||||||
|
there are two ways to make this function return non-zero:
|
||||||
|
- Use environment variable: export RUNNING_ON_VALGRIND=1
|
||||||
|
- Make your tool intercept the function RunningOnValgrind() and
|
||||||
|
change its return value.
|
||||||
|
*/
|
||||||
|
int RunningOnValgrind(void);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if DYNAMIC_ANNOTATIONS_ENABLED != 0 && defined(__cplusplus)
|
||||||
|
|
||||||
|
/* _Py_ANNOTATE_UNPROTECTED_READ is the preferred way to annotate racey reads.
|
||||||
|
|
||||||
|
Instead of doing
|
||||||
|
_Py_ANNOTATE_IGNORE_READS_BEGIN();
|
||||||
|
... = x;
|
||||||
|
_Py_ANNOTATE_IGNORE_READS_END();
|
||||||
|
one can use
|
||||||
|
... = _Py_ANNOTATE_UNPROTECTED_READ(x); */
|
||||||
|
template <class T>
|
||||||
|
inline T _Py_ANNOTATE_UNPROTECTED_READ(const volatile T &x) {
|
||||||
|
_Py_ANNOTATE_IGNORE_READS_BEGIN();
|
||||||
|
T res = x;
|
||||||
|
_Py_ANNOTATE_IGNORE_READS_END();
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
/* Apply _Py_ANNOTATE_BENIGN_RACE_SIZED to a static variable. */
|
||||||
|
#define _Py_ANNOTATE_BENIGN_RACE_STATIC(static_var, description) \
|
||||||
|
namespace { \
|
||||||
|
class static_var ## _annotator { \
|
||||||
|
public: \
|
||||||
|
static_var ## _annotator() { \
|
||||||
|
_Py_ANNOTATE_BENIGN_RACE_SIZED(&static_var, \
|
||||||
|
sizeof(static_var), \
|
||||||
|
# static_var ": " description); \
|
||||||
|
} \
|
||||||
|
}; \
|
||||||
|
static static_var ## _annotator the ## static_var ## _annotator;\
|
||||||
|
}
|
||||||
|
#else /* DYNAMIC_ANNOTATIONS_ENABLED == 0 */
|
||||||
|
|
||||||
|
#define _Py_ANNOTATE_UNPROTECTED_READ(x) (x)
|
||||||
|
#define _Py_ANNOTATE_BENIGN_RACE_STATIC(static_var, description) /* empty */
|
||||||
|
|
||||||
|
#endif /* DYNAMIC_ANNOTATIONS_ENABLED */
|
||||||
|
|
||||||
|
#endif /* __DYNAMIC_ANNOTATIONS_H__ */
|
17
WENV/Include/enumobject.h
Normal file
17
WENV/Include/enumobject.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#ifndef Py_ENUMOBJECT_H
|
||||||
|
#define Py_ENUMOBJECT_H
|
||||||
|
|
||||||
|
/* Enumerate Object */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyEnum_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyReversed_Type;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !Py_ENUMOBJECT_H */
|
38
WENV/Include/errcode.h
Normal file
38
WENV/Include/errcode.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#ifndef Py_ERRCODE_H
|
||||||
|
#define Py_ERRCODE_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Error codes passed around between file input, tokenizer, parser and
|
||||||
|
interpreter. This is necessary so we can turn them into Python
|
||||||
|
exceptions at a higher level. Note that some errors have a
|
||||||
|
slightly different meaning when passed from the tokenizer to the
|
||||||
|
parser than when passed from the parser to the interpreter; e.g.
|
||||||
|
the parser only returns E_EOF when it hits EOF immediately, and it
|
||||||
|
never returns E_OK. */
|
||||||
|
|
||||||
|
#define E_OK 10 /* No error */
|
||||||
|
#define E_EOF 11 /* End Of File */
|
||||||
|
#define E_INTR 12 /* Interrupted */
|
||||||
|
#define E_TOKEN 13 /* Bad token */
|
||||||
|
#define E_SYNTAX 14 /* Syntax error */
|
||||||
|
#define E_NOMEM 15 /* Ran out of memory */
|
||||||
|
#define E_DONE 16 /* Parsing complete */
|
||||||
|
#define E_ERROR 17 /* Execution error */
|
||||||
|
#define E_TABSPACE 18 /* Inconsistent mixing of tabs and spaces */
|
||||||
|
#define E_OVERFLOW 19 /* Node had too many children */
|
||||||
|
#define E_TOODEEP 20 /* Too many indentation levels */
|
||||||
|
#define E_DEDENT 21 /* No matching outer block for dedent */
|
||||||
|
#define E_DECODE 22 /* Error in decoding into Unicode */
|
||||||
|
#define E_EOFS 23 /* EOF in triple-quoted string */
|
||||||
|
#define E_EOLS 24 /* EOL in single-quoted string */
|
||||||
|
#define E_LINECONT 25 /* Unexpected characters after a line continuation */
|
||||||
|
#define E_IDENTIFIER 26 /* Invalid characters in identifier */
|
||||||
|
#define E_BADSINGLE 27 /* Ill-formed single statement input */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_ERRCODE_H */
|
37
WENV/Include/eval.h
Normal file
37
WENV/Include/eval.h
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
|
||||||
|
/* Interface to execute compiled code */
|
||||||
|
|
||||||
|
#ifndef Py_EVAL_H
|
||||||
|
#define Py_EVAL_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyEval_EvalCode(PyObject *, PyObject *, PyObject *);
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyEval_EvalCodeEx(PyObject *co,
|
||||||
|
PyObject *globals,
|
||||||
|
PyObject *locals,
|
||||||
|
PyObject *const *args, int argc,
|
||||||
|
PyObject *const *kwds, int kwdc,
|
||||||
|
PyObject *const *defs, int defc,
|
||||||
|
PyObject *kwdefs, PyObject *closure);
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(PyObject *) _PyEval_EvalCodeWithName(
|
||||||
|
PyObject *co,
|
||||||
|
PyObject *globals, PyObject *locals,
|
||||||
|
PyObject *const *args, Py_ssize_t argcount,
|
||||||
|
PyObject *const *kwnames, PyObject *const *kwargs,
|
||||||
|
Py_ssize_t kwcount, int kwstep,
|
||||||
|
PyObject *const *defs, Py_ssize_t defcount,
|
||||||
|
PyObject *kwdefs, PyObject *closure,
|
||||||
|
PyObject *name, PyObject *qualname);
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) _PyEval_CallTracing(PyObject *func, PyObject *args);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_EVAL_H */
|
55
WENV/Include/fileobject.h
Normal file
55
WENV/Include/fileobject.h
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/* File object interface (what's left of it -- see io.py) */
|
||||||
|
|
||||||
|
#ifndef Py_FILEOBJECT_H
|
||||||
|
#define Py_FILEOBJECT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define PY_STDIOTEXTMODE "b"
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyFile_FromFd(int, const char *, const char *, int,
|
||||||
|
const char *, const char *,
|
||||||
|
const char *, int);
|
||||||
|
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
|
||||||
|
*/
|
||||||
|
PyAPI_DATA(const char *) Py_FileSystemDefaultEncoding;
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000
|
||||||
|
PyAPI_DATA(const char *) Py_FileSystemDefaultEncodeErrors;
|
||||||
|
#endif
|
||||||
|
PyAPI_DATA(int) Py_HasFileSystemDefaultEncoding;
|
||||||
|
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000
|
||||||
|
PyAPI_DATA(int) Py_UTF8Mode;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Internal API
|
||||||
|
|
||||||
|
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;
|
||||||
|
#endif /* Py_LIMITED_API */
|
||||||
|
|
||||||
|
/* A routine to check if a file descriptor can be select()-ed. */
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
/* On Windows, any socket fd can be select()-ed, no matter how high */
|
||||||
|
#define _PyIsSelectable_fd(FD) (1)
|
||||||
|
#else
|
||||||
|
#define _PyIsSelectable_fd(FD) ((unsigned int)(FD) < (unsigned int)FD_SETSIZE)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_FILEOBJECT_H */
|
201
WENV/Include/fileutils.h
Normal file
201
WENV/Include/fileutils.h
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
#ifndef Py_FILEUTILS_H
|
||||||
|
#define Py_FILEUTILS_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
|
||||||
|
PyAPI_FUNC(wchar_t *) Py_DecodeLocale(
|
||||||
|
const char *arg,
|
||||||
|
size_t *size);
|
||||||
|
|
||||||
|
PyAPI_FUNC(char*) Py_EncodeLocale(
|
||||||
|
const wchar_t *text,
|
||||||
|
size_t *error_pos);
|
||||||
|
|
||||||
|
PyAPI_FUNC(char*) _Py_EncodeLocaleRaw(
|
||||||
|
const wchar_t *text,
|
||||||
|
size_t *error_pos);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef Py_BUILD_CORE
|
||||||
|
PyAPI_FUNC(int) _Py_DecodeUTF8Ex(
|
||||||
|
const char *arg,
|
||||||
|
Py_ssize_t arglen,
|
||||||
|
wchar_t **wstr,
|
||||||
|
size_t *wlen,
|
||||||
|
const char **reason,
|
||||||
|
int surrogateescape);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _Py_EncodeUTF8Ex(
|
||||||
|
const wchar_t *text,
|
||||||
|
char **str,
|
||||||
|
size_t *error_pos,
|
||||||
|
const char **reason,
|
||||||
|
int raw_malloc,
|
||||||
|
int surrogateescape);
|
||||||
|
|
||||||
|
PyAPI_FUNC(wchar_t*) _Py_DecodeUTF8_surrogateescape(
|
||||||
|
const char *arg,
|
||||||
|
Py_ssize_t arglen);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _Py_DecodeLocaleEx(
|
||||||
|
const char *arg,
|
||||||
|
wchar_t **wstr,
|
||||||
|
size_t *wlen,
|
||||||
|
const char **reason,
|
||||||
|
int current_locale,
|
||||||
|
int surrogateescape);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _Py_EncodeLocaleEx(
|
||||||
|
const wchar_t *text,
|
||||||
|
char **str,
|
||||||
|
size_t *error_pos,
|
||||||
|
const char **reason,
|
||||||
|
int current_locale,
|
||||||
|
int surrogateescape);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(PyObject *) _Py_device_encoding(int);
|
||||||
|
|
||||||
|
#if defined(MS_WINDOWS) || defined(__APPLE__)
|
||||||
|
/* On Windows, the count parameter of read() is an int (bpo-9015, bpo-9611).
|
||||||
|
On macOS 10.13, read() and write() with more than INT_MAX bytes
|
||||||
|
fail with EINVAL (bpo-24658). */
|
||||||
|
# define _PY_READ_MAX INT_MAX
|
||||||
|
# define _PY_WRITE_MAX INT_MAX
|
||||||
|
#else
|
||||||
|
/* write() should truncate the input to PY_SSIZE_T_MAX bytes,
|
||||||
|
but it's safer to do it ourself to have a portable behaviour */
|
||||||
|
# define _PY_READ_MAX PY_SSIZE_T_MAX
|
||||||
|
# define _PY_WRITE_MAX PY_SSIZE_T_MAX
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef MS_WINDOWS
|
||||||
|
struct _Py_stat_struct {
|
||||||
|
unsigned long st_dev;
|
||||||
|
uint64_t st_ino;
|
||||||
|
unsigned short st_mode;
|
||||||
|
int st_nlink;
|
||||||
|
int st_uid;
|
||||||
|
int st_gid;
|
||||||
|
unsigned long st_rdev;
|
||||||
|
__int64 st_size;
|
||||||
|
time_t st_atime;
|
||||||
|
int st_atime_nsec;
|
||||||
|
time_t st_mtime;
|
||||||
|
int st_mtime_nsec;
|
||||||
|
time_t st_ctime;
|
||||||
|
int st_ctime_nsec;
|
||||||
|
unsigned long st_file_attributes;
|
||||||
|
};
|
||||||
|
#else
|
||||||
|
# define _Py_stat_struct stat
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _Py_fstat(
|
||||||
|
int fd,
|
||||||
|
struct _Py_stat_struct *status);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _Py_fstat_noraise(
|
||||||
|
int fd,
|
||||||
|
struct _Py_stat_struct *status);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _Py_stat(
|
||||||
|
PyObject *path,
|
||||||
|
struct stat *status);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _Py_open(
|
||||||
|
const char *pathname,
|
||||||
|
int flags);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _Py_open_noraise(
|
||||||
|
const char *pathname,
|
||||||
|
int flags);
|
||||||
|
|
||||||
|
PyAPI_FUNC(FILE *) _Py_wfopen(
|
||||||
|
const wchar_t *path,
|
||||||
|
const wchar_t *mode);
|
||||||
|
|
||||||
|
PyAPI_FUNC(FILE*) _Py_fopen(
|
||||||
|
const char *pathname,
|
||||||
|
const char *mode);
|
||||||
|
|
||||||
|
PyAPI_FUNC(FILE*) _Py_fopen_obj(
|
||||||
|
PyObject *path,
|
||||||
|
const char *mode);
|
||||||
|
|
||||||
|
PyAPI_FUNC(Py_ssize_t) _Py_read(
|
||||||
|
int fd,
|
||||||
|
void *buf,
|
||||||
|
size_t count);
|
||||||
|
|
||||||
|
PyAPI_FUNC(Py_ssize_t) _Py_write(
|
||||||
|
int fd,
|
||||||
|
const void *buf,
|
||||||
|
size_t count);
|
||||||
|
|
||||||
|
PyAPI_FUNC(Py_ssize_t) _Py_write_noraise(
|
||||||
|
int fd,
|
||||||
|
const void *buf,
|
||||||
|
size_t count);
|
||||||
|
|
||||||
|
#ifdef HAVE_READLINK
|
||||||
|
PyAPI_FUNC(int) _Py_wreadlink(
|
||||||
|
const wchar_t *path,
|
||||||
|
wchar_t *buf,
|
||||||
|
size_t bufsiz);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_REALPATH
|
||||||
|
PyAPI_FUNC(wchar_t*) _Py_wrealpath(
|
||||||
|
const wchar_t *path,
|
||||||
|
wchar_t *resolved_path,
|
||||||
|
size_t resolved_path_size);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyAPI_FUNC(wchar_t*) _Py_wgetcwd(
|
||||||
|
wchar_t *buf,
|
||||||
|
size_t size);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _Py_get_inheritable(int fd);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _Py_set_inheritable(int fd, int inheritable,
|
||||||
|
int *atomic_flag_works);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _Py_set_inheritable_async_safe(int fd, int inheritable,
|
||||||
|
int *atomic_flag_works);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _Py_dup(int fd);
|
||||||
|
|
||||||
|
#ifndef MS_WINDOWS
|
||||||
|
PyAPI_FUNC(int) _Py_get_blocking(int fd);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _Py_set_blocking(int fd, int blocking);
|
||||||
|
#endif /* !MS_WINDOWS */
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _Py_GetLocaleconvNumeric(
|
||||||
|
PyObject **decimal_point,
|
||||||
|
PyObject **thousands_sep,
|
||||||
|
const char **grouping);
|
||||||
|
|
||||||
|
#endif /* Py_LIMITED_API */
|
||||||
|
|
||||||
|
#ifdef Py_BUILD_CORE
|
||||||
|
PyAPI_FUNC(int) _Py_GetForceASCII(void);
|
||||||
|
|
||||||
|
/* Reset "force ASCII" mode (if it was initialized).
|
||||||
|
|
||||||
|
This function should be called when Python changes the LC_CTYPE locale,
|
||||||
|
so the "force ASCII" mode can be detected again on the new locale
|
||||||
|
encoding. */
|
||||||
|
PyAPI_FUNC(void) _Py_ResetForceASCII(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !Py_FILEUTILS_H */
|
130
WENV/Include/floatobject.h
Normal file
130
WENV/Include/floatobject.h
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
|
||||||
|
/* Float object interface */
|
||||||
|
|
||||||
|
/*
|
||||||
|
PyFloatObject represents a (double precision) floating point number.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef Py_FLOATOBJECT_H
|
||||||
|
#define Py_FLOATOBJECT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
double ob_fval;
|
||||||
|
} PyFloatObject;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyFloat_Type;
|
||||||
|
|
||||||
|
#define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type)
|
||||||
|
#define PyFloat_CheckExact(op) (Py_TYPE(op) == &PyFloat_Type)
|
||||||
|
|
||||||
|
#ifdef Py_NAN
|
||||||
|
#define Py_RETURN_NAN return PyFloat_FromDouble(Py_NAN)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define Py_RETURN_INF(sign) do \
|
||||||
|
if (copysign(1., sign) == 1.) { \
|
||||||
|
return PyFloat_FromDouble(Py_HUGE_VAL); \
|
||||||
|
} else { \
|
||||||
|
return PyFloat_FromDouble(-Py_HUGE_VAL); \
|
||||||
|
} while(0)
|
||||||
|
|
||||||
|
PyAPI_FUNC(double) PyFloat_GetMax(void);
|
||||||
|
PyAPI_FUNC(double) PyFloat_GetMin(void);
|
||||||
|
PyAPI_FUNC(PyObject *) PyFloat_GetInfo(void);
|
||||||
|
|
||||||
|
/* Return Python float from string PyObject. */
|
||||||
|
PyAPI_FUNC(PyObject *) PyFloat_FromString(PyObject*);
|
||||||
|
|
||||||
|
/* Return Python float from C double. */
|
||||||
|
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-
|
||||||
|
* independent way to store floating-point values as byte strings.
|
||||||
|
* The Pack routines produce a string from a C double, and the Unpack
|
||||||
|
* routines produce a C double from such a string. The suffix (4 or 8)
|
||||||
|
* specifies the number of bytes in the string.
|
||||||
|
*
|
||||||
|
* On platforms that appear to use (see _PyFloat_Init()) IEEE-754 formats
|
||||||
|
* these functions work by copying bits. On other platforms, the formats the
|
||||||
|
* 4- byte format is identical to the IEEE-754 single precision format, and
|
||||||
|
* the 8-byte format to the IEEE-754 double precision format, although the
|
||||||
|
* packing of INFs and NaNs (if such things exist on the platform) isn't
|
||||||
|
* handled correctly, and attempting to unpack a string containing an IEEE
|
||||||
|
* INF or NaN will raise an exception.
|
||||||
|
*
|
||||||
|
* On non-IEEE platforms with more precision, or larger dynamic range, than
|
||||||
|
* 754 supports, not all values can be packed; on non-IEEE platforms with less
|
||||||
|
* precision, or smaller dynamic range, not all values can be unpacked. What
|
||||||
|
* happens in such cases is partly accidental (alas).
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* The pack routines write 2, 4 or 8 bytes, starting at p. le is a bool
|
||||||
|
* argument, true if you want the string in little-endian format (exponent
|
||||||
|
* last, at p+1, p+3 or p+7), false if you want big-endian format (exponent
|
||||||
|
* first, at p).
|
||||||
|
* Return value: 0 if all is OK, -1 if error (and an exception is
|
||||||
|
* set, most likely OverflowError).
|
||||||
|
* There are two problems on non-IEEE platforms:
|
||||||
|
* 1): What this does is undefined if x is a NaN or infinity.
|
||||||
|
* 2): -0.0 and +0.0 produce the same string.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(int) _PyFloat_Pack2(double x, unsigned char *p, int le);
|
||||||
|
PyAPI_FUNC(int) _PyFloat_Pack4(double x, unsigned char *p, int le);
|
||||||
|
PyAPI_FUNC(int) _PyFloat_Pack8(double x, unsigned char *p, int le);
|
||||||
|
|
||||||
|
/* Needed for the old way for marshal to store a floating point number.
|
||||||
|
Returns the string length copied into p, -1 on error.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(int) _PyFloat_Repr(double x, char *p, size_t len);
|
||||||
|
|
||||||
|
/* Used to get the important decimal digits of a double */
|
||||||
|
PyAPI_FUNC(int) _PyFloat_Digits(char *buf, double v, int *signum);
|
||||||
|
PyAPI_FUNC(void) _PyFloat_DigitsInit(void);
|
||||||
|
|
||||||
|
/* The unpack routines read 2, 4 or 8 bytes, starting at p. le is a bool
|
||||||
|
* argument, true if the string is in little-endian format (exponent
|
||||||
|
* last, at p+1, p+3 or p+7), false if big-endian (exponent first, at p).
|
||||||
|
* Return value: The unpacked double. On error, this is -1.0 and
|
||||||
|
* PyErr_Occurred() is true (and an exception is set, most likely
|
||||||
|
* OverflowError). Note that on a non-IEEE platform this will refuse
|
||||||
|
* to unpack a string that represents a NaN or infinity.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(double) _PyFloat_Unpack2(const unsigned char *p, int le);
|
||||||
|
PyAPI_FUNC(double) _PyFloat_Unpack4(const unsigned char *p, int le);
|
||||||
|
PyAPI_FUNC(double) _PyFloat_Unpack8(const unsigned char *p, int le);
|
||||||
|
|
||||||
|
/* free list api */
|
||||||
|
PyAPI_FUNC(int) PyFloat_ClearFreeList(void);
|
||||||
|
|
||||||
|
PyAPI_FUNC(void) _PyFloat_DebugMallocStats(FILE* out);
|
||||||
|
|
||||||
|
/* Format the object based on the format_spec, as defined in PEP 3101
|
||||||
|
(Advanced String Formatting). */
|
||||||
|
PyAPI_FUNC(int) _PyFloat_FormatAdvancedWriter(
|
||||||
|
_PyUnicodeWriter *writer,
|
||||||
|
PyObject *obj,
|
||||||
|
PyObject *format_spec,
|
||||||
|
Py_ssize_t start,
|
||||||
|
Py_ssize_t end);
|
||||||
|
#endif /* Py_LIMITED_API */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_FLOATOBJECT_H */
|
93
WENV/Include/frameobject.h
Normal file
93
WENV/Include/frameobject.h
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
|
||||||
|
/* Frame object interface */
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
#ifndef Py_FRAMEOBJECT_H
|
||||||
|
#define Py_FRAMEOBJECT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int b_type; /* what kind of block this is */
|
||||||
|
int b_handler; /* where to jump to find handler */
|
||||||
|
int b_level; /* value stack level to pop to */
|
||||||
|
} PyTryBlock;
|
||||||
|
|
||||||
|
typedef struct _frame {
|
||||||
|
PyObject_VAR_HEAD
|
||||||
|
struct _frame *f_back; /* previous frame, or NULL */
|
||||||
|
PyCodeObject *f_code; /* code segment */
|
||||||
|
PyObject *f_builtins; /* builtin symbol table (PyDictObject) */
|
||||||
|
PyObject *f_globals; /* global symbol table (PyDictObject) */
|
||||||
|
PyObject *f_locals; /* local symbol table (any mapping) */
|
||||||
|
PyObject **f_valuestack; /* points after the last local */
|
||||||
|
/* Next free slot in f_valuestack. Frame creation sets to f_valuestack.
|
||||||
|
Frame evaluation usually NULLs it, but a frame that yields sets it
|
||||||
|
to the current stack top. */
|
||||||
|
PyObject **f_stacktop;
|
||||||
|
PyObject *f_trace; /* Trace function */
|
||||||
|
char f_trace_lines; /* Emit per-line trace events? */
|
||||||
|
char f_trace_opcodes; /* Emit per-opcode trace events? */
|
||||||
|
|
||||||
|
/* Borrowed reference to a generator, or NULL */
|
||||||
|
PyObject *f_gen;
|
||||||
|
|
||||||
|
int f_lasti; /* Last instruction if called */
|
||||||
|
/* Call PyFrame_GetLineNumber() instead of reading this field
|
||||||
|
directly. As of 2.3 f_lineno is only valid when tracing is
|
||||||
|
active (i.e. when f_trace is set). At other times we use
|
||||||
|
PyCode_Addr2Line to calculate the line from the current
|
||||||
|
bytecode index. */
|
||||||
|
int f_lineno; /* Current line number */
|
||||||
|
int f_iblock; /* index in f_blockstack */
|
||||||
|
char f_executing; /* whether the frame is still executing */
|
||||||
|
PyTryBlock f_blockstack[CO_MAXBLOCKS]; /* for try and loop blocks */
|
||||||
|
PyObject *f_localsplus[1]; /* locals+stack, dynamically sized */
|
||||||
|
} PyFrameObject;
|
||||||
|
|
||||||
|
|
||||||
|
/* Standard object interface */
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyFrame_Type;
|
||||||
|
|
||||||
|
#define PyFrame_Check(op) (Py_TYPE(op) == &PyFrame_Type)
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyFrameObject *) PyFrame_New(PyThreadState *, PyCodeObject *,
|
||||||
|
PyObject *, PyObject *);
|
||||||
|
|
||||||
|
/* only internal use */
|
||||||
|
PyFrameObject* _PyFrame_New_NoTrack(PyThreadState *, PyCodeObject *,
|
||||||
|
PyObject *, PyObject *);
|
||||||
|
|
||||||
|
|
||||||
|
/* The rest of the interface is specific for frame objects */
|
||||||
|
|
||||||
|
/* Block management functions */
|
||||||
|
|
||||||
|
PyAPI_FUNC(void) PyFrame_BlockSetup(PyFrameObject *, int, int, int);
|
||||||
|
PyAPI_FUNC(PyTryBlock *) PyFrame_BlockPop(PyFrameObject *);
|
||||||
|
|
||||||
|
/* Extend the value stack */
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject **) PyFrame_ExtendStack(PyFrameObject *, int, int);
|
||||||
|
|
||||||
|
/* Conversions between "fast locals" and locals in dictionary */
|
||||||
|
|
||||||
|
PyAPI_FUNC(void) PyFrame_LocalsToFast(PyFrameObject *, int);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) PyFrame_FastToLocalsWithError(PyFrameObject *f);
|
||||||
|
PyAPI_FUNC(void) PyFrame_FastToLocals(PyFrameObject *);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) PyFrame_ClearFreeList(void);
|
||||||
|
|
||||||
|
PyAPI_FUNC(void) _PyFrame_DebugMallocStats(FILE *out);
|
||||||
|
|
||||||
|
/* Return the line of code the frame is currently executing. */
|
||||||
|
PyAPI_FUNC(int) PyFrame_GetLineNumber(PyFrameObject *);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_FRAMEOBJECT_H */
|
||||||
|
#endif /* Py_LIMITED_API */
|
103
WENV/Include/funcobject.h
Normal file
103
WENV/Include/funcobject.h
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
|
||||||
|
/* Function object interface */
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
#ifndef Py_FUNCOBJECT_H
|
||||||
|
#define Py_FUNCOBJECT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Function objects and code objects should not be confused with each other:
|
||||||
|
*
|
||||||
|
* Function objects are created by the execution of the 'def' statement.
|
||||||
|
* They reference a code object in their __code__ attribute, which is a
|
||||||
|
* purely syntactic object, i.e. nothing more than a compiled version of some
|
||||||
|
* source code lines. There is one code object per source code "fragment",
|
||||||
|
* but each code object can be referenced by zero or many function objects
|
||||||
|
* depending only on how many times the 'def' statement in the source was
|
||||||
|
* executed so far.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
PyObject *func_code; /* A code object, the __code__ attribute */
|
||||||
|
PyObject *func_globals; /* A dictionary (other mappings won't do) */
|
||||||
|
PyObject *func_defaults; /* NULL or a tuple */
|
||||||
|
PyObject *func_kwdefaults; /* NULL or a dict */
|
||||||
|
PyObject *func_closure; /* NULL or a tuple of cell objects */
|
||||||
|
PyObject *func_doc; /* The __doc__ attribute, can be anything */
|
||||||
|
PyObject *func_name; /* The __name__ attribute, a string object */
|
||||||
|
PyObject *func_dict; /* The __dict__ attribute, a dict or NULL */
|
||||||
|
PyObject *func_weakreflist; /* List of weak references */
|
||||||
|
PyObject *func_module; /* The __module__ attribute, can be anything */
|
||||||
|
PyObject *func_annotations; /* Annotations, a dict or NULL */
|
||||||
|
PyObject *func_qualname; /* The qualified name */
|
||||||
|
|
||||||
|
/* Invariant:
|
||||||
|
* func_closure contains the bindings for func_code->co_freevars, so
|
||||||
|
* PyTuple_Size(func_closure) == PyCode_GetNumFree(func_code)
|
||||||
|
* (func_closure may be NULL if PyCode_GetNumFree(func_code) == 0).
|
||||||
|
*/
|
||||||
|
} PyFunctionObject;
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyFunction_Type;
|
||||||
|
|
||||||
|
#define PyFunction_Check(op) (Py_TYPE(op) == &PyFunction_Type)
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyFunction_New(PyObject *, PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyFunction_NewWithQualName(PyObject *, PyObject *, PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyFunction_GetCode(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyFunction_GetGlobals(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyFunction_GetModule(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyFunction_GetDefaults(PyObject *);
|
||||||
|
PyAPI_FUNC(int) PyFunction_SetDefaults(PyObject *, PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyFunction_GetKwDefaults(PyObject *);
|
||||||
|
PyAPI_FUNC(int) PyFunction_SetKwDefaults(PyObject *, PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyFunction_GetClosure(PyObject *);
|
||||||
|
PyAPI_FUNC(int) PyFunction_SetClosure(PyObject *, PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyFunction_GetAnnotations(PyObject *);
|
||||||
|
PyAPI_FUNC(int) PyFunction_SetAnnotations(PyObject *, PyObject *);
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(PyObject *) _PyFunction_FastCallDict(
|
||||||
|
PyObject *func,
|
||||||
|
PyObject *const *args,
|
||||||
|
Py_ssize_t nargs,
|
||||||
|
PyObject *kwargs);
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) _PyFunction_FastCallKeywords(
|
||||||
|
PyObject *func,
|
||||||
|
PyObject *const *stack,
|
||||||
|
Py_ssize_t nargs,
|
||||||
|
PyObject *kwnames);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Macros for direct access to these values. Type checks are *not*
|
||||||
|
done, so use with care. */
|
||||||
|
#define PyFunction_GET_CODE(func) \
|
||||||
|
(((PyFunctionObject *)func) -> func_code)
|
||||||
|
#define PyFunction_GET_GLOBALS(func) \
|
||||||
|
(((PyFunctionObject *)func) -> func_globals)
|
||||||
|
#define PyFunction_GET_MODULE(func) \
|
||||||
|
(((PyFunctionObject *)func) -> func_module)
|
||||||
|
#define PyFunction_GET_DEFAULTS(func) \
|
||||||
|
(((PyFunctionObject *)func) -> func_defaults)
|
||||||
|
#define PyFunction_GET_KW_DEFAULTS(func) \
|
||||||
|
(((PyFunctionObject *)func) -> func_kwdefaults)
|
||||||
|
#define PyFunction_GET_CLOSURE(func) \
|
||||||
|
(((PyFunctionObject *)func) -> func_closure)
|
||||||
|
#define PyFunction_GET_ANNOTATIONS(func) \
|
||||||
|
(((PyFunctionObject *)func) -> func_annotations)
|
||||||
|
|
||||||
|
/* The classmethod and staticmethod types lives here, too */
|
||||||
|
PyAPI_DATA(PyTypeObject) PyClassMethod_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyStaticMethod_Type;
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyClassMethod_New(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyStaticMethod_New(PyObject *);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_FUNCOBJECT_H */
|
||||||
|
#endif /* Py_LIMITED_API */
|
105
WENV/Include/genobject.h
Normal file
105
WENV/Include/genobject.h
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
|
||||||
|
/* Generator object interface */
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
#ifndef Py_GENOBJECT_H
|
||||||
|
#define Py_GENOBJECT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct _frame; /* Avoid including frameobject.h */
|
||||||
|
|
||||||
|
/* _PyGenObject_HEAD defines the initial segment of generator
|
||||||
|
and coroutine objects. */
|
||||||
|
#define _PyGenObject_HEAD(prefix) \
|
||||||
|
PyObject_HEAD \
|
||||||
|
/* Note: gi_frame can be NULL if the generator is "finished" */ \
|
||||||
|
struct _frame *prefix##_frame; \
|
||||||
|
/* True if generator is being executed. */ \
|
||||||
|
char prefix##_running; \
|
||||||
|
/* The code object backing the generator */ \
|
||||||
|
PyObject *prefix##_code; \
|
||||||
|
/* List of weak reference. */ \
|
||||||
|
PyObject *prefix##_weakreflist; \
|
||||||
|
/* Name of the generator. */ \
|
||||||
|
PyObject *prefix##_name; \
|
||||||
|
/* Qualified name of the generator. */ \
|
||||||
|
PyObject *prefix##_qualname; \
|
||||||
|
_PyErr_StackItem prefix##_exc_state;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* The gi_ prefix is intended to remind of generator-iterator. */
|
||||||
|
_PyGenObject_HEAD(gi)
|
||||||
|
} PyGenObject;
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyGen_Type;
|
||||||
|
|
||||||
|
#define PyGen_Check(op) PyObject_TypeCheck(op, &PyGen_Type)
|
||||||
|
#define PyGen_CheckExact(op) (Py_TYPE(op) == &PyGen_Type)
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyGen_New(struct _frame *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyGen_NewWithQualName(struct _frame *,
|
||||||
|
PyObject *name, PyObject *qualname);
|
||||||
|
PyAPI_FUNC(int) PyGen_NeedsFinalizing(PyGenObject *);
|
||||||
|
PyAPI_FUNC(int) _PyGen_SetStopIterationValue(PyObject *);
|
||||||
|
PyAPI_FUNC(int) _PyGen_FetchStopIterationValue(PyObject **);
|
||||||
|
PyAPI_FUNC(PyObject *) _PyGen_Send(PyGenObject *, PyObject *);
|
||||||
|
PyObject *_PyGen_yf(PyGenObject *);
|
||||||
|
PyAPI_FUNC(void) _PyGen_Finalize(PyObject *self);
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
typedef struct {
|
||||||
|
_PyGenObject_HEAD(cr)
|
||||||
|
PyObject *cr_origin;
|
||||||
|
} PyCoroObject;
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyCoro_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) _PyCoroWrapper_Type;
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) _PyAIterWrapper_Type;
|
||||||
|
|
||||||
|
#define PyCoro_CheckExact(op) (Py_TYPE(op) == &PyCoro_Type)
|
||||||
|
PyObject *_PyCoro_GetAwaitableIter(PyObject *o);
|
||||||
|
PyAPI_FUNC(PyObject *) PyCoro_New(struct _frame *,
|
||||||
|
PyObject *name, PyObject *qualname);
|
||||||
|
|
||||||
|
/* Asynchronous Generators */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
_PyGenObject_HEAD(ag)
|
||||||
|
PyObject *ag_finalizer;
|
||||||
|
|
||||||
|
/* Flag is set to 1 when hooks set up by sys.set_asyncgen_hooks
|
||||||
|
were called on the generator, to avoid calling them more
|
||||||
|
than once. */
|
||||||
|
int ag_hooks_inited;
|
||||||
|
|
||||||
|
/* Flag is set to 1 when aclose() is called for the first time, or
|
||||||
|
when a StopAsyncIteration exception is raised. */
|
||||||
|
int ag_closed;
|
||||||
|
} PyAsyncGenObject;
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyAsyncGen_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) _PyAsyncGenASend_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) _PyAsyncGenWrappedValue_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) _PyAsyncGenAThrow_Type;
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyAsyncGen_New(struct _frame *,
|
||||||
|
PyObject *name, PyObject *qualname);
|
||||||
|
|
||||||
|
#define PyAsyncGen_CheckExact(op) (Py_TYPE(op) == &PyAsyncGen_Type)
|
||||||
|
|
||||||
|
PyObject *_PyAsyncGenValueWrapperNew(PyObject *);
|
||||||
|
|
||||||
|
int PyAsyncGen_ClearFreeLists(void);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef _PyGenObject_HEAD
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_GENOBJECT_H */
|
||||||
|
#endif /* Py_LIMITED_API */
|
89
WENV/Include/graminit.h
Normal file
89
WENV/Include/graminit.h
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
/* Generated by Parser/pgen */
|
||||||
|
|
||||||
|
#define single_input 256
|
||||||
|
#define file_input 257
|
||||||
|
#define eval_input 258
|
||||||
|
#define decorator 259
|
||||||
|
#define decorators 260
|
||||||
|
#define decorated 261
|
||||||
|
#define async_funcdef 262
|
||||||
|
#define funcdef 263
|
||||||
|
#define parameters 264
|
||||||
|
#define typedargslist 265
|
||||||
|
#define tfpdef 266
|
||||||
|
#define varargslist 267
|
||||||
|
#define vfpdef 268
|
||||||
|
#define stmt 269
|
||||||
|
#define simple_stmt 270
|
||||||
|
#define small_stmt 271
|
||||||
|
#define expr_stmt 272
|
||||||
|
#define annassign 273
|
||||||
|
#define testlist_star_expr 274
|
||||||
|
#define augassign 275
|
||||||
|
#define del_stmt 276
|
||||||
|
#define pass_stmt 277
|
||||||
|
#define flow_stmt 278
|
||||||
|
#define break_stmt 279
|
||||||
|
#define continue_stmt 280
|
||||||
|
#define return_stmt 281
|
||||||
|
#define yield_stmt 282
|
||||||
|
#define raise_stmt 283
|
||||||
|
#define import_stmt 284
|
||||||
|
#define import_name 285
|
||||||
|
#define import_from 286
|
||||||
|
#define import_as_name 287
|
||||||
|
#define dotted_as_name 288
|
||||||
|
#define import_as_names 289
|
||||||
|
#define dotted_as_names 290
|
||||||
|
#define dotted_name 291
|
||||||
|
#define global_stmt 292
|
||||||
|
#define nonlocal_stmt 293
|
||||||
|
#define assert_stmt 294
|
||||||
|
#define compound_stmt 295
|
||||||
|
#define async_stmt 296
|
||||||
|
#define if_stmt 297
|
||||||
|
#define while_stmt 298
|
||||||
|
#define for_stmt 299
|
||||||
|
#define try_stmt 300
|
||||||
|
#define with_stmt 301
|
||||||
|
#define with_item 302
|
||||||
|
#define except_clause 303
|
||||||
|
#define suite 304
|
||||||
|
#define test 305
|
||||||
|
#define test_nocond 306
|
||||||
|
#define lambdef 307
|
||||||
|
#define lambdef_nocond 308
|
||||||
|
#define or_test 309
|
||||||
|
#define and_test 310
|
||||||
|
#define not_test 311
|
||||||
|
#define comparison 312
|
||||||
|
#define comp_op 313
|
||||||
|
#define star_expr 314
|
||||||
|
#define expr 315
|
||||||
|
#define xor_expr 316
|
||||||
|
#define and_expr 317
|
||||||
|
#define shift_expr 318
|
||||||
|
#define arith_expr 319
|
||||||
|
#define term 320
|
||||||
|
#define factor 321
|
||||||
|
#define power 322
|
||||||
|
#define atom_expr 323
|
||||||
|
#define atom 324
|
||||||
|
#define testlist_comp 325
|
||||||
|
#define trailer 326
|
||||||
|
#define subscriptlist 327
|
||||||
|
#define subscript 328
|
||||||
|
#define sliceop 329
|
||||||
|
#define exprlist 330
|
||||||
|
#define testlist 331
|
||||||
|
#define dictorsetmaker 332
|
||||||
|
#define classdef 333
|
||||||
|
#define arglist 334
|
||||||
|
#define argument 335
|
||||||
|
#define comp_iter 336
|
||||||
|
#define sync_comp_for 337
|
||||||
|
#define comp_for 338
|
||||||
|
#define comp_if 339
|
||||||
|
#define encoding_decl 340
|
||||||
|
#define yield_expr 341
|
||||||
|
#define yield_arg 342
|
94
WENV/Include/grammar.h
Normal file
94
WENV/Include/grammar.h
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
|
||||||
|
/* Grammar interface */
|
||||||
|
|
||||||
|
#ifndef Py_GRAMMAR_H
|
||||||
|
#define Py_GRAMMAR_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "bitset.h" /* Sigh... */
|
||||||
|
|
||||||
|
/* A label of an arc */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int lb_type;
|
||||||
|
char *lb_str;
|
||||||
|
} label;
|
||||||
|
|
||||||
|
#define EMPTY 0 /* Label number 0 is by definition the empty label */
|
||||||
|
|
||||||
|
/* A list of labels */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int ll_nlabels;
|
||||||
|
label *ll_label;
|
||||||
|
} labellist;
|
||||||
|
|
||||||
|
/* An arc from one state to another */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
short a_lbl; /* Label of this arc */
|
||||||
|
short a_arrow; /* State where this arc goes to */
|
||||||
|
} arc;
|
||||||
|
|
||||||
|
/* A state in a DFA */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int s_narcs;
|
||||||
|
arc *s_arc; /* Array of arcs */
|
||||||
|
|
||||||
|
/* Optional accelerators */
|
||||||
|
int s_lower; /* Lowest label index */
|
||||||
|
int s_upper; /* Highest label index */
|
||||||
|
int *s_accel; /* Accelerator */
|
||||||
|
int s_accept; /* Nonzero for accepting state */
|
||||||
|
} state;
|
||||||
|
|
||||||
|
/* A DFA */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int d_type; /* Non-terminal this represents */
|
||||||
|
char *d_name; /* For printing */
|
||||||
|
int d_initial; /* Initial state */
|
||||||
|
int d_nstates;
|
||||||
|
state *d_state; /* Array of states */
|
||||||
|
bitset d_first;
|
||||||
|
} dfa;
|
||||||
|
|
||||||
|
/* A grammar */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int g_ndfas;
|
||||||
|
dfa *g_dfa; /* Array of DFAs */
|
||||||
|
labellist g_ll;
|
||||||
|
int g_start; /* Start symbol of the grammar */
|
||||||
|
int g_accel; /* Set if accelerators present */
|
||||||
|
} grammar;
|
||||||
|
|
||||||
|
/* FUNCTIONS */
|
||||||
|
|
||||||
|
grammar *newgrammar(int start);
|
||||||
|
void freegrammar(grammar *g);
|
||||||
|
dfa *adddfa(grammar *g, int type, const char *name);
|
||||||
|
int addstate(dfa *d);
|
||||||
|
void addarc(dfa *d, int from, int to, int lbl);
|
||||||
|
dfa *PyGrammar_FindDFA(grammar *g, int type);
|
||||||
|
|
||||||
|
int addlabel(labellist *ll, int type, const char *str);
|
||||||
|
int findlabel(labellist *ll, int type, const char *str);
|
||||||
|
const char *PyGrammar_LabelRepr(label *lb);
|
||||||
|
void translatelabels(grammar *g);
|
||||||
|
|
||||||
|
void addfirstsets(grammar *g);
|
||||||
|
|
||||||
|
void PyGrammar_AddAccelerators(grammar *g);
|
||||||
|
void PyGrammar_RemoveAccelerators(grammar *);
|
||||||
|
|
||||||
|
void printgrammar(grammar *g, FILE *fp);
|
||||||
|
void printnonterminals(grammar *g, FILE *fp);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_GRAMMAR_H */
|
151
WENV/Include/import.h
Normal file
151
WENV/Include/import.h
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
|
||||||
|
/* Module definition and import interface */
|
||||||
|
|
||||||
|
#ifndef Py_IMPORT_H
|
||||||
|
#define Py_IMPORT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(_PyInitError) _PyImportZip_Init(void);
|
||||||
|
|
||||||
|
PyMODINIT_FUNC PyInit__imp(void);
|
||||||
|
#endif /* !Py_LIMITED_API */
|
||||||
|
PyAPI_FUNC(long) PyImport_GetMagicNumber(void);
|
||||||
|
PyAPI_FUNC(const char *) PyImport_GetMagicTag(void);
|
||||||
|
PyAPI_FUNC(PyObject *) PyImport_ExecCodeModule(
|
||||||
|
const char *name, /* UTF-8 encoded string */
|
||||||
|
PyObject *co
|
||||||
|
);
|
||||||
|
PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleEx(
|
||||||
|
const char *name, /* UTF-8 encoded string */
|
||||||
|
PyObject *co,
|
||||||
|
const char *pathname /* decoded from the filesystem encoding */
|
||||||
|
);
|
||||||
|
PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleWithPathnames(
|
||||||
|
const char *name, /* UTF-8 encoded string */
|
||||||
|
PyObject *co,
|
||||||
|
const char *pathname, /* decoded from the filesystem encoding */
|
||||||
|
const char *cpathname /* decoded from the filesystem encoding */
|
||||||
|
);
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
|
||||||
|
PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleObject(
|
||||||
|
PyObject *name,
|
||||||
|
PyObject *co,
|
||||||
|
PyObject *pathname,
|
||||||
|
PyObject *cpathname
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(PyObject *) PyImport_GetModuleDict(void);
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000
|
||||||
|
PyAPI_FUNC(PyObject *) PyImport_GetModule(PyObject *name);
|
||||||
|
#endif
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(int) _PyImport_IsInitialized(PyInterpreterState *);
|
||||||
|
PyAPI_FUNC(PyObject *) _PyImport_GetModuleId(struct _Py_Identifier *name);
|
||||||
|
PyAPI_FUNC(PyObject *) _PyImport_AddModuleObject(PyObject *name,
|
||||||
|
PyObject *modules);
|
||||||
|
PyAPI_FUNC(int) _PyImport_SetModule(PyObject *name, PyObject *module);
|
||||||
|
PyAPI_FUNC(int) _PyImport_SetModuleString(const char *name, PyObject* module);
|
||||||
|
#endif
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
|
||||||
|
PyAPI_FUNC(PyObject *) PyImport_AddModuleObject(
|
||||||
|
PyObject *name
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(PyObject *) PyImport_AddModule(
|
||||||
|
const char *name /* UTF-8 encoded string */
|
||||||
|
);
|
||||||
|
PyAPI_FUNC(PyObject *) PyImport_ImportModule(
|
||||||
|
const char *name /* UTF-8 encoded string */
|
||||||
|
);
|
||||||
|
PyAPI_FUNC(PyObject *) PyImport_ImportModuleNoBlock(
|
||||||
|
const char *name /* UTF-8 encoded string */
|
||||||
|
);
|
||||||
|
PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevel(
|
||||||
|
const char *name, /* UTF-8 encoded string */
|
||||||
|
PyObject *globals,
|
||||||
|
PyObject *locals,
|
||||||
|
PyObject *fromlist,
|
||||||
|
int level
|
||||||
|
);
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
|
||||||
|
PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevelObject(
|
||||||
|
PyObject *name,
|
||||||
|
PyObject *globals,
|
||||||
|
PyObject *locals,
|
||||||
|
PyObject *fromlist,
|
||||||
|
int level
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define PyImport_ImportModuleEx(n, g, l, f) \
|
||||||
|
PyImport_ImportModuleLevel(n, g, l, f, 0)
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyImport_GetImporter(PyObject *path);
|
||||||
|
PyAPI_FUNC(PyObject *) PyImport_Import(PyObject *name);
|
||||||
|
PyAPI_FUNC(PyObject *) PyImport_ReloadModule(PyObject *m);
|
||||||
|
PyAPI_FUNC(void) PyImport_Cleanup(void);
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
|
||||||
|
PyAPI_FUNC(int) PyImport_ImportFrozenModuleObject(
|
||||||
|
PyObject *name
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(int) PyImport_ImportFrozenModule(
|
||||||
|
const char *name /* UTF-8 encoded string */
|
||||||
|
);
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(void) _PyImport_AcquireLock(void);
|
||||||
|
PyAPI_FUNC(int) _PyImport_ReleaseLock(void);
|
||||||
|
|
||||||
|
PyAPI_FUNC(void) _PyImport_ReInitLock(void);
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) _PyImport_FindBuiltin(
|
||||||
|
const char *name, /* UTF-8 encoded string */
|
||||||
|
PyObject *modules
|
||||||
|
);
|
||||||
|
PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObject(PyObject *, PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObjectEx(PyObject *, PyObject *,
|
||||||
|
PyObject *);
|
||||||
|
PyAPI_FUNC(int) _PyImport_FixupBuiltin(
|
||||||
|
PyObject *mod,
|
||||||
|
const char *name, /* UTF-8 encoded string */
|
||||||
|
PyObject *modules
|
||||||
|
);
|
||||||
|
PyAPI_FUNC(int) _PyImport_FixupExtensionObject(PyObject*, PyObject *,
|
||||||
|
PyObject *, PyObject *);
|
||||||
|
|
||||||
|
struct _inittab {
|
||||||
|
const char *name; /* ASCII encoded string */
|
||||||
|
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_FUNC(int) PyImport_AppendInittab(
|
||||||
|
const char *name, /* ASCII encoded string */
|
||||||
|
PyObject* (*initfunc)(void)
|
||||||
|
);
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
struct _frozen {
|
||||||
|
const char *name; /* ASCII encoded string */
|
||||||
|
const unsigned char *code;
|
||||||
|
int size;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Embedding apps may change this pointer to point to their favorite
|
||||||
|
collection of frozen modules: */
|
||||||
|
|
||||||
|
PyAPI_DATA(const struct _frozen *) PyImport_FrozenModules;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_IMPORT_H */
|
52
WENV/Include/internal/ceval.h
Normal file
52
WENV/Include/internal/ceval.h
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#ifndef Py_INTERNAL_CEVAL_H
|
||||||
|
#define Py_INTERNAL_CEVAL_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "pyatomic.h"
|
||||||
|
#include "pythread.h"
|
||||||
|
|
||||||
|
struct _pending_calls {
|
||||||
|
unsigned long main_thread;
|
||||||
|
PyThread_type_lock lock;
|
||||||
|
/* Request for running pending calls. */
|
||||||
|
_Py_atomic_int calls_to_do;
|
||||||
|
/* Request for looking at the `async_exc` field of the current
|
||||||
|
thread state.
|
||||||
|
Guarded by the GIL. */
|
||||||
|
int async_exc;
|
||||||
|
#define NPENDINGCALLS 32
|
||||||
|
struct {
|
||||||
|
int (*func)(void *);
|
||||||
|
void *arg;
|
||||||
|
} calls[NPENDINGCALLS];
|
||||||
|
int first;
|
||||||
|
int last;
|
||||||
|
};
|
||||||
|
|
||||||
|
#include "internal/gil.h"
|
||||||
|
|
||||||
|
struct _ceval_runtime_state {
|
||||||
|
int recursion_limit;
|
||||||
|
/* Records whether tracing is on for any thread. Counts the number
|
||||||
|
of threads for which tstate->c_tracefunc is non-NULL, so if the
|
||||||
|
value is 0, we know we don't have to check this thread's
|
||||||
|
c_tracefunc. This speeds up the if statement in
|
||||||
|
PyEval_EvalFrameEx() after fast_next_opcode. */
|
||||||
|
int tracing_possible;
|
||||||
|
/* This single variable consolidates all requests to break out of
|
||||||
|
the fast path in the eval loop. */
|
||||||
|
_Py_atomic_int eval_breaker;
|
||||||
|
/* Request for dropping the GIL */
|
||||||
|
_Py_atomic_int gil_drop_request;
|
||||||
|
struct _pending_calls pending;
|
||||||
|
struct _gil_runtime_state gil;
|
||||||
|
};
|
||||||
|
|
||||||
|
PyAPI_FUNC(void) _PyEval_Initialize(struct _ceval_runtime_state *);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_INTERNAL_CEVAL_H */
|
91
WENV/Include/internal/condvar.h
Normal file
91
WENV/Include/internal/condvar.h
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
#ifndef Py_INTERNAL_CONDVAR_H
|
||||||
|
#define Py_INTERNAL_CONDVAR_H
|
||||||
|
|
||||||
|
#ifndef _POSIX_THREADS
|
||||||
|
/* This means pthreads are not implemented in libc headers, hence the macro
|
||||||
|
not present in unistd.h. But they still can be implemented as an external
|
||||||
|
library (e.g. gnu pth in pthread emulation) */
|
||||||
|
# ifdef HAVE_PTHREAD_H
|
||||||
|
# include <pthread.h> /* _POSIX_THREADS */
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _POSIX_THREADS
|
||||||
|
/*
|
||||||
|
* POSIX support
|
||||||
|
*/
|
||||||
|
#define Py_HAVE_CONDVAR
|
||||||
|
|
||||||
|
#include <pthread.h>
|
||||||
|
|
||||||
|
#define PyMUTEX_T pthread_mutex_t
|
||||||
|
#define PyCOND_T pthread_cond_t
|
||||||
|
|
||||||
|
#elif defined(NT_THREADS)
|
||||||
|
/*
|
||||||
|
* Windows (XP, 2003 server and later, as well as (hopefully) CE) support
|
||||||
|
*
|
||||||
|
* Emulated condition variables ones that work with XP and later, plus
|
||||||
|
* example native support on VISTA and onwards.
|
||||||
|
*/
|
||||||
|
#define Py_HAVE_CONDVAR
|
||||||
|
|
||||||
|
/* include windows if it hasn't been done before */
|
||||||
|
#define WIN32_LEAN_AND_MEAN
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
/* options */
|
||||||
|
/* non-emulated condition variables are provided for those that want
|
||||||
|
* to target Windows Vista. Modify this macro to enable them.
|
||||||
|
*/
|
||||||
|
#ifndef _PY_EMULATED_WIN_CV
|
||||||
|
#define _PY_EMULATED_WIN_CV 1 /* use emulated condition variables */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* fall back to emulation if not targeting Vista */
|
||||||
|
#if !defined NTDDI_VISTA || NTDDI_VERSION < NTDDI_VISTA
|
||||||
|
#undef _PY_EMULATED_WIN_CV
|
||||||
|
#define _PY_EMULATED_WIN_CV 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if _PY_EMULATED_WIN_CV
|
||||||
|
|
||||||
|
typedef CRITICAL_SECTION PyMUTEX_T;
|
||||||
|
|
||||||
|
/* The ConditionVariable object. From XP onwards it is easily emulated
|
||||||
|
with a Semaphore.
|
||||||
|
Semaphores are available on Windows XP (2003 server) and later.
|
||||||
|
We use a Semaphore rather than an auto-reset event, because although
|
||||||
|
an auto-resent event might appear to solve the lost-wakeup bug (race
|
||||||
|
condition between releasing the outer lock and waiting) because it
|
||||||
|
maintains state even though a wait hasn't happened, there is still
|
||||||
|
a lost wakeup problem if more than one thread are interrupted in the
|
||||||
|
critical place. A semaphore solves that, because its state is
|
||||||
|
counted, not Boolean.
|
||||||
|
Because it is ok to signal a condition variable with no one
|
||||||
|
waiting, we need to keep track of the number of
|
||||||
|
waiting threads. Otherwise, the semaphore's state could rise
|
||||||
|
without bound. This also helps reduce the number of "spurious wakeups"
|
||||||
|
that would otherwise happen.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct _PyCOND_T
|
||||||
|
{
|
||||||
|
HANDLE sem;
|
||||||
|
int waiting; /* to allow PyCOND_SIGNAL to be a no-op */
|
||||||
|
} PyCOND_T;
|
||||||
|
|
||||||
|
#else /* !_PY_EMULATED_WIN_CV */
|
||||||
|
|
||||||
|
/* Use native Win7 primitives if build target is Win7 or higher */
|
||||||
|
|
||||||
|
/* SRWLOCK is faster and better than CriticalSection */
|
||||||
|
typedef SRWLOCK PyMUTEX_T;
|
||||||
|
|
||||||
|
typedef CONDITION_VARIABLE PyCOND_T;
|
||||||
|
|
||||||
|
#endif /* _PY_EMULATED_WIN_CV */
|
||||||
|
|
||||||
|
#endif /* _POSIX_THREADS, NT_THREADS */
|
||||||
|
|
||||||
|
#endif /* Py_INTERNAL_CONDVAR_H */
|
41
WENV/Include/internal/context.h
Normal file
41
WENV/Include/internal/context.h
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
#ifndef Py_INTERNAL_CONTEXT_H
|
||||||
|
#define Py_INTERNAL_CONTEXT_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "internal/hamt.h"
|
||||||
|
|
||||||
|
|
||||||
|
struct _pycontextobject {
|
||||||
|
PyObject_HEAD
|
||||||
|
PyContext *ctx_prev;
|
||||||
|
PyHamtObject *ctx_vars;
|
||||||
|
PyObject *ctx_weakreflist;
|
||||||
|
int ctx_entered;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct _pycontextvarobject {
|
||||||
|
PyObject_HEAD
|
||||||
|
PyObject *var_name;
|
||||||
|
PyObject *var_default;
|
||||||
|
PyObject *var_cached;
|
||||||
|
uint64_t var_cached_tsid;
|
||||||
|
uint64_t var_cached_tsver;
|
||||||
|
Py_hash_t var_hash;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct _pycontexttokenobject {
|
||||||
|
PyObject_HEAD
|
||||||
|
PyContext *tok_ctx;
|
||||||
|
PyContextVar *tok_var;
|
||||||
|
PyObject *tok_oldval;
|
||||||
|
int tok_used;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
int _PyContext_Init(void);
|
||||||
|
void _PyContext_Fini(void);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* !Py_INTERNAL_CONTEXT_H */
|
46
WENV/Include/internal/gil.h
Normal file
46
WENV/Include/internal/gil.h
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#ifndef Py_INTERNAL_GIL_H
|
||||||
|
#define Py_INTERNAL_GIL_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "pyatomic.h"
|
||||||
|
|
||||||
|
#include "internal/condvar.h"
|
||||||
|
#ifndef Py_HAVE_CONDVAR
|
||||||
|
#error You need either a POSIX-compatible or a Windows system!
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Enable if you want to force the switching of threads at least
|
||||||
|
every `interval`. */
|
||||||
|
#undef FORCE_SWITCHING
|
||||||
|
#define FORCE_SWITCHING
|
||||||
|
|
||||||
|
struct _gil_runtime_state {
|
||||||
|
/* microseconds (the Python API uses seconds, though) */
|
||||||
|
unsigned long interval;
|
||||||
|
/* Last PyThreadState holding / having held the GIL. This helps us
|
||||||
|
know whether anyone else was scheduled after we dropped the GIL. */
|
||||||
|
_Py_atomic_address last_holder;
|
||||||
|
/* Whether the GIL is already taken (-1 if uninitialized). This is
|
||||||
|
atomic because it can be read without any lock taken in ceval.c. */
|
||||||
|
_Py_atomic_int locked;
|
||||||
|
/* Number of GIL switches since the beginning. */
|
||||||
|
unsigned long switch_number;
|
||||||
|
/* This condition variable allows one or several threads to wait
|
||||||
|
until the GIL is released. In addition, the mutex also protects
|
||||||
|
the above variables. */
|
||||||
|
PyCOND_T cond;
|
||||||
|
PyMUTEX_T mutex;
|
||||||
|
#ifdef FORCE_SWITCHING
|
||||||
|
/* This condition variable helps the GIL-releasing thread wait for
|
||||||
|
a GIL-awaiting thread to be scheduled and take the GIL. */
|
||||||
|
PyCOND_T switch_cond;
|
||||||
|
PyMUTEX_T switch_mutex;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_INTERNAL_GIL_H */
|
113
WENV/Include/internal/hamt.h
Normal file
113
WENV/Include/internal/hamt.h
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
#ifndef Py_INTERNAL_HAMT_H
|
||||||
|
#define Py_INTERNAL_HAMT_H
|
||||||
|
|
||||||
|
|
||||||
|
#define _Py_HAMT_MAX_TREE_DEPTH 7
|
||||||
|
|
||||||
|
|
||||||
|
#define PyHamt_Check(o) (Py_TYPE(o) == &_PyHamt_Type)
|
||||||
|
|
||||||
|
|
||||||
|
/* Abstract tree node. */
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
} PyHamtNode;
|
||||||
|
|
||||||
|
|
||||||
|
/* An HAMT immutable mapping collection. */
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
PyHamtNode *h_root;
|
||||||
|
PyObject *h_weakreflist;
|
||||||
|
Py_ssize_t h_count;
|
||||||
|
} PyHamtObject;
|
||||||
|
|
||||||
|
|
||||||
|
/* A struct to hold the state of depth-first traverse of the tree.
|
||||||
|
|
||||||
|
HAMT is an immutable collection. Iterators will hold a strong reference
|
||||||
|
to it, and every node in the HAMT has strong references to its children.
|
||||||
|
|
||||||
|
So for iterators, we can implement zero allocations and zero reference
|
||||||
|
inc/dec depth-first iteration.
|
||||||
|
|
||||||
|
- i_nodes: an array of seven pointers to tree nodes
|
||||||
|
- i_level: the current node in i_nodes
|
||||||
|
- i_pos: an array of positions within nodes in i_nodes.
|
||||||
|
*/
|
||||||
|
typedef struct {
|
||||||
|
PyHamtNode *i_nodes[_Py_HAMT_MAX_TREE_DEPTH];
|
||||||
|
Py_ssize_t i_pos[_Py_HAMT_MAX_TREE_DEPTH];
|
||||||
|
int8_t i_level;
|
||||||
|
} PyHamtIteratorState;
|
||||||
|
|
||||||
|
|
||||||
|
/* Base iterator object.
|
||||||
|
|
||||||
|
Contains the iteration state, a pointer to the HAMT tree,
|
||||||
|
and a pointer to the 'yield function'. The latter is a simple
|
||||||
|
function that returns a key/value tuple for the 'Items' iterator,
|
||||||
|
just a key for the 'Keys' iterator, and a value for the 'Values'
|
||||||
|
iterator.
|
||||||
|
*/
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
PyHamtObject *hi_obj;
|
||||||
|
PyHamtIteratorState hi_iter;
|
||||||
|
binaryfunc hi_yield;
|
||||||
|
} PyHamtIterator;
|
||||||
|
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) _PyHamt_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) _PyHamt_ArrayNode_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) _PyHamt_BitmapNode_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) _PyHamt_CollisionNode_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) _PyHamtKeys_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) _PyHamtValues_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) _PyHamtItems_Type;
|
||||||
|
|
||||||
|
|
||||||
|
/* Create a new HAMT immutable mapping. */
|
||||||
|
PyHamtObject * _PyHamt_New(void);
|
||||||
|
|
||||||
|
/* Return a new collection based on "o", but with an additional
|
||||||
|
key/val pair. */
|
||||||
|
PyHamtObject * _PyHamt_Assoc(PyHamtObject *o, PyObject *key, PyObject *val);
|
||||||
|
|
||||||
|
/* Return a new collection based on "o", but without "key". */
|
||||||
|
PyHamtObject * _PyHamt_Without(PyHamtObject *o, PyObject *key);
|
||||||
|
|
||||||
|
/* Find "key" in the "o" collection.
|
||||||
|
|
||||||
|
Return:
|
||||||
|
- -1: An error occurred.
|
||||||
|
- 0: "key" wasn't found in "o".
|
||||||
|
- 1: "key" is in "o"; "*val" is set to its value (a borrowed ref).
|
||||||
|
*/
|
||||||
|
int _PyHamt_Find(PyHamtObject *o, PyObject *key, PyObject **val);
|
||||||
|
|
||||||
|
/* Check if "v" is equal to "w".
|
||||||
|
|
||||||
|
Return:
|
||||||
|
- 0: v != w
|
||||||
|
- 1: v == w
|
||||||
|
- -1: An error occurred.
|
||||||
|
*/
|
||||||
|
int _PyHamt_Eq(PyHamtObject *v, PyHamtObject *w);
|
||||||
|
|
||||||
|
/* Return the size of "o"; equivalent of "len(o)". */
|
||||||
|
Py_ssize_t _PyHamt_Len(PyHamtObject *o);
|
||||||
|
|
||||||
|
/* Return a Keys iterator over "o". */
|
||||||
|
PyObject * _PyHamt_NewIterKeys(PyHamtObject *o);
|
||||||
|
|
||||||
|
/* Return a Values iterator over "o". */
|
||||||
|
PyObject * _PyHamt_NewIterValues(PyHamtObject *o);
|
||||||
|
|
||||||
|
/* Return a Items iterator over "o". */
|
||||||
|
PyObject * _PyHamt_NewIterItems(PyHamtObject *o);
|
||||||
|
|
||||||
|
int _PyHamt_Init(void);
|
||||||
|
void _PyHamt_Fini(void);
|
||||||
|
|
||||||
|
#endif /* !Py_INTERNAL_HAMT_H */
|
6
WENV/Include/internal/hash.h
Normal file
6
WENV/Include/internal/hash.h
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#ifndef Py_INTERNAL_HASH_H
|
||||||
|
#define Py_INTERNAL_HASH_H
|
||||||
|
|
||||||
|
uint64_t _Py_KeyedHash(uint64_t, const char *, Py_ssize_t);
|
||||||
|
|
||||||
|
#endif
|
6
WENV/Include/internal/import.h
Normal file
6
WENV/Include/internal/import.h
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#ifndef Py_INTERNAL_IMPORT_H
|
||||||
|
#define Py_INTERNAL_IMPORT_H
|
||||||
|
|
||||||
|
extern const char *_Py_CheckHashBasedPycsMode;
|
||||||
|
|
||||||
|
#endif
|
151
WENV/Include/internal/mem.h
Normal file
151
WENV/Include/internal/mem.h
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
#ifndef Py_INTERNAL_MEM_H
|
||||||
|
#define Py_INTERNAL_MEM_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "objimpl.h"
|
||||||
|
#include "pymem.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* GC runtime state */
|
||||||
|
|
||||||
|
/* If we change this, we need to change the default value in the
|
||||||
|
signature of gc.collect. */
|
||||||
|
#define NUM_GENERATIONS 3
|
||||||
|
|
||||||
|
/*
|
||||||
|
NOTE: about the counting of long-lived objects.
|
||||||
|
|
||||||
|
To limit the cost of garbage collection, there are two strategies;
|
||||||
|
- make each collection faster, e.g. by scanning fewer objects
|
||||||
|
- do less collections
|
||||||
|
This heuristic is about the latter strategy.
|
||||||
|
|
||||||
|
In addition to the various configurable thresholds, we only trigger a
|
||||||
|
full collection if the ratio
|
||||||
|
long_lived_pending / long_lived_total
|
||||||
|
is above a given value (hardwired to 25%).
|
||||||
|
|
||||||
|
The reason is that, while "non-full" collections (i.e., collections of
|
||||||
|
the young and middle generations) will always examine roughly the same
|
||||||
|
number of objects -- determined by the aforementioned thresholds --,
|
||||||
|
the cost of a full collection is proportional to the total number of
|
||||||
|
long-lived objects, which is virtually unbounded.
|
||||||
|
|
||||||
|
Indeed, it has been remarked that doing a full collection every
|
||||||
|
<constant number> of object creations entails a dramatic performance
|
||||||
|
degradation in workloads which consist in creating and storing lots of
|
||||||
|
long-lived objects (e.g. building a large list of GC-tracked objects would
|
||||||
|
show quadratic performance, instead of linear as expected: see issue #4074).
|
||||||
|
|
||||||
|
Using the above ratio, instead, yields amortized linear performance in
|
||||||
|
the total number of objects (the effect of which can be summarized
|
||||||
|
thusly: "each full garbage collection is more and more costly as the
|
||||||
|
number of objects grows, but we do fewer and fewer of them").
|
||||||
|
|
||||||
|
This heuristic was suggested by Martin von Löwis on python-dev in
|
||||||
|
June 2008. His original analysis and proposal can be found at:
|
||||||
|
http://mail.python.org/pipermail/python-dev/2008-June/080579.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
NOTE: about untracking of mutable objects.
|
||||||
|
|
||||||
|
Certain types of container cannot participate in a reference cycle, and
|
||||||
|
so do not need to be tracked by the garbage collector. Untracking these
|
||||||
|
objects reduces the cost of garbage collections. However, determining
|
||||||
|
which objects may be untracked is not free, and the costs must be
|
||||||
|
weighed against the benefits for garbage collection.
|
||||||
|
|
||||||
|
There are two possible strategies for when to untrack a container:
|
||||||
|
|
||||||
|
i) When the container is created.
|
||||||
|
ii) When the container is examined by the garbage collector.
|
||||||
|
|
||||||
|
Tuples containing only immutable objects (integers, strings etc, and
|
||||||
|
recursively, tuples of immutable objects) do not need to be tracked.
|
||||||
|
The interpreter creates a large number of tuples, many of which will
|
||||||
|
not survive until garbage collection. It is therefore not worthwhile
|
||||||
|
to untrack eligible tuples at creation time.
|
||||||
|
|
||||||
|
Instead, all tuples except the empty tuple are tracked when created.
|
||||||
|
During garbage collection it is determined whether any surviving tuples
|
||||||
|
can be untracked. A tuple can be untracked if all of its contents are
|
||||||
|
already not tracked. Tuples are examined for untracking in all garbage
|
||||||
|
collection cycles. It may take more than one cycle to untrack a tuple.
|
||||||
|
|
||||||
|
Dictionaries containing only immutable objects also do not need to be
|
||||||
|
tracked. Dictionaries are untracked when created. If a tracked item is
|
||||||
|
inserted into a dictionary (either as a key or value), the dictionary
|
||||||
|
becomes tracked. During a full garbage collection (all generations),
|
||||||
|
the collector will untrack any dictionaries whose contents are not
|
||||||
|
tracked.
|
||||||
|
|
||||||
|
The module provides the python function is_tracked(obj), which returns
|
||||||
|
the CURRENT tracking status of the object. Subsequent garbage
|
||||||
|
collections may change the tracking status of the object.
|
||||||
|
|
||||||
|
Untracking of certain containers was introduced in issue #4688, and
|
||||||
|
the algorithm was refined in response to issue #14775.
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct gc_generation {
|
||||||
|
PyGC_Head head;
|
||||||
|
int threshold; /* collection threshold */
|
||||||
|
int count; /* count of allocations or collections of younger
|
||||||
|
generations */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Running stats per generation */
|
||||||
|
struct gc_generation_stats {
|
||||||
|
/* total number of collections */
|
||||||
|
Py_ssize_t collections;
|
||||||
|
/* total number of collected objects */
|
||||||
|
Py_ssize_t collected;
|
||||||
|
/* total number of uncollectable objects (put into gc.garbage) */
|
||||||
|
Py_ssize_t uncollectable;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct _gc_runtime_state {
|
||||||
|
/* List of objects that still need to be cleaned up, singly linked
|
||||||
|
* via their gc headers' gc_prev pointers. */
|
||||||
|
PyObject *trash_delete_later;
|
||||||
|
/* Current call-stack depth of tp_dealloc calls. */
|
||||||
|
int trash_delete_nesting;
|
||||||
|
|
||||||
|
int enabled;
|
||||||
|
int debug;
|
||||||
|
/* linked lists of container objects */
|
||||||
|
struct gc_generation generations[NUM_GENERATIONS];
|
||||||
|
PyGC_Head *generation0;
|
||||||
|
/* a permanent generation which won't be collected */
|
||||||
|
struct gc_generation permanent_generation;
|
||||||
|
struct gc_generation_stats generation_stats[NUM_GENERATIONS];
|
||||||
|
/* true if we are currently running the collector */
|
||||||
|
int collecting;
|
||||||
|
/* list of uncollectable objects */
|
||||||
|
PyObject *garbage;
|
||||||
|
/* a list of callbacks to be invoked when collection is performed */
|
||||||
|
PyObject *callbacks;
|
||||||
|
/* This is the number of objects that survived the last full
|
||||||
|
collection. It approximates the number of long lived objects
|
||||||
|
tracked by the GC.
|
||||||
|
|
||||||
|
(by "full collection", we mean a collection of the oldest
|
||||||
|
generation). */
|
||||||
|
Py_ssize_t long_lived_total;
|
||||||
|
/* This is the number of objects that survived all "non-full"
|
||||||
|
collections, and are awaiting to undergo a full collection for
|
||||||
|
the first time. */
|
||||||
|
Py_ssize_t long_lived_pending;
|
||||||
|
};
|
||||||
|
|
||||||
|
PyAPI_FUNC(void) _PyGC_Initialize(struct _gc_runtime_state *);
|
||||||
|
|
||||||
|
#define _PyGC_generation0 _PyRuntime.gc.generation0
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_INTERNAL_MEM_H */
|
19
WENV/Include/internal/pygetopt.h
Normal file
19
WENV/Include/internal/pygetopt.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef Py_INTERNAL_PYGETOPT_H
|
||||||
|
#define Py_INTERNAL_PYGETOPT_H
|
||||||
|
|
||||||
|
extern int _PyOS_opterr;
|
||||||
|
extern int _PyOS_optind;
|
||||||
|
extern wchar_t *_PyOS_optarg;
|
||||||
|
|
||||||
|
extern void _PyOS_ResetGetOpt(void);
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
const wchar_t *name;
|
||||||
|
int has_arg;
|
||||||
|
int val;
|
||||||
|
} _PyOS_LongOption;
|
||||||
|
|
||||||
|
extern int _PyOS_GetOpt(int argc, wchar_t **argv, wchar_t *optstring,
|
||||||
|
const _PyOS_LongOption *longopts, int *longindex);
|
||||||
|
|
||||||
|
#endif /* !Py_INTERNAL_PYGETOPT_H */
|
132
WENV/Include/internal/pystate.h
Normal file
132
WENV/Include/internal/pystate.h
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
#ifndef Py_INTERNAL_PYSTATE_H
|
||||||
|
#define Py_INTERNAL_PYSTATE_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "pystate.h"
|
||||||
|
#include "pyatomic.h"
|
||||||
|
#include "pythread.h"
|
||||||
|
|
||||||
|
#include "internal/mem.h"
|
||||||
|
#include "internal/ceval.h"
|
||||||
|
#include "internal/warnings.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* GIL state */
|
||||||
|
|
||||||
|
struct _gilstate_runtime_state {
|
||||||
|
int check_enabled;
|
||||||
|
/* Assuming the current thread holds the GIL, this is the
|
||||||
|
PyThreadState for the current thread. */
|
||||||
|
_Py_atomic_address tstate_current;
|
||||||
|
PyThreadFrameGetter getframe;
|
||||||
|
/* The single PyInterpreterState used by this process'
|
||||||
|
GILState implementation
|
||||||
|
*/
|
||||||
|
/* TODO: Given interp_main, it may be possible to kill this ref */
|
||||||
|
PyInterpreterState *autoInterpreterState;
|
||||||
|
Py_tss_t autoTSSkey;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* hook for PyEval_GetFrame(), requested for Psyco */
|
||||||
|
#define _PyThreadState_GetFrame _PyRuntime.gilstate.getframe
|
||||||
|
|
||||||
|
/* Issue #26558: Flag to disable PyGILState_Check().
|
||||||
|
If set to non-zero, PyGILState_Check() always return 1. */
|
||||||
|
#define _PyGILState_check_enabled _PyRuntime.gilstate.check_enabled
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
/* Full path to the Python program */
|
||||||
|
wchar_t *program_full_path;
|
||||||
|
wchar_t *prefix;
|
||||||
|
#ifdef MS_WINDOWS
|
||||||
|
wchar_t *dll_path;
|
||||||
|
#else
|
||||||
|
wchar_t *exec_prefix;
|
||||||
|
#endif
|
||||||
|
/* Set by Py_SetPath(), or computed by _PyPathConfig_Init() */
|
||||||
|
wchar_t *module_search_path;
|
||||||
|
/* Python program name */
|
||||||
|
wchar_t *program_name;
|
||||||
|
/* Set by Py_SetPythonHome() or PYTHONHOME environment variable */
|
||||||
|
wchar_t *home;
|
||||||
|
} _PyPathConfig;
|
||||||
|
|
||||||
|
#define _PyPathConfig_INIT {.module_search_path = NULL}
|
||||||
|
/* Note: _PyPathConfig_INIT sets other fields to 0/NULL */
|
||||||
|
|
||||||
|
PyAPI_DATA(_PyPathConfig) _Py_path_config;
|
||||||
|
|
||||||
|
PyAPI_FUNC(_PyInitError) _PyPathConfig_Calculate(
|
||||||
|
_PyPathConfig *config,
|
||||||
|
const _PyCoreConfig *core_config);
|
||||||
|
PyAPI_FUNC(void) _PyPathConfig_Clear(_PyPathConfig *config);
|
||||||
|
|
||||||
|
|
||||||
|
/* interpreter state */
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyInterpreterState *) _PyInterpreterState_LookUpID(PY_INT64_T);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _PyInterpreterState_IDInitref(PyInterpreterState *);
|
||||||
|
PyAPI_FUNC(void) _PyInterpreterState_IDIncref(PyInterpreterState *);
|
||||||
|
PyAPI_FUNC(void) _PyInterpreterState_IDDecref(PyInterpreterState *);
|
||||||
|
|
||||||
|
/* Full Python runtime state */
|
||||||
|
|
||||||
|
typedef struct pyruntimestate {
|
||||||
|
int initialized;
|
||||||
|
int core_initialized;
|
||||||
|
PyThreadState *finalizing;
|
||||||
|
|
||||||
|
struct pyinterpreters {
|
||||||
|
PyThread_type_lock mutex;
|
||||||
|
PyInterpreterState *head;
|
||||||
|
PyInterpreterState *main;
|
||||||
|
/* _next_interp_id is an auto-numbered sequence of small
|
||||||
|
integers. It gets initialized in _PyInterpreterState_Init(),
|
||||||
|
which is called in Py_Initialize(), and used in
|
||||||
|
PyInterpreterState_New(). A negative interpreter ID
|
||||||
|
indicates an error occurred. The main interpreter will
|
||||||
|
always have an ID of 0. Overflow results in a RuntimeError.
|
||||||
|
If that becomes a problem later then we can adjust, e.g. by
|
||||||
|
using a Python int. */
|
||||||
|
int64_t next_id;
|
||||||
|
} interpreters;
|
||||||
|
|
||||||
|
#define NEXITFUNCS 32
|
||||||
|
void (*exitfuncs[NEXITFUNCS])(void);
|
||||||
|
int nexitfuncs;
|
||||||
|
|
||||||
|
struct _gc_runtime_state gc;
|
||||||
|
struct _warnings_runtime_state warnings;
|
||||||
|
struct _ceval_runtime_state ceval;
|
||||||
|
struct _gilstate_runtime_state gilstate;
|
||||||
|
|
||||||
|
// XXX Consolidate globals found via the check-c-globals script.
|
||||||
|
} _PyRuntimeState;
|
||||||
|
|
||||||
|
#define _PyRuntimeState_INIT {.initialized = 0, .core_initialized = 0}
|
||||||
|
/* Note: _PyRuntimeState_INIT sets other fields to 0/NULL */
|
||||||
|
|
||||||
|
PyAPI_DATA(_PyRuntimeState) _PyRuntime;
|
||||||
|
PyAPI_FUNC(_PyInitError) _PyRuntimeState_Init(_PyRuntimeState *);
|
||||||
|
PyAPI_FUNC(void) _PyRuntimeState_Fini(_PyRuntimeState *);
|
||||||
|
|
||||||
|
/* Initialize _PyRuntimeState.
|
||||||
|
Return NULL on success, or return an error message on failure. */
|
||||||
|
PyAPI_FUNC(_PyInitError) _PyRuntime_Initialize(void);
|
||||||
|
|
||||||
|
#define _Py_CURRENTLY_FINALIZING(tstate) \
|
||||||
|
(_PyRuntime.finalizing == tstate)
|
||||||
|
|
||||||
|
|
||||||
|
/* Other */
|
||||||
|
|
||||||
|
PyAPI_FUNC(_PyInitError) _PyInterpreterState_Enable(_PyRuntimeState *);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_INTERNAL_PYSTATE_H */
|
21
WENV/Include/internal/warnings.h
Normal file
21
WENV/Include/internal/warnings.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#ifndef Py_INTERNAL_WARNINGS_H
|
||||||
|
#define Py_INTERNAL_WARNINGS_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "object.h"
|
||||||
|
|
||||||
|
struct _warnings_runtime_state {
|
||||||
|
/* Both 'filters' and 'onceregistry' can be set in warnings.py;
|
||||||
|
get_warnings_attr() will reset these variables accordingly. */
|
||||||
|
PyObject *filters; /* List */
|
||||||
|
PyObject *once_registry; /* Dict */
|
||||||
|
PyObject *default_action; /* String */
|
||||||
|
long filters_version;
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_INTERNAL_WARNINGS_H */
|
33
WENV/Include/intrcheck.h
Normal file
33
WENV/Include/intrcheck.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
|
||||||
|
#ifndef Py_INTRCHECK_H
|
||||||
|
#define Py_INTRCHECK_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) PyOS_InterruptOccurred(void);
|
||||||
|
PyAPI_FUNC(void) PyOS_InitInterrupts(void);
|
||||||
|
#ifdef HAVE_FORK
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000
|
||||||
|
PyAPI_FUNC(void) PyOS_BeforeFork(void);
|
||||||
|
PyAPI_FUNC(void) PyOS_AfterFork_Parent(void);
|
||||||
|
PyAPI_FUNC(void) PyOS_AfterFork_Child(void);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
/* Deprecated, please use PyOS_AfterFork_Child() instead */
|
||||||
|
PyAPI_FUNC(void) PyOS_AfterFork(void) Py_DEPRECATED(3.7);
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(int) _PyOS_IsMainThread(void);
|
||||||
|
PyAPI_FUNC(void) _PySignal_AfterFork(void);
|
||||||
|
|
||||||
|
#ifdef MS_WINDOWS
|
||||||
|
/* windows.h is not included by Python.h so use void* instead of HANDLE */
|
||||||
|
PyAPI_FUNC(void*) _PyOS_SigintEvent(void);
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_LIMITED_API */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_INTRCHECK_H */
|
25
WENV/Include/iterobject.h
Normal file
25
WENV/Include/iterobject.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#ifndef Py_ITEROBJECT_H
|
||||||
|
#define Py_ITEROBJECT_H
|
||||||
|
/* Iterators (the basic kind, over a sequence) */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PySeqIter_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyCallIter_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyCmpWrapper_Type;
|
||||||
|
|
||||||
|
#define PySeqIter_Check(op) (Py_TYPE(op) == &PySeqIter_Type)
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PySeqIter_New(PyObject *);
|
||||||
|
|
||||||
|
|
||||||
|
#define PyCallIter_Check(op) (Py_TYPE(op) == &PyCallIter_Type)
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyCallIter_New(PyObject *, PyObject *);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_ITEROBJECT_H */
|
||||||
|
|
81
WENV/Include/listobject.h
Normal file
81
WENV/Include/listobject.h
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
|
||||||
|
/* List object interface */
|
||||||
|
|
||||||
|
/*
|
||||||
|
Another generally useful object type is a list of object pointers.
|
||||||
|
This is a mutable type: the list items can be changed, and items can be
|
||||||
|
added or removed. Out-of-range indices or non-list objects are ignored.
|
||||||
|
|
||||||
|
*** WARNING *** PyList_SetItem does not increment the new item's reference
|
||||||
|
count, but does decrement the reference count of the item it replaces,
|
||||||
|
if not nil. It does *decrement* the reference count if it is *not*
|
||||||
|
inserted in the list. Similarly, PyList_GetItem does not increment the
|
||||||
|
returned item's reference count.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef Py_LISTOBJECT_H
|
||||||
|
#define Py_LISTOBJECT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
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. */
|
||||||
|
PyObject **ob_item;
|
||||||
|
|
||||||
|
/* ob_item contains space for 'allocated' elements. The number
|
||||||
|
* currently in use is ob_size.
|
||||||
|
* Invariants:
|
||||||
|
* 0 <= ob_size <= allocated
|
||||||
|
* len(list) == ob_size
|
||||||
|
* ob_item == NULL implies ob_size == allocated == 0
|
||||||
|
* list.sort() temporarily sets allocated to -1 to detect mutations.
|
||||||
|
*
|
||||||
|
* Items must normally not be NULL, except during construction when
|
||||||
|
* the list is not yet visible outside the function that builds it.
|
||||||
|
*/
|
||||||
|
Py_ssize_t allocated;
|
||||||
|
} PyListObject;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyList_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyListIter_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyListRevIter_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PySortWrapper_Type;
|
||||||
|
|
||||||
|
#define PyList_Check(op) \
|
||||||
|
PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LIST_SUBCLASS)
|
||||||
|
#define PyList_CheckExact(op) (Py_TYPE(op) == &PyList_Type)
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyList_New(Py_ssize_t size);
|
||||||
|
PyAPI_FUNC(Py_ssize_t) PyList_Size(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyList_GetItem(PyObject *, Py_ssize_t);
|
||||||
|
PyAPI_FUNC(int) PyList_SetItem(PyObject *, Py_ssize_t, PyObject *);
|
||||||
|
PyAPI_FUNC(int) PyList_Insert(PyObject *, Py_ssize_t, PyObject *);
|
||||||
|
PyAPI_FUNC(int) PyList_Append(PyObject *, PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyList_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t);
|
||||||
|
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 *);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) PyList_ClearFreeList(void);
|
||||||
|
PyAPI_FUNC(void) _PyList_DebugMallocStats(FILE *out);
|
||||||
|
#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) (assert(PyList_Check(op)),Py_SIZE(op))
|
||||||
|
#define _PyList_ITEMS(op) (((PyListObject *)(op))->ob_item)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_LISTOBJECT_H */
|
99
WENV/Include/longintrepr.h
Normal file
99
WENV/Include/longintrepr.h
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
#ifndef Py_LONGINTREPR_H
|
||||||
|
#define Py_LONGINTREPR_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* This is published for the benefit of "friends" marshal.c and _decimal.c. */
|
||||||
|
|
||||||
|
/* Parameters of the integer representation. There are two different
|
||||||
|
sets of parameters: one set for 30-bit digits, stored in an unsigned 32-bit
|
||||||
|
integer type, and one set for 15-bit digits with each digit stored in an
|
||||||
|
unsigned short. The value of PYLONG_BITS_IN_DIGIT, defined either at
|
||||||
|
configure time or in pyport.h, is used to decide which digit size to use.
|
||||||
|
|
||||||
|
Type 'digit' should be able to hold 2*PyLong_BASE-1, and type 'twodigits'
|
||||||
|
should be an unsigned integer type able to hold all integers up to
|
||||||
|
PyLong_BASE*PyLong_BASE-1. x_sub assumes that 'digit' is an unsigned type,
|
||||||
|
and that overflow is handled by taking the result modulo 2**N for some N >
|
||||||
|
PyLong_SHIFT. The majority of the code doesn't care about the precise
|
||||||
|
value of PyLong_SHIFT, but there are some notable exceptions:
|
||||||
|
|
||||||
|
- long_pow() requires that PyLong_SHIFT be divisible by 5
|
||||||
|
|
||||||
|
- PyLong_{As,From}ByteArray require that PyLong_SHIFT be at least 8
|
||||||
|
|
||||||
|
- long_hash() requires that PyLong_SHIFT is *strictly* less than the number
|
||||||
|
of bits in an unsigned long, as do the PyLong <-> long (or unsigned long)
|
||||||
|
conversion functions
|
||||||
|
|
||||||
|
- the Python int <-> size_t/Py_ssize_t conversion functions expect that
|
||||||
|
PyLong_SHIFT is strictly less than the number of bits in a size_t
|
||||||
|
|
||||||
|
- the marshal code currently expects that PyLong_SHIFT is a multiple of 15
|
||||||
|
|
||||||
|
- NSMALLNEGINTS and NSMALLPOSINTS should be small enough to fit in a single
|
||||||
|
digit; with the current values this forces PyLong_SHIFT >= 9
|
||||||
|
|
||||||
|
The values 15 and 30 should fit all of the above requirements, on any
|
||||||
|
platform.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if PYLONG_BITS_IN_DIGIT == 30
|
||||||
|
typedef uint32_t digit;
|
||||||
|
typedef int32_t sdigit; /* signed variant of digit */
|
||||||
|
typedef uint64_t twodigits;
|
||||||
|
typedef int64_t stwodigits; /* signed variant of twodigits */
|
||||||
|
#define PyLong_SHIFT 30
|
||||||
|
#define _PyLong_DECIMAL_SHIFT 9 /* max(e such that 10**e fits in a digit) */
|
||||||
|
#define _PyLong_DECIMAL_BASE ((digit)1000000000) /* 10 ** DECIMAL_SHIFT */
|
||||||
|
#elif PYLONG_BITS_IN_DIGIT == 15
|
||||||
|
typedef unsigned short digit;
|
||||||
|
typedef short sdigit; /* signed variant of digit */
|
||||||
|
typedef unsigned long twodigits;
|
||||||
|
typedef long stwodigits; /* signed variant of twodigits */
|
||||||
|
#define PyLong_SHIFT 15
|
||||||
|
#define _PyLong_DECIMAL_SHIFT 4 /* max(e such that 10**e fits in a digit) */
|
||||||
|
#define _PyLong_DECIMAL_BASE ((digit)10000) /* 10 ** DECIMAL_SHIFT */
|
||||||
|
#else
|
||||||
|
#error "PYLONG_BITS_IN_DIGIT should be 15 or 30"
|
||||||
|
#endif
|
||||||
|
#define PyLong_BASE ((digit)1 << PyLong_SHIFT)
|
||||||
|
#define PyLong_MASK ((digit)(PyLong_BASE - 1))
|
||||||
|
|
||||||
|
#if PyLong_SHIFT % 5 != 0
|
||||||
|
#error "longobject.c requires that PyLong_SHIFT be divisible by 5"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Long integer representation.
|
||||||
|
The absolute value of a number is equal to
|
||||||
|
SUM(for i=0 through abs(ob_size)-1) ob_digit[i] * 2**(SHIFT*i)
|
||||||
|
Negative numbers are represented with ob_size < 0;
|
||||||
|
zero is represented by ob_size == 0.
|
||||||
|
In a normalized number, ob_digit[abs(ob_size)-1] (the most significant
|
||||||
|
digit) is never zero. Also, in all cases, for all valid i,
|
||||||
|
0 <= ob_digit[i] <= MASK.
|
||||||
|
The allocation function takes care of allocating extra memory
|
||||||
|
so that ob_digit[0] ... ob_digit[abs(ob_size)-1] are actually available.
|
||||||
|
|
||||||
|
CAUTION: Generic code manipulating subtypes of PyVarObject has to
|
||||||
|
aware that ints abuse ob_size's sign bit.
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct _longobject {
|
||||||
|
PyObject_VAR_HEAD
|
||||||
|
digit ob_digit[1];
|
||||||
|
};
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyLongObject *) _PyLong_New(Py_ssize_t);
|
||||||
|
|
||||||
|
/* Return a copy of src. */
|
||||||
|
PyAPI_FUNC(PyObject *) _PyLong_Copy(PyLongObject *src);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_LONGINTREPR_H */
|
||||||
|
#endif /* Py_LIMITED_API */
|
220
WENV/Include/longobject.h
Normal file
220
WENV/Include/longobject.h
Normal file
@ -0,0 +1,220 @@
|
|||||||
|
#ifndef Py_LONGOBJECT_H
|
||||||
|
#define Py_LONGOBJECT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Long (arbitrary precision) integer object interface */
|
||||||
|
|
||||||
|
typedef struct _longobject PyLongObject; /* Revealed in longintrepr.h */
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyLong_Type;
|
||||||
|
|
||||||
|
#define PyLong_Check(op) \
|
||||||
|
PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_LONG_SUBCLASS)
|
||||||
|
#define PyLong_CheckExact(op) (Py_TYPE(op) == &PyLong_Type)
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyLong_FromLong(long);
|
||||||
|
PyAPI_FUNC(PyObject *) PyLong_FromUnsignedLong(unsigned long);
|
||||||
|
PyAPI_FUNC(PyObject *) PyLong_FromSize_t(size_t);
|
||||||
|
PyAPI_FUNC(PyObject *) PyLong_FromSsize_t(Py_ssize_t);
|
||||||
|
PyAPI_FUNC(PyObject *) PyLong_FromDouble(double);
|
||||||
|
PyAPI_FUNC(long) PyLong_AsLong(PyObject *);
|
||||||
|
PyAPI_FUNC(long) PyLong_AsLongAndOverflow(PyObject *, int *);
|
||||||
|
PyAPI_FUNC(Py_ssize_t) PyLong_AsSsize_t(PyObject *);
|
||||||
|
PyAPI_FUNC(size_t) PyLong_AsSize_t(PyObject *);
|
||||||
|
PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLong(PyObject *);
|
||||||
|
PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLongMask(PyObject *);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(int) _PyLong_AsInt(PyObject *);
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(PyObject *) PyLong_GetInfo(void);
|
||||||
|
|
||||||
|
/* It may be useful in the future. I've added it in the PyInt -> PyLong
|
||||||
|
cleanup to keep the extra information. [CH] */
|
||||||
|
#define PyLong_AS_LONG(op) PyLong_AsLong(op)
|
||||||
|
|
||||||
|
/* Issue #1983: pid_t can be longer than a C long on some systems */
|
||||||
|
#if !defined(SIZEOF_PID_T) || SIZEOF_PID_T == SIZEOF_INT
|
||||||
|
#define _Py_PARSE_PID "i"
|
||||||
|
#define PyLong_FromPid PyLong_FromLong
|
||||||
|
#define PyLong_AsPid PyLong_AsLong
|
||||||
|
#elif SIZEOF_PID_T == SIZEOF_LONG
|
||||||
|
#define _Py_PARSE_PID "l"
|
||||||
|
#define PyLong_FromPid PyLong_FromLong
|
||||||
|
#define PyLong_AsPid PyLong_AsLong
|
||||||
|
#elif defined(SIZEOF_LONG_LONG) && SIZEOF_PID_T == SIZEOF_LONG_LONG
|
||||||
|
#define _Py_PARSE_PID "L"
|
||||||
|
#define PyLong_FromPid PyLong_FromLongLong
|
||||||
|
#define PyLong_AsPid PyLong_AsLongLong
|
||||||
|
#else
|
||||||
|
#error "sizeof(pid_t) is neither sizeof(int), sizeof(long) or sizeof(long long)"
|
||||||
|
#endif /* SIZEOF_PID_T */
|
||||||
|
|
||||||
|
#if SIZEOF_VOID_P == SIZEOF_INT
|
||||||
|
# define _Py_PARSE_INTPTR "i"
|
||||||
|
# define _Py_PARSE_UINTPTR "I"
|
||||||
|
#elif SIZEOF_VOID_P == SIZEOF_LONG
|
||||||
|
# define _Py_PARSE_INTPTR "l"
|
||||||
|
# define _Py_PARSE_UINTPTR "k"
|
||||||
|
#elif defined(SIZEOF_LONG_LONG) && SIZEOF_VOID_P == SIZEOF_LONG_LONG
|
||||||
|
# define _Py_PARSE_INTPTR "L"
|
||||||
|
# define _Py_PARSE_UINTPTR "K"
|
||||||
|
#else
|
||||||
|
# error "void* different in size from int, long and long long"
|
||||||
|
#endif /* SIZEOF_VOID_P */
|
||||||
|
|
||||||
|
/* Used by Python/mystrtoul.c, _PyBytes_FromHex(),
|
||||||
|
_PyBytes_DecodeEscapeRecode(), etc. */
|
||||||
|
#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
|
||||||
|
0.0 if and only if the input is 0 (in which case, e and x are both
|
||||||
|
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 *);
|
||||||
|
PyAPI_FUNC(void *) PyLong_AsVoidPtr(PyObject *);
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyLong_FromLongLong(long long);
|
||||||
|
PyAPI_FUNC(PyObject *) PyLong_FromUnsignedLongLong(unsigned long long);
|
||||||
|
PyAPI_FUNC(long long) PyLong_AsLongLong(PyObject *);
|
||||||
|
PyAPI_FUNC(unsigned long long) PyLong_AsUnsignedLongLong(PyObject *);
|
||||||
|
PyAPI_FUNC(unsigned long long) PyLong_AsUnsignedLongLongMask(PyObject *);
|
||||||
|
PyAPI_FUNC(long long) PyLong_AsLongLongAndOverflow(PyObject *, int *);
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyLong_FromString(const char *, char **, int);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(PyObject *) PyLong_FromUnicode(Py_UNICODE*, Py_ssize_t, int) Py_DEPRECATED(3.3);
|
||||||
|
PyAPI_FUNC(PyObject *) PyLong_FromUnicodeObject(PyObject *u, int base);
|
||||||
|
PyAPI_FUNC(PyObject *) _PyLong_FromBytes(const char *, 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.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(int) _PyLong_Sign(PyObject *v);
|
||||||
|
|
||||||
|
|
||||||
|
/* _PyLong_NumBits. Return the number of bits needed to represent the
|
||||||
|
absolute value of a long. For example, this returns 1 for 1 and -1, 2
|
||||||
|
for 2 and -2, and 2 for 3 and -3. It returns 0 for 0.
|
||||||
|
v must not be NULL, and must be a normalized long.
|
||||||
|
(size_t)-1 is returned and OverflowError set if the true result doesn't
|
||||||
|
fit in a size_t.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(size_t) _PyLong_NumBits(PyObject *v);
|
||||||
|
|
||||||
|
/* _PyLong_DivmodNear. Given integers a and b, compute the nearest
|
||||||
|
integer q to the exact quotient a / b, rounding to the nearest even integer
|
||||||
|
in the case of a tie. Return (q, r), where r = a - q*b. The remainder r
|
||||||
|
will satisfy abs(r) <= abs(b)/2, with equality possible only if q is
|
||||||
|
even.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(PyObject *) _PyLong_DivmodNear(PyObject *, PyObject *);
|
||||||
|
|
||||||
|
/* _PyLong_FromByteArray: View the n unsigned bytes as a binary integer in
|
||||||
|
base 256, and return a Python int with the same numeric value.
|
||||||
|
If n is 0, the integer is 0. Else:
|
||||||
|
If little_endian is 1/true, bytes[n-1] is the MSB and bytes[0] the LSB;
|
||||||
|
else (little_endian is 0/false) bytes[0] is the MSB and bytes[n-1] the
|
||||||
|
LSB.
|
||||||
|
If is_signed is 0/false, view the bytes as a non-negative integer.
|
||||||
|
If is_signed is 1/true, view the bytes as a 2's-complement integer,
|
||||||
|
non-negative if bit 0x80 of the MSB is clear, negative if set.
|
||||||
|
Error returns:
|
||||||
|
+ Return NULL with the appropriate exception set if there's not
|
||||||
|
enough memory to create the Python int.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(PyObject *) _PyLong_FromByteArray(
|
||||||
|
const unsigned char* bytes, size_t n,
|
||||||
|
int little_endian, int is_signed);
|
||||||
|
|
||||||
|
/* _PyLong_AsByteArray: Convert the least-significant 8*n bits of long
|
||||||
|
v to a base-256 integer, stored in array bytes. Normally return 0,
|
||||||
|
return -1 on error.
|
||||||
|
If little_endian is 1/true, store the MSB at bytes[n-1] and the LSB at
|
||||||
|
bytes[0]; else (little_endian is 0/false) store the MSB at bytes[0] and
|
||||||
|
the LSB at bytes[n-1].
|
||||||
|
If is_signed is 0/false, it's an error if v < 0; else (v >= 0) n bytes
|
||||||
|
are filled and there's nothing special about bit 0x80 of the MSB.
|
||||||
|
If is_signed is 1/true, bytes is filled with the 2's-complement
|
||||||
|
representation of v's value. Bit 0x80 of the MSB is the sign bit.
|
||||||
|
Error returns (-1):
|
||||||
|
+ is_signed is 0 and v < 0. TypeError is set in this case, and bytes
|
||||||
|
isn't altered.
|
||||||
|
+ n isn't big enough to hold the full mathematical value of v. For
|
||||||
|
example, if is_signed is 0 and there are more digits in the v than
|
||||||
|
fit in n; or if is_signed is 1, v < 0, and n is just 1 bit shy of
|
||||||
|
being large enough to hold a sign bit. OverflowError is set in this
|
||||||
|
case, but bytes holds the least-significant n bytes of the true value.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v,
|
||||||
|
unsigned char* bytes, size_t n,
|
||||||
|
int little_endian, int is_signed);
|
||||||
|
|
||||||
|
/* _PyLong_FromNbInt: Convert the given object to a PyLongObject
|
||||||
|
using the nb_int slot, if available. Raise TypeError if either the
|
||||||
|
nb_int slot is not available or the result of the call to nb_int
|
||||||
|
returns something not of type int.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(PyLongObject *)_PyLong_FromNbInt(PyObject *);
|
||||||
|
|
||||||
|
/* _PyLong_Format: Convert the long to a string object with given base,
|
||||||
|
appending a base prefix of 0[box] if base is 2, 8 or 16. */
|
||||||
|
PyAPI_FUNC(PyObject *) _PyLong_Format(PyObject *obj, int base);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _PyLong_FormatWriter(
|
||||||
|
_PyUnicodeWriter *writer,
|
||||||
|
PyObject *obj,
|
||||||
|
int base,
|
||||||
|
int alternate);
|
||||||
|
|
||||||
|
PyAPI_FUNC(char*) _PyLong_FormatBytesWriter(
|
||||||
|
_PyBytesWriter *writer,
|
||||||
|
char *str,
|
||||||
|
PyObject *obj,
|
||||||
|
int base,
|
||||||
|
int alternate);
|
||||||
|
|
||||||
|
/* Format the object based on the format_spec, as defined in PEP 3101
|
||||||
|
(Advanced String Formatting). */
|
||||||
|
PyAPI_FUNC(int) _PyLong_FormatAdvancedWriter(
|
||||||
|
_PyUnicodeWriter *writer,
|
||||||
|
PyObject *obj,
|
||||||
|
PyObject *format_spec,
|
||||||
|
Py_ssize_t start,
|
||||||
|
Py_ssize_t end);
|
||||||
|
#endif /* Py_LIMITED_API */
|
||||||
|
|
||||||
|
/* These aren't really part of the int object, but they're handy. The
|
||||||
|
functions are in Python/mystrtoul.c.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(unsigned long) PyOS_strtoul(const char *, char **, int);
|
||||||
|
PyAPI_FUNC(long) PyOS_strtol(const char *, char **, int);
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
/* For use by the gcd function in mathmodule.c */
|
||||||
|
PyAPI_FUNC(PyObject *) _PyLong_GCD(PyObject *, PyObject *);
|
||||||
|
#endif /* !Py_LIMITED_API */
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_DATA(PyObject *) _PyLong_Zero;
|
||||||
|
PyAPI_DATA(PyObject *) _PyLong_One;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_LONGOBJECT_H */
|
28
WENV/Include/marshal.h
Normal file
28
WENV/Include/marshal.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
|
||||||
|
/* Interface for marshal.c */
|
||||||
|
|
||||||
|
#ifndef Py_MARSHAL_H
|
||||||
|
#define Py_MARSHAL_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define Py_MARSHAL_VERSION 4
|
||||||
|
|
||||||
|
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(const char *,
|
||||||
|
Py_ssize_t);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_MARSHAL_H */
|
72
WENV/Include/memoryobject.h
Normal file
72
WENV/Include/memoryobject.h
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
/* Memory view object. In Python this is available as "memoryview". */
|
||||||
|
|
||||||
|
#ifndef Py_MEMORYOBJECT_H
|
||||||
|
#define Py_MEMORYOBJECT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_DATA(PyTypeObject) _PyManagedBuffer_Type;
|
||||||
|
#endif
|
||||||
|
PyAPI_DATA(PyTypeObject) PyMemoryView_Type;
|
||||||
|
|
||||||
|
#define PyMemoryView_Check(op) (Py_TYPE(op) == &PyMemoryView_Type)
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
/* Get a pointer to the memoryview's private copy of the exporter's buffer. */
|
||||||
|
#define PyMemoryView_GET_BUFFER(op) (&((PyMemoryViewObject *)(op))->view)
|
||||||
|
/* Get a pointer to the exporting object (this may be NULL!). */
|
||||||
|
#define PyMemoryView_GET_BASE(op) (((PyMemoryViewObject *)(op))->view.obj)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyMemoryView_FromObject(PyObject *base);
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
|
||||||
|
PyAPI_FUNC(PyObject *) PyMemoryView_FromMemory(char *mem, Py_ssize_t size,
|
||||||
|
int flags);
|
||||||
|
#endif
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(PyObject *) PyMemoryView_FromBuffer(Py_buffer *info);
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(PyObject *) PyMemoryView_GetContiguous(PyObject *base,
|
||||||
|
int buffertype,
|
||||||
|
char order);
|
||||||
|
|
||||||
|
|
||||||
|
/* The structs are declared here so that macros can work, but they shouldn't
|
||||||
|
be considered public. Don't access their fields directly, use the macros
|
||||||
|
and functions instead! */
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
#define _Py_MANAGED_BUFFER_RELEASED 0x001 /* access to exporter blocked */
|
||||||
|
#define _Py_MANAGED_BUFFER_FREE_FORMAT 0x002 /* free format */
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
int flags; /* state flags */
|
||||||
|
Py_ssize_t exports; /* number of direct memoryview exports */
|
||||||
|
Py_buffer master; /* snapshot buffer obtained from the original exporter */
|
||||||
|
} _PyManagedBufferObject;
|
||||||
|
|
||||||
|
|
||||||
|
/* memoryview state flags */
|
||||||
|
#define _Py_MEMORYVIEW_RELEASED 0x001 /* access to master buffer blocked */
|
||||||
|
#define _Py_MEMORYVIEW_C 0x002 /* C-contiguous layout */
|
||||||
|
#define _Py_MEMORYVIEW_FORTRAN 0x004 /* Fortran contiguous layout */
|
||||||
|
#define _Py_MEMORYVIEW_SCALAR 0x008 /* scalar: ndim = 0 */
|
||||||
|
#define _Py_MEMORYVIEW_PIL 0x010 /* PIL-style layout */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyObject_VAR_HEAD
|
||||||
|
_PyManagedBufferObject *mbuf; /* managed buffer */
|
||||||
|
Py_hash_t hash; /* hash value for read-only views */
|
||||||
|
int flags; /* state flags */
|
||||||
|
Py_ssize_t exports; /* number of buffer re-exports */
|
||||||
|
Py_buffer view; /* private copy of the exporter's view */
|
||||||
|
PyObject *weakreflist;
|
||||||
|
Py_ssize_t ob_array[1]; /* shape, strides, suboffsets */
|
||||||
|
} PyMemoryViewObject;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_MEMORYOBJECT_H */
|
18
WENV/Include/metagrammar.h
Normal file
18
WENV/Include/metagrammar.h
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#ifndef Py_METAGRAMMAR_H
|
||||||
|
#define Py_METAGRAMMAR_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define MSTART 256
|
||||||
|
#define RULE 257
|
||||||
|
#define RHS 258
|
||||||
|
#define ALT 259
|
||||||
|
#define ITEM 260
|
||||||
|
#define ATOM 261
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_METAGRAMMAR_H */
|
135
WENV/Include/methodobject.h
Normal file
135
WENV/Include/methodobject.h
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
|
||||||
|
/* Method object interface */
|
||||||
|
|
||||||
|
#ifndef Py_METHODOBJECT_H
|
||||||
|
#define Py_METHODOBJECT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This is about the type 'builtin_function_or_method',
|
||||||
|
not Python methods in user-defined classes. See classobject.h
|
||||||
|
for the latter. */
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyCFunction_Type;
|
||||||
|
|
||||||
|
#define PyCFunction_Check(op) (Py_TYPE(op) == &PyCFunction_Type)
|
||||||
|
|
||||||
|
typedef PyObject *(*PyCFunction)(PyObject *, PyObject *);
|
||||||
|
typedef PyObject *(*_PyCFunctionFast) (PyObject *, PyObject *const *, Py_ssize_t);
|
||||||
|
typedef PyObject *(*PyCFunctionWithKeywords)(PyObject *, PyObject *,
|
||||||
|
PyObject *);
|
||||||
|
typedef PyObject *(*_PyCFunctionFastWithKeywords) (PyObject *,
|
||||||
|
PyObject *const *, Py_ssize_t,
|
||||||
|
PyObject *);
|
||||||
|
typedef PyObject *(*PyNoArgsFunction)(PyObject *);
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyCFunction) PyCFunction_GetFunction(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyCFunction_GetSelf(PyObject *);
|
||||||
|
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_ml -> ml_flags & METH_STATIC ? \
|
||||||
|
NULL : ((PyCFunctionObject *)func) -> m_self)
|
||||||
|
#define PyCFunction_GET_FLAGS(func) \
|
||||||
|
(((PyCFunctionObject *)func) -> m_ml -> ml_flags)
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(PyObject *) PyCFunction_Call(PyObject *, PyObject *, PyObject *);
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(PyObject *) _PyCFunction_FastCallDict(PyObject *func,
|
||||||
|
PyObject *const *args,
|
||||||
|
Py_ssize_t nargs,
|
||||||
|
PyObject *kwargs);
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) _PyCFunction_FastCallKeywords(PyObject *func,
|
||||||
|
PyObject *const *stack,
|
||||||
|
Py_ssize_t nargs,
|
||||||
|
PyObject *kwnames);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct PyMethodDef {
|
||||||
|
const char *ml_name; /* The name of the built-in function/method */
|
||||||
|
PyCFunction ml_meth; /* The C function that implements it */
|
||||||
|
int ml_flags; /* Combination of METH_xxx flags, which mostly
|
||||||
|
describe the args expected by the C func */
|
||||||
|
const char *ml_doc; /* The __doc__ attribute, or NULL */
|
||||||
|
};
|
||||||
|
typedef struct PyMethodDef PyMethodDef;
|
||||||
|
|
||||||
|
#define PyCFunction_New(ML, SELF) PyCFunction_NewEx((ML), (SELF), NULL)
|
||||||
|
PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *,
|
||||||
|
PyObject *);
|
||||||
|
|
||||||
|
/* Flag passed to newmethodobject */
|
||||||
|
/* #define METH_OLDARGS 0x0000 -- unsupported now */
|
||||||
|
#define METH_VARARGS 0x0001
|
||||||
|
#define METH_KEYWORDS 0x0002
|
||||||
|
/* METH_NOARGS and METH_O must not be combined with the flags above. */
|
||||||
|
#define METH_NOARGS 0x0004
|
||||||
|
#define METH_O 0x0008
|
||||||
|
|
||||||
|
/* METH_CLASS and METH_STATIC are a little different; these control
|
||||||
|
the construction of methods for a class. These cannot be used for
|
||||||
|
functions in modules. */
|
||||||
|
#define METH_CLASS 0x0010
|
||||||
|
#define METH_STATIC 0x0020
|
||||||
|
|
||||||
|
/* METH_COEXIST allows a method to be entered even though a slot has
|
||||||
|
already filled the entry. When defined, the flag allows a separate
|
||||||
|
method, "__contains__" for example, to coexist with a defined
|
||||||
|
slot like sq_contains. */
|
||||||
|
|
||||||
|
#define METH_COEXIST 0x0040
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
#define METH_FASTCALL 0x0080
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This bit is preserved for Stackless Python */
|
||||||
|
#ifdef STACKLESS
|
||||||
|
#define METH_STACKLESS 0x0100
|
||||||
|
#else
|
||||||
|
#define METH_STACKLESS 0x0000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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 */
|
||||||
|
PyObject *m_weakreflist; /* List of weak references */
|
||||||
|
} PyCFunctionObject;
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) _PyMethodDef_RawFastCallDict(
|
||||||
|
PyMethodDef *method,
|
||||||
|
PyObject *self,
|
||||||
|
PyObject *const *args,
|
||||||
|
Py_ssize_t nargs,
|
||||||
|
PyObject *kwargs);
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) _PyMethodDef_RawFastCallKeywords(
|
||||||
|
PyMethodDef *method,
|
||||||
|
PyObject *self,
|
||||||
|
PyObject *const *args,
|
||||||
|
Py_ssize_t nargs,
|
||||||
|
PyObject *kwnames);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) PyCFunction_ClearFreeList(void);
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(void) _PyCFunction_DebugMallocStats(FILE *out);
|
||||||
|
PyAPI_FUNC(void) _PyMethod_DebugMallocStats(FILE *out);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_METHODOBJECT_H */
|
229
WENV/Include/modsupport.h
Normal file
229
WENV/Include/modsupport.h
Normal file
@ -0,0 +1,229 @@
|
|||||||
|
|
||||||
|
#ifndef Py_MODSUPPORT_H
|
||||||
|
#define Py_MODSUPPORT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Module support interface */
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
/* If PY_SSIZE_T_CLEAN is defined, each functions treats #-specifier
|
||||||
|
to mean Py_ssize_t */
|
||||||
|
#ifdef PY_SSIZE_T_CLEAN
|
||||||
|
#define PyArg_Parse _PyArg_Parse_SizeT
|
||||||
|
#define PyArg_ParseTuple _PyArg_ParseTuple_SizeT
|
||||||
|
#define PyArg_ParseTupleAndKeywords _PyArg_ParseTupleAndKeywords_SizeT
|
||||||
|
#define PyArg_VaParse _PyArg_VaParse_SizeT
|
||||||
|
#define PyArg_VaParseTupleAndKeywords _PyArg_VaParseTupleAndKeywords_SizeT
|
||||||
|
#define Py_BuildValue _Py_BuildValue_SizeT
|
||||||
|
#define Py_VaBuildValue _Py_VaBuildValue_SizeT
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
#define _Py_VaBuildStack _Py_VaBuildStack_SizeT
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(PyObject *) _Py_VaBuildValue_SizeT(const char *, va_list);
|
||||||
|
PyAPI_FUNC(PyObject **) _Py_VaBuildStack_SizeT(
|
||||||
|
PyObject **small_stack,
|
||||||
|
Py_ssize_t small_stack_len,
|
||||||
|
const char *format,
|
||||||
|
va_list va,
|
||||||
|
Py_ssize_t *p_nargs);
|
||||||
|
#endif /* !Py_LIMITED_API */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Due to a glitch in 3.2, the _SizeT versions weren't exported from the DLL. */
|
||||||
|
#if !defined(PY_SSIZE_T_CLEAN) || !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
|
||||||
|
PyAPI_FUNC(int) PyArg_Parse(PyObject *, const char *, ...);
|
||||||
|
PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, const char *, ...);
|
||||||
|
PyAPI_FUNC(int) PyArg_ParseTupleAndKeywords(PyObject *, PyObject *,
|
||||||
|
const char *, char **, ...);
|
||||||
|
PyAPI_FUNC(int) PyArg_VaParse(PyObject *, const char *, va_list);
|
||||||
|
PyAPI_FUNC(int) PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *,
|
||||||
|
const char *, char **, va_list);
|
||||||
|
#endif
|
||||||
|
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_UnpackStack(
|
||||||
|
PyObject *const *args,
|
||||||
|
Py_ssize_t nargs,
|
||||||
|
const char *name,
|
||||||
|
Py_ssize_t min,
|
||||||
|
Py_ssize_t max,
|
||||||
|
...);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) _PyArg_NoKeywords(const char *funcname, PyObject *kwargs);
|
||||||
|
PyAPI_FUNC(int) _PyArg_NoPositional(const char *funcname, PyObject *args);
|
||||||
|
#define _PyArg_NoKeywords(funcname, kwargs) \
|
||||||
|
((kwargs) == NULL || _PyArg_NoKeywords((funcname), (kwargs)))
|
||||||
|
#define _PyArg_NoPositional(funcname, args) \
|
||||||
|
((args) == NULL || _PyArg_NoPositional((funcname), (args)))
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) Py_VaBuildValue(const char *, va_list);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(PyObject **) _Py_VaBuildStack(
|
||||||
|
PyObject **small_stack,
|
||||||
|
Py_ssize_t small_stack_len,
|
||||||
|
const char *format,
|
||||||
|
va_list va,
|
||||||
|
Py_ssize_t *p_nargs);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
typedef struct _PyArg_Parser {
|
||||||
|
const char *format;
|
||||||
|
const char * const *keywords;
|
||||||
|
const char *fname;
|
||||||
|
const char *custom_msg;
|
||||||
|
int pos; /* number of positional-only arguments */
|
||||||
|
int min; /* minimal number of arguments */
|
||||||
|
int max; /* maximal number of positional arguments */
|
||||||
|
PyObject *kwtuple; /* tuple of keyword parameter names */
|
||||||
|
struct _PyArg_Parser *next;
|
||||||
|
} _PyArg_Parser;
|
||||||
|
#ifdef PY_SSIZE_T_CLEAN
|
||||||
|
#define _PyArg_ParseTupleAndKeywordsFast _PyArg_ParseTupleAndKeywordsFast_SizeT
|
||||||
|
#define _PyArg_ParseStack _PyArg_ParseStack_SizeT
|
||||||
|
#define _PyArg_ParseStackAndKeywords _PyArg_ParseStackAndKeywords_SizeT
|
||||||
|
#define _PyArg_VaParseTupleAndKeywordsFast _PyArg_VaParseTupleAndKeywordsFast_SizeT
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(int) _PyArg_ParseTupleAndKeywordsFast(PyObject *, PyObject *,
|
||||||
|
struct _PyArg_Parser *, ...);
|
||||||
|
PyAPI_FUNC(int) _PyArg_ParseStack(
|
||||||
|
PyObject *const *args,
|
||||||
|
Py_ssize_t nargs,
|
||||||
|
const char *format,
|
||||||
|
...);
|
||||||
|
PyAPI_FUNC(int) _PyArg_ParseStackAndKeywords(
|
||||||
|
PyObject *const *args,
|
||||||
|
Py_ssize_t nargs,
|
||||||
|
PyObject *kwnames,
|
||||||
|
struct _PyArg_Parser *,
|
||||||
|
...);
|
||||||
|
PyAPI_FUNC(int) _PyArg_VaParseTupleAndKeywordsFast(PyObject *, PyObject *,
|
||||||
|
struct _PyArg_Parser *, va_list);
|
||||||
|
void _PyArg_Fini(void);
|
||||||
|
#endif /* Py_LIMITED_API */
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) PyModule_AddObject(PyObject *, const char *, PyObject *);
|
||||||
|
PyAPI_FUNC(int) PyModule_AddIntConstant(PyObject *, const char *, long);
|
||||||
|
PyAPI_FUNC(int) PyModule_AddStringConstant(PyObject *, const char *, const char *);
|
||||||
|
#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant(m, #c, c)
|
||||||
|
#define PyModule_AddStringMacro(m, c) PyModule_AddStringConstant(m, #c, c)
|
||||||
|
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
|
||||||
|
/* New in 3.5 */
|
||||||
|
PyAPI_FUNC(int) PyModule_SetDocString(PyObject *, const char *);
|
||||||
|
PyAPI_FUNC(int) PyModule_AddFunctions(PyObject *, PyMethodDef *);
|
||||||
|
PyAPI_FUNC(int) PyModule_ExecDef(PyObject *module, PyModuleDef *def);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define Py_CLEANUP_SUPPORTED 0x20000
|
||||||
|
|
||||||
|
#define PYTHON_API_VERSION 1013
|
||||||
|
#define PYTHON_API_STRING "1013"
|
||||||
|
/* The API version is maintained (independently from the Python version)
|
||||||
|
so we can detect mismatches between the interpreter and dynamically
|
||||||
|
loaded modules. These are diagnosed by an error message but
|
||||||
|
the module is still loaded (because the mismatch can only be tested
|
||||||
|
after loading the module). The error message is intended to
|
||||||
|
explain the core dump a few seconds later.
|
||||||
|
|
||||||
|
The symbol PYTHON_API_STRING defines the same value as a string
|
||||||
|
literal. *** PLEASE MAKE SURE THE DEFINITIONS MATCH. ***
|
||||||
|
|
||||||
|
Please add a line or two to the top of this log for each API
|
||||||
|
version change:
|
||||||
|
|
||||||
|
22-Feb-2006 MvL 1013 PEP 353 - long indices for sequence lengths
|
||||||
|
|
||||||
|
19-Aug-2002 GvR 1012 Changes to string object struct for
|
||||||
|
interning changes, saving 3 bytes.
|
||||||
|
|
||||||
|
17-Jul-2001 GvR 1011 Descr-branch, just to be on the safe side
|
||||||
|
|
||||||
|
25-Jan-2001 FLD 1010 Parameters added to PyCode_New() and
|
||||||
|
PyFrame_New(); Python 2.1a2
|
||||||
|
|
||||||
|
14-Mar-2000 GvR 1009 Unicode API added
|
||||||
|
|
||||||
|
3-Jan-1999 GvR 1007 Decided to change back! (Don't reuse 1008!)
|
||||||
|
|
||||||
|
3-Dec-1998 GvR 1008 Python 1.5.2b1
|
||||||
|
|
||||||
|
18-Jan-1997 GvR 1007 string interning and other speedups
|
||||||
|
|
||||||
|
11-Oct-1996 GvR renamed Py_Ellipses to Py_Ellipsis :-(
|
||||||
|
|
||||||
|
30-Jul-1996 GvR Slice and ellipses syntax added
|
||||||
|
|
||||||
|
23-Jul-1996 GvR For 1.4 -- better safe than sorry this time :-)
|
||||||
|
|
||||||
|
7-Nov-1995 GvR Keyword arguments (should've been done at 1.3 :-( )
|
||||||
|
|
||||||
|
10-Jan-1995 GvR Renamed globals to new naming scheme
|
||||||
|
|
||||||
|
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 module creation functions so
|
||||||
|
modules compiled with incompatible settings will generate a
|
||||||
|
link-time error. */
|
||||||
|
#define PyModule_Create2 PyModule_Create2TraceRefs
|
||||||
|
#define PyModule_FromDefAndSpec2 PyModule_FromDefAndSpec2TraceRefs
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyModule_Create2(struct PyModuleDef*,
|
||||||
|
int apiver);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(PyObject *) _PyModule_CreateInitialized(struct PyModuleDef*,
|
||||||
|
int apiver);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#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
|
||||||
|
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
|
||||||
|
/* New in 3.5 */
|
||||||
|
PyAPI_FUNC(PyObject *) PyModule_FromDefAndSpec2(PyModuleDef *def,
|
||||||
|
PyObject *spec,
|
||||||
|
int module_api_version);
|
||||||
|
|
||||||
|
#ifdef Py_LIMITED_API
|
||||||
|
#define PyModule_FromDefAndSpec(module, spec) \
|
||||||
|
PyModule_FromDefAndSpec2(module, spec, PYTHON_ABI_VERSION)
|
||||||
|
#else
|
||||||
|
#define PyModule_FromDefAndSpec(module, spec) \
|
||||||
|
PyModule_FromDefAndSpec2(module, spec, PYTHON_API_VERSION)
|
||||||
|
#endif /* Py_LIMITED_API */
|
||||||
|
#endif /* New in 3.5 */
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_DATA(const char *) _Py_PackageContext;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_MODSUPPORT_H */
|
89
WENV/Include/moduleobject.h
Normal file
89
WENV/Include/moduleobject.h
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
|
||||||
|
/* Module object interface */
|
||||||
|
|
||||||
|
#ifndef Py_MODULEOBJECT_H
|
||||||
|
#define Py_MODULEOBJECT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyModule_Type;
|
||||||
|
|
||||||
|
#define PyModule_Check(op) PyObject_TypeCheck(op, &PyModule_Type)
|
||||||
|
#define PyModule_CheckExact(op) (Py_TYPE(op) == &PyModule_Type)
|
||||||
|
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
|
||||||
|
PyAPI_FUNC(PyObject *) PyModule_NewObject(
|
||||||
|
PyObject *name
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(PyObject *) PyModule_New(
|
||||||
|
const char *name /* UTF-8 encoded string */
|
||||||
|
);
|
||||||
|
PyAPI_FUNC(PyObject *) PyModule_GetDict(PyObject *);
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
|
||||||
|
PyAPI_FUNC(PyObject *) PyModule_GetNameObject(PyObject *);
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(const char *) PyModule_GetName(PyObject *);
|
||||||
|
PyAPI_FUNC(const char *) PyModule_GetFilename(PyObject *) Py_DEPRECATED(3.2);
|
||||||
|
PyAPI_FUNC(PyObject *) PyModule_GetFilenameObject(PyObject *);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(void) _PyModule_Clear(PyObject *);
|
||||||
|
PyAPI_FUNC(void) _PyModule_ClearDict(PyObject *);
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(struct PyModuleDef*) PyModule_GetDef(PyObject*);
|
||||||
|
PyAPI_FUNC(void*) PyModule_GetState(PyObject*);
|
||||||
|
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
|
||||||
|
/* New in 3.5 */
|
||||||
|
PyAPI_FUNC(PyObject *) PyModuleDef_Init(struct PyModuleDef*);
|
||||||
|
PyAPI_DATA(PyTypeObject) PyModuleDef_Type;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct PyModuleDef_Base {
|
||||||
|
PyObject_HEAD
|
||||||
|
PyObject* (*m_init)(void);
|
||||||
|
Py_ssize_t m_index;
|
||||||
|
PyObject* m_copy;
|
||||||
|
} PyModuleDef_Base;
|
||||||
|
|
||||||
|
#define PyModuleDef_HEAD_INIT { \
|
||||||
|
PyObject_HEAD_INIT(NULL) \
|
||||||
|
NULL, /* m_init */ \
|
||||||
|
0, /* m_index */ \
|
||||||
|
NULL, /* m_copy */ \
|
||||||
|
}
|
||||||
|
|
||||||
|
struct PyModuleDef_Slot;
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
|
||||||
|
/* New in 3.5 */
|
||||||
|
typedef struct PyModuleDef_Slot{
|
||||||
|
int slot;
|
||||||
|
void *value;
|
||||||
|
} PyModuleDef_Slot;
|
||||||
|
|
||||||
|
#define Py_mod_create 1
|
||||||
|
#define Py_mod_exec 2
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
#define _Py_mod_LAST_SLOT 2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* New in 3.5 */
|
||||||
|
|
||||||
|
typedef struct PyModuleDef{
|
||||||
|
PyModuleDef_Base m_base;
|
||||||
|
const char* m_name;
|
||||||
|
const char* m_doc;
|
||||||
|
Py_ssize_t m_size;
|
||||||
|
PyMethodDef *m_methods;
|
||||||
|
struct PyModuleDef_Slot* m_slots;
|
||||||
|
traverseproc m_traverse;
|
||||||
|
inquiry m_clear;
|
||||||
|
freefunc m_free;
|
||||||
|
} PyModuleDef;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_MODULEOBJECT_H */
|
19
WENV/Include/namespaceobject.h
Normal file
19
WENV/Include/namespaceobject.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
/* simple namespace object interface */
|
||||||
|
|
||||||
|
#ifndef NAMESPACEOBJECT_H
|
||||||
|
#define NAMESPACEOBJECT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_DATA(PyTypeObject) _PyNamespace_Type;
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) _PyNamespace_New(PyObject *kwds);
|
||||||
|
#endif /* !Py_LIMITED_API */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !NAMESPACEOBJECT_H */
|
44
WENV/Include/node.h
Normal file
44
WENV/Include/node.h
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
|
||||||
|
/* Parse tree node interface */
|
||||||
|
|
||||||
|
#ifndef Py_NODE_H
|
||||||
|
#define Py_NODE_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct _node {
|
||||||
|
short n_type;
|
||||||
|
char *n_str;
|
||||||
|
int n_lineno;
|
||||||
|
int n_col_offset;
|
||||||
|
int n_nchildren;
|
||||||
|
struct _node *n_child;
|
||||||
|
} node;
|
||||||
|
|
||||||
|
PyAPI_FUNC(node *) PyNode_New(int type);
|
||||||
|
PyAPI_FUNC(int) PyNode_AddChild(node *n, int type,
|
||||||
|
char *str, int lineno, int col_offset);
|
||||||
|
PyAPI_FUNC(void) PyNode_Free(node *n);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(Py_ssize_t) _PyNode_SizeOf(node *n);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Node access functions */
|
||||||
|
#define NCH(n) ((n)->n_nchildren)
|
||||||
|
|
||||||
|
#define CHILD(n, i) (&(n)->n_child[i])
|
||||||
|
#define RCHILD(n, i) (CHILD(n, NCH(n) + i))
|
||||||
|
#define TYPE(n) ((n)->n_type)
|
||||||
|
#define STR(n) ((n)->n_str)
|
||||||
|
#define LINENO(n) ((n)->n_lineno)
|
||||||
|
|
||||||
|
/* Assert that the type of a node is what we expect */
|
||||||
|
#define REQ(n, type) assert(TYPE(n) == (type))
|
||||||
|
|
||||||
|
PyAPI_FUNC(void) PyNode_ListTree(node *);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_NODE_H */
|
1105
WENV/Include/object.h
Normal file
1105
WENV/Include/object.h
Normal file
File diff suppressed because it is too large
Load Diff
370
WENV/Include/objimpl.h
Normal file
370
WENV/Include/objimpl.h
Normal file
@ -0,0 +1,370 @@
|
|||||||
|
/* The PyObject_ memory family: high-level object memory interfaces.
|
||||||
|
See pymem.h for the low-level PyMem_ family.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef Py_OBJIMPL_H
|
||||||
|
#define Py_OBJIMPL_H
|
||||||
|
|
||||||
|
#include "pymem.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* BEWARE:
|
||||||
|
|
||||||
|
Each interface exports both functions and macros. Extension modules should
|
||||||
|
use the functions, to ensure binary compatibility across Python versions.
|
||||||
|
Because the Python implementation is free to change internal details, and
|
||||||
|
the macros may (or may not) expose details for speed, if you do use the
|
||||||
|
macros you must recompile your extensions with each Python release.
|
||||||
|
|
||||||
|
Never mix calls to PyObject_ memory functions with calls to the platform
|
||||||
|
malloc/realloc/ calloc/free, or with calls to PyMem_.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Functions and macros for modules that implement new object types.
|
||||||
|
|
||||||
|
- PyObject_New(type, typeobj) allocates memory for a new object of the given
|
||||||
|
type, and initializes part of it. 'type' must be the C structure type used
|
||||||
|
to represent the object, and 'typeobj' the address of the corresponding
|
||||||
|
type object. Reference count and type pointer are filled in; the rest of
|
||||||
|
the bytes of the object are *undefined*! The resulting expression type is
|
||||||
|
'type *'. The size of the object is determined by the tp_basicsize field
|
||||||
|
of the type object.
|
||||||
|
|
||||||
|
- PyObject_NewVar(type, typeobj, n) is similar but allocates a variable-size
|
||||||
|
object with room for n items. In addition to the refcount and type pointer
|
||||||
|
fields, this also fills in the ob_size field.
|
||||||
|
|
||||||
|
- PyObject_Del(op) releases the memory allocated for an object. It does not
|
||||||
|
run a destructor -- it only frees the memory. PyObject_Free is identical.
|
||||||
|
|
||||||
|
- PyObject_Init(op, typeobj) and PyObject_InitVar(op, typeobj, n) don't
|
||||||
|
allocate memory. Instead of a 'type' parameter, they take a pointer to a
|
||||||
|
new object (allocated by an arbitrary allocator), and initialize its object
|
||||||
|
header fields.
|
||||||
|
|
||||||
|
Note that objects created with PyObject_{New, NewVar} are allocated using the
|
||||||
|
specialized Python allocator (implemented in obmalloc.c), if WITH_PYMALLOC is
|
||||||
|
enabled. In addition, a special debugging allocator is used if PYMALLOC_DEBUG
|
||||||
|
is also #defined.
|
||||||
|
|
||||||
|
In case a specific form of memory management is needed (for example, if you
|
||||||
|
must use the platform malloc heap(s), or shared memory, or C++ local storage or
|
||||||
|
operator new), you must first allocate the object with your custom allocator,
|
||||||
|
then pass its pointer to PyObject_{Init, InitVar} for filling in its Python-
|
||||||
|
specific fields: reference count, type pointer, possibly others. You should
|
||||||
|
be aware that Python has no control over these objects because they don't
|
||||||
|
cooperate with the Python memory manager. Such objects may not be eligible
|
||||||
|
for automatic garbage collection and you have to make sure that they are
|
||||||
|
released accordingly whenever their destructor gets called (cf. the specific
|
||||||
|
form of memory management you're using).
|
||||||
|
|
||||||
|
Unless you have specific memory management requirements, use
|
||||||
|
PyObject_{New, NewVar, Del}.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Raw object memory interface
|
||||||
|
* ===========================
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Functions to call the same malloc/realloc/free as used by Python's
|
||||||
|
object allocator. If WITH_PYMALLOC is enabled, these may differ from
|
||||||
|
the platform malloc/realloc/free. The Python object allocator is
|
||||||
|
designed for fast, cache-conscious allocation of many "small" objects,
|
||||||
|
and with low hidden memory overhead.
|
||||||
|
|
||||||
|
PyObject_Malloc(0) returns a unique non-NULL pointer if possible.
|
||||||
|
|
||||||
|
PyObject_Realloc(NULL, n) acts like PyObject_Malloc(n).
|
||||||
|
PyObject_Realloc(p != NULL, 0) does not return NULL, or free the memory
|
||||||
|
at p.
|
||||||
|
|
||||||
|
Returned pointers must be checked for NULL explicitly; no action is
|
||||||
|
performed on failure other than to return NULL (no warning it printed, no
|
||||||
|
exception is set, etc).
|
||||||
|
|
||||||
|
For allocating objects, use PyObject_{New, NewVar} instead whenever
|
||||||
|
possible. The PyObject_{Malloc, Realloc, Free} family is exposed
|
||||||
|
so that you can exploit Python's small-block allocator for non-object
|
||||||
|
uses. If you must use these routines to allocate object memory, make sure
|
||||||
|
the object gets initialized via PyObject_{Init, InitVar} after obtaining
|
||||||
|
the raw memory.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(void *) PyObject_Malloc(size_t size);
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
|
||||||
|
PyAPI_FUNC(void *) PyObject_Calloc(size_t nelem, size_t elsize);
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(void *) PyObject_Realloc(void *ptr, size_t new_size);
|
||||||
|
PyAPI_FUNC(void) PyObject_Free(void *ptr);
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
/* This function returns the number of allocated memory blocks, regardless of size */
|
||||||
|
PyAPI_FUNC(Py_ssize_t) _Py_GetAllocatedBlocks(void);
|
||||||
|
#endif /* !Py_LIMITED_API */
|
||||||
|
|
||||||
|
/* Macros */
|
||||||
|
#ifdef WITH_PYMALLOC
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(int) _PyObject_DebugMallocStats(FILE *out);
|
||||||
|
#endif /* #ifndef Py_LIMITED_API */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Macros */
|
||||||
|
#define PyObject_MALLOC PyObject_Malloc
|
||||||
|
#define PyObject_REALLOC PyObject_Realloc
|
||||||
|
#define PyObject_FREE PyObject_Free
|
||||||
|
#define PyObject_Del PyObject_Free
|
||||||
|
#define PyObject_DEL PyObject_Free
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Generic object allocator interface
|
||||||
|
* ==================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Functions */
|
||||||
|
PyAPI_FUNC(PyObject *) PyObject_Init(PyObject *, PyTypeObject *);
|
||||||
|
PyAPI_FUNC(PyVarObject *) PyObject_InitVar(PyVarObject *,
|
||||||
|
PyTypeObject *, Py_ssize_t);
|
||||||
|
PyAPI_FUNC(PyObject *) _PyObject_New(PyTypeObject *);
|
||||||
|
PyAPI_FUNC(PyVarObject *) _PyObject_NewVar(PyTypeObject *, Py_ssize_t);
|
||||||
|
|
||||||
|
#define PyObject_New(type, typeobj) \
|
||||||
|
( (type *) _PyObject_New(typeobj) )
|
||||||
|
#define PyObject_NewVar(type, typeobj, n) \
|
||||||
|
( (type *) _PyObject_NewVar((typeobj), (n)) )
|
||||||
|
|
||||||
|
/* Macros trading binary compatibility for speed. See also pymem.h.
|
||||||
|
Note that these macros expect non-NULL object pointers.*/
|
||||||
|
#define PyObject_INIT(op, typeobj) \
|
||||||
|
( Py_TYPE(op) = (typeobj), _Py_NewReference((PyObject *)(op)), (op) )
|
||||||
|
#define PyObject_INIT_VAR(op, typeobj, size) \
|
||||||
|
( Py_SIZE(op) = (size), PyObject_INIT((op), (typeobj)) )
|
||||||
|
|
||||||
|
#define _PyObject_SIZE(typeobj) ( (typeobj)->tp_basicsize )
|
||||||
|
|
||||||
|
/* _PyObject_VAR_SIZE returns the number of bytes (as size_t) allocated for a
|
||||||
|
vrbl-size object with nitems items, exclusive of gc overhead (if any). The
|
||||||
|
value is rounded up to the closest multiple of sizeof(void *), in order to
|
||||||
|
ensure that pointer fields at the end of the object are correctly aligned
|
||||||
|
for the platform (this is of special importance for subclasses of, e.g.,
|
||||||
|
str or int, so that pointers can be stored after the embedded data).
|
||||||
|
|
||||||
|
Note that there's no memory wastage in doing this, as malloc has to
|
||||||
|
return (at worst) pointer-aligned memory anyway.
|
||||||
|
*/
|
||||||
|
#if ((SIZEOF_VOID_P - 1) & SIZEOF_VOID_P) != 0
|
||||||
|
# error "_PyObject_VAR_SIZE requires SIZEOF_VOID_P be a power of 2"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define _PyObject_VAR_SIZE(typeobj, nitems) \
|
||||||
|
_Py_SIZE_ROUND_UP((typeobj)->tp_basicsize + \
|
||||||
|
(nitems)*(typeobj)->tp_itemsize, \
|
||||||
|
SIZEOF_VOID_P)
|
||||||
|
|
||||||
|
#define PyObject_NEW(type, typeobj) \
|
||||||
|
( (type *) PyObject_Init( \
|
||||||
|
(PyObject *) PyObject_MALLOC( _PyObject_SIZE(typeobj) ), (typeobj)) )
|
||||||
|
|
||||||
|
#define PyObject_NEW_VAR(type, typeobj, n) \
|
||||||
|
( (type *) PyObject_InitVar( \
|
||||||
|
(PyVarObject *) PyObject_MALLOC(_PyObject_VAR_SIZE((typeobj),(n)) ),\
|
||||||
|
(typeobj), (n)) )
|
||||||
|
|
||||||
|
/* This example code implements an object constructor with a custom
|
||||||
|
allocator, where PyObject_New is inlined, and shows the important
|
||||||
|
distinction between two steps (at least):
|
||||||
|
1) the actual allocation of the object storage;
|
||||||
|
2) the initialization of the Python specific fields
|
||||||
|
in this storage with PyObject_{Init, InitVar}.
|
||||||
|
|
||||||
|
PyObject *
|
||||||
|
YourObject_New(...)
|
||||||
|
{
|
||||||
|
PyObject *op;
|
||||||
|
|
||||||
|
op = (PyObject *) Your_Allocator(_PyObject_SIZE(YourTypeStruct));
|
||||||
|
if (op == NULL)
|
||||||
|
return PyErr_NoMemory();
|
||||||
|
|
||||||
|
PyObject_Init(op, &YourTypeStruct);
|
||||||
|
|
||||||
|
op->ob_field = value;
|
||||||
|
...
|
||||||
|
return op;
|
||||||
|
}
|
||||||
|
|
||||||
|
Note that in C++, the use of the new operator usually implies that
|
||||||
|
the 1st step is performed automatically for you, so in a C++ class
|
||||||
|
constructor you would start directly with PyObject_Init/InitVar
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
typedef struct {
|
||||||
|
/* user context passed as the first argument to the 2 functions */
|
||||||
|
void *ctx;
|
||||||
|
|
||||||
|
/* allocate an arena of size bytes */
|
||||||
|
void* (*alloc) (void *ctx, size_t size);
|
||||||
|
|
||||||
|
/* free an arena */
|
||||||
|
void (*free) (void *ctx, void *ptr, size_t size);
|
||||||
|
} PyObjectArenaAllocator;
|
||||||
|
|
||||||
|
/* Get the arena allocator. */
|
||||||
|
PyAPI_FUNC(void) PyObject_GetArenaAllocator(PyObjectArenaAllocator *allocator);
|
||||||
|
|
||||||
|
/* Set the arena allocator. */
|
||||||
|
PyAPI_FUNC(void) PyObject_SetArenaAllocator(PyObjectArenaAllocator *allocator);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Garbage Collection Support
|
||||||
|
* ==========================
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* C equivalent of gc.collect() which ignores the state of gc.enabled. */
|
||||||
|
PyAPI_FUNC(Py_ssize_t) PyGC_Collect(void);
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(Py_ssize_t) _PyGC_CollectNoFail(void);
|
||||||
|
PyAPI_FUNC(Py_ssize_t) _PyGC_CollectIfEnabled(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Test if a type has a GC head */
|
||||||
|
#define PyType_IS_GC(t) PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)
|
||||||
|
|
||||||
|
/* Test if an object has a GC head */
|
||||||
|
#define PyObject_IS_GC(o) (PyType_IS_GC(Py_TYPE(o)) && \
|
||||||
|
(Py_TYPE(o)->tp_is_gc == NULL || Py_TYPE(o)->tp_is_gc(o)))
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyVarObject *) _PyObject_GC_Resize(PyVarObject *, Py_ssize_t);
|
||||||
|
#define PyObject_GC_Resize(type, op, n) \
|
||||||
|
( (type *) _PyObject_GC_Resize((PyVarObject *)(op), (n)) )
|
||||||
|
|
||||||
|
/* GC information is stored BEFORE the object structure. */
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
typedef union _gc_head {
|
||||||
|
struct {
|
||||||
|
union _gc_head *gc_next;
|
||||||
|
union _gc_head *gc_prev;
|
||||||
|
Py_ssize_t gc_refs;
|
||||||
|
} gc;
|
||||||
|
double dummy; /* force worst-case alignment */
|
||||||
|
} PyGC_Head;
|
||||||
|
|
||||||
|
extern PyGC_Head *_PyGC_generation0;
|
||||||
|
|
||||||
|
#define _Py_AS_GC(o) ((PyGC_Head *)(o)-1)
|
||||||
|
|
||||||
|
/* Bit 0 is set when tp_finalize is called */
|
||||||
|
#define _PyGC_REFS_MASK_FINALIZED (1 << 0)
|
||||||
|
/* The (N-1) most significant bits contain the gc state / refcount */
|
||||||
|
#define _PyGC_REFS_SHIFT (1)
|
||||||
|
#define _PyGC_REFS_MASK (((size_t) -1) << _PyGC_REFS_SHIFT)
|
||||||
|
|
||||||
|
#define _PyGCHead_REFS(g) ((g)->gc.gc_refs >> _PyGC_REFS_SHIFT)
|
||||||
|
#define _PyGCHead_SET_REFS(g, v) do { \
|
||||||
|
(g)->gc.gc_refs = ((g)->gc.gc_refs & ~_PyGC_REFS_MASK) \
|
||||||
|
| (((size_t)(v)) << _PyGC_REFS_SHIFT); \
|
||||||
|
} while (0)
|
||||||
|
#define _PyGCHead_DECREF(g) ((g)->gc.gc_refs -= 1 << _PyGC_REFS_SHIFT)
|
||||||
|
|
||||||
|
#define _PyGCHead_FINALIZED(g) (((g)->gc.gc_refs & _PyGC_REFS_MASK_FINALIZED) != 0)
|
||||||
|
#define _PyGCHead_SET_FINALIZED(g, v) do { \
|
||||||
|
(g)->gc.gc_refs = ((g)->gc.gc_refs & ~_PyGC_REFS_MASK_FINALIZED) \
|
||||||
|
| (v != 0); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define _PyGC_FINALIZED(o) _PyGCHead_FINALIZED(_Py_AS_GC(o))
|
||||||
|
#define _PyGC_SET_FINALIZED(o, v) _PyGCHead_SET_FINALIZED(_Py_AS_GC(o), v)
|
||||||
|
|
||||||
|
#define _PyGC_REFS(o) _PyGCHead_REFS(_Py_AS_GC(o))
|
||||||
|
|
||||||
|
#define _PyGC_REFS_UNTRACKED (-2)
|
||||||
|
#define _PyGC_REFS_REACHABLE (-3)
|
||||||
|
#define _PyGC_REFS_TENTATIVELY_UNREACHABLE (-4)
|
||||||
|
|
||||||
|
/* Tell the GC to track this object. NB: While the object is tracked the
|
||||||
|
* collector it must be safe to call the ob_traverse method. */
|
||||||
|
#define _PyObject_GC_TRACK(o) do { \
|
||||||
|
PyGC_Head *g = _Py_AS_GC(o); \
|
||||||
|
if (_PyGCHead_REFS(g) != _PyGC_REFS_UNTRACKED) \
|
||||||
|
Py_FatalError("GC object already tracked"); \
|
||||||
|
_PyGCHead_SET_REFS(g, _PyGC_REFS_REACHABLE); \
|
||||||
|
g->gc.gc_next = _PyGC_generation0; \
|
||||||
|
g->gc.gc_prev = _PyGC_generation0->gc.gc_prev; \
|
||||||
|
g->gc.gc_prev->gc.gc_next = g; \
|
||||||
|
_PyGC_generation0->gc.gc_prev = g; \
|
||||||
|
} while (0);
|
||||||
|
|
||||||
|
/* Tell the GC to stop tracking this object.
|
||||||
|
* gc_next doesn't need to be set to NULL, but doing so is a good
|
||||||
|
* way to provoke memory errors if calling code is confused.
|
||||||
|
*/
|
||||||
|
#define _PyObject_GC_UNTRACK(o) do { \
|
||||||
|
PyGC_Head *g = _Py_AS_GC(o); \
|
||||||
|
assert(_PyGCHead_REFS(g) != _PyGC_REFS_UNTRACKED); \
|
||||||
|
_PyGCHead_SET_REFS(g, _PyGC_REFS_UNTRACKED); \
|
||||||
|
g->gc.gc_prev->gc.gc_next = g->gc.gc_next; \
|
||||||
|
g->gc.gc_next->gc.gc_prev = g->gc.gc_prev; \
|
||||||
|
g->gc.gc_next = NULL; \
|
||||||
|
} while (0);
|
||||||
|
|
||||||
|
/* True if the object is currently tracked by the GC. */
|
||||||
|
#define _PyObject_GC_IS_TRACKED(o) \
|
||||||
|
(_PyGC_REFS(o) != _PyGC_REFS_UNTRACKED)
|
||||||
|
|
||||||
|
/* True if the object may be tracked by the GC in the future, or already is.
|
||||||
|
This can be useful to implement some optimizations. */
|
||||||
|
#define _PyObject_GC_MAY_BE_TRACKED(obj) \
|
||||||
|
(PyObject_IS_GC(obj) && \
|
||||||
|
(!PyTuple_CheckExact(obj) || _PyObject_GC_IS_TRACKED(obj)))
|
||||||
|
#endif /* Py_LIMITED_API */
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(PyObject *) _PyObject_GC_Malloc(size_t size);
|
||||||
|
PyAPI_FUNC(PyObject *) _PyObject_GC_Calloc(size_t size);
|
||||||
|
#endif /* !Py_LIMITED_API */
|
||||||
|
PyAPI_FUNC(PyObject *) _PyObject_GC_New(PyTypeObject *);
|
||||||
|
PyAPI_FUNC(PyVarObject *) _PyObject_GC_NewVar(PyTypeObject *, Py_ssize_t);
|
||||||
|
PyAPI_FUNC(void) PyObject_GC_Track(void *);
|
||||||
|
PyAPI_FUNC(void) PyObject_GC_UnTrack(void *);
|
||||||
|
PyAPI_FUNC(void) PyObject_GC_Del(void *);
|
||||||
|
|
||||||
|
#define PyObject_GC_New(type, typeobj) \
|
||||||
|
( (type *) _PyObject_GC_New(typeobj) )
|
||||||
|
#define PyObject_GC_NewVar(type, typeobj, n) \
|
||||||
|
( (type *) _PyObject_GC_NewVar((typeobj), (n)) )
|
||||||
|
|
||||||
|
|
||||||
|
/* Utility macro to help write tp_traverse functions.
|
||||||
|
* To use this macro, the tp_traverse function must name its arguments
|
||||||
|
* "visit" and "arg". This is intended to keep tp_traverse functions
|
||||||
|
* looking as much alike as possible.
|
||||||
|
*/
|
||||||
|
#define Py_VISIT(op) \
|
||||||
|
do { \
|
||||||
|
if (op) { \
|
||||||
|
int vret = visit((PyObject *)(op), arg); \
|
||||||
|
if (vret) \
|
||||||
|
return vret; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
|
||||||
|
/* Test if a type supports weak references */
|
||||||
|
#define PyType_SUPPORTS_WEAKREFS(t) ((t)->tp_weaklistoffset > 0)
|
||||||
|
|
||||||
|
#define PyObject_GET_WEAKREFS_LISTPTR(o) \
|
||||||
|
((PyObject **) (((char *) (o)) + Py_TYPE(o)->tp_weaklistoffset))
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_OBJIMPL_H */
|
43
WENV/Include/odictobject.h
Normal file
43
WENV/Include/odictobject.h
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
#ifndef Py_ODICTOBJECT_H
|
||||||
|
#define Py_ODICTOBJECT_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* OrderedDict */
|
||||||
|
/* This API is optional and mostly redundant. */
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
|
||||||
|
typedef struct _odictobject PyODictObject;
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyODict_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyODictIter_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyODictKeys_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyODictItems_Type;
|
||||||
|
PyAPI_DATA(PyTypeObject) PyODictValues_Type;
|
||||||
|
|
||||||
|
#define PyODict_Check(op) PyObject_TypeCheck(op, &PyODict_Type)
|
||||||
|
#define PyODict_CheckExact(op) (Py_TYPE(op) == &PyODict_Type)
|
||||||
|
#define PyODict_SIZE(op) PyDict_GET_SIZE((op))
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyODict_New(void);
|
||||||
|
PyAPI_FUNC(int) PyODict_SetItem(PyObject *od, PyObject *key, PyObject *item);
|
||||||
|
PyAPI_FUNC(int) PyODict_DelItem(PyObject *od, PyObject *key);
|
||||||
|
|
||||||
|
/* wrappers around PyDict* functions */
|
||||||
|
#define PyODict_GetItem(od, key) PyDict_GetItem((PyObject *)od, key)
|
||||||
|
#define PyODict_GetItemWithError(od, key) \
|
||||||
|
PyDict_GetItemWithError((PyObject *)od, key)
|
||||||
|
#define PyODict_Contains(od, key) PyDict_Contains((PyObject *)od, key)
|
||||||
|
#define PyODict_Size(od) PyDict_Size((PyObject *)od)
|
||||||
|
#define PyODict_GetItemString(od, key) \
|
||||||
|
PyDict_GetItemString((PyObject *)od, key)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_ODICTOBJECT_H */
|
147
WENV/Include/opcode.h
Normal file
147
WENV/Include/opcode.h
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
/* Auto-generated by Tools/scripts/generate_opcode_h.py */
|
||||||
|
#ifndef Py_OPCODE_H
|
||||||
|
#define Py_OPCODE_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Instruction opcodes for compiled code */
|
||||||
|
#define POP_TOP 1
|
||||||
|
#define ROT_TWO 2
|
||||||
|
#define ROT_THREE 3
|
||||||
|
#define DUP_TOP 4
|
||||||
|
#define DUP_TOP_TWO 5
|
||||||
|
#define NOP 9
|
||||||
|
#define UNARY_POSITIVE 10
|
||||||
|
#define UNARY_NEGATIVE 11
|
||||||
|
#define UNARY_NOT 12
|
||||||
|
#define UNARY_INVERT 15
|
||||||
|
#define BINARY_MATRIX_MULTIPLY 16
|
||||||
|
#define INPLACE_MATRIX_MULTIPLY 17
|
||||||
|
#define BINARY_POWER 19
|
||||||
|
#define BINARY_MULTIPLY 20
|
||||||
|
#define BINARY_MODULO 22
|
||||||
|
#define BINARY_ADD 23
|
||||||
|
#define BINARY_SUBTRACT 24
|
||||||
|
#define BINARY_SUBSCR 25
|
||||||
|
#define BINARY_FLOOR_DIVIDE 26
|
||||||
|
#define BINARY_TRUE_DIVIDE 27
|
||||||
|
#define INPLACE_FLOOR_DIVIDE 28
|
||||||
|
#define INPLACE_TRUE_DIVIDE 29
|
||||||
|
#define GET_AITER 50
|
||||||
|
#define GET_ANEXT 51
|
||||||
|
#define BEFORE_ASYNC_WITH 52
|
||||||
|
#define INPLACE_ADD 55
|
||||||
|
#define INPLACE_SUBTRACT 56
|
||||||
|
#define INPLACE_MULTIPLY 57
|
||||||
|
#define INPLACE_MODULO 59
|
||||||
|
#define STORE_SUBSCR 60
|
||||||
|
#define DELETE_SUBSCR 61
|
||||||
|
#define BINARY_LSHIFT 62
|
||||||
|
#define BINARY_RSHIFT 63
|
||||||
|
#define BINARY_AND 64
|
||||||
|
#define BINARY_XOR 65
|
||||||
|
#define BINARY_OR 66
|
||||||
|
#define INPLACE_POWER 67
|
||||||
|
#define GET_ITER 68
|
||||||
|
#define GET_YIELD_FROM_ITER 69
|
||||||
|
#define PRINT_EXPR 70
|
||||||
|
#define LOAD_BUILD_CLASS 71
|
||||||
|
#define YIELD_FROM 72
|
||||||
|
#define GET_AWAITABLE 73
|
||||||
|
#define INPLACE_LSHIFT 75
|
||||||
|
#define INPLACE_RSHIFT 76
|
||||||
|
#define INPLACE_AND 77
|
||||||
|
#define INPLACE_XOR 78
|
||||||
|
#define INPLACE_OR 79
|
||||||
|
#define BREAK_LOOP 80
|
||||||
|
#define WITH_CLEANUP_START 81
|
||||||
|
#define WITH_CLEANUP_FINISH 82
|
||||||
|
#define RETURN_VALUE 83
|
||||||
|
#define IMPORT_STAR 84
|
||||||
|
#define SETUP_ANNOTATIONS 85
|
||||||
|
#define YIELD_VALUE 86
|
||||||
|
#define POP_BLOCK 87
|
||||||
|
#define END_FINALLY 88
|
||||||
|
#define POP_EXCEPT 89
|
||||||
|
#define HAVE_ARGUMENT 90
|
||||||
|
#define STORE_NAME 90
|
||||||
|
#define DELETE_NAME 91
|
||||||
|
#define UNPACK_SEQUENCE 92
|
||||||
|
#define FOR_ITER 93
|
||||||
|
#define UNPACK_EX 94
|
||||||
|
#define STORE_ATTR 95
|
||||||
|
#define DELETE_ATTR 96
|
||||||
|
#define STORE_GLOBAL 97
|
||||||
|
#define DELETE_GLOBAL 98
|
||||||
|
#define LOAD_CONST 100
|
||||||
|
#define LOAD_NAME 101
|
||||||
|
#define BUILD_TUPLE 102
|
||||||
|
#define BUILD_LIST 103
|
||||||
|
#define BUILD_SET 104
|
||||||
|
#define BUILD_MAP 105
|
||||||
|
#define LOAD_ATTR 106
|
||||||
|
#define COMPARE_OP 107
|
||||||
|
#define IMPORT_NAME 108
|
||||||
|
#define IMPORT_FROM 109
|
||||||
|
#define JUMP_FORWARD 110
|
||||||
|
#define JUMP_IF_FALSE_OR_POP 111
|
||||||
|
#define JUMP_IF_TRUE_OR_POP 112
|
||||||
|
#define JUMP_ABSOLUTE 113
|
||||||
|
#define POP_JUMP_IF_FALSE 114
|
||||||
|
#define POP_JUMP_IF_TRUE 115
|
||||||
|
#define LOAD_GLOBAL 116
|
||||||
|
#define CONTINUE_LOOP 119
|
||||||
|
#define SETUP_LOOP 120
|
||||||
|
#define SETUP_EXCEPT 121
|
||||||
|
#define SETUP_FINALLY 122
|
||||||
|
#define LOAD_FAST 124
|
||||||
|
#define STORE_FAST 125
|
||||||
|
#define DELETE_FAST 126
|
||||||
|
#define RAISE_VARARGS 130
|
||||||
|
#define CALL_FUNCTION 131
|
||||||
|
#define MAKE_FUNCTION 132
|
||||||
|
#define BUILD_SLICE 133
|
||||||
|
#define LOAD_CLOSURE 135
|
||||||
|
#define LOAD_DEREF 136
|
||||||
|
#define STORE_DEREF 137
|
||||||
|
#define DELETE_DEREF 138
|
||||||
|
#define CALL_FUNCTION_KW 141
|
||||||
|
#define CALL_FUNCTION_EX 142
|
||||||
|
#define SETUP_WITH 143
|
||||||
|
#define EXTENDED_ARG 144
|
||||||
|
#define LIST_APPEND 145
|
||||||
|
#define SET_ADD 146
|
||||||
|
#define MAP_ADD 147
|
||||||
|
#define LOAD_CLASSDEREF 148
|
||||||
|
#define BUILD_LIST_UNPACK 149
|
||||||
|
#define BUILD_MAP_UNPACK 150
|
||||||
|
#define BUILD_MAP_UNPACK_WITH_CALL 151
|
||||||
|
#define BUILD_TUPLE_UNPACK 152
|
||||||
|
#define BUILD_SET_UNPACK 153
|
||||||
|
#define SETUP_ASYNC_WITH 154
|
||||||
|
#define FORMAT_VALUE 155
|
||||||
|
#define BUILD_CONST_KEY_MAP 156
|
||||||
|
#define BUILD_STRING 157
|
||||||
|
#define BUILD_TUPLE_UNPACK_WITH_CALL 158
|
||||||
|
#define LOAD_METHOD 160
|
||||||
|
#define CALL_METHOD 161
|
||||||
|
|
||||||
|
/* EXCEPT_HANDLER is a special, implicit block type which is created when
|
||||||
|
entering an except handler. It is not an opcode but we define it here
|
||||||
|
as we want it to be available to both frameobject.c and ceval.c, while
|
||||||
|
remaining private.*/
|
||||||
|
#define EXCEPT_HANDLER 257
|
||||||
|
|
||||||
|
|
||||||
|
enum cmp_op {PyCmp_LT=Py_LT, PyCmp_LE=Py_LE, PyCmp_EQ=Py_EQ, PyCmp_NE=Py_NE,
|
||||||
|
PyCmp_GT=Py_GT, PyCmp_GE=Py_GE, PyCmp_IN, PyCmp_NOT_IN,
|
||||||
|
PyCmp_IS, PyCmp_IS_NOT, PyCmp_EXC_MATCH, PyCmp_BAD};
|
||||||
|
|
||||||
|
#define HAS_ARG(op) ((op) >= HAVE_ARGUMENT)
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_OPCODE_H */
|
47
WENV/Include/osdefs.h
Normal file
47
WENV/Include/osdefs.h
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#ifndef Py_OSDEFS_H
|
||||||
|
#define Py_OSDEFS_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Operating system dependencies */
|
||||||
|
|
||||||
|
#ifdef MS_WINDOWS
|
||||||
|
#define SEP L'\\'
|
||||||
|
#define ALTSEP L'/'
|
||||||
|
#define MAXPATHLEN 256
|
||||||
|
#define DELIM L';'
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Filename separator */
|
||||||
|
#ifndef SEP
|
||||||
|
#define SEP L'/'
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Max pathname length */
|
||||||
|
#ifdef __hpux
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#ifndef PATH_MAX
|
||||||
|
#define PATH_MAX MAXPATHLEN
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef MAXPATHLEN
|
||||||
|
#if defined(PATH_MAX) && PATH_MAX > 1024
|
||||||
|
#define MAXPATHLEN PATH_MAX
|
||||||
|
#else
|
||||||
|
#define MAXPATHLEN 1024
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Search path entry delimiter */
|
||||||
|
#ifndef DELIM
|
||||||
|
#define DELIM L':'
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_OSDEFS_H */
|
17
WENV/Include/osmodule.h
Normal file
17
WENV/Include/osmodule.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
|
||||||
|
/* os module interface */
|
||||||
|
|
||||||
|
#ifndef Py_OSMODULE_H
|
||||||
|
#define Py_OSMODULE_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000
|
||||||
|
PyAPI_FUNC(PyObject *) PyOS_FSPath(PyObject *path);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_OSMODULE_H */
|
108
WENV/Include/parsetok.h
Normal file
108
WENV/Include/parsetok.h
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
|
||||||
|
/* Parser-tokenizer link interface */
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
#ifndef Py_PARSETOK_H
|
||||||
|
#define Py_PARSETOK_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int error;
|
||||||
|
#ifndef PGEN
|
||||||
|
/* The filename is useless for pgen, see comment in tok_state structure */
|
||||||
|
PyObject *filename;
|
||||||
|
#endif
|
||||||
|
int lineno;
|
||||||
|
int offset;
|
||||||
|
char *text; /* UTF-8-encoded string */
|
||||||
|
int token;
|
||||||
|
int expected;
|
||||||
|
} perrdetail;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
#define PyPARSE_YIELD_IS_KEYWORD 0x0001
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define PyPARSE_DONT_IMPLY_DEDENT 0x0002
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
#define PyPARSE_WITH_IS_KEYWORD 0x0003
|
||||||
|
#define PyPARSE_PRINT_IS_FUNCTION 0x0004
|
||||||
|
#define PyPARSE_UNICODE_LITERALS 0x0008
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define PyPARSE_IGNORE_COOKIE 0x0010
|
||||||
|
#define PyPARSE_BARRY_AS_BDFL 0x0020
|
||||||
|
|
||||||
|
PyAPI_FUNC(node *) PyParser_ParseString(const char *, grammar *, int,
|
||||||
|
perrdetail *);
|
||||||
|
PyAPI_FUNC(node *) PyParser_ParseFile (FILE *, const char *, grammar *, int,
|
||||||
|
const char *, const char *,
|
||||||
|
perrdetail *);
|
||||||
|
|
||||||
|
PyAPI_FUNC(node *) PyParser_ParseStringFlags(const char *, grammar *, int,
|
||||||
|
perrdetail *, int);
|
||||||
|
PyAPI_FUNC(node *) PyParser_ParseFileFlags(
|
||||||
|
FILE *fp,
|
||||||
|
const char *filename, /* decoded from the filesystem encoding */
|
||||||
|
const char *enc,
|
||||||
|
grammar *g,
|
||||||
|
int start,
|
||||||
|
const char *ps1,
|
||||||
|
const char *ps2,
|
||||||
|
perrdetail *err_ret,
|
||||||
|
int flags);
|
||||||
|
PyAPI_FUNC(node *) PyParser_ParseFileFlagsEx(
|
||||||
|
FILE *fp,
|
||||||
|
const char *filename, /* decoded from the filesystem encoding */
|
||||||
|
const char *enc,
|
||||||
|
grammar *g,
|
||||||
|
int start,
|
||||||
|
const char *ps1,
|
||||||
|
const char *ps2,
|
||||||
|
perrdetail *err_ret,
|
||||||
|
int *flags);
|
||||||
|
PyAPI_FUNC(node *) PyParser_ParseFileObject(
|
||||||
|
FILE *fp,
|
||||||
|
PyObject *filename,
|
||||||
|
const char *enc,
|
||||||
|
grammar *g,
|
||||||
|
int start,
|
||||||
|
const char *ps1,
|
||||||
|
const char *ps2,
|
||||||
|
perrdetail *err_ret,
|
||||||
|
int *flags);
|
||||||
|
|
||||||
|
PyAPI_FUNC(node *) PyParser_ParseStringFlagsFilename(
|
||||||
|
const char *s,
|
||||||
|
const char *filename, /* decoded from the filesystem encoding */
|
||||||
|
grammar *g,
|
||||||
|
int start,
|
||||||
|
perrdetail *err_ret,
|
||||||
|
int flags);
|
||||||
|
PyAPI_FUNC(node *) PyParser_ParseStringFlagsFilenameEx(
|
||||||
|
const char *s,
|
||||||
|
const char *filename, /* decoded from the filesystem encoding */
|
||||||
|
grammar *g,
|
||||||
|
int start,
|
||||||
|
perrdetail *err_ret,
|
||||||
|
int *flags);
|
||||||
|
PyAPI_FUNC(node *) PyParser_ParseStringObject(
|
||||||
|
const char *s,
|
||||||
|
PyObject *filename,
|
||||||
|
grammar *g,
|
||||||
|
int start,
|
||||||
|
perrdetail *err_ret,
|
||||||
|
int *flags);
|
||||||
|
|
||||||
|
/* Note that the following functions are defined in pythonrun.c,
|
||||||
|
not in parsetok.c */
|
||||||
|
PyAPI_FUNC(void) PyParser_SetError(perrdetail *);
|
||||||
|
PyAPI_FUNC(void) PyParser_ClearError(perrdetail *);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_PARSETOK_H */
|
||||||
|
#endif /* !Py_LIMITED_API */
|
35
WENV/Include/patchlevel.h
Normal file
35
WENV/Include/patchlevel.h
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
|
||||||
|
/* Python version identification scheme.
|
||||||
|
|
||||||
|
When the major or minor version changes, the VERSION variable in
|
||||||
|
configure.ac must also be changed.
|
||||||
|
|
||||||
|
There is also (independent) API version information in modsupport.h.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Values for PY_RELEASE_LEVEL */
|
||||||
|
#define PY_RELEASE_LEVEL_ALPHA 0xA
|
||||||
|
#define PY_RELEASE_LEVEL_BETA 0xB
|
||||||
|
#define PY_RELEASE_LEVEL_GAMMA 0xC /* For release candidates */
|
||||||
|
#define PY_RELEASE_LEVEL_FINAL 0xF /* Serial should be 0 here */
|
||||||
|
/* Higher for patch releases */
|
||||||
|
|
||||||
|
/* Version parsed out into numeric values */
|
||||||
|
/*--start constants--*/
|
||||||
|
#define PY_MAJOR_VERSION 3
|
||||||
|
#define PY_MINOR_VERSION 7
|
||||||
|
#define PY_MICRO_VERSION 2
|
||||||
|
#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL
|
||||||
|
#define PY_RELEASE_SERIAL 0
|
||||||
|
|
||||||
|
/* Version as a string */
|
||||||
|
#define PY_VERSION "3.7.2"
|
||||||
|
/*--end constants--*/
|
||||||
|
|
||||||
|
/* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2.
|
||||||
|
Use this for numeric comparisons, e.g. #if PY_VERSION_HEX >= ... */
|
||||||
|
#define PY_VERSION_HEX ((PY_MAJOR_VERSION << 24) | \
|
||||||
|
(PY_MINOR_VERSION << 16) | \
|
||||||
|
(PY_MICRO_VERSION << 8) | \
|
||||||
|
(PY_RELEASE_LEVEL << 4) | \
|
||||||
|
(PY_RELEASE_SERIAL << 0))
|
18
WENV/Include/pgen.h
Normal file
18
WENV/Include/pgen.h
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#ifndef Py_PGEN_H
|
||||||
|
#define Py_PGEN_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Parser generator interface */
|
||||||
|
|
||||||
|
extern grammar *meta_grammar(void);
|
||||||
|
|
||||||
|
struct _node;
|
||||||
|
extern grammar *pgen(struct _node *);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_PGEN_H */
|
43
WENV/Include/pgenheaders.h
Normal file
43
WENV/Include/pgenheaders.h
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
#ifndef Py_PGENHEADERS_H
|
||||||
|
#define Py_PGENHEADERS_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Include files and extern declarations used by most of the parser. */
|
||||||
|
|
||||||
|
#include "Python.h"
|
||||||
|
|
||||||
|
PyAPI_FUNC(void) PySys_WriteStdout(const char *format, ...)
|
||||||
|
Py_GCC_ATTRIBUTE((format(printf, 1, 2)));
|
||||||
|
PyAPI_FUNC(void) PySys_WriteStderr(const char *format, ...)
|
||||||
|
Py_GCC_ATTRIBUTE((format(printf, 1, 2)));
|
||||||
|
|
||||||
|
#define addarc _Py_addarc
|
||||||
|
#define addbit _Py_addbit
|
||||||
|
#define adddfa _Py_adddfa
|
||||||
|
#define addfirstsets _Py_addfirstsets
|
||||||
|
#define addlabel _Py_addlabel
|
||||||
|
#define addstate _Py_addstate
|
||||||
|
#define delbitset _Py_delbitset
|
||||||
|
#define dumptree _Py_dumptree
|
||||||
|
#define findlabel _Py_findlabel
|
||||||
|
#define freegrammar _Py_freegrammar
|
||||||
|
#define mergebitset _Py_mergebitset
|
||||||
|
#define meta_grammar _Py_meta_grammar
|
||||||
|
#define newbitset _Py_newbitset
|
||||||
|
#define newgrammar _Py_newgrammar
|
||||||
|
#define pgen _Py_pgen
|
||||||
|
#define printgrammar _Py_printgrammar
|
||||||
|
#define printnonterminals _Py_printnonterminals
|
||||||
|
#define printtree _Py_printtree
|
||||||
|
#define samebitset _Py_samebitset
|
||||||
|
#define showtree _Py_showtree
|
||||||
|
#define tok_dump _Py_tok_dump
|
||||||
|
#define translatelabels _Py_translatelabels
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_PGENHEADERS_H */
|
159
WENV/Include/py_curses.h
Normal file
159
WENV/Include/py_curses.h
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
|
||||||
|
#ifndef Py_CURSES_H
|
||||||
|
#define Py_CURSES_H
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
/*
|
||||||
|
** On Mac OS X 10.2 [n]curses.h and stdlib.h use different guards
|
||||||
|
** against multiple definition of wchar_t.
|
||||||
|
*/
|
||||||
|
#ifdef _BSD_WCHAR_T_DEFINED_
|
||||||
|
#define _WCHAR_T
|
||||||
|
#endif
|
||||||
|
#endif /* __APPLE__ */
|
||||||
|
|
||||||
|
/* On FreeBSD, [n]curses.h and stdlib.h/wchar.h use different guards
|
||||||
|
against multiple definition of wchar_t and wint_t. */
|
||||||
|
#if defined(__FreeBSD__) && defined(_XOPEN_SOURCE_EXTENDED)
|
||||||
|
# ifndef __wchar_t
|
||||||
|
# define __wchar_t
|
||||||
|
# endif
|
||||||
|
# ifndef __wint_t
|
||||||
|
# define __wint_t
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(HAVE_CURSES_IS_PAD) && defined(WINDOW_HAS_FLAGS)
|
||||||
|
/* The following definition is necessary for ncurses 5.7; without it,
|
||||||
|
some of [n]curses.h set NCURSES_OPAQUE to 1, and then Python
|
||||||
|
can't get at the WINDOW flags field. */
|
||||||
|
#define NCURSES_OPAQUE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_NCURSES_H
|
||||||
|
#include <ncurses.h>
|
||||||
|
#else
|
||||||
|
#include <curses.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_NCURSES_H
|
||||||
|
/* configure was checking <curses.h>, but we will
|
||||||
|
use <ncurses.h>, which has some or all these features. */
|
||||||
|
#if !defined(WINDOW_HAS_FLAGS) && !(NCURSES_OPAQUE+0)
|
||||||
|
#define WINDOW_HAS_FLAGS 1
|
||||||
|
#endif
|
||||||
|
#if !defined(HAVE_CURSES_IS_PAD) && NCURSES_VERSION_PATCH+0 >= 20090906
|
||||||
|
#define HAVE_CURSES_IS_PAD 1
|
||||||
|
#endif
|
||||||
|
#ifndef MVWDELCH_IS_EXPRESSION
|
||||||
|
#define MVWDELCH_IS_EXPRESSION 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define PyCurses_API_pointers 4
|
||||||
|
|
||||||
|
/* Type declarations */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
WINDOW *win;
|
||||||
|
char *encoding;
|
||||||
|
} PyCursesWindowObject;
|
||||||
|
|
||||||
|
#define PyCursesWindow_Check(v) (Py_TYPE(v) == &PyCursesWindow_Type)
|
||||||
|
|
||||||
|
#define PyCurses_CAPSULE_NAME "_curses._C_API"
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CURSES_MODULE
|
||||||
|
/* This section is used when compiling _cursesmodule.c */
|
||||||
|
|
||||||
|
#else
|
||||||
|
/* This section is used in modules that use the _cursesmodule API */
|
||||||
|
|
||||||
|
static void **PyCurses_API;
|
||||||
|
|
||||||
|
#define PyCursesWindow_Type (*(PyTypeObject *) PyCurses_API[0])
|
||||||
|
#define PyCursesSetupTermCalled {if (! ((int (*)(void))PyCurses_API[1]) () ) return NULL;}
|
||||||
|
#define PyCursesInitialised {if (! ((int (*)(void))PyCurses_API[2]) () ) return NULL;}
|
||||||
|
#define PyCursesInitialisedColor {if (! ((int (*)(void))PyCurses_API[3]) () ) return NULL;}
|
||||||
|
|
||||||
|
#define import_curses() \
|
||||||
|
PyCurses_API = (void **)PyCapsule_Import(PyCurses_CAPSULE_NAME, 1);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* general error messages */
|
||||||
|
static const char catchall_ERR[] = "curses function returned ERR";
|
||||||
|
static const char catchall_NULL[] = "curses function returned NULL";
|
||||||
|
|
||||||
|
/* Function Prototype Macros - They are ugly but very, very useful. ;-)
|
||||||
|
|
||||||
|
X - function name
|
||||||
|
TYPE - parameter Type
|
||||||
|
ERGSTR - format string for construction of the return value
|
||||||
|
PARSESTR - format string for argument parsing
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define NoArgNoReturnFunction(X) \
|
||||||
|
static PyObject *PyCurses_ ## X (PyObject *self) \
|
||||||
|
{ \
|
||||||
|
PyCursesInitialised \
|
||||||
|
return PyCursesCheckERR(X(), # X); }
|
||||||
|
|
||||||
|
#define NoArgOrFlagNoReturnFunction(X) \
|
||||||
|
static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \
|
||||||
|
{ \
|
||||||
|
int flag = 0; \
|
||||||
|
PyCursesInitialised \
|
||||||
|
switch(PyTuple_Size(args)) { \
|
||||||
|
case 0: \
|
||||||
|
return PyCursesCheckERR(X(), # X); \
|
||||||
|
case 1: \
|
||||||
|
if (!PyArg_ParseTuple(args, "i;True(1) or False(0)", &flag)) return NULL; \
|
||||||
|
if (flag) return PyCursesCheckERR(X(), # X); \
|
||||||
|
else return PyCursesCheckERR(no ## X (), # X); \
|
||||||
|
default: \
|
||||||
|
PyErr_SetString(PyExc_TypeError, # X " requires 0 or 1 arguments"); \
|
||||||
|
return NULL; } }
|
||||||
|
|
||||||
|
#define NoArgReturnIntFunction(X) \
|
||||||
|
static PyObject *PyCurses_ ## X (PyObject *self) \
|
||||||
|
{ \
|
||||||
|
PyCursesInitialised \
|
||||||
|
return PyLong_FromLong((long) X()); }
|
||||||
|
|
||||||
|
|
||||||
|
#define NoArgReturnStringFunction(X) \
|
||||||
|
static PyObject *PyCurses_ ## X (PyObject *self) \
|
||||||
|
{ \
|
||||||
|
PyCursesInitialised \
|
||||||
|
return PyBytes_FromString(X()); }
|
||||||
|
|
||||||
|
#define NoArgTrueFalseFunction(X) \
|
||||||
|
static PyObject *PyCurses_ ## X (PyObject *self) \
|
||||||
|
{ \
|
||||||
|
PyCursesInitialised \
|
||||||
|
if (X () == FALSE) { \
|
||||||
|
Py_RETURN_FALSE; \
|
||||||
|
} \
|
||||||
|
Py_RETURN_TRUE; }
|
||||||
|
|
||||||
|
#define NoArgNoReturnVoidFunction(X) \
|
||||||
|
static PyObject *PyCurses_ ## X (PyObject *self) \
|
||||||
|
{ \
|
||||||
|
PyCursesInitialised \
|
||||||
|
X(); \
|
||||||
|
Py_RETURN_NONE; }
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !defined(Py_CURSES_H) */
|
||||||
|
|
||||||
|
|
64
WENV/Include/pyarena.h
Normal file
64
WENV/Include/pyarena.h
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/* An arena-like memory interface for the compiler.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
#ifndef Py_PYARENA_H
|
||||||
|
#define Py_PYARENA_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct _arena PyArena;
|
||||||
|
|
||||||
|
/* PyArena_New() and PyArena_Free() create a new arena and free it,
|
||||||
|
respectively. Once an arena has been created, it can be used
|
||||||
|
to allocate memory via PyArena_Malloc(). Pointers to PyObject can
|
||||||
|
also be registered with the arena via PyArena_AddPyObject(), and the
|
||||||
|
arena will ensure that the PyObjects stay alive at least until
|
||||||
|
PyArena_Free() is called. When an arena is freed, all the memory it
|
||||||
|
allocated is freed, the arena releases internal references to registered
|
||||||
|
PyObject*, and none of its pointers are valid.
|
||||||
|
XXX (tim) What does "none of its pointers are valid" mean? Does it
|
||||||
|
XXX mean that pointers previously obtained via PyArena_Malloc() are
|
||||||
|
XXX no longer valid? (That's clearly true, but not sure that's what
|
||||||
|
XXX the text is trying to say.)
|
||||||
|
|
||||||
|
PyArena_New() returns an arena pointer. On error, it
|
||||||
|
returns a negative number and sets an exception.
|
||||||
|
XXX (tim): Not true. On error, PyArena_New() actually returns NULL,
|
||||||
|
XXX and looks like it may or may not set an exception (e.g., if the
|
||||||
|
XXX internal PyList_New(0) returns NULL, PyArena_New() passes that on
|
||||||
|
XXX and an exception is set; OTOH, if the internal
|
||||||
|
XXX block_new(DEFAULT_BLOCK_SIZE) returns NULL, that's passed on but
|
||||||
|
XXX an exception is not set in that case).
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(PyArena *) PyArena_New(void);
|
||||||
|
PyAPI_FUNC(void) PyArena_Free(PyArena *);
|
||||||
|
|
||||||
|
/* Mostly like malloc(), return the address of a block of memory spanning
|
||||||
|
* `size` bytes, or return NULL (without setting an exception) if enough
|
||||||
|
* new memory can't be obtained. Unlike malloc(0), PyArena_Malloc() with
|
||||||
|
* size=0 does not guarantee to return a unique pointer (the pointer
|
||||||
|
* returned may equal one or more other pointers obtained from
|
||||||
|
* PyArena_Malloc()).
|
||||||
|
* Note that pointers obtained via PyArena_Malloc() must never be passed to
|
||||||
|
* the system free() or realloc(), or to any of Python's similar memory-
|
||||||
|
* management functions. PyArena_Malloc()-obtained pointers remain valid
|
||||||
|
* until PyArena_Free(ar) is called, at which point all pointers obtained
|
||||||
|
* from the arena `ar` become invalid simultaneously.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(void *) PyArena_Malloc(PyArena *, size_t size);
|
||||||
|
|
||||||
|
/* This routine isn't a proper arena allocation routine. It takes
|
||||||
|
* a PyObject* and records it so that it can be DECREFed when the
|
||||||
|
* arena is freed.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(int) PyArena_AddPyObject(PyArena *, PyObject *);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !Py_PYARENA_H */
|
||||||
|
#endif /* Py_LIMITED_API */
|
535
WENV/Include/pyatomic.h
Normal file
535
WENV/Include/pyatomic.h
Normal file
@ -0,0 +1,535 @@
|
|||||||
|
#ifndef Py_ATOMIC_H
|
||||||
|
#define Py_ATOMIC_H
|
||||||
|
#ifdef Py_BUILD_CORE
|
||||||
|
|
||||||
|
#include "dynamic_annotations.h"
|
||||||
|
|
||||||
|
#include "pyconfig.h"
|
||||||
|
|
||||||
|
#if defined(HAVE_STD_ATOMIC)
|
||||||
|
#include <stdatomic.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
#include <intrin.h>
|
||||||
|
#include <immintrin.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This is modeled after the atomics interface from C1x, according to
|
||||||
|
* the draft at
|
||||||
|
* http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1425.pdf.
|
||||||
|
* Operations and types are named the same except with a _Py_ prefix
|
||||||
|
* and have the same semantics.
|
||||||
|
*
|
||||||
|
* Beware, the implementations here are deep magic.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(HAVE_STD_ATOMIC)
|
||||||
|
|
||||||
|
typedef enum _Py_memory_order {
|
||||||
|
_Py_memory_order_relaxed = memory_order_relaxed,
|
||||||
|
_Py_memory_order_acquire = memory_order_acquire,
|
||||||
|
_Py_memory_order_release = memory_order_release,
|
||||||
|
_Py_memory_order_acq_rel = memory_order_acq_rel,
|
||||||
|
_Py_memory_order_seq_cst = memory_order_seq_cst
|
||||||
|
} _Py_memory_order;
|
||||||
|
|
||||||
|
typedef struct _Py_atomic_address {
|
||||||
|
atomic_uintptr_t _value;
|
||||||
|
} _Py_atomic_address;
|
||||||
|
|
||||||
|
typedef struct _Py_atomic_int {
|
||||||
|
atomic_int _value;
|
||||||
|
} _Py_atomic_int;
|
||||||
|
|
||||||
|
#define _Py_atomic_signal_fence(/*memory_order*/ ORDER) \
|
||||||
|
atomic_signal_fence(ORDER)
|
||||||
|
|
||||||
|
#define _Py_atomic_thread_fence(/*memory_order*/ ORDER) \
|
||||||
|
atomic_thread_fence(ORDER)
|
||||||
|
|
||||||
|
#define _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, ORDER) \
|
||||||
|
atomic_store_explicit(&(ATOMIC_VAL)->_value, NEW_VAL, ORDER)
|
||||||
|
|
||||||
|
#define _Py_atomic_load_explicit(ATOMIC_VAL, ORDER) \
|
||||||
|
atomic_load_explicit(&(ATOMIC_VAL)->_value, ORDER)
|
||||||
|
|
||||||
|
/* Use builtin atomic operations in GCC >= 4.7 */
|
||||||
|
#elif defined(HAVE_BUILTIN_ATOMIC)
|
||||||
|
|
||||||
|
typedef enum _Py_memory_order {
|
||||||
|
_Py_memory_order_relaxed = __ATOMIC_RELAXED,
|
||||||
|
_Py_memory_order_acquire = __ATOMIC_ACQUIRE,
|
||||||
|
_Py_memory_order_release = __ATOMIC_RELEASE,
|
||||||
|
_Py_memory_order_acq_rel = __ATOMIC_ACQ_REL,
|
||||||
|
_Py_memory_order_seq_cst = __ATOMIC_SEQ_CST
|
||||||
|
} _Py_memory_order;
|
||||||
|
|
||||||
|
typedef struct _Py_atomic_address {
|
||||||
|
uintptr_t _value;
|
||||||
|
} _Py_atomic_address;
|
||||||
|
|
||||||
|
typedef struct _Py_atomic_int {
|
||||||
|
int _value;
|
||||||
|
} _Py_atomic_int;
|
||||||
|
|
||||||
|
#define _Py_atomic_signal_fence(/*memory_order*/ ORDER) \
|
||||||
|
__atomic_signal_fence(ORDER)
|
||||||
|
|
||||||
|
#define _Py_atomic_thread_fence(/*memory_order*/ ORDER) \
|
||||||
|
__atomic_thread_fence(ORDER)
|
||||||
|
|
||||||
|
#define _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, ORDER) \
|
||||||
|
(assert((ORDER) == __ATOMIC_RELAXED \
|
||||||
|
|| (ORDER) == __ATOMIC_SEQ_CST \
|
||||||
|
|| (ORDER) == __ATOMIC_RELEASE), \
|
||||||
|
__atomic_store_n(&(ATOMIC_VAL)->_value, NEW_VAL, ORDER))
|
||||||
|
|
||||||
|
#define _Py_atomic_load_explicit(ATOMIC_VAL, ORDER) \
|
||||||
|
(assert((ORDER) == __ATOMIC_RELAXED \
|
||||||
|
|| (ORDER) == __ATOMIC_SEQ_CST \
|
||||||
|
|| (ORDER) == __ATOMIC_ACQUIRE \
|
||||||
|
|| (ORDER) == __ATOMIC_CONSUME), \
|
||||||
|
__atomic_load_n(&(ATOMIC_VAL)->_value, ORDER))
|
||||||
|
|
||||||
|
/* Only support GCC (for expression statements) and x86 (for simple
|
||||||
|
* atomic semantics) and MSVC x86/x64/ARM */
|
||||||
|
#elif defined(__GNUC__) && (defined(__i386__) || defined(__amd64))
|
||||||
|
typedef enum _Py_memory_order {
|
||||||
|
_Py_memory_order_relaxed,
|
||||||
|
_Py_memory_order_acquire,
|
||||||
|
_Py_memory_order_release,
|
||||||
|
_Py_memory_order_acq_rel,
|
||||||
|
_Py_memory_order_seq_cst
|
||||||
|
} _Py_memory_order;
|
||||||
|
|
||||||
|
typedef struct _Py_atomic_address {
|
||||||
|
uintptr_t _value;
|
||||||
|
} _Py_atomic_address;
|
||||||
|
|
||||||
|
typedef struct _Py_atomic_int {
|
||||||
|
int _value;
|
||||||
|
} _Py_atomic_int;
|
||||||
|
|
||||||
|
|
||||||
|
static __inline__ void
|
||||||
|
_Py_atomic_signal_fence(_Py_memory_order order)
|
||||||
|
{
|
||||||
|
if (order != _Py_memory_order_relaxed)
|
||||||
|
__asm__ volatile("":::"memory");
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline__ void
|
||||||
|
_Py_atomic_thread_fence(_Py_memory_order order)
|
||||||
|
{
|
||||||
|
if (order != _Py_memory_order_relaxed)
|
||||||
|
__asm__ volatile("mfence":::"memory");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tell the race checker about this operation's effects. */
|
||||||
|
static __inline__ void
|
||||||
|
_Py_ANNOTATE_MEMORY_ORDER(const volatile void *address, _Py_memory_order order)
|
||||||
|
{
|
||||||
|
(void)address; /* shut up -Wunused-parameter */
|
||||||
|
switch(order) {
|
||||||
|
case _Py_memory_order_release:
|
||||||
|
case _Py_memory_order_acq_rel:
|
||||||
|
case _Py_memory_order_seq_cst:
|
||||||
|
_Py_ANNOTATE_HAPPENS_BEFORE(address);
|
||||||
|
break;
|
||||||
|
case _Py_memory_order_relaxed:
|
||||||
|
case _Py_memory_order_acquire:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch(order) {
|
||||||
|
case _Py_memory_order_acquire:
|
||||||
|
case _Py_memory_order_acq_rel:
|
||||||
|
case _Py_memory_order_seq_cst:
|
||||||
|
_Py_ANNOTATE_HAPPENS_AFTER(address);
|
||||||
|
break;
|
||||||
|
case _Py_memory_order_relaxed:
|
||||||
|
case _Py_memory_order_release:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, ORDER) \
|
||||||
|
__extension__ ({ \
|
||||||
|
__typeof__(ATOMIC_VAL) atomic_val = ATOMIC_VAL; \
|
||||||
|
__typeof__(atomic_val->_value) new_val = NEW_VAL;\
|
||||||
|
volatile __typeof__(new_val) *volatile_data = &atomic_val->_value; \
|
||||||
|
_Py_memory_order order = ORDER; \
|
||||||
|
_Py_ANNOTATE_MEMORY_ORDER(atomic_val, order); \
|
||||||
|
\
|
||||||
|
/* Perform the operation. */ \
|
||||||
|
_Py_ANNOTATE_IGNORE_WRITES_BEGIN(); \
|
||||||
|
switch(order) { \
|
||||||
|
case _Py_memory_order_release: \
|
||||||
|
_Py_atomic_signal_fence(_Py_memory_order_release); \
|
||||||
|
/* fallthrough */ \
|
||||||
|
case _Py_memory_order_relaxed: \
|
||||||
|
*volatile_data = new_val; \
|
||||||
|
break; \
|
||||||
|
\
|
||||||
|
case _Py_memory_order_acquire: \
|
||||||
|
case _Py_memory_order_acq_rel: \
|
||||||
|
case _Py_memory_order_seq_cst: \
|
||||||
|
__asm__ volatile("xchg %0, %1" \
|
||||||
|
: "+r"(new_val) \
|
||||||
|
: "m"(atomic_val->_value) \
|
||||||
|
: "memory"); \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
_Py_ANNOTATE_IGNORE_WRITES_END(); \
|
||||||
|
})
|
||||||
|
|
||||||
|
#define _Py_atomic_load_explicit(ATOMIC_VAL, ORDER) \
|
||||||
|
__extension__ ({ \
|
||||||
|
__typeof__(ATOMIC_VAL) atomic_val = ATOMIC_VAL; \
|
||||||
|
__typeof__(atomic_val->_value) result; \
|
||||||
|
volatile __typeof__(result) *volatile_data = &atomic_val->_value; \
|
||||||
|
_Py_memory_order order = ORDER; \
|
||||||
|
_Py_ANNOTATE_MEMORY_ORDER(atomic_val, order); \
|
||||||
|
\
|
||||||
|
/* Perform the operation. */ \
|
||||||
|
_Py_ANNOTATE_IGNORE_READS_BEGIN(); \
|
||||||
|
switch(order) { \
|
||||||
|
case _Py_memory_order_release: \
|
||||||
|
case _Py_memory_order_acq_rel: \
|
||||||
|
case _Py_memory_order_seq_cst: \
|
||||||
|
/* Loads on x86 are not releases by default, so need a */ \
|
||||||
|
/* thread fence. */ \
|
||||||
|
_Py_atomic_thread_fence(_Py_memory_order_release); \
|
||||||
|
break; \
|
||||||
|
default: \
|
||||||
|
/* No fence */ \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
result = *volatile_data; \
|
||||||
|
switch(order) { \
|
||||||
|
case _Py_memory_order_acquire: \
|
||||||
|
case _Py_memory_order_acq_rel: \
|
||||||
|
case _Py_memory_order_seq_cst: \
|
||||||
|
/* Loads on x86 are automatically acquire operations so */ \
|
||||||
|
/* can get by with just a compiler fence. */ \
|
||||||
|
_Py_atomic_signal_fence(_Py_memory_order_acquire); \
|
||||||
|
break; \
|
||||||
|
default: \
|
||||||
|
/* No fence */ \
|
||||||
|
break; \
|
||||||
|
} \
|
||||||
|
_Py_ANNOTATE_IGNORE_READS_END(); \
|
||||||
|
result; \
|
||||||
|
})
|
||||||
|
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
/* _Interlocked* functions provide a full memory barrier and are therefore
|
||||||
|
enough for acq_rel and seq_cst. If the HLE variants aren't available
|
||||||
|
in hardware they will fall back to a full memory barrier as well.
|
||||||
|
|
||||||
|
This might affect performance but likely only in some very specific and
|
||||||
|
hard to meassure scenario.
|
||||||
|
*/
|
||||||
|
#if defined(_M_IX86) || defined(_M_X64)
|
||||||
|
typedef enum _Py_memory_order {
|
||||||
|
_Py_memory_order_relaxed,
|
||||||
|
_Py_memory_order_acquire,
|
||||||
|
_Py_memory_order_release,
|
||||||
|
_Py_memory_order_acq_rel,
|
||||||
|
_Py_memory_order_seq_cst
|
||||||
|
} _Py_memory_order;
|
||||||
|
|
||||||
|
typedef struct _Py_atomic_address {
|
||||||
|
volatile uintptr_t _value;
|
||||||
|
} _Py_atomic_address;
|
||||||
|
|
||||||
|
typedef struct _Py_atomic_int {
|
||||||
|
volatile int _value;
|
||||||
|
} _Py_atomic_int;
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(_M_X64)
|
||||||
|
#define _Py_atomic_store_64bit(ATOMIC_VAL, NEW_VAL, ORDER) \
|
||||||
|
switch (ORDER) { \
|
||||||
|
case _Py_memory_order_acquire: \
|
||||||
|
_InterlockedExchange64_HLEAcquire((__int64 volatile*)ATOMIC_VAL, (__int64)NEW_VAL); \
|
||||||
|
break; \
|
||||||
|
case _Py_memory_order_release: \
|
||||||
|
_InterlockedExchange64_HLERelease((__int64 volatile*)ATOMIC_VAL, (__int64)NEW_VAL); \
|
||||||
|
break; \
|
||||||
|
default: \
|
||||||
|
_InterlockedExchange64((__int64 volatile*)ATOMIC_VAL, (__int64)NEW_VAL); \
|
||||||
|
break; \
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define _Py_atomic_store_64bit(ATOMIC_VAL, NEW_VAL, ORDER) ((void)0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define _Py_atomic_store_32bit(ATOMIC_VAL, NEW_VAL, ORDER) \
|
||||||
|
switch (ORDER) { \
|
||||||
|
case _Py_memory_order_acquire: \
|
||||||
|
_InterlockedExchange_HLEAcquire((volatile long*)ATOMIC_VAL, (int)NEW_VAL); \
|
||||||
|
break; \
|
||||||
|
case _Py_memory_order_release: \
|
||||||
|
_InterlockedExchange_HLERelease((volatile long*)ATOMIC_VAL, (int)NEW_VAL); \
|
||||||
|
break; \
|
||||||
|
default: \
|
||||||
|
_InterlockedExchange((volatile long*)ATOMIC_VAL, (int)NEW_VAL); \
|
||||||
|
break; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(_M_X64)
|
||||||
|
/* This has to be an intptr_t for now.
|
||||||
|
gil_created() uses -1 as a sentinel value, if this returns
|
||||||
|
a uintptr_t it will do an unsigned compare and crash
|
||||||
|
*/
|
||||||
|
inline intptr_t _Py_atomic_load_64bit(volatile uintptr_t* value, int order) {
|
||||||
|
__int64 old;
|
||||||
|
switch (order) {
|
||||||
|
case _Py_memory_order_acquire:
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
old = *value;
|
||||||
|
} while(_InterlockedCompareExchange64_HLEAcquire((volatile __int64*)value, old, old) != old);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case _Py_memory_order_release:
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
old = *value;
|
||||||
|
} while(_InterlockedCompareExchange64_HLERelease((volatile __int64*)value, old, old) != old);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case _Py_memory_order_relaxed:
|
||||||
|
old = *value;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
old = *value;
|
||||||
|
} while(_InterlockedCompareExchange64((volatile __int64*)value, old, old) != old);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return old;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
#define _Py_atomic_load_64bit(ATOMIC_VAL, ORDER) *ATOMIC_VAL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
inline int _Py_atomic_load_32bit(volatile int* value, int order) {
|
||||||
|
long old;
|
||||||
|
switch (order) {
|
||||||
|
case _Py_memory_order_acquire:
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
old = *value;
|
||||||
|
} while(_InterlockedCompareExchange_HLEAcquire((volatile long*)value, old, old) != old);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case _Py_memory_order_release:
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
old = *value;
|
||||||
|
} while(_InterlockedCompareExchange_HLERelease((volatile long*)value, old, old) != old);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case _Py_memory_order_relaxed:
|
||||||
|
old = *value;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
old = *value;
|
||||||
|
} while(_InterlockedCompareExchange((volatile long*)value, old, old) != old);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return old;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, ORDER) \
|
||||||
|
if (sizeof(*ATOMIC_VAL._value) == 8) { \
|
||||||
|
_Py_atomic_store_64bit((volatile long long*)ATOMIC_VAL._value, NEW_VAL, ORDER) } else { \
|
||||||
|
_Py_atomic_store_32bit((volatile long*)ATOMIC_VAL._value, NEW_VAL, ORDER) }
|
||||||
|
|
||||||
|
#define _Py_atomic_load_explicit(ATOMIC_VAL, ORDER) \
|
||||||
|
( \
|
||||||
|
sizeof(*(ATOMIC_VAL._value)) == 8 ? \
|
||||||
|
_Py_atomic_load_64bit((volatile long long*)ATOMIC_VAL._value, ORDER) : \
|
||||||
|
_Py_atomic_load_32bit((volatile long*)ATOMIC_VAL._value, ORDER) \
|
||||||
|
)
|
||||||
|
#elif defined(_M_ARM) || defined(_M_ARM64)
|
||||||
|
typedef enum _Py_memory_order {
|
||||||
|
_Py_memory_order_relaxed,
|
||||||
|
_Py_memory_order_acquire,
|
||||||
|
_Py_memory_order_release,
|
||||||
|
_Py_memory_order_acq_rel,
|
||||||
|
_Py_memory_order_seq_cst
|
||||||
|
} _Py_memory_order;
|
||||||
|
|
||||||
|
typedef struct _Py_atomic_address {
|
||||||
|
volatile uintptr_t _value;
|
||||||
|
} _Py_atomic_address;
|
||||||
|
|
||||||
|
typedef struct _Py_atomic_int {
|
||||||
|
volatile int _value;
|
||||||
|
} _Py_atomic_int;
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(_M_ARM64)
|
||||||
|
#define _Py_atomic_store_64bit(ATOMIC_VAL, NEW_VAL, ORDER) \
|
||||||
|
switch (ORDER) { \
|
||||||
|
case _Py_memory_order_acquire: \
|
||||||
|
_InterlockedExchange64_acq((__int64 volatile*)ATOMIC_VAL, (__int64)NEW_VAL); \
|
||||||
|
break; \
|
||||||
|
case _Py_memory_order_release: \
|
||||||
|
_InterlockedExchange64_rel((__int64 volatile*)ATOMIC_VAL, (__int64)NEW_VAL); \
|
||||||
|
break; \
|
||||||
|
default: \
|
||||||
|
_InterlockedExchange64((__int64 volatile*)ATOMIC_VAL, (__int64)NEW_VAL); \
|
||||||
|
break; \
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define _Py_atomic_store_64bit(ATOMIC_VAL, NEW_VAL, ORDER) ((void)0);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define _Py_atomic_store_32bit(ATOMIC_VAL, NEW_VAL, ORDER) \
|
||||||
|
switch (ORDER) { \
|
||||||
|
case _Py_memory_order_acquire: \
|
||||||
|
_InterlockedExchange_acq((volatile long*)ATOMIC_VAL, (int)NEW_VAL); \
|
||||||
|
break; \
|
||||||
|
case _Py_memory_order_release: \
|
||||||
|
_InterlockedExchange_rel((volatile long*)ATOMIC_VAL, (int)NEW_VAL); \
|
||||||
|
break; \
|
||||||
|
default: \
|
||||||
|
_InterlockedExchange((volatile long*)ATOMIC_VAL, (int)NEW_VAL); \
|
||||||
|
break; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(_M_ARM64)
|
||||||
|
/* This has to be an intptr_t for now.
|
||||||
|
gil_created() uses -1 as a sentinel value, if this returns
|
||||||
|
a uintptr_t it will do an unsigned compare and crash
|
||||||
|
*/
|
||||||
|
inline intptr_t _Py_atomic_load_64bit(volatile uintptr_t* value, int order) {
|
||||||
|
uintptr_t old;
|
||||||
|
switch (order) {
|
||||||
|
case _Py_memory_order_acquire:
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
old = *value;
|
||||||
|
} while(_InterlockedCompareExchange64_acq(value, old, old) != old);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case _Py_memory_order_release:
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
old = *value;
|
||||||
|
} while(_InterlockedCompareExchange64_rel(value, old, old) != old);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case _Py_memory_order_relaxed:
|
||||||
|
old = *value;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
old = *value;
|
||||||
|
} while(_InterlockedCompareExchange64(value, old, old) != old);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return old;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
#define _Py_atomic_load_64bit(ATOMIC_VAL, ORDER) *ATOMIC_VAL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
inline int _Py_atomic_load_32bit(volatile int* value, int order) {
|
||||||
|
int old;
|
||||||
|
switch (order) {
|
||||||
|
case _Py_memory_order_acquire:
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
old = *value;
|
||||||
|
} while(_InterlockedCompareExchange_acq(value, old, old) != old);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case _Py_memory_order_release:
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
old = *value;
|
||||||
|
} while(_InterlockedCompareExchange_rel(value, old, old) != old);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case _Py_memory_order_relaxed:
|
||||||
|
old = *value;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
do {
|
||||||
|
old = *value;
|
||||||
|
} while(_InterlockedCompareExchange(value, old, old) != old);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return old;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, ORDER) \
|
||||||
|
if (sizeof(*ATOMIC_VAL._value) == 8) { \
|
||||||
|
_Py_atomic_store_64bit(ATOMIC_VAL._value, NEW_VAL, ORDER) } else { \
|
||||||
|
_Py_atomic_store_32bit(ATOMIC_VAL._value, NEW_VAL, ORDER) }
|
||||||
|
|
||||||
|
#define _Py_atomic_load_explicit(ATOMIC_VAL, ORDER) \
|
||||||
|
( \
|
||||||
|
sizeof(*(ATOMIC_VAL._value)) == 8 ? \
|
||||||
|
_Py_atomic_load_64bit(ATOMIC_VAL._value, ORDER) : \
|
||||||
|
_Py_atomic_load_32bit(ATOMIC_VAL._value, ORDER) \
|
||||||
|
)
|
||||||
|
#endif
|
||||||
|
#else /* !gcc x86 !_msc_ver */
|
||||||
|
typedef enum _Py_memory_order {
|
||||||
|
_Py_memory_order_relaxed,
|
||||||
|
_Py_memory_order_acquire,
|
||||||
|
_Py_memory_order_release,
|
||||||
|
_Py_memory_order_acq_rel,
|
||||||
|
_Py_memory_order_seq_cst
|
||||||
|
} _Py_memory_order;
|
||||||
|
|
||||||
|
typedef struct _Py_atomic_address {
|
||||||
|
uintptr_t _value;
|
||||||
|
} _Py_atomic_address;
|
||||||
|
|
||||||
|
typedef struct _Py_atomic_int {
|
||||||
|
int _value;
|
||||||
|
} _Py_atomic_int;
|
||||||
|
/* Fall back to other compilers and processors by assuming that simple
|
||||||
|
volatile accesses are atomic. This is false, so people should port
|
||||||
|
this. */
|
||||||
|
#define _Py_atomic_signal_fence(/*memory_order*/ ORDER) ((void)0)
|
||||||
|
#define _Py_atomic_thread_fence(/*memory_order*/ ORDER) ((void)0)
|
||||||
|
#define _Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, ORDER) \
|
||||||
|
((ATOMIC_VAL)->_value = NEW_VAL)
|
||||||
|
#define _Py_atomic_load_explicit(ATOMIC_VAL, ORDER) \
|
||||||
|
((ATOMIC_VAL)->_value)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Standardized shortcuts. */
|
||||||
|
#define _Py_atomic_store(ATOMIC_VAL, NEW_VAL) \
|
||||||
|
_Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, _Py_memory_order_seq_cst)
|
||||||
|
#define _Py_atomic_load(ATOMIC_VAL) \
|
||||||
|
_Py_atomic_load_explicit(ATOMIC_VAL, _Py_memory_order_seq_cst)
|
||||||
|
|
||||||
|
/* Python-local extensions */
|
||||||
|
|
||||||
|
#define _Py_atomic_store_relaxed(ATOMIC_VAL, NEW_VAL) \
|
||||||
|
_Py_atomic_store_explicit(ATOMIC_VAL, NEW_VAL, _Py_memory_order_relaxed)
|
||||||
|
#define _Py_atomic_load_relaxed(ATOMIC_VAL) \
|
||||||
|
_Py_atomic_load_explicit(ATOMIC_VAL, _Py_memory_order_relaxed)
|
||||||
|
#endif /* Py_BUILD_CORE */
|
||||||
|
#endif /* Py_ATOMIC_H */
|
59
WENV/Include/pycapsule.h
Normal file
59
WENV/Include/pycapsule.h
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
|
||||||
|
/* Capsule objects let you wrap a C "void *" pointer in a Python
|
||||||
|
object. They're a way of passing data through the Python interpreter
|
||||||
|
without creating your own custom type.
|
||||||
|
|
||||||
|
Capsules are used for communication between extension modules.
|
||||||
|
They provide a way for an extension module to export a C interface
|
||||||
|
to other extension modules, so that extension modules can use the
|
||||||
|
Python import mechanism to link to one another.
|
||||||
|
|
||||||
|
For more information, please see "c-api/capsule.html" in the
|
||||||
|
documentation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef Py_CAPSULE_H
|
||||||
|
#define Py_CAPSULE_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PyAPI_DATA(PyTypeObject) PyCapsule_Type;
|
||||||
|
|
||||||
|
typedef void (*PyCapsule_Destructor)(PyObject *);
|
||||||
|
|
||||||
|
#define PyCapsule_CheckExact(op) (Py_TYPE(op) == &PyCapsule_Type)
|
||||||
|
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyCapsule_New(
|
||||||
|
void *pointer,
|
||||||
|
const char *name,
|
||||||
|
PyCapsule_Destructor destructor);
|
||||||
|
|
||||||
|
PyAPI_FUNC(void *) PyCapsule_GetPointer(PyObject *capsule, const char *name);
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyCapsule_Destructor) PyCapsule_GetDestructor(PyObject *capsule);
|
||||||
|
|
||||||
|
PyAPI_FUNC(const char *) PyCapsule_GetName(PyObject *capsule);
|
||||||
|
|
||||||
|
PyAPI_FUNC(void *) PyCapsule_GetContext(PyObject *capsule);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) PyCapsule_IsValid(PyObject *capsule, const char *name);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) PyCapsule_SetPointer(PyObject *capsule, void *pointer);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) PyCapsule_SetDestructor(PyObject *capsule, PyCapsule_Destructor destructor);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) PyCapsule_SetName(PyObject *capsule, const char *name);
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) PyCapsule_SetContext(PyObject *capsule, void *context);
|
||||||
|
|
||||||
|
PyAPI_FUNC(void *) PyCapsule_Import(
|
||||||
|
const char *name, /* UTF-8 encoded string */
|
||||||
|
int no_block);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_CAPSULE_H */
|
693
WENV/Include/pyconfig.h
Normal file
693
WENV/Include/pyconfig.h
Normal file
@ -0,0 +1,693 @@
|
|||||||
|
#ifndef Py_CONFIG_H
|
||||||
|
#define Py_CONFIG_H
|
||||||
|
|
||||||
|
/* pyconfig.h. NOT Generated automatically by configure.
|
||||||
|
|
||||||
|
This is a manually maintained version used for the Watcom,
|
||||||
|
Borland and Microsoft Visual C++ compilers. It is a
|
||||||
|
standard part of the Python distribution.
|
||||||
|
|
||||||
|
WINDOWS DEFINES:
|
||||||
|
The code specific to Windows should be wrapped around one of
|
||||||
|
the following #defines
|
||||||
|
|
||||||
|
MS_WIN64 - Code specific to the MS Win64 API
|
||||||
|
MS_WIN32 - Code specific to the MS Win32 (and Win64) API (obsolete, this covers all supported APIs)
|
||||||
|
MS_WINDOWS - Code specific to Windows, but all versions.
|
||||||
|
Py_ENABLE_SHARED - Code if the Python core is built as a DLL.
|
||||||
|
|
||||||
|
Also note that neither "_M_IX86" or "_MSC_VER" should be used for
|
||||||
|
any purpose other than "Windows Intel x86 specific" and "Microsoft
|
||||||
|
compiler specific". Therefore, these should be very rare.
|
||||||
|
|
||||||
|
|
||||||
|
NOTE: The following symbols are deprecated:
|
||||||
|
NT, USE_DL_EXPORT, USE_DL_IMPORT, DL_EXPORT, DL_IMPORT
|
||||||
|
MS_CORE_DLL.
|
||||||
|
|
||||||
|
WIN32 is still required for the locale module.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Deprecated USE_DL_EXPORT macro - please use Py_BUILD_CORE */
|
||||||
|
#ifdef USE_DL_EXPORT
|
||||||
|
# define Py_BUILD_CORE
|
||||||
|
#endif /* USE_DL_EXPORT */
|
||||||
|
|
||||||
|
/* Visual Studio 2005 introduces deprecation warnings for
|
||||||
|
"insecure" and POSIX functions. The insecure functions should
|
||||||
|
be replaced by *_s versions (according to Microsoft); the
|
||||||
|
POSIX functions by _* versions (which, according to Microsoft,
|
||||||
|
would be ISO C conforming). Neither renaming is feasible, so
|
||||||
|
we just silence the warnings. */
|
||||||
|
|
||||||
|
#ifndef _CRT_SECURE_NO_DEPRECATE
|
||||||
|
#define _CRT_SECURE_NO_DEPRECATE 1
|
||||||
|
#endif
|
||||||
|
#ifndef _CRT_NONSTDC_NO_DEPRECATE
|
||||||
|
#define _CRT_NONSTDC_NO_DEPRECATE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define HAVE_IO_H
|
||||||
|
#define HAVE_SYS_UTIME_H
|
||||||
|
#define HAVE_TEMPNAM
|
||||||
|
#define HAVE_TMPFILE
|
||||||
|
#define HAVE_TMPNAM
|
||||||
|
#define HAVE_CLOCK
|
||||||
|
#define HAVE_STRERROR
|
||||||
|
|
||||||
|
#include <io.h>
|
||||||
|
|
||||||
|
#define HAVE_HYPOT
|
||||||
|
#define HAVE_STRFTIME
|
||||||
|
#define DONT_HAVE_SIG_ALARM
|
||||||
|
#define DONT_HAVE_SIG_PAUSE
|
||||||
|
#define LONG_BIT 32
|
||||||
|
#define WORD_BIT 32
|
||||||
|
|
||||||
|
#define MS_WIN32 /* only support win32 and greater. */
|
||||||
|
#define MS_WINDOWS
|
||||||
|
#ifndef PYTHONPATH
|
||||||
|
# define PYTHONPATH L".\\DLLs;.\\lib"
|
||||||
|
#endif
|
||||||
|
#define NT_THREADS
|
||||||
|
#define WITH_THREAD
|
||||||
|
#ifndef NETSCAPE_PI
|
||||||
|
#define USE_SOCKET
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Compiler specific defines */
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------------*/
|
||||||
|
/* Microsoft C defines _MSC_VER */
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
|
||||||
|
/* We want COMPILER to expand to a string containing _MSC_VER's *value*.
|
||||||
|
* This is horridly tricky, because the stringization operator only works
|
||||||
|
* on macro arguments, and doesn't evaluate macros passed *as* arguments.
|
||||||
|
* Attempts simpler than the following appear doomed to produce "_MSC_VER"
|
||||||
|
* literally in the string.
|
||||||
|
*/
|
||||||
|
#define _Py_PASTE_VERSION(SUFFIX) \
|
||||||
|
("[MSC v." _Py_STRINGIZE(_MSC_VER) " " SUFFIX "]")
|
||||||
|
/* e.g., this produces, after compile-time string catenation,
|
||||||
|
* ("[MSC v.1200 32 bit (Intel)]")
|
||||||
|
*
|
||||||
|
* _Py_STRINGIZE(_MSC_VER) expands to
|
||||||
|
* _Py_STRINGIZE1((_MSC_VER)) expands to
|
||||||
|
* _Py_STRINGIZE2(_MSC_VER) but as this call is the result of token-pasting
|
||||||
|
* it's scanned again for macros and so further expands to (under MSVC 6)
|
||||||
|
* _Py_STRINGIZE2(1200) which then expands to
|
||||||
|
* "1200"
|
||||||
|
*/
|
||||||
|
#define _Py_STRINGIZE(X) _Py_STRINGIZE1((X))
|
||||||
|
#define _Py_STRINGIZE1(X) _Py_STRINGIZE2 ## X
|
||||||
|
#define _Py_STRINGIZE2(X) #X
|
||||||
|
|
||||||
|
/* MSVC defines _WINxx to differentiate the windows platform types
|
||||||
|
|
||||||
|
Note that for compatibility reasons _WIN32 is defined on Win32
|
||||||
|
*and* on Win64. For the same reasons, in Python, MS_WIN32 is
|
||||||
|
defined on Win32 *and* Win64. Win32 only code must therefore be
|
||||||
|
guarded as follows:
|
||||||
|
#if defined(MS_WIN32) && !defined(MS_WIN64)
|
||||||
|
*/
|
||||||
|
#ifdef _WIN64
|
||||||
|
#define MS_WIN64
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* set the COMPILER */
|
||||||
|
#ifdef MS_WIN64
|
||||||
|
#if defined(_M_X64) || defined(_M_AMD64)
|
||||||
|
#if defined(__INTEL_COMPILER)
|
||||||
|
#define COMPILER ("[ICC v." _Py_STRINGIZE(__INTEL_COMPILER) " 64 bit (amd64) with MSC v." _Py_STRINGIZE(_MSC_VER) " CRT]")
|
||||||
|
#else
|
||||||
|
#define COMPILER _Py_PASTE_VERSION("64 bit (AMD64)")
|
||||||
|
#endif /* __INTEL_COMPILER */
|
||||||
|
#define PYD_PLATFORM_TAG "win_amd64"
|
||||||
|
#else
|
||||||
|
#define COMPILER _Py_PASTE_VERSION("64 bit (Unknown)")
|
||||||
|
#endif
|
||||||
|
#endif /* MS_WIN64 */
|
||||||
|
|
||||||
|
/* set the version macros for the windows headers */
|
||||||
|
/* Python 3.5+ requires Windows Vista or greater */
|
||||||
|
#define Py_WINVER 0x0600 /* _WIN32_WINNT_VISTA */
|
||||||
|
#define Py_NTDDI NTDDI_VISTA
|
||||||
|
|
||||||
|
/* We only set these values when building Python - we don't want to force
|
||||||
|
these values on extensions, as that will affect the prototypes and
|
||||||
|
structures exposed in the Windows headers. Even when building Python, we
|
||||||
|
allow a single source file to override this - they may need access to
|
||||||
|
structures etc so it can optionally use new Windows features if it
|
||||||
|
determines at runtime they are available.
|
||||||
|
*/
|
||||||
|
#if defined(Py_BUILD_CORE) || defined(Py_BUILD_CORE_BUILTIN) || defined(Py_BUILD_CORE_MODULE)
|
||||||
|
#ifndef NTDDI_VERSION
|
||||||
|
#define NTDDI_VERSION Py_NTDDI
|
||||||
|
#endif
|
||||||
|
#ifndef WINVER
|
||||||
|
#define WINVER Py_WINVER
|
||||||
|
#endif
|
||||||
|
#ifndef _WIN32_WINNT
|
||||||
|
#define _WIN32_WINNT Py_WINVER
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* _W64 is not defined for VC6 or eVC4 */
|
||||||
|
#ifndef _W64
|
||||||
|
#define _W64
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define like size_t, omitting the "unsigned" */
|
||||||
|
#ifdef MS_WIN64
|
||||||
|
typedef __int64 ssize_t;
|
||||||
|
#else
|
||||||
|
typedef _W64 int ssize_t;
|
||||||
|
#endif
|
||||||
|
#define HAVE_SSIZE_T 1
|
||||||
|
|
||||||
|
#if defined(MS_WIN32) && !defined(MS_WIN64)
|
||||||
|
#if defined(_M_IX86)
|
||||||
|
#if defined(__INTEL_COMPILER)
|
||||||
|
#define COMPILER ("[ICC v." _Py_STRINGIZE(__INTEL_COMPILER) " 32 bit (Intel) with MSC v." _Py_STRINGIZE(_MSC_VER) " CRT]")
|
||||||
|
#else
|
||||||
|
#define COMPILER _Py_PASTE_VERSION("32 bit (Intel)")
|
||||||
|
#endif /* __INTEL_COMPILER */
|
||||||
|
#define PYD_PLATFORM_TAG "win32"
|
||||||
|
#elif defined(_M_ARM)
|
||||||
|
#define COMPILER _Py_PASTE_VERSION("32 bit (ARM)")
|
||||||
|
#define PYD_PLATFORM_TAG "win_arm"
|
||||||
|
#else
|
||||||
|
#define COMPILER _Py_PASTE_VERSION("32 bit (Unknown)")
|
||||||
|
#endif
|
||||||
|
#endif /* MS_WIN32 && !MS_WIN64 */
|
||||||
|
|
||||||
|
typedef int pid_t;
|
||||||
|
|
||||||
|
#include <float.h>
|
||||||
|
#define Py_IS_NAN _isnan
|
||||||
|
#define Py_IS_INFINITY(X) (!_finite(X) && !_isnan(X))
|
||||||
|
#define Py_IS_FINITE(X) _finite(X)
|
||||||
|
#define copysign _copysign
|
||||||
|
|
||||||
|
/* VS 2010 and above already defines hypot as _hypot */
|
||||||
|
#if _MSC_VER < 1600
|
||||||
|
#define hypot _hypot
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* VS 2015 defines these names with a leading underscore */
|
||||||
|
#if _MSC_VER >= 1900
|
||||||
|
#define timezone _timezone
|
||||||
|
#define daylight _daylight
|
||||||
|
#define tzname _tzname
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Side by Side assemblies supported in VS 2005 and VS 2008 but not 2010*/
|
||||||
|
#if _MSC_VER >= 1400 && _MSC_VER < 1600
|
||||||
|
#define HAVE_SXS 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* define some ANSI types that are not defined in earlier Win headers */
|
||||||
|
#if _MSC_VER >= 1200
|
||||||
|
/* This file only exists in VC 6.0 or higher */
|
||||||
|
#include <basetsd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _MSC_VER */
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------------*/
|
||||||
|
/* egcs/gnu-win32 defines __GNUC__ and _WIN32 */
|
||||||
|
#if defined(__GNUC__) && defined(_WIN32)
|
||||||
|
/* XXX These defines are likely incomplete, but should be easy to fix.
|
||||||
|
They should be complete enough to build extension modules. */
|
||||||
|
/* Suggested by Rene Liebscher <R.Liebscher@gmx.de> to avoid a GCC 2.91.*
|
||||||
|
bug that requires structure imports. More recent versions of the
|
||||||
|
compiler don't exhibit this bug.
|
||||||
|
*/
|
||||||
|
#if (__GNUC__==2) && (__GNUC_MINOR__<=91)
|
||||||
|
#warning "Please use an up-to-date version of gcc! (>2.91 recommended)"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define COMPILER "[gcc]"
|
||||||
|
#define hypot _hypot
|
||||||
|
#define PY_LONG_LONG long long
|
||||||
|
#define PY_LLONG_MIN LLONG_MIN
|
||||||
|
#define PY_LLONG_MAX LLONG_MAX
|
||||||
|
#define PY_ULLONG_MAX ULLONG_MAX
|
||||||
|
#endif /* GNUC */
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------------*/
|
||||||
|
/* lcc-win32 defines __LCC__ */
|
||||||
|
#if defined(__LCC__)
|
||||||
|
/* XXX These defines are likely incomplete, but should be easy to fix.
|
||||||
|
They should be complete enough to build extension modules. */
|
||||||
|
|
||||||
|
#define COMPILER "[lcc-win32]"
|
||||||
|
typedef int pid_t;
|
||||||
|
/* __declspec() is supported here too - do nothing to get the defaults */
|
||||||
|
|
||||||
|
#endif /* LCC */
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------------*/
|
||||||
|
/* End of compilers - finish up */
|
||||||
|
|
||||||
|
#ifndef NO_STDIO_H
|
||||||
|
# include <stdio.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* 64 bit ints are usually spelt __int64 unless compiler has overridden */
|
||||||
|
#ifndef PY_LONG_LONG
|
||||||
|
# define PY_LONG_LONG __int64
|
||||||
|
# define PY_LLONG_MAX _I64_MAX
|
||||||
|
# define PY_LLONG_MIN _I64_MIN
|
||||||
|
# define PY_ULLONG_MAX _UI64_MAX
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* For Windows the Python core is in a DLL by default. Test
|
||||||
|
Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */
|
||||||
|
#if !defined(MS_NO_COREDLL) && !defined(Py_NO_ENABLE_SHARED)
|
||||||
|
# define Py_ENABLE_SHARED 1 /* standard symbol for shared library */
|
||||||
|
# define MS_COREDLL /* deprecated old symbol */
|
||||||
|
#endif /* !MS_NO_COREDLL && ... */
|
||||||
|
|
||||||
|
/* All windows compilers that use this header support __declspec */
|
||||||
|
#define HAVE_DECLSPEC_DLL
|
||||||
|
|
||||||
|
/* For an MSVC DLL, we can nominate the .lib files used by extensions */
|
||||||
|
#ifdef MS_COREDLL
|
||||||
|
# if !defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_BUILTIN)
|
||||||
|
/* not building the core - must be an ext */
|
||||||
|
# if defined(_MSC_VER)
|
||||||
|
/* So MSVC users need not specify the .lib
|
||||||
|
file in their Makefile (other compilers are
|
||||||
|
generally taken care of by distutils.) */
|
||||||
|
# if defined(_DEBUG)
|
||||||
|
# pragma comment(lib,"python37_d.lib")
|
||||||
|
# elif defined(Py_LIMITED_API)
|
||||||
|
# pragma comment(lib,"python3.lib")
|
||||||
|
# else
|
||||||
|
# pragma comment(lib,"python37.lib")
|
||||||
|
# endif /* _DEBUG */
|
||||||
|
# endif /* _MSC_VER */
|
||||||
|
# endif /* Py_BUILD_CORE */
|
||||||
|
#endif /* MS_COREDLL */
|
||||||
|
|
||||||
|
#if defined(MS_WIN64)
|
||||||
|
/* maintain "win32" sys.platform for backward compatibility of Python code,
|
||||||
|
the Win64 API should be close enough to the Win32 API to make this
|
||||||
|
preferable */
|
||||||
|
# define PLATFORM "win32"
|
||||||
|
# define SIZEOF_VOID_P 8
|
||||||
|
# define SIZEOF_TIME_T 8
|
||||||
|
# define SIZEOF_OFF_T 4
|
||||||
|
# define SIZEOF_FPOS_T 8
|
||||||
|
# define SIZEOF_HKEY 8
|
||||||
|
# define SIZEOF_SIZE_T 8
|
||||||
|
/* configure.ac defines HAVE_LARGEFILE_SUPPORT iff HAVE_LONG_LONG,
|
||||||
|
sizeof(off_t) > sizeof(long), and sizeof(PY_LONG_LONG) >= sizeof(off_t).
|
||||||
|
On Win64 the second condition is not true, but if fpos_t replaces off_t
|
||||||
|
then this is true. The uses of HAVE_LARGEFILE_SUPPORT imply that Win64
|
||||||
|
should define this. */
|
||||||
|
# define HAVE_LARGEFILE_SUPPORT
|
||||||
|
#elif defined(MS_WIN32)
|
||||||
|
# define PLATFORM "win32"
|
||||||
|
# define HAVE_LARGEFILE_SUPPORT
|
||||||
|
# define SIZEOF_VOID_P 4
|
||||||
|
# define SIZEOF_OFF_T 4
|
||||||
|
# define SIZEOF_FPOS_T 8
|
||||||
|
# define SIZEOF_HKEY 4
|
||||||
|
# define SIZEOF_SIZE_T 4
|
||||||
|
/* MS VS2005 changes time_t to a 64-bit type on all platforms */
|
||||||
|
# if defined(_MSC_VER) && _MSC_VER >= 1400
|
||||||
|
# define SIZEOF_TIME_T 8
|
||||||
|
# else
|
||||||
|
# define SIZEOF_TIME_T 4
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
# define Py_DEBUG
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef MS_WIN32
|
||||||
|
|
||||||
|
#define SIZEOF_SHORT 2
|
||||||
|
#define SIZEOF_INT 4
|
||||||
|
#define SIZEOF_LONG 4
|
||||||
|
#define SIZEOF_LONG_LONG 8
|
||||||
|
#define SIZEOF_DOUBLE 8
|
||||||
|
#define SIZEOF_FLOAT 4
|
||||||
|
|
||||||
|
/* VC 7.1 has them and VC 6.0 does not. VC 6.0 has a version number of 1200.
|
||||||
|
Microsoft eMbedded Visual C++ 4.0 has a version number of 1201 and doesn't
|
||||||
|
define these.
|
||||||
|
If some compiler does not provide them, modify the #if appropriately. */
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
#if _MSC_VER > 1300
|
||||||
|
#define HAVE_UINTPTR_T 1
|
||||||
|
#define HAVE_INTPTR_T 1
|
||||||
|
#else
|
||||||
|
/* VC6, VS 2002 and eVC4 don't support the C99 LL suffix for 64-bit integer literals */
|
||||||
|
#define Py_LL(x) x##I64
|
||||||
|
#endif /* _MSC_VER > 1300 */
|
||||||
|
#endif /* _MSC_VER */
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* define signed and unsigned exact-width 32-bit and 64-bit types, used in the
|
||||||
|
implementation of Python integers. */
|
||||||
|
#define PY_UINT32_T uint32_t
|
||||||
|
#define PY_UINT64_T uint64_t
|
||||||
|
#define PY_INT32_T int32_t
|
||||||
|
#define PY_INT64_T int64_t
|
||||||
|
|
||||||
|
/* Fairly standard from here! */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `copysign' function. */
|
||||||
|
#define HAVE_COPYSIGN 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `round' function. */
|
||||||
|
#if _MSC_VER >= 1800
|
||||||
|
#define HAVE_ROUND 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isinf' macro. */
|
||||||
|
#define HAVE_DECL_ISINF 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `isnan' function. */
|
||||||
|
#define HAVE_DECL_ISNAN 1
|
||||||
|
|
||||||
|
/* Define if on AIX 3.
|
||||||
|
System headers sometimes define this.
|
||||||
|
We just want to avoid a redefinition error message. */
|
||||||
|
#ifndef _ALL_SOURCE
|
||||||
|
/* #undef _ALL_SOURCE */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define to empty if the keyword does not work. */
|
||||||
|
/* #define const */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <conio.h> header file. */
|
||||||
|
#define HAVE_CONIO_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <direct.h> header file. */
|
||||||
|
#define HAVE_DIRECT_H 1
|
||||||
|
|
||||||
|
/* Define if you have dirent.h. */
|
||||||
|
/* #define DIRENT 1 */
|
||||||
|
|
||||||
|
/* Define to the type of elements in the array set by `getgroups'.
|
||||||
|
Usually this is either `int' or `gid_t'. */
|
||||||
|
/* #undef GETGROUPS_T */
|
||||||
|
|
||||||
|
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||||
|
/* #undef gid_t */
|
||||||
|
|
||||||
|
/* Define if your struct tm has tm_zone. */
|
||||||
|
/* #undef HAVE_TM_ZONE */
|
||||||
|
|
||||||
|
/* Define if you don't have tm_zone but do have the external array
|
||||||
|
tzname. */
|
||||||
|
#define HAVE_TZNAME
|
||||||
|
|
||||||
|
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||||
|
/* #undef mode_t */
|
||||||
|
|
||||||
|
/* Define if you don't have dirent.h, but have ndir.h. */
|
||||||
|
/* #undef NDIR */
|
||||||
|
|
||||||
|
/* Define to `long' if <sys/types.h> doesn't define. */
|
||||||
|
/* #undef off_t */
|
||||||
|
|
||||||
|
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||||
|
/* #undef pid_t */
|
||||||
|
|
||||||
|
/* Define if the system does not provide POSIX.1 features except
|
||||||
|
with this defined. */
|
||||||
|
/* #undef _POSIX_1_SOURCE */
|
||||||
|
|
||||||
|
/* Define if you need to in order for stat and other things to work. */
|
||||||
|
/* #undef _POSIX_SOURCE */
|
||||||
|
|
||||||
|
/* Define as the return type of signal handlers (int or void). */
|
||||||
|
#define RETSIGTYPE void
|
||||||
|
|
||||||
|
/* Define to `unsigned' if <sys/types.h> doesn't define. */
|
||||||
|
/* #undef size_t */
|
||||||
|
|
||||||
|
/* Define if you have the ANSI C header files. */
|
||||||
|
#define STDC_HEADERS 1
|
||||||
|
|
||||||
|
/* Define if you don't have dirent.h, but have sys/dir.h. */
|
||||||
|
/* #undef SYSDIR */
|
||||||
|
|
||||||
|
/* Define if you don't have dirent.h, but have sys/ndir.h. */
|
||||||
|
/* #undef SYSNDIR */
|
||||||
|
|
||||||
|
/* Define if you can safely include both <sys/time.h> and <time.h>. */
|
||||||
|
/* #undef TIME_WITH_SYS_TIME */
|
||||||
|
|
||||||
|
/* Define if your <sys/time.h> declares struct tm. */
|
||||||
|
/* #define TM_IN_SYS_TIME 1 */
|
||||||
|
|
||||||
|
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||||
|
/* #undef uid_t */
|
||||||
|
|
||||||
|
/* Define if the closedir function returns void instead of int. */
|
||||||
|
/* #undef VOID_CLOSEDIR */
|
||||||
|
|
||||||
|
/* Define if getpgrp() must be called as getpgrp(0)
|
||||||
|
and (consequently) setpgrp() as setpgrp(0, 0). */
|
||||||
|
/* #undef GETPGRP_HAVE_ARGS */
|
||||||
|
|
||||||
|
/* Define this if your time.h defines altzone */
|
||||||
|
/* #define HAVE_ALTZONE */
|
||||||
|
|
||||||
|
/* Define if you have the putenv function. */
|
||||||
|
#define HAVE_PUTENV
|
||||||
|
|
||||||
|
/* Define if your compiler supports function prototypes */
|
||||||
|
#define HAVE_PROTOTYPES
|
||||||
|
|
||||||
|
/* Define if you can safely include both <sys/select.h> and <sys/time.h>
|
||||||
|
(which you can't on SCO ODT 3.0). */
|
||||||
|
/* #undef SYS_SELECT_WITH_SYS_TIME */
|
||||||
|
|
||||||
|
/* Define if you want documentation strings in extension modules */
|
||||||
|
#define WITH_DOC_STRINGS 1
|
||||||
|
|
||||||
|
/* Define if you want to compile in rudimentary thread support */
|
||||||
|
/* #undef WITH_THREAD */
|
||||||
|
|
||||||
|
/* Define if you want to use the GNU readline library */
|
||||||
|
/* #define WITH_READLINE 1 */
|
||||||
|
|
||||||
|
/* Use Python's own small-block memory-allocator. */
|
||||||
|
#define WITH_PYMALLOC 1
|
||||||
|
|
||||||
|
/* Define if you have clock. */
|
||||||
|
/* #define HAVE_CLOCK */
|
||||||
|
|
||||||
|
/* Define when any dynamic module loading is enabled */
|
||||||
|
#define HAVE_DYNAMIC_LOADING
|
||||||
|
|
||||||
|
/* Define if you have ftime. */
|
||||||
|
#define HAVE_FTIME
|
||||||
|
|
||||||
|
/* Define if you have getpeername. */
|
||||||
|
#define HAVE_GETPEERNAME
|
||||||
|
|
||||||
|
/* Define if you have getpgrp. */
|
||||||
|
/* #undef HAVE_GETPGRP */
|
||||||
|
|
||||||
|
/* Define if you have getpid. */
|
||||||
|
#define HAVE_GETPID
|
||||||
|
|
||||||
|
/* Define if you have gettimeofday. */
|
||||||
|
/* #undef HAVE_GETTIMEOFDAY */
|
||||||
|
|
||||||
|
/* Define if you have getwd. */
|
||||||
|
/* #undef HAVE_GETWD */
|
||||||
|
|
||||||
|
/* Define if you have lstat. */
|
||||||
|
/* #undef HAVE_LSTAT */
|
||||||
|
|
||||||
|
/* Define if you have the mktime function. */
|
||||||
|
#define HAVE_MKTIME
|
||||||
|
|
||||||
|
/* Define if you have nice. */
|
||||||
|
/* #undef HAVE_NICE */
|
||||||
|
|
||||||
|
/* Define if you have readlink. */
|
||||||
|
/* #undef HAVE_READLINK */
|
||||||
|
|
||||||
|
/* Define if you have setpgid. */
|
||||||
|
/* #undef HAVE_SETPGID */
|
||||||
|
|
||||||
|
/* Define if you have setpgrp. */
|
||||||
|
/* #undef HAVE_SETPGRP */
|
||||||
|
|
||||||
|
/* Define if you have setsid. */
|
||||||
|
/* #undef HAVE_SETSID */
|
||||||
|
|
||||||
|
/* Define if you have setvbuf. */
|
||||||
|
#define HAVE_SETVBUF
|
||||||
|
|
||||||
|
/* Define if you have siginterrupt. */
|
||||||
|
/* #undef HAVE_SIGINTERRUPT */
|
||||||
|
|
||||||
|
/* Define if you have symlink. */
|
||||||
|
/* #undef HAVE_SYMLINK */
|
||||||
|
|
||||||
|
/* Define if you have tcgetpgrp. */
|
||||||
|
/* #undef HAVE_TCGETPGRP */
|
||||||
|
|
||||||
|
/* Define if you have tcsetpgrp. */
|
||||||
|
/* #undef HAVE_TCSETPGRP */
|
||||||
|
|
||||||
|
/* Define if you have times. */
|
||||||
|
/* #undef HAVE_TIMES */
|
||||||
|
|
||||||
|
/* Define if you have uname. */
|
||||||
|
/* #undef HAVE_UNAME */
|
||||||
|
|
||||||
|
/* Define if you have waitpid. */
|
||||||
|
/* #undef HAVE_WAITPID */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `wcsftime' function. */
|
||||||
|
#if defined(_MSC_VER) && _MSC_VER >= 1310
|
||||||
|
#define HAVE_WCSFTIME 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `wcscoll' function. */
|
||||||
|
#define HAVE_WCSCOLL 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `wcsxfrm' function. */
|
||||||
|
#define HAVE_WCSXFRM 1
|
||||||
|
|
||||||
|
/* Define if the zlib library has inflateCopy */
|
||||||
|
#define HAVE_ZLIB_COPY 1
|
||||||
|
|
||||||
|
/* Define if you have the <dlfcn.h> header file. */
|
||||||
|
/* #undef HAVE_DLFCN_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <errno.h> header file. */
|
||||||
|
#define HAVE_ERRNO_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <fcntl.h> header file. */
|
||||||
|
#define HAVE_FCNTL_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <process.h> header file. */
|
||||||
|
#define HAVE_PROCESS_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <signal.h> header file. */
|
||||||
|
#define HAVE_SIGNAL_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <stdarg.h> prototypes. */
|
||||||
|
#define HAVE_STDARG_PROTOTYPES
|
||||||
|
|
||||||
|
/* Define if you have the <stddef.h> header file. */
|
||||||
|
#define HAVE_STDDEF_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <sys/audioio.h> header file. */
|
||||||
|
/* #undef HAVE_SYS_AUDIOIO_H */
|
||||||
|
|
||||||
|
/* Define if you have the <sys/param.h> header file. */
|
||||||
|
/* #define HAVE_SYS_PARAM_H 1 */
|
||||||
|
|
||||||
|
/* Define if you have the <sys/select.h> header file. */
|
||||||
|
/* #define HAVE_SYS_SELECT_H 1 */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||||
|
#define HAVE_SYS_STAT_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <sys/time.h> header file. */
|
||||||
|
/* #define HAVE_SYS_TIME_H 1 */
|
||||||
|
|
||||||
|
/* Define if you have the <sys/times.h> header file. */
|
||||||
|
/* #define HAVE_SYS_TIMES_H 1 */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||||
|
#define HAVE_SYS_TYPES_H 1
|
||||||
|
|
||||||
|
/* Define if you have the <sys/un.h> header file. */
|
||||||
|
/* #define HAVE_SYS_UN_H 1 */
|
||||||
|
|
||||||
|
/* Define if you have the <sys/utime.h> header file. */
|
||||||
|
/* #define HAVE_SYS_UTIME_H 1 */
|
||||||
|
|
||||||
|
/* Define if you have the <sys/utsname.h> header file. */
|
||||||
|
/* #define HAVE_SYS_UTSNAME_H 1 */
|
||||||
|
|
||||||
|
/* Define if you have the <unistd.h> header file. */
|
||||||
|
/* #define HAVE_UNISTD_H 1 */
|
||||||
|
|
||||||
|
/* Define if you have the <utime.h> header file. */
|
||||||
|
/* #define HAVE_UTIME_H 1 */
|
||||||
|
|
||||||
|
/* Define if the compiler provides a wchar.h header file. */
|
||||||
|
#define HAVE_WCHAR_H 1
|
||||||
|
|
||||||
|
/* The size of `wchar_t', as computed by sizeof. */
|
||||||
|
#define SIZEOF_WCHAR_T 2
|
||||||
|
|
||||||
|
/* The size of `_Bool', as computed by sizeof. */
|
||||||
|
#define SIZEOF__BOOL 1
|
||||||
|
|
||||||
|
/* The size of `pid_t', as computed by sizeof. */
|
||||||
|
#define SIZEOF_PID_T SIZEOF_INT
|
||||||
|
|
||||||
|
/* Define if you have the dl library (-ldl). */
|
||||||
|
/* #undef HAVE_LIBDL */
|
||||||
|
|
||||||
|
/* Define if you have the mpc library (-lmpc). */
|
||||||
|
/* #undef HAVE_LIBMPC */
|
||||||
|
|
||||||
|
/* Define if you have the nsl library (-lnsl). */
|
||||||
|
#define HAVE_LIBNSL 1
|
||||||
|
|
||||||
|
/* Define if you have the seq library (-lseq). */
|
||||||
|
/* #undef HAVE_LIBSEQ */
|
||||||
|
|
||||||
|
/* Define if you have the socket library (-lsocket). */
|
||||||
|
#define HAVE_LIBSOCKET 1
|
||||||
|
|
||||||
|
/* Define if you have the sun library (-lsun). */
|
||||||
|
/* #undef HAVE_LIBSUN */
|
||||||
|
|
||||||
|
/* Define if you have the termcap library (-ltermcap). */
|
||||||
|
/* #undef HAVE_LIBTERMCAP */
|
||||||
|
|
||||||
|
/* Define if you have the termlib library (-ltermlib). */
|
||||||
|
/* #undef HAVE_LIBTERMLIB */
|
||||||
|
|
||||||
|
/* Define if you have the thread library (-lthread). */
|
||||||
|
/* #undef HAVE_LIBTHREAD */
|
||||||
|
|
||||||
|
/* WinSock does not use a bitmask in select, and uses
|
||||||
|
socket handles greater than FD_SETSIZE */
|
||||||
|
#define Py_SOCKET_FD_CAN_BE_GE_FD_SETSIZE
|
||||||
|
|
||||||
|
/* Define if C doubles are 64-bit IEEE 754 binary format, stored with the
|
||||||
|
least significant byte first */
|
||||||
|
#define DOUBLE_IS_LITTLE_ENDIAN_IEEE754 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `erf' function. */
|
||||||
|
#define HAVE_ERF 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `erfc' function. */
|
||||||
|
#define HAVE_ERFC 1
|
||||||
|
|
||||||
|
/* Define if you have the 'inet_pton' function. */
|
||||||
|
#define HAVE_INET_PTON 1
|
||||||
|
|
||||||
|
/* framework name */
|
||||||
|
#define _PYTHONFRAMEWORK ""
|
||||||
|
|
||||||
|
/* Define if libssl has X509_VERIFY_PARAM_set1_host and related function */
|
||||||
|
#define HAVE_X509_VERIFY_PARAM_SET1_HOST 1
|
||||||
|
|
||||||
|
#endif /* !Py_CONFIG_H */
|
33
WENV/Include/pyctype.h
Normal file
33
WENV/Include/pyctype.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
#ifndef PYCTYPE_H
|
||||||
|
#define PYCTYPE_H
|
||||||
|
|
||||||
|
#define PY_CTF_LOWER 0x01
|
||||||
|
#define PY_CTF_UPPER 0x02
|
||||||
|
#define PY_CTF_ALPHA (PY_CTF_LOWER|PY_CTF_UPPER)
|
||||||
|
#define PY_CTF_DIGIT 0x04
|
||||||
|
#define PY_CTF_ALNUM (PY_CTF_ALPHA|PY_CTF_DIGIT)
|
||||||
|
#define PY_CTF_SPACE 0x08
|
||||||
|
#define PY_CTF_XDIGIT 0x10
|
||||||
|
|
||||||
|
PyAPI_DATA(const unsigned int) _Py_ctype_table[256];
|
||||||
|
|
||||||
|
/* Unlike their C counterparts, the following macros are not meant to
|
||||||
|
* handle an int with any of the values [EOF, 0-UCHAR_MAX]. The argument
|
||||||
|
* must be a signed/unsigned char. */
|
||||||
|
#define Py_ISLOWER(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_LOWER)
|
||||||
|
#define Py_ISUPPER(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_UPPER)
|
||||||
|
#define Py_ISALPHA(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALPHA)
|
||||||
|
#define Py_ISDIGIT(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_DIGIT)
|
||||||
|
#define Py_ISXDIGIT(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_XDIGIT)
|
||||||
|
#define Py_ISALNUM(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_ALNUM)
|
||||||
|
#define Py_ISSPACE(c) (_Py_ctype_table[Py_CHARMASK(c)] & PY_CTF_SPACE)
|
||||||
|
|
||||||
|
PyAPI_DATA(const unsigned char) _Py_ctype_tolower[256];
|
||||||
|
PyAPI_DATA(const unsigned char) _Py_ctype_toupper[256];
|
||||||
|
|
||||||
|
#define Py_TOLOWER(c) (_Py_ctype_tolower[Py_CHARMASK(c)])
|
||||||
|
#define Py_TOUPPER(c) (_Py_ctype_toupper[Py_CHARMASK(c)])
|
||||||
|
|
||||||
|
#endif /* !PYCTYPE_H */
|
||||||
|
#endif /* !Py_LIMITED_API */
|
40
WENV/Include/pydebug.h
Normal file
40
WENV/Include/pydebug.h
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
#ifndef Py_PYDEBUG_H
|
||||||
|
#define Py_PYDEBUG_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* These global variable are defined in pylifecycle.c */
|
||||||
|
/* XXX (ncoghlan): move these declarations to pylifecycle.h? */
|
||||||
|
PyAPI_DATA(int) Py_DebugFlag;
|
||||||
|
PyAPI_DATA(int) Py_VerboseFlag;
|
||||||
|
PyAPI_DATA(int) Py_QuietFlag;
|
||||||
|
PyAPI_DATA(int) Py_InteractiveFlag;
|
||||||
|
PyAPI_DATA(int) Py_InspectFlag;
|
||||||
|
PyAPI_DATA(int) Py_OptimizeFlag;
|
||||||
|
PyAPI_DATA(int) Py_NoSiteFlag;
|
||||||
|
PyAPI_DATA(int) Py_BytesWarningFlag;
|
||||||
|
PyAPI_DATA(int) Py_FrozenFlag;
|
||||||
|
PyAPI_DATA(int) Py_IgnoreEnvironmentFlag;
|
||||||
|
PyAPI_DATA(int) Py_DontWriteBytecodeFlag;
|
||||||
|
PyAPI_DATA(int) Py_NoUserSiteDirectory;
|
||||||
|
PyAPI_DATA(int) Py_UnbufferedStdioFlag;
|
||||||
|
PyAPI_DATA(int) Py_HashRandomizationFlag;
|
||||||
|
PyAPI_DATA(int) Py_IsolatedFlag;
|
||||||
|
|
||||||
|
#ifdef MS_WINDOWS
|
||||||
|
PyAPI_DATA(int) Py_LegacyWindowsFSEncodingFlag;
|
||||||
|
PyAPI_DATA(int) Py_LegacyWindowsStdioFlag;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* this is a wrapper around getenv() that pays attention to
|
||||||
|
Py_IgnoreEnvironmentFlag. It should be used for getting variables like
|
||||||
|
PYTHONPATH and PYTHONHOME from the environment */
|
||||||
|
#define Py_GETENV(s) (Py_IgnoreEnvironmentFlag ? NULL : getenv(s))
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_PYDEBUG_H */
|
||||||
|
#endif /* Py_LIMITED_API */
|
57
WENV/Include/pydtrace.h
Normal file
57
WENV/Include/pydtrace.h
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/* Static DTrace probes interface */
|
||||||
|
|
||||||
|
#ifndef Py_DTRACE_H
|
||||||
|
#define Py_DTRACE_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WITH_DTRACE
|
||||||
|
|
||||||
|
#include "pydtrace_probes.h"
|
||||||
|
|
||||||
|
/* pydtrace_probes.h, on systems with DTrace, is auto-generated to include
|
||||||
|
`PyDTrace_{PROBE}` and `PyDTrace_{PROBE}_ENABLED()` macros for every probe
|
||||||
|
defined in pydtrace_provider.d.
|
||||||
|
|
||||||
|
Calling these functions must be guarded by a `PyDTrace_{PROBE}_ENABLED()`
|
||||||
|
check to minimize performance impact when probing is off. For example:
|
||||||
|
|
||||||
|
if (PyDTrace_FUNCTION_ENTRY_ENABLED())
|
||||||
|
PyDTrace_FUNCTION_ENTRY(f);
|
||||||
|
*/
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* Without DTrace, compile to nothing. */
|
||||||
|
|
||||||
|
static inline void PyDTrace_LINE(const char *arg0, const char *arg1, int arg2) {}
|
||||||
|
static inline void PyDTrace_FUNCTION_ENTRY(const char *arg0, const char *arg1, int arg2) {}
|
||||||
|
static inline void PyDTrace_FUNCTION_RETURN(const char *arg0, const char *arg1, int arg2) {}
|
||||||
|
static inline void PyDTrace_GC_START(int arg0) {}
|
||||||
|
static inline void PyDTrace_GC_DONE(int arg0) {}
|
||||||
|
static inline void PyDTrace_INSTANCE_NEW_START(int arg0) {}
|
||||||
|
static inline void PyDTrace_INSTANCE_NEW_DONE(int arg0) {}
|
||||||
|
static inline void PyDTrace_INSTANCE_DELETE_START(int arg0) {}
|
||||||
|
static inline void PyDTrace_INSTANCE_DELETE_DONE(int arg0) {}
|
||||||
|
static inline void PyDTrace_IMPORT_FIND_LOAD_START(const char *arg0) {}
|
||||||
|
static inline void PyDTrace_IMPORT_FIND_LOAD_DONE(const char *arg0, int arg1) {}
|
||||||
|
|
||||||
|
static inline int PyDTrace_LINE_ENABLED(void) { return 0; }
|
||||||
|
static inline int PyDTrace_FUNCTION_ENTRY_ENABLED(void) { return 0; }
|
||||||
|
static inline int PyDTrace_FUNCTION_RETURN_ENABLED(void) { return 0; }
|
||||||
|
static inline int PyDTrace_GC_START_ENABLED(void) { return 0; }
|
||||||
|
static inline int PyDTrace_GC_DONE_ENABLED(void) { return 0; }
|
||||||
|
static inline int PyDTrace_INSTANCE_NEW_START_ENABLED(void) { return 0; }
|
||||||
|
static inline int PyDTrace_INSTANCE_NEW_DONE_ENABLED(void) { return 0; }
|
||||||
|
static inline int PyDTrace_INSTANCE_DELETE_START_ENABLED(void) { return 0; }
|
||||||
|
static inline int PyDTrace_INSTANCE_DELETE_DONE_ENABLED(void) { return 0; }
|
||||||
|
static inline int PyDTrace_IMPORT_FIND_LOAD_START_ENABLED(void) { return 0; }
|
||||||
|
static inline int PyDTrace_IMPORT_FIND_LOAD_DONE_ENABLED(void) { return 0; }
|
||||||
|
|
||||||
|
#endif /* !WITH_DTRACE */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_DTRACE_H */
|
504
WENV/Include/pyerrors.h
Normal file
504
WENV/Include/pyerrors.h
Normal file
@ -0,0 +1,504 @@
|
|||||||
|
#ifndef Py_ERRORS_H
|
||||||
|
#define Py_ERRORS_H
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* 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;\
|
||||||
|
PyObject *context; PyObject *cause;\
|
||||||
|
char suppress_context;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyException_HEAD
|
||||||
|
} PyBaseExceptionObject;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyException_HEAD
|
||||||
|
PyObject *msg;
|
||||||
|
PyObject *filename;
|
||||||
|
PyObject *lineno;
|
||||||
|
PyObject *offset;
|
||||||
|
PyObject *text;
|
||||||
|
PyObject *print_file_and_line;
|
||||||
|
} PySyntaxErrorObject;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyException_HEAD
|
||||||
|
PyObject *msg;
|
||||||
|
PyObject *name;
|
||||||
|
PyObject *path;
|
||||||
|
} PyImportErrorObject;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyException_HEAD
|
||||||
|
PyObject *encoding;
|
||||||
|
PyObject *object;
|
||||||
|
Py_ssize_t start;
|
||||||
|
Py_ssize_t end;
|
||||||
|
PyObject *reason;
|
||||||
|
} PyUnicodeErrorObject;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyException_HEAD
|
||||||
|
PyObject *code;
|
||||||
|
} PySystemExitObject;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyException_HEAD
|
||||||
|
PyObject *myerrno;
|
||||||
|
PyObject *strerror;
|
||||||
|
PyObject *filename;
|
||||||
|
PyObject *filename2;
|
||||||
|
#ifdef MS_WINDOWS
|
||||||
|
PyObject *winerror;
|
||||||
|
#endif
|
||||||
|
Py_ssize_t written; /* only for BlockingIOError, -1 otherwise */
|
||||||
|
} PyOSErrorObject;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyException_HEAD
|
||||||
|
PyObject *value;
|
||||||
|
} PyStopIterationObject;
|
||||||
|
|
||||||
|
/* Compatibility typedefs */
|
||||||
|
typedef PyOSErrorObject PyEnvironmentErrorObject;
|
||||||
|
#ifdef MS_WINDOWS
|
||||||
|
typedef PyOSErrorObject PyWindowsErrorObject;
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_LIMITED_API */
|
||||||
|
|
||||||
|
/* Error handling definitions */
|
||||||
|
|
||||||
|
PyAPI_FUNC(void) PyErr_SetNone(PyObject *);
|
||||||
|
PyAPI_FUNC(void) PyErr_SetObject(PyObject *, PyObject *);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(void) _PyErr_SetKeyError(PyObject *);
|
||||||
|
_PyErr_StackItem *_PyErr_GetTopmostException(PyThreadState *tstate);
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(void) PyErr_SetString(
|
||||||
|
PyObject *exception,
|
||||||
|
const char *string /* decoded from utf-8 */
|
||||||
|
);
|
||||||
|
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 *);
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
|
||||||
|
PyAPI_FUNC(void) PyErr_GetExcInfo(PyObject **, PyObject **, PyObject **);
|
||||||
|
PyAPI_FUNC(void) PyErr_SetExcInfo(PyObject *, PyObject *, PyObject *);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__clang__) || \
|
||||||
|
(defined(__GNUC__) && \
|
||||||
|
((__GNUC__ >= 3) || \
|
||||||
|
(__GNUC__ == 2) && (__GNUC_MINOR__ >= 5)))
|
||||||
|
#define _Py_NO_RETURN __attribute__((__noreturn__))
|
||||||
|
#else
|
||||||
|
#define _Py_NO_RETURN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Defined in Python/pylifecycle.c */
|
||||||
|
PyAPI_FUNC(void) Py_FatalError(const char *message) _Py_NO_RETURN;
|
||||||
|
|
||||||
|
#if defined(Py_DEBUG) || defined(Py_LIMITED_API)
|
||||||
|
#define _PyErr_OCCURRED() PyErr_Occurred()
|
||||||
|
#else
|
||||||
|
#define _PyErr_OCCURRED() (PyThreadState_GET()->curexc_type)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Error testing and normalization */
|
||||||
|
PyAPI_FUNC(int) PyErr_GivenExceptionMatches(PyObject *, PyObject *);
|
||||||
|
PyAPI_FUNC(int) PyErr_ExceptionMatches(PyObject *);
|
||||||
|
PyAPI_FUNC(void) PyErr_NormalizeException(PyObject**, PyObject**, PyObject**);
|
||||||
|
|
||||||
|
/* Traceback manipulation (PEP 3134) */
|
||||||
|
PyAPI_FUNC(int) PyException_SetTraceback(PyObject *, PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyException_GetTraceback(PyObject *);
|
||||||
|
|
||||||
|
/* Cause manipulation (PEP 3134) */
|
||||||
|
PyAPI_FUNC(PyObject *) PyException_GetCause(PyObject *);
|
||||||
|
PyAPI_FUNC(void) PyException_SetCause(PyObject *, PyObject *);
|
||||||
|
|
||||||
|
/* Context manipulation (PEP 3134) */
|
||||||
|
PyAPI_FUNC(PyObject *) PyException_GetContext(PyObject *);
|
||||||
|
PyAPI_FUNC(void) PyException_SetContext(PyObject *, PyObject *);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(void) _PyErr_ChainExceptions(PyObject *, PyObject *, PyObject *);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* */
|
||||||
|
|
||||||
|
#define PyExceptionClass_Check(x) \
|
||||||
|
(PyType_Check((x)) && \
|
||||||
|
PyType_FastSubclass((PyTypeObject*)(x), Py_TPFLAGS_BASE_EXC_SUBCLASS))
|
||||||
|
|
||||||
|
#define PyExceptionInstance_Check(x) \
|
||||||
|
PyType_FastSubclass((x)->ob_type, Py_TPFLAGS_BASE_EXC_SUBCLASS)
|
||||||
|
|
||||||
|
#define PyExceptionClass_Name(x) \
|
||||||
|
((char *)(((PyTypeObject*)(x))->tp_name))
|
||||||
|
|
||||||
|
#define PyExceptionInstance_Class(x) ((PyObject*)((x)->ob_type))
|
||||||
|
|
||||||
|
|
||||||
|
/* Predefined exceptions */
|
||||||
|
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_BaseException;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_Exception;
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_StopAsyncIteration;
|
||||||
|
#endif
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_StopIteration;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_GeneratorExit;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_ArithmeticError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_LookupError;
|
||||||
|
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_AssertionError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_AttributeError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_BufferError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_EOFError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_FloatingPointError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_OSError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_ImportError;
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_ModuleNotFoundError;
|
||||||
|
#endif
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_IndexError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_KeyError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_KeyboardInterrupt;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_MemoryError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_NameError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_OverflowError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_RuntimeError;
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_RecursionError;
|
||||||
|
#endif
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_NotImplementedError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_SyntaxError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_IndentationError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_TabError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_ReferenceError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_SystemError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_SystemExit;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_TypeError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_UnboundLocalError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_UnicodeError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_UnicodeEncodeError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_UnicodeDecodeError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_UnicodeTranslateError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_ValueError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_ZeroDivisionError;
|
||||||
|
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_BlockingIOError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_BrokenPipeError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_ChildProcessError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_ConnectionError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_ConnectionAbortedError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_ConnectionRefusedError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_ConnectionResetError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_FileExistsError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_FileNotFoundError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_InterruptedError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_IsADirectoryError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_NotADirectoryError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_PermissionError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_ProcessLookupError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_TimeoutError;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* Compatibility aliases */
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_EnvironmentError;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_IOError;
|
||||||
|
#ifdef MS_WINDOWS
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_WindowsError;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Predefined warning categories */
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_Warning;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_UserWarning;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_DeprecationWarning;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_PendingDeprecationWarning;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_SyntaxWarning;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_RuntimeWarning;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_FutureWarning;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_ImportWarning;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_UnicodeWarning;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_BytesWarning;
|
||||||
|
PyAPI_DATA(PyObject *) PyExc_ResourceWarning;
|
||||||
|
|
||||||
|
|
||||||
|
/* Convenience functions */
|
||||||
|
|
||||||
|
PyAPI_FUNC(int) PyErr_BadArgument(void);
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_NoMemory(void);
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_SetFromErrno(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilenameObject(
|
||||||
|
PyObject *, PyObject *);
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilenameObjects(
|
||||||
|
PyObject *, PyObject *, PyObject *);
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilename(
|
||||||
|
PyObject *exc,
|
||||||
|
const char *filename /* decoded from the filesystem encoding */
|
||||||
|
);
|
||||||
|
#if defined(MS_WINDOWS) && !defined(Py_LIMITED_API)
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithUnicodeFilename(
|
||||||
|
PyObject *, const Py_UNICODE *) Py_DEPRECATED(3.3);
|
||||||
|
#endif /* MS_WINDOWS */
|
||||||
|
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_Format(
|
||||||
|
PyObject *exception,
|
||||||
|
const char *format, /* ASCII-encoded string */
|
||||||
|
...
|
||||||
|
);
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_FormatV(
|
||||||
|
PyObject *exception,
|
||||||
|
const char *format,
|
||||||
|
va_list vargs);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
/* Like PyErr_Format(), but saves current exception as __context__ and
|
||||||
|
__cause__.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(PyObject *) _PyErr_FormatFromCause(
|
||||||
|
PyObject *exception,
|
||||||
|
const char *format, /* ASCII-encoded string */
|
||||||
|
...
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef MS_WINDOWS
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilename(
|
||||||
|
int ierr,
|
||||||
|
const char *filename /* decoded from the filesystem encoding */
|
||||||
|
);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
/* XXX redeclare to use WSTRING */
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithUnicodeFilename(
|
||||||
|
int, const Py_UNICODE *) Py_DEPRECATED(3.3);
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErr(int);
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObject(
|
||||||
|
PyObject *,int, PyObject *);
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObjects(
|
||||||
|
PyObject *,int, PyObject *, PyObject *);
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilename(
|
||||||
|
PyObject *exc,
|
||||||
|
int ierr,
|
||||||
|
const char *filename /* decoded from the filesystem encoding */
|
||||||
|
);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithUnicodeFilename(
|
||||||
|
PyObject *,int, const Py_UNICODE *) Py_DEPRECATED(3.3);
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErr(PyObject *, int);
|
||||||
|
#endif /* MS_WINDOWS */
|
||||||
|
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_SetImportErrorSubclass(PyObject *, PyObject *,
|
||||||
|
PyObject *, PyObject *);
|
||||||
|
#endif
|
||||||
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_SetImportError(PyObject *, PyObject *,
|
||||||
|
PyObject *);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Export the old function so that the existing API remains available: */
|
||||||
|
PyAPI_FUNC(void) PyErr_BadInternalCall(void);
|
||||||
|
PyAPI_FUNC(void) _PyErr_BadInternalCall(const char *filename, int lineno);
|
||||||
|
/* Mask the old API with a call to the new API for code compiled under
|
||||||
|
Python 2.0: */
|
||||||
|
#define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
|
||||||
|
|
||||||
|
/* Function to create a new exception */
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_NewException(
|
||||||
|
const char *name, PyObject *base, PyObject *dict);
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_NewExceptionWithDoc(
|
||||||
|
const char *name, const char *doc, PyObject *base, PyObject *dict);
|
||||||
|
PyAPI_FUNC(void) PyErr_WriteUnraisable(PyObject *);
|
||||||
|
|
||||||
|
/* In exceptions.c */
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
/* Helper that attempts to replace the current exception with one of the
|
||||||
|
* same type but with a prefix added to the exception text. The resulting
|
||||||
|
* exception description looks like:
|
||||||
|
*
|
||||||
|
* prefix (exc_type: original_exc_str)
|
||||||
|
*
|
||||||
|
* Only some exceptions can be safely replaced. If the function determines
|
||||||
|
* it isn't safe to perform the replacement, it will leave the original
|
||||||
|
* unmodified exception in place.
|
||||||
|
*
|
||||||
|
* Returns a borrowed reference to the new exception (if any), NULL if the
|
||||||
|
* existing exception was left in place.
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(PyObject *) _PyErr_TrySetFromCause(
|
||||||
|
const char *prefix_format, /* ASCII-encoded string */
|
||||||
|
...
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* In signalmodule.c */
|
||||||
|
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 *filename, /* decoded from the filesystem encoding */
|
||||||
|
int lineno);
|
||||||
|
PyAPI_FUNC(void) PyErr_SyntaxLocationEx(
|
||||||
|
const char *filename, /* decoded from the filesystem encoding */
|
||||||
|
int lineno,
|
||||||
|
int col_offset);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(void) PyErr_SyntaxLocationObject(
|
||||||
|
PyObject *filename,
|
||||||
|
int lineno,
|
||||||
|
int col_offset);
|
||||||
|
#endif
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_ProgramText(
|
||||||
|
const char *filename, /* decoded from the filesystem encoding */
|
||||||
|
int lineno);
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(PyObject *) PyErr_ProgramTextObject(
|
||||||
|
PyObject *filename,
|
||||||
|
int lineno);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The following functions are used to create and modify unicode
|
||||||
|
exceptions from C */
|
||||||
|
|
||||||
|
/* create a UnicodeDecodeError object */
|
||||||
|
PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_Create(
|
||||||
|
const char *encoding, /* UTF-8 encoded string */
|
||||||
|
const char *object,
|
||||||
|
Py_ssize_t length,
|
||||||
|
Py_ssize_t start,
|
||||||
|
Py_ssize_t end,
|
||||||
|
const char *reason /* UTF-8 encoded string */
|
||||||
|
);
|
||||||
|
|
||||||
|
/* create a UnicodeEncodeError object */
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_Create(
|
||||||
|
const char *encoding, /* UTF-8 encoded string */
|
||||||
|
const Py_UNICODE *object,
|
||||||
|
Py_ssize_t length,
|
||||||
|
Py_ssize_t start,
|
||||||
|
Py_ssize_t end,
|
||||||
|
const char *reason /* UTF-8 encoded string */
|
||||||
|
) Py_DEPRECATED(3.3);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* create a UnicodeTranslateError object */
|
||||||
|
#ifndef Py_LIMITED_API
|
||||||
|
PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_Create(
|
||||||
|
const Py_UNICODE *object,
|
||||||
|
Py_ssize_t length,
|
||||||
|
Py_ssize_t start,
|
||||||
|
Py_ssize_t end,
|
||||||
|
const char *reason /* UTF-8 encoded string */
|
||||||
|
) Py_DEPRECATED(3.3);
|
||||||
|
PyAPI_FUNC(PyObject *) _PyUnicodeTranslateError_Create(
|
||||||
|
PyObject *object,
|
||||||
|
Py_ssize_t start,
|
||||||
|
Py_ssize_t end,
|
||||||
|
const char *reason /* UTF-8 encoded string */
|
||||||
|
);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* get the encoding attribute */
|
||||||
|
PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetEncoding(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetEncoding(PyObject *);
|
||||||
|
|
||||||
|
/* get the object attribute */
|
||||||
|
PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetObject(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetObject(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_GetObject(PyObject *);
|
||||||
|
|
||||||
|
/* get the value of the start attribute (the int * may not be NULL)
|
||||||
|
return 0 on success, -1 on failure */
|
||||||
|
PyAPI_FUNC(int) PyUnicodeEncodeError_GetStart(PyObject *, Py_ssize_t *);
|
||||||
|
PyAPI_FUNC(int) PyUnicodeDecodeError_GetStart(PyObject *, Py_ssize_t *);
|
||||||
|
PyAPI_FUNC(int) PyUnicodeTranslateError_GetStart(PyObject *, Py_ssize_t *);
|
||||||
|
|
||||||
|
/* assign a new value to the start attribute
|
||||||
|
return 0 on success, -1 on failure */
|
||||||
|
PyAPI_FUNC(int) PyUnicodeEncodeError_SetStart(PyObject *, Py_ssize_t);
|
||||||
|
PyAPI_FUNC(int) PyUnicodeDecodeError_SetStart(PyObject *, Py_ssize_t);
|
||||||
|
PyAPI_FUNC(int) PyUnicodeTranslateError_SetStart(PyObject *, Py_ssize_t);
|
||||||
|
|
||||||
|
/* get the value of the end attribute (the int *may not be NULL)
|
||||||
|
return 0 on success, -1 on failure */
|
||||||
|
PyAPI_FUNC(int) PyUnicodeEncodeError_GetEnd(PyObject *, Py_ssize_t *);
|
||||||
|
PyAPI_FUNC(int) PyUnicodeDecodeError_GetEnd(PyObject *, Py_ssize_t *);
|
||||||
|
PyAPI_FUNC(int) PyUnicodeTranslateError_GetEnd(PyObject *, Py_ssize_t *);
|
||||||
|
|
||||||
|
/* assign a new value to the end attribute
|
||||||
|
return 0 on success, -1 on failure */
|
||||||
|
PyAPI_FUNC(int) PyUnicodeEncodeError_SetEnd(PyObject *, Py_ssize_t);
|
||||||
|
PyAPI_FUNC(int) PyUnicodeDecodeError_SetEnd(PyObject *, Py_ssize_t);
|
||||||
|
PyAPI_FUNC(int) PyUnicodeTranslateError_SetEnd(PyObject *, Py_ssize_t);
|
||||||
|
|
||||||
|
/* get the value of the reason attribute */
|
||||||
|
PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetReason(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetReason(PyObject *);
|
||||||
|
PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_GetReason(PyObject *);
|
||||||
|
|
||||||
|
/* assign a new value to the reason attribute
|
||||||
|
return 0 on success, -1 on failure */
|
||||||
|
PyAPI_FUNC(int) PyUnicodeEncodeError_SetReason(
|
||||||
|
PyObject *exc,
|
||||||
|
const char *reason /* UTF-8 encoded string */
|
||||||
|
);
|
||||||
|
PyAPI_FUNC(int) PyUnicodeDecodeError_SetReason(
|
||||||
|
PyObject *exc,
|
||||||
|
const char *reason /* UTF-8 encoded string */
|
||||||
|
);
|
||||||
|
PyAPI_FUNC(int) PyUnicodeTranslateError_SetReason(
|
||||||
|
PyObject *exc,
|
||||||
|
const char *reason /* UTF-8 encoded string */
|
||||||
|
);
|
||||||
|
|
||||||
|
/* These APIs aren't really part of the error implementation, but
|
||||||
|
often needed to format error messages; the native C lib APIs are
|
||||||
|
not available on all platforms, which is why we provide emulations
|
||||||
|
for those platforms in Python/mysnprintf.c,
|
||||||
|
WARNING: The return value of snprintf varies across platforms; do
|
||||||
|
not rely on any particular behavior; eventually the C99 defn may
|
||||||
|
be reliable.
|
||||||
|
*/
|
||||||
|
#if defined(MS_WIN32) && !defined(HAVE_SNPRINTF)
|
||||||
|
# define HAVE_SNPRINTF
|
||||||
|
# define snprintf _snprintf
|
||||||
|
# define vsnprintf _vsnprintf
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
PyAPI_FUNC(int) PyOS_snprintf(char *str, size_t size, const char *format, ...)
|
||||||
|
Py_GCC_ATTRIBUTE((format(printf, 3, 4)));
|
||||||
|
PyAPI_FUNC(int) PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va)
|
||||||
|
Py_GCC_ATTRIBUTE((format(printf, 3, 0)));
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif /* !Py_ERRORS_H */
|
55
WENV/Include/pyexpat.h
Normal file
55
WENV/Include/pyexpat.h
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/* Stuff to export relevant 'expat' entry points from pyexpat to other
|
||||||
|
* parser modules, such as cElementTree. */
|
||||||
|
|
||||||
|
/* note: you must import expat.h before importing this module! */
|
||||||
|
|
||||||
|
#define PyExpat_CAPI_MAGIC "pyexpat.expat_CAPI 1.1"
|
||||||
|
#define PyExpat_CAPSULE_NAME "pyexpat.expat_CAPI"
|
||||||
|
|
||||||
|
struct PyExpat_CAPI
|
||||||
|
{
|
||||||
|
char* magic; /* set to PyExpat_CAPI_MAGIC */
|
||||||
|
int size; /* set to sizeof(struct PyExpat_CAPI) */
|
||||||
|
int MAJOR_VERSION;
|
||||||
|
int MINOR_VERSION;
|
||||||
|
int MICRO_VERSION;
|
||||||
|
/* pointers to selected expat functions. add new functions at
|
||||||
|
the end, if needed */
|
||||||
|
const XML_LChar * (*ErrorString)(enum XML_Error code);
|
||||||
|
enum XML_Error (*GetErrorCode)(XML_Parser parser);
|
||||||
|
XML_Size (*GetErrorColumnNumber)(XML_Parser parser);
|
||||||
|
XML_Size (*GetErrorLineNumber)(XML_Parser parser);
|
||||||
|
enum XML_Status (*Parse)(
|
||||||
|
XML_Parser parser, const char *s, int len, int isFinal);
|
||||||
|
XML_Parser (*ParserCreate_MM)(
|
||||||
|
const XML_Char *encoding, const XML_Memory_Handling_Suite *memsuite,
|
||||||
|
const XML_Char *namespaceSeparator);
|
||||||
|
void (*ParserFree)(XML_Parser parser);
|
||||||
|
void (*SetCharacterDataHandler)(
|
||||||
|
XML_Parser parser, XML_CharacterDataHandler handler);
|
||||||
|
void (*SetCommentHandler)(
|
||||||
|
XML_Parser parser, XML_CommentHandler handler);
|
||||||
|
void (*SetDefaultHandlerExpand)(
|
||||||
|
XML_Parser parser, XML_DefaultHandler handler);
|
||||||
|
void (*SetElementHandler)(
|
||||||
|
XML_Parser parser, XML_StartElementHandler start,
|
||||||
|
XML_EndElementHandler end);
|
||||||
|
void (*SetNamespaceDeclHandler)(
|
||||||
|
XML_Parser parser, XML_StartNamespaceDeclHandler start,
|
||||||
|
XML_EndNamespaceDeclHandler end);
|
||||||
|
void (*SetProcessingInstructionHandler)(
|
||||||
|
XML_Parser parser, XML_ProcessingInstructionHandler handler);
|
||||||
|
void (*SetUnknownEncodingHandler)(
|
||||||
|
XML_Parser parser, XML_UnknownEncodingHandler handler,
|
||||||
|
void *encodingHandlerData);
|
||||||
|
void (*SetUserData)(XML_Parser parser, void *userData);
|
||||||
|
void (*SetStartDoctypeDeclHandler)(XML_Parser parser,
|
||||||
|
XML_StartDoctypeDeclHandler start);
|
||||||
|
enum XML_Status (*SetEncoding)(XML_Parser parser, const XML_Char *encoding);
|
||||||
|
int (*DefaultUnknownEncodingHandler)(
|
||||||
|
void *encodingHandlerData, const XML_Char *name, XML_Encoding *info);
|
||||||
|
/* might be none for expat < 2.1.0 */
|
||||||
|
int (*SetHashSalt)(XML_Parser parser, unsigned long hash_salt);
|
||||||
|
/* always add new stuff to the end! */
|
||||||
|
};
|
||||||
|
|
12
WENV/Include/pyfpe.h
Normal file
12
WENV/Include/pyfpe.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#ifndef Py_PYFPE_H
|
||||||
|
#define Py_PYFPE_H
|
||||||
|
|
||||||
|
/* These macros used to do something when Python was built with --with-fpectl,
|
||||||
|
* but support for that was dropped in 3.7. We continue to define them though,
|
||||||
|
* to avoid breaking API users.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define PyFPE_START_PROTECT(err_string, leave_stmt)
|
||||||
|
#define PyFPE_END_PROTECT(v)
|
||||||
|
|
||||||
|
#endif /* !Py_PYFPE_H */
|
27
WENV/Include/pygame/_camera.h
Normal file
27
WENV/Include/pygame/_camera.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
pygame - Python Game Library
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this library; if not, write to the Free
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _CAMERA_H
|
||||||
|
#define _CAMERA_H
|
||||||
|
|
||||||
|
#include "_pygame.h"
|
||||||
|
#include "camera.h"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
715
WENV/Include/pygame/_pygame.h
Normal file
715
WENV/Include/pygame/_pygame.h
Normal file
@ -0,0 +1,715 @@
|
|||||||
|
/*
|
||||||
|
pygame - Python Game Library
|
||||||
|
Copyright (C) 2000-2001 Pete Shinners
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this library; if not, write to the Free
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
Pete Shinners
|
||||||
|
pete@shinners.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _PYGAME_H
|
||||||
|
#define _PYGAME_H
|
||||||
|
|
||||||
|
/** This header file includes all the definitions for the
|
||||||
|
** base pygame extensions. This header only requires
|
||||||
|
** SDL and Python includes. The reason for functions
|
||||||
|
** prototyped with #define's is to allow for maximum
|
||||||
|
** python portability. It also uses python as the
|
||||||
|
** runtime linker, which allows for late binding. For more
|
||||||
|
** information on this style of development, read the Python
|
||||||
|
** docs on this subject.
|
||||||
|
** http://www.python.org/doc/current/ext/using-cobjects.html
|
||||||
|
**
|
||||||
|
** If using this to build your own derived extensions,
|
||||||
|
** you'll see that the functions available here are mainly
|
||||||
|
** used to help convert between python objects and SDL objects.
|
||||||
|
** Since this library doesn't add a lot of functionality to
|
||||||
|
** the SDL libarary, it doesn't need to offer a lot either.
|
||||||
|
**
|
||||||
|
** When initializing your extension module, you must manually
|
||||||
|
** import the modules you want to use. (this is the part about
|
||||||
|
** using python as the runtime linker). Each module has its
|
||||||
|
** own import_xxx() routine. You need to perform this import
|
||||||
|
** after you have initialized your own module, and before
|
||||||
|
** you call any routines from that module. Since every module
|
||||||
|
** in pygame does this, there are plenty of examples.
|
||||||
|
**
|
||||||
|
** The base module does include some useful conversion routines
|
||||||
|
** that you are free to use in your own extension.
|
||||||
|
**
|
||||||
|
** When making changes, it is very important to keep the
|
||||||
|
** FIRSTSLOT and NUMSLOT constants up to date for each
|
||||||
|
** section. Also be sure not to overlap any of the slots.
|
||||||
|
** When you do make a mistake with this, it will result
|
||||||
|
** is a dereferenced NULL pointer that is easier to diagnose
|
||||||
|
** than it could be :]
|
||||||
|
**/
|
||||||
|
#if defined(HAVE_SNPRINTF) /* defined in python.h (pyerrors.h) and SDL.h (SDL_config.h) */
|
||||||
|
#undef HAVE_SNPRINTF /* remove GCC redefine warning */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// This must be before all else
|
||||||
|
#if defined(__SYMBIAN32__) && defined( OPENC )
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#if defined(__WINS__)
|
||||||
|
void* _alloca(size_t size);
|
||||||
|
# define alloca _alloca
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This is unconditionally defined in Python.h */
|
||||||
|
#if defined(_POSIX_C_SOURCE)
|
||||||
|
#undef _POSIX_C_SOURCE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <Python.h>
|
||||||
|
|
||||||
|
/* Cobjects vanish in Python 3.2; so we will code as though we use capsules */
|
||||||
|
#if defined(Py_CAPSULE_H)
|
||||||
|
#define PG_HAVE_CAPSULE 1
|
||||||
|
#else
|
||||||
|
#define PG_HAVE_CAPSULE 0
|
||||||
|
#endif
|
||||||
|
#if defined(Py_COBJECT_H)
|
||||||
|
#define PG_HAVE_COBJECT 1
|
||||||
|
#else
|
||||||
|
#define PG_HAVE_COBJECT 0
|
||||||
|
#endif
|
||||||
|
#if !PG_HAVE_CAPSULE
|
||||||
|
#define PyCapsule_New(ptr, n, dfn) PyCObject_FromVoidPtr(ptr, dfn)
|
||||||
|
#define PyCapsule_GetPointer(obj, n) PyCObject_AsVoidPtr(obj)
|
||||||
|
#define PyCapsule_CheckExact(obj) PyCObject_Check(obj)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Pygame uses Py_buffer (PEP 3118) to exchange array information internally;
|
||||||
|
* define here as needed.
|
||||||
|
*/
|
||||||
|
#if !defined(PyBUF_SIMPLE)
|
||||||
|
typedef struct bufferinfo {
|
||||||
|
void *buf;
|
||||||
|
PyObject *obj;
|
||||||
|
Py_ssize_t len;
|
||||||
|
Py_ssize_t itemsize;
|
||||||
|
int readonly;
|
||||||
|
int ndim;
|
||||||
|
char *format;
|
||||||
|
Py_ssize_t *shape;
|
||||||
|
Py_ssize_t *strides;
|
||||||
|
Py_ssize_t *suboffsets;
|
||||||
|
void *internal;
|
||||||
|
} Py_buffer;
|
||||||
|
|
||||||
|
/* Flags for getting buffers */
|
||||||
|
#define PyBUF_SIMPLE 0
|
||||||
|
#define PyBUF_WRITABLE 0x0001
|
||||||
|
/* we used to include an E, backwards compatible alias */
|
||||||
|
#define PyBUF_WRITEABLE PyBUF_WRITABLE
|
||||||
|
#define PyBUF_FORMAT 0x0004
|
||||||
|
#define PyBUF_ND 0x0008
|
||||||
|
#define PyBUF_STRIDES (0x0010 | PyBUF_ND)
|
||||||
|
#define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
|
||||||
|
#define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
|
||||||
|
#define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
|
||||||
|
#define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
|
||||||
|
|
||||||
|
#define PyBUF_CONTIG (PyBUF_ND | PyBUF_WRITABLE)
|
||||||
|
#define PyBUF_CONTIG_RO (PyBUF_ND)
|
||||||
|
|
||||||
|
#define PyBUF_STRIDED (PyBUF_STRIDES | PyBUF_WRITABLE)
|
||||||
|
#define PyBUF_STRIDED_RO (PyBUF_STRIDES)
|
||||||
|
|
||||||
|
#define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_WRITABLE | PyBUF_FORMAT)
|
||||||
|
#define PyBUF_RECORDS_RO (PyBUF_STRIDES | PyBUF_FORMAT)
|
||||||
|
|
||||||
|
#define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_WRITABLE | PyBUF_FORMAT)
|
||||||
|
#define PyBUF_FULL_RO (PyBUF_INDIRECT | PyBUF_FORMAT)
|
||||||
|
|
||||||
|
|
||||||
|
#define PyBUF_READ 0x100
|
||||||
|
#define PyBUF_WRITE 0x200
|
||||||
|
#define PyBUF_SHADOW 0x400
|
||||||
|
|
||||||
|
typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
|
||||||
|
typedef void (*releasebufferproc)(Py_buffer *);
|
||||||
|
#endif /* #if !defined(PyBUF_SIMPLE) */
|
||||||
|
|
||||||
|
/* Flag indicating a Pg_buffer; used for assertions within callbacks */
|
||||||
|
#ifndef NDEBUG
|
||||||
|
#define PyBUF_PYGAME 0x4000
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define PyBUF_HAS_FLAG(f, F) (((f) & (F)) == (F))
|
||||||
|
|
||||||
|
/* Array information exchange struct C type; inherits from Py_buffer
|
||||||
|
*
|
||||||
|
* Pygame uses its own Py_buffer derived C struct as an internal representation
|
||||||
|
* of an imported array buffer. The extended Py_buffer allows for a
|
||||||
|
* per-instance release callback,
|
||||||
|
*/
|
||||||
|
typedef void (*pybuffer_releaseproc)(Py_buffer *);
|
||||||
|
|
||||||
|
typedef struct pg_bufferinfo_s {
|
||||||
|
Py_buffer view;
|
||||||
|
PyObject *consumer; /* Input: Borrowed reference */
|
||||||
|
pybuffer_releaseproc release_buffer;
|
||||||
|
} Pg_buffer;
|
||||||
|
|
||||||
|
/* Operating system specific adjustments
|
||||||
|
*/
|
||||||
|
// No signal()
|
||||||
|
#if defined(__SYMBIAN32__) && defined(HAVE_SIGNAL_H)
|
||||||
|
#undef HAVE_SIGNAL_H
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(HAVE_SNPRINTF)
|
||||||
|
#undef HAVE_SNPRINTF
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef MS_WIN32 /*Python gives us MS_WIN32, SDL needs just WIN32*/
|
||||||
|
#ifndef WIN32
|
||||||
|
#define WIN32
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/// Prefix when initializing module
|
||||||
|
#define MODPREFIX ""
|
||||||
|
/// Prefix when importing module
|
||||||
|
#define IMPPREFIX "pygame."
|
||||||
|
|
||||||
|
#ifdef __SYMBIAN32__
|
||||||
|
#undef MODPREFIX
|
||||||
|
#undef IMPPREFIX
|
||||||
|
// On Symbian there is no pygame package. The extensions are built-in or in sys\bin.
|
||||||
|
#define MODPREFIX "pygame_"
|
||||||
|
#define IMPPREFIX "pygame_"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <SDL.h>
|
||||||
|
|
||||||
|
/* macros used throughout the source */
|
||||||
|
#define RAISE(x,y) (PyErr_SetString((x), (y)), (PyObject*)NULL)
|
||||||
|
|
||||||
|
#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION == 3
|
||||||
|
# define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None
|
||||||
|
# define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True
|
||||||
|
# define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Py_ssize_t availability. */
|
||||||
|
#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN)
|
||||||
|
typedef int Py_ssize_t;
|
||||||
|
#define PY_SSIZE_T_MAX INT_MAX
|
||||||
|
#define PY_SSIZE_T_MIN INT_MIN
|
||||||
|
typedef inquiry lenfunc;
|
||||||
|
typedef intargfunc ssizeargfunc;
|
||||||
|
typedef intobjargproc ssizeobjargproc;
|
||||||
|
typedef intintargfunc ssizessizeargfunc;
|
||||||
|
typedef intintobjargproc ssizessizeobjargproc;
|
||||||
|
typedef getreadbufferproc readbufferproc;
|
||||||
|
typedef getwritebufferproc writebufferproc;
|
||||||
|
typedef getsegcountproc segcountproc;
|
||||||
|
typedef getcharbufferproc charbufferproc;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define PyType_Init(x) (((x).ob_type) = &PyType_Type)
|
||||||
|
#define PYGAMEAPI_LOCAL_ENTRY "_PYGAME_C_API"
|
||||||
|
|
||||||
|
#ifndef MIN
|
||||||
|
#define MIN(a,b) ((a) < (b) ? (a) : (b))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef MAX
|
||||||
|
#define MAX(a,b) ( (a) > (b) ? (a) : (b))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ABS
|
||||||
|
#define ABS(a) (((a) < 0) ? -(a) : (a))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* test sdl initializations */
|
||||||
|
#define VIDEO_INIT_CHECK() \
|
||||||
|
if(!SDL_WasInit(SDL_INIT_VIDEO)) \
|
||||||
|
return RAISE(PyExc_SDLError, "video system not initialized")
|
||||||
|
|
||||||
|
#define CDROM_INIT_CHECK() \
|
||||||
|
if(!SDL_WasInit(SDL_INIT_CDROM)) \
|
||||||
|
return RAISE(PyExc_SDLError, "cdrom system not initialized")
|
||||||
|
|
||||||
|
#define JOYSTICK_INIT_CHECK() \
|
||||||
|
if(!SDL_WasInit(SDL_INIT_JOYSTICK)) \
|
||||||
|
return RAISE(PyExc_SDLError, "joystick system not initialized")
|
||||||
|
|
||||||
|
/* BASE */
|
||||||
|
#define VIEW_CONTIGUOUS 1
|
||||||
|
#define VIEW_C_ORDER 2
|
||||||
|
#define VIEW_F_ORDER 4
|
||||||
|
|
||||||
|
#define PYGAMEAPI_BASE_FIRSTSLOT 0
|
||||||
|
#define PYGAMEAPI_BASE_NUMSLOTS 19
|
||||||
|
#ifndef PYGAMEAPI_BASE_INTERNAL
|
||||||
|
#define PyExc_SDLError ((PyObject*)PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT])
|
||||||
|
|
||||||
|
#define PyGame_RegisterQuit \
|
||||||
|
(*(void(*)(void(*)(void)))PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 1])
|
||||||
|
|
||||||
|
#define IntFromObj \
|
||||||
|
(*(int(*)(PyObject*, int*))PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 2])
|
||||||
|
|
||||||
|
#define IntFromObjIndex \
|
||||||
|
(*(int(*)(PyObject*, int, int*))PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 3])
|
||||||
|
|
||||||
|
#define TwoIntsFromObj \
|
||||||
|
(*(int(*)(PyObject*, int*, int*))PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 4])
|
||||||
|
|
||||||
|
#define FloatFromObj \
|
||||||
|
(*(int(*)(PyObject*, float*))PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 5])
|
||||||
|
|
||||||
|
#define FloatFromObjIndex \
|
||||||
|
(*(int(*)(PyObject*, int, float*)) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 6])
|
||||||
|
|
||||||
|
#define TwoFloatsFromObj \
|
||||||
|
(*(int(*)(PyObject*, float*, float*)) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 7])
|
||||||
|
|
||||||
|
#define UintFromObj \
|
||||||
|
(*(int(*)(PyObject*, Uint32*))PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 8])
|
||||||
|
|
||||||
|
#define UintFromObjIndex \
|
||||||
|
(*(int(*)(PyObject*, int, Uint32*)) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 9])
|
||||||
|
|
||||||
|
#define PyGame_Video_AutoQuit \
|
||||||
|
(*(void(*)(void))PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 10])
|
||||||
|
|
||||||
|
#define PyGame_Video_AutoInit \
|
||||||
|
(*(int(*)(void))PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 11])
|
||||||
|
|
||||||
|
#define RGBAFromObj \
|
||||||
|
(*(int(*)(PyObject*, Uint8*))PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 12])
|
||||||
|
|
||||||
|
#define PgBuffer_AsArrayInterface \
|
||||||
|
(*(PyObject*(*)(Py_buffer*)) PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 13])
|
||||||
|
|
||||||
|
#define PgBuffer_AsArrayStruct \
|
||||||
|
(*(PyObject*(*)(Py_buffer*)) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 14])
|
||||||
|
|
||||||
|
#define PgObject_GetBuffer \
|
||||||
|
(*(int(*)(PyObject*, Pg_buffer*, int)) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 15])
|
||||||
|
|
||||||
|
#define PgBuffer_Release \
|
||||||
|
(*(void(*)(Pg_buffer*)) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 16])
|
||||||
|
|
||||||
|
#define PgDict_AsBuffer \
|
||||||
|
(*(int(*)(Pg_buffer*, PyObject*, int)) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 17])
|
||||||
|
|
||||||
|
#define PgExc_BufferError \
|
||||||
|
((PyObject*)PyGAME_C_API[PYGAMEAPI_BASE_FIRSTSLOT + 18])
|
||||||
|
|
||||||
|
#define import_pygame_base() IMPORT_PYGAME_MODULE(base, BASE)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* RECT */
|
||||||
|
#define PYGAMEAPI_RECT_FIRSTSLOT \
|
||||||
|
(PYGAMEAPI_BASE_FIRSTSLOT + PYGAMEAPI_BASE_NUMSLOTS)
|
||||||
|
#define PYGAMEAPI_RECT_NUMSLOTS 4
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int x, y;
|
||||||
|
int w, h;
|
||||||
|
}GAME_Rect;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
GAME_Rect r;
|
||||||
|
PyObject *weakreflist;
|
||||||
|
} PyRectObject;
|
||||||
|
|
||||||
|
#define PyRect_AsRect(x) (((PyRectObject*)x)->r)
|
||||||
|
#ifndef PYGAMEAPI_RECT_INTERNAL
|
||||||
|
#define PyRect_Check(x) \
|
||||||
|
((x)->ob_type == (PyTypeObject*)PyGAME_C_API[PYGAMEAPI_RECT_FIRSTSLOT + 0])
|
||||||
|
#define PyRect_Type (*(PyTypeObject*)PyGAME_C_API[PYGAMEAPI_RECT_FIRSTSLOT + 0])
|
||||||
|
#define PyRect_New \
|
||||||
|
(*(PyObject*(*)(SDL_Rect*))PyGAME_C_API[PYGAMEAPI_RECT_FIRSTSLOT + 1])
|
||||||
|
#define PyRect_New4 \
|
||||||
|
(*(PyObject*(*)(int,int,int,int))PyGAME_C_API[PYGAMEAPI_RECT_FIRSTSLOT + 2])
|
||||||
|
#define GameRect_FromObject \
|
||||||
|
(*(GAME_Rect*(*)(PyObject*, GAME_Rect*)) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_RECT_FIRSTSLOT + 3])
|
||||||
|
|
||||||
|
#define import_pygame_rect() IMPORT_PYGAME_MODULE(rect, RECT)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* CDROM */
|
||||||
|
#define PYGAMEAPI_CDROM_FIRSTSLOT \
|
||||||
|
(PYGAMEAPI_RECT_FIRSTSLOT + PYGAMEAPI_RECT_NUMSLOTS)
|
||||||
|
#define PYGAMEAPI_CDROM_NUMSLOTS 2
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
int id;
|
||||||
|
} PyCDObject;
|
||||||
|
|
||||||
|
#define PyCD_AsID(x) (((PyCDObject*)x)->id)
|
||||||
|
#ifndef PYGAMEAPI_CDROM_INTERNAL
|
||||||
|
#define PyCD_Check(x) \
|
||||||
|
((x)->ob_type == (PyTypeObject*)PyGAME_C_API[PYGAMEAPI_CDROM_FIRSTSLOT + 0])
|
||||||
|
#define PyCD_Type (*(PyTypeObject*)PyGAME_C_API[PYGAMEAPI_CDROM_FIRSTSLOT + 0])
|
||||||
|
#define PyCD_New \
|
||||||
|
(*(PyObject*(*)(int))PyGAME_C_API[PYGAMEAPI_CDROM_FIRSTSLOT + 1])
|
||||||
|
|
||||||
|
#define import_pygame_cd() IMPORT_PYGAME_MODULE(cdrom, CDROM)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* JOYSTICK */
|
||||||
|
#define PYGAMEAPI_JOYSTICK_FIRSTSLOT \
|
||||||
|
(PYGAMEAPI_CDROM_FIRSTSLOT + PYGAMEAPI_CDROM_NUMSLOTS)
|
||||||
|
#define PYGAMEAPI_JOYSTICK_NUMSLOTS 2
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
int id;
|
||||||
|
} PyJoystickObject;
|
||||||
|
|
||||||
|
#define PyJoystick_AsID(x) (((PyJoystickObject*)x)->id)
|
||||||
|
|
||||||
|
#ifndef PYGAMEAPI_JOYSTICK_INTERNAL
|
||||||
|
#define PyJoystick_Check(x) \
|
||||||
|
((x)->ob_type == (PyTypeObject*) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_JOYSTICK_FIRSTSLOT + 0])
|
||||||
|
|
||||||
|
#define PyJoystick_Type \
|
||||||
|
(*(PyTypeObject*)PyGAME_C_API[PYGAMEAPI_JOYSTICK_FIRSTSLOT + 0])
|
||||||
|
#define PyJoystick_New \
|
||||||
|
(*(PyObject*(*)(int))PyGAME_C_API[PYGAMEAPI_JOYSTICK_FIRSTSLOT + 1])
|
||||||
|
|
||||||
|
#define import_pygame_joystick() IMPORT_PYGAME_MODULE(joystick, JOYSTICK)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* DISPLAY */
|
||||||
|
#define PYGAMEAPI_DISPLAY_FIRSTSLOT \
|
||||||
|
(PYGAMEAPI_JOYSTICK_FIRSTSLOT + PYGAMEAPI_JOYSTICK_NUMSLOTS)
|
||||||
|
#define PYGAMEAPI_DISPLAY_NUMSLOTS 2
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
SDL_VideoInfo info;
|
||||||
|
} PyVidInfoObject;
|
||||||
|
|
||||||
|
#define PyVidInfo_AsVidInfo(x) (((PyVidInfoObject*)x)->info)
|
||||||
|
#ifndef PYGAMEAPI_DISPLAY_INTERNAL
|
||||||
|
#define PyVidInfo_Check(x) \
|
||||||
|
((x)->ob_type == (PyTypeObject*) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_DISPLAY_FIRSTSLOT + 0])
|
||||||
|
|
||||||
|
#define PyVidInfo_Type \
|
||||||
|
(*(PyTypeObject*)PyGAME_C_API[PYGAMEAPI_DISPLAY_FIRSTSLOT + 0])
|
||||||
|
#define PyVidInfo_New \
|
||||||
|
(*(PyObject*(*)(SDL_VideoInfo*)) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_DISPLAY_FIRSTSLOT + 1])
|
||||||
|
#define import_pygame_display() IMPORT_PYGAME_MODULE(display, DISPLAY)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* SURFACE */
|
||||||
|
#define PYGAMEAPI_SURFACE_FIRSTSLOT \
|
||||||
|
(PYGAMEAPI_DISPLAY_FIRSTSLOT + PYGAMEAPI_DISPLAY_NUMSLOTS)
|
||||||
|
#define PYGAMEAPI_SURFACE_NUMSLOTS 3
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
SDL_Surface* surf;
|
||||||
|
struct SubSurface_Data* subsurface; /*ptr to subsurface data (if a
|
||||||
|
* subsurface)*/
|
||||||
|
PyObject *weakreflist;
|
||||||
|
PyObject *locklist;
|
||||||
|
PyObject *dependency;
|
||||||
|
} PySurfaceObject;
|
||||||
|
#define PySurface_AsSurface(x) (((PySurfaceObject*)x)->surf)
|
||||||
|
#ifndef PYGAMEAPI_SURFACE_INTERNAL
|
||||||
|
#define PySurface_Check(x) \
|
||||||
|
((x)->ob_type == (PyTypeObject*) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_SURFACE_FIRSTSLOT + 0])
|
||||||
|
#define PySurface_Type \
|
||||||
|
(*(PyTypeObject*)PyGAME_C_API[PYGAMEAPI_SURFACE_FIRSTSLOT + 0])
|
||||||
|
#define PySurface_New \
|
||||||
|
(*(PyObject*(*)(SDL_Surface*)) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_SURFACE_FIRSTSLOT + 1])
|
||||||
|
#define PySurface_Blit \
|
||||||
|
(*(int(*)(PyObject*,PyObject*,SDL_Rect*,SDL_Rect*,int)) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_SURFACE_FIRSTSLOT + 2])
|
||||||
|
|
||||||
|
#define import_pygame_surface() do { \
|
||||||
|
IMPORT_PYGAME_MODULE(surface, SURFACE); \
|
||||||
|
if (PyErr_Occurred() != NULL) break; \
|
||||||
|
IMPORT_PYGAME_MODULE(surflock, SURFLOCK); \
|
||||||
|
} while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* SURFLOCK */ /*auto import/init by surface*/
|
||||||
|
#define PYGAMEAPI_SURFLOCK_FIRSTSLOT \
|
||||||
|
(PYGAMEAPI_SURFACE_FIRSTSLOT + PYGAMEAPI_SURFACE_NUMSLOTS)
|
||||||
|
#define PYGAMEAPI_SURFLOCK_NUMSLOTS 8
|
||||||
|
struct SubSurface_Data
|
||||||
|
{
|
||||||
|
PyObject* owner;
|
||||||
|
int pixeloffset;
|
||||||
|
int offsetx, offsety;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
PyObject_HEAD
|
||||||
|
PyObject *surface;
|
||||||
|
PyObject *lockobj;
|
||||||
|
PyObject *weakrefs;
|
||||||
|
} PyLifetimeLock;
|
||||||
|
|
||||||
|
#ifndef PYGAMEAPI_SURFLOCK_INTERNAL
|
||||||
|
#define PyLifetimeLock_Check(x) \
|
||||||
|
((x)->ob_type == (PyTypeObject*) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_SURFLOCK_FIRSTSLOT + 0])
|
||||||
|
#define PySurface_Prep(x) \
|
||||||
|
if(((PySurfaceObject*)x)->subsurface) \
|
||||||
|
(*(*(void(*)(PyObject*)) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_SURFLOCK_FIRSTSLOT + 1]))(x)
|
||||||
|
|
||||||
|
#define PySurface_Unprep(x) \
|
||||||
|
if(((PySurfaceObject*)x)->subsurface) \
|
||||||
|
(*(*(void(*)(PyObject*)) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_SURFLOCK_FIRSTSLOT + 2]))(x)
|
||||||
|
|
||||||
|
#define PySurface_Lock \
|
||||||
|
(*(int(*)(PyObject*))PyGAME_C_API[PYGAMEAPI_SURFLOCK_FIRSTSLOT + 3])
|
||||||
|
#define PySurface_Unlock \
|
||||||
|
(*(int(*)(PyObject*))PyGAME_C_API[PYGAMEAPI_SURFLOCK_FIRSTSLOT + 4])
|
||||||
|
#define PySurface_LockBy \
|
||||||
|
(*(int(*)(PyObject*,PyObject*)) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_SURFLOCK_FIRSTSLOT + 5])
|
||||||
|
#define PySurface_UnlockBy \
|
||||||
|
(*(int(*)(PyObject*,PyObject*)) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_SURFLOCK_FIRSTSLOT + 6])
|
||||||
|
#define PySurface_LockLifetime \
|
||||||
|
(*(PyObject*(*)(PyObject*,PyObject*)) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_SURFLOCK_FIRSTSLOT + 7])
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* EVENT */
|
||||||
|
#define PYGAMEAPI_EVENT_FIRSTSLOT \
|
||||||
|
(PYGAMEAPI_SURFLOCK_FIRSTSLOT + PYGAMEAPI_SURFLOCK_NUMSLOTS)
|
||||||
|
#define PYGAMEAPI_EVENT_NUMSLOTS 4
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
int type;
|
||||||
|
PyObject* dict;
|
||||||
|
} PyEventObject;
|
||||||
|
|
||||||
|
#ifndef PYGAMEAPI_EVENT_INTERNAL
|
||||||
|
#define PyEvent_Check(x) \
|
||||||
|
((x)->ob_type == (PyTypeObject*)PyGAME_C_API[PYGAMEAPI_EVENT_FIRSTSLOT + 0])
|
||||||
|
#define PyEvent_Type \
|
||||||
|
(*(PyTypeObject*)PyGAME_C_API[PYGAMEAPI_EVENT_FIRSTSLOT + 0])
|
||||||
|
#define PyEvent_New \
|
||||||
|
(*(PyObject*(*)(SDL_Event*))PyGAME_C_API[PYGAMEAPI_EVENT_FIRSTSLOT + 1])
|
||||||
|
#define PyEvent_New2 \
|
||||||
|
(*(PyObject*(*)(int, PyObject*))PyGAME_C_API[PYGAMEAPI_EVENT_FIRSTSLOT + 2])
|
||||||
|
#define PyEvent_FillUserEvent \
|
||||||
|
(*(int (*)(PyEventObject*, SDL_Event*)) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_EVENT_FIRSTSLOT + 3])
|
||||||
|
#define import_pygame_event() IMPORT_PYGAME_MODULE(event, EVENT)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* RWOBJECT */
|
||||||
|
/*the rwobject are only needed for C side work, not accessable from python*/
|
||||||
|
#define PYGAMEAPI_RWOBJECT_FIRSTSLOT \
|
||||||
|
(PYGAMEAPI_EVENT_FIRSTSLOT + PYGAMEAPI_EVENT_NUMSLOTS)
|
||||||
|
#define PYGAMEAPI_RWOBJECT_NUMSLOTS 7
|
||||||
|
#ifndef PYGAMEAPI_RWOBJECT_INTERNAL
|
||||||
|
#define RWopsFromObject \
|
||||||
|
(*(SDL_RWops*(*)(PyObject*))PyGAME_C_API[PYGAMEAPI_RWOBJECT_FIRSTSLOT + 0])
|
||||||
|
#define RWopsCheckObject \
|
||||||
|
(*(int(*)(SDL_RWops*))PyGAME_C_API[PYGAMEAPI_RWOBJECT_FIRSTSLOT + 1])
|
||||||
|
#define RWopsFromFileObjectThreaded \
|
||||||
|
(*(SDL_RWops*(*)(PyObject*))PyGAME_C_API[PYGAMEAPI_RWOBJECT_FIRSTSLOT + 2])
|
||||||
|
#define RWopsCheckObjectThreaded \
|
||||||
|
(*(int(*)(SDL_RWops*))PyGAME_C_API[PYGAMEAPI_RWOBJECT_FIRSTSLOT + 3])
|
||||||
|
#define RWopsEncodeFilePath \
|
||||||
|
(*(PyObject*(*)(PyObject*, PyObject*)) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_RWOBJECT_FIRSTSLOT + 4])
|
||||||
|
#define RWopsEncodeString \
|
||||||
|
(*(PyObject*(*)(PyObject*, const char*, const char*, PyObject*)) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_RWOBJECT_FIRSTSLOT + 5])
|
||||||
|
#define RWopsFromFileObject \
|
||||||
|
(*(SDL_RWops*(*)(PyObject*))PyGAME_C_API[PYGAMEAPI_RWOBJECT_FIRSTSLOT + 6])
|
||||||
|
#define import_pygame_rwobject() IMPORT_PYGAME_MODULE(rwobject, RWOBJECT)
|
||||||
|
|
||||||
|
/* For backward compatibility */
|
||||||
|
#define RWopsFromPython RWopsFromObject
|
||||||
|
#define RWopsCheckPython RWopsCheckObject
|
||||||
|
#define RWopsFromPythonThreaded RWopsFromFileObjectThreaded
|
||||||
|
#define RWopsCheckPythonThreaded RWopsCheckObjectThreaded
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* PixelArray */
|
||||||
|
#define PYGAMEAPI_PIXELARRAY_FIRSTSLOT \
|
||||||
|
(PYGAMEAPI_RWOBJECT_FIRSTSLOT + PYGAMEAPI_RWOBJECT_NUMSLOTS)
|
||||||
|
#define PYGAMEAPI_PIXELARRAY_NUMSLOTS 2
|
||||||
|
#ifndef PYGAMEAPI_PIXELARRAY_INTERNAL
|
||||||
|
#define PyPixelArray_Check(x) \
|
||||||
|
((x)->ob_type == (PyTypeObject*) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_PIXELARRAY_FIRSTSLOT + 0])
|
||||||
|
#define PyPixelArray_New \
|
||||||
|
(*(PyObject*(*)) PyGAME_C_API[PYGAMEAPI_PIXELARRAY_FIRSTSLOT + 1])
|
||||||
|
#define import_pygame_pixelarray() IMPORT_PYGAME_MODULE(pixelarray, PIXELARRAY)
|
||||||
|
#endif /* PYGAMEAPI_PIXELARRAY_INTERNAL */
|
||||||
|
|
||||||
|
/* Color */
|
||||||
|
#define PYGAMEAPI_COLOR_FIRSTSLOT \
|
||||||
|
(PYGAMEAPI_PIXELARRAY_FIRSTSLOT + PYGAMEAPI_PIXELARRAY_NUMSLOTS)
|
||||||
|
#define PYGAMEAPI_COLOR_NUMSLOTS 4
|
||||||
|
#ifndef PYGAMEAPI_COLOR_INTERNAL
|
||||||
|
#define PyColor_Check(x) \
|
||||||
|
((x)->ob_type == (PyTypeObject*) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_COLOR_FIRSTSLOT + 0])
|
||||||
|
#define PyColor_Type (*(PyObject *) PyGAME_C_API[PYGAMEAPI_COLOR_FIRSTSLOT])
|
||||||
|
#define PyColor_New \
|
||||||
|
(*(PyObject *(*)(Uint8*)) PyGAME_C_API[PYGAMEAPI_COLOR_FIRSTSLOT + 1])
|
||||||
|
#define PyColor_NewLength \
|
||||||
|
(*(PyObject *(*)(Uint8*, Uint8)) PyGAME_C_API[PYGAMEAPI_COLOR_FIRSTSLOT + 3])
|
||||||
|
|
||||||
|
#define RGBAFromColorObj \
|
||||||
|
(*(int(*)(PyObject*, Uint8*)) PyGAME_C_API[PYGAMEAPI_COLOR_FIRSTSLOT + 2])
|
||||||
|
#define import_pygame_color() IMPORT_PYGAME_MODULE(color, COLOR)
|
||||||
|
#endif /* PYGAMEAPI_COLOR_INTERNAL */
|
||||||
|
|
||||||
|
|
||||||
|
/* Math */
|
||||||
|
#define PYGAMEAPI_MATH_FIRSTSLOT \
|
||||||
|
(PYGAMEAPI_COLOR_FIRSTSLOT + PYGAMEAPI_COLOR_NUMSLOTS)
|
||||||
|
#define PYGAMEAPI_MATH_NUMSLOTS 2
|
||||||
|
#ifndef PYGAMEAPI_MATH_INTERNAL
|
||||||
|
#define PyVector2_Check(x) \
|
||||||
|
((x)->ob_type == (PyTypeObject*) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_MATH_FIRSTSLOT + 0])
|
||||||
|
#define PyVector3_Check(x) \
|
||||||
|
((x)->ob_type == (PyTypeObject*) \
|
||||||
|
PyGAME_C_API[PYGAMEAPI_MATH_FIRSTSLOT + 1])
|
||||||
|
/*
|
||||||
|
#define PyVector2_New \
|
||||||
|
(*(PyObject*(*)) PyGAME_C_API[PYGAMEAPI_MATH_FIRSTSLOT + 1])
|
||||||
|
*/
|
||||||
|
#define import_pygame_math() IMPORT_PYGAME_MODULE(math, MATH)
|
||||||
|
#endif /* PYGAMEAPI_MATH_INTERNAL */
|
||||||
|
|
||||||
|
#define PG_CAPSULE_NAME(m) (IMPPREFIX m "." PYGAMEAPI_LOCAL_ENTRY)
|
||||||
|
|
||||||
|
#define _IMPORT_PYGAME_MODULE(module, MODULE, api_root) { \
|
||||||
|
PyObject *_module = PyImport_ImportModule (IMPPREFIX #module); \
|
||||||
|
\
|
||||||
|
if (_module != NULL) { \
|
||||||
|
PyObject *_c_api = \
|
||||||
|
PyObject_GetAttrString (_module, PYGAMEAPI_LOCAL_ENTRY); \
|
||||||
|
\
|
||||||
|
Py_DECREF (_module); \
|
||||||
|
if (_c_api != NULL && PyCapsule_CheckExact (_c_api)) { \
|
||||||
|
void **localptr = \
|
||||||
|
(void**) PyCapsule_GetPointer (_c_api, \
|
||||||
|
PG_CAPSULE_NAME(#module)); \
|
||||||
|
\
|
||||||
|
if (localptr != NULL) { \
|
||||||
|
memcpy (api_root + PYGAMEAPI_##MODULE##_FIRSTSLOT, \
|
||||||
|
localptr, \
|
||||||
|
sizeof(void **)*PYGAMEAPI_##MODULE##_NUMSLOTS); \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
Py_XDECREF(_c_api); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef NO_PYGAME_C_API
|
||||||
|
#define IMPORT_PYGAME_MODULE(module, MODULE) \
|
||||||
|
_IMPORT_PYGAME_MODULE(module, MODULE, PyGAME_C_API)
|
||||||
|
#define PYGAMEAPI_TOTALSLOTS \
|
||||||
|
(PYGAMEAPI_MATH_FIRSTSLOT + PYGAMEAPI_MATH_NUMSLOTS)
|
||||||
|
|
||||||
|
#ifdef PYGAME_H
|
||||||
|
void* PyGAME_C_API[PYGAMEAPI_TOTALSLOTS] = { NULL };
|
||||||
|
#else
|
||||||
|
extern void* PyGAME_C_API[PYGAMEAPI_TOTALSLOTS];
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if PG_HAVE_CAPSULE
|
||||||
|
#define encapsulate_api(ptr, module) \
|
||||||
|
PyCapsule_New(ptr, PG_CAPSULE_NAME(module), NULL)
|
||||||
|
#else
|
||||||
|
#define encapsulate_api(ptr, module) \
|
||||||
|
PyCObject_FromVoidPtr(ptr, NULL)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*last platform compiler stuff*/
|
||||||
|
#if defined(macintosh) && defined(__MWERKS__) || defined(__SYMBIAN32__)
|
||||||
|
#define PYGAME_EXPORT __declspec(export)
|
||||||
|
#else
|
||||||
|
#define PYGAME_EXPORT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__SYMBIAN32__) && PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION == 2
|
||||||
|
|
||||||
|
// These are missing from Python 2.2
|
||||||
|
#ifndef Py_RETURN_NONE
|
||||||
|
|
||||||
|
#define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None
|
||||||
|
#define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True
|
||||||
|
#define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False
|
||||||
|
|
||||||
|
#ifndef intrptr_t
|
||||||
|
#define intptr_t int
|
||||||
|
|
||||||
|
// No PySlice_GetIndicesEx on Py 2.2
|
||||||
|
#define PySlice_GetIndicesEx(a,b,c,d,e,f) PySlice_GetIndices(a,b,c,d,e)
|
||||||
|
|
||||||
|
#define PyBool_FromLong(x) Py_BuildValue("b", x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// _symport_free and malloc are not exported in python.dll
|
||||||
|
// See http://discussion.forum.nokia.com/forum/showthread.php?t=57874
|
||||||
|
#undef PyObject_NEW
|
||||||
|
#define PyObject_NEW PyObject_New
|
||||||
|
#undef PyMem_MALLOC
|
||||||
|
#define PyMem_MALLOC PyMem_Malloc
|
||||||
|
#undef PyObject_DEL
|
||||||
|
#define PyObject_DEL PyObject_Del
|
||||||
|
|
||||||
|
#endif // intptr_t
|
||||||
|
|
||||||
|
#endif // __SYMBIAN32__ Python 2.2.2
|
||||||
|
|
||||||
|
#endif /* PYGAME_H */
|
31
WENV/Include/pygame/_surface.h
Normal file
31
WENV/Include/pygame/_surface.h
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
pygame - Python Game Library
|
||||||
|
Copyright (C) 2000-2001 Pete Shinners
|
||||||
|
Copyright (C) 2007 Marcus von Appen
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this library; if not, write to the Free
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
Pete Shinners
|
||||||
|
pete@shinners.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SURFACE_H
|
||||||
|
#define _SURFACE_H
|
||||||
|
|
||||||
|
#include "_pygame.h"
|
||||||
|
#include "surface.h"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
146
WENV/Include/pygame/bitmask.h
Normal file
146
WENV/Include/pygame/bitmask.h
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
/*
|
||||||
|
Bitmask 1.7 - A pixel-perfect collision detection library.
|
||||||
|
|
||||||
|
Copyright (C) 2002-2005 Ulf Ekstrom except for the bitcount
|
||||||
|
function which is copyright (C) Donald W. Gillies, 1992.
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this library; if not, write to the Free
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
#ifndef BITMASK_H
|
||||||
|
#define BITMASK_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <limits.h>
|
||||||
|
/* Define INLINE for different compilers. If your compiler does not
|
||||||
|
support inlining then there might be a performance hit in
|
||||||
|
bitmask_overlap_area().
|
||||||
|
*/
|
||||||
|
#ifndef INLINE
|
||||||
|
# ifdef __GNUC__
|
||||||
|
# define INLINE inline
|
||||||
|
# else
|
||||||
|
# ifdef _MSC_VER
|
||||||
|
# define INLINE __inline
|
||||||
|
# else
|
||||||
|
# define INLINE
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BITMASK_W unsigned long int
|
||||||
|
#define BITMASK_W_LEN (sizeof(BITMASK_W)*CHAR_BIT)
|
||||||
|
#define BITMASK_W_MASK (BITMASK_W_LEN - 1)
|
||||||
|
#define BITMASK_N(n) ((BITMASK_W)1 << (n))
|
||||||
|
|
||||||
|
typedef struct bitmask
|
||||||
|
{
|
||||||
|
int w,h;
|
||||||
|
BITMASK_W bits[1];
|
||||||
|
} bitmask_t;
|
||||||
|
|
||||||
|
/* Creates a bitmask of width w and height h, where
|
||||||
|
w and h must both be greater than 0.
|
||||||
|
The mask is automatically cleared when created.
|
||||||
|
*/
|
||||||
|
bitmask_t *bitmask_create(int w, int h);
|
||||||
|
|
||||||
|
/* Frees all the memory allocated by bitmask_create for m. */
|
||||||
|
void bitmask_free(bitmask_t *m);
|
||||||
|
|
||||||
|
/* Clears all bits in the mask */
|
||||||
|
void bitmask_clear(bitmask_t *m);
|
||||||
|
|
||||||
|
/* Sets all bits in the mask */
|
||||||
|
void bitmask_fill(bitmask_t *m);
|
||||||
|
|
||||||
|
/* Flips all bits in the mask */
|
||||||
|
void bitmask_invert(bitmask_t *m);
|
||||||
|
|
||||||
|
/* Counts the bits in the mask */
|
||||||
|
unsigned int bitmask_count(bitmask_t *m);
|
||||||
|
|
||||||
|
/* Returns nonzero if the bit at (x,y) is set. Coordinates start at
|
||||||
|
(0,0) */
|
||||||
|
static INLINE int bitmask_getbit(const bitmask_t *m, int x, int y)
|
||||||
|
{
|
||||||
|
return (m->bits[x/BITMASK_W_LEN*m->h + y] & BITMASK_N(x & BITMASK_W_MASK)) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Sets the bit at (x,y) */
|
||||||
|
static INLINE void bitmask_setbit(bitmask_t *m, int x, int y)
|
||||||
|
{
|
||||||
|
m->bits[x/BITMASK_W_LEN*m->h + y] |= BITMASK_N(x & BITMASK_W_MASK);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Clears the bit at (x,y) */
|
||||||
|
static INLINE void bitmask_clearbit(bitmask_t *m, int x, int y)
|
||||||
|
{
|
||||||
|
m->bits[x/BITMASK_W_LEN*m->h + y] &= ~BITMASK_N(x & BITMASK_W_MASK);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns nonzero if the masks overlap with the given offset.
|
||||||
|
The overlap tests uses the following offsets (which may be negative):
|
||||||
|
|
||||||
|
+----+----------..
|
||||||
|
|A | yoffset
|
||||||
|
| +-+----------..
|
||||||
|
+--|B
|
||||||
|
|xoffset
|
||||||
|
| |
|
||||||
|
: :
|
||||||
|
*/
|
||||||
|
int bitmask_overlap(const bitmask_t *a, const bitmask_t *b, int xoffset, int yoffset);
|
||||||
|
|
||||||
|
/* Like bitmask_overlap(), but will also give a point of intersection.
|
||||||
|
x and y are given in the coordinates of mask a, and are untouched
|
||||||
|
if there is no overlap. */
|
||||||
|
int bitmask_overlap_pos(const bitmask_t *a, const bitmask_t *b,
|
||||||
|
int xoffset, int yoffset, int *x, int *y);
|
||||||
|
|
||||||
|
/* Returns the number of overlapping 'pixels' */
|
||||||
|
int bitmask_overlap_area(const bitmask_t *a, const bitmask_t *b, int xoffset, int yoffset);
|
||||||
|
|
||||||
|
/* Fills a mask with the overlap of two other masks. A bitwise AND. */
|
||||||
|
void bitmask_overlap_mask (const bitmask_t *a, const bitmask_t *b, bitmask_t *c, int xoffset, int yoffset);
|
||||||
|
|
||||||
|
/* Draws mask b onto mask a (bitwise OR). Can be used to compose large
|
||||||
|
(game background?) mask from several submasks, which may speed up
|
||||||
|
the testing. */
|
||||||
|
|
||||||
|
void bitmask_draw(bitmask_t *a, const bitmask_t *b, int xoffset, int yoffset);
|
||||||
|
|
||||||
|
void bitmask_erase(bitmask_t *a, const bitmask_t *b, int xoffset, int yoffset);
|
||||||
|
|
||||||
|
/* Return a new scaled bitmask, with dimensions w*h. The quality of the
|
||||||
|
scaling may not be perfect for all circumstances, but it should
|
||||||
|
be reasonable. If either w or h is 0 a clear 1x1 mask is returned. */
|
||||||
|
bitmask_t *bitmask_scale(const bitmask_t *m, int w, int h);
|
||||||
|
|
||||||
|
/* Convolve b into a, drawing the output into o, shifted by offset. If offset
|
||||||
|
* is 0, then the (x,y) bit will be set if and only if
|
||||||
|
* bitmask_overlap(a, b, x - b->w - 1, y - b->h - 1) returns true.
|
||||||
|
*
|
||||||
|
* Modifies bits o[xoffset ... xoffset + a->w + b->w - 1)
|
||||||
|
* [yoffset ... yoffset + a->h + b->h - 1). */
|
||||||
|
void bitmask_convolve(const bitmask_t *a, const bitmask_t *b, bitmask_t *o, int xoffset, int yoffset);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* End of extern "C" { */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
201
WENV/Include/pygame/camera.h
Normal file
201
WENV/Include/pygame/camera.h
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
/*
|
||||||
|
pygame - Python Game Library
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this library; if not, write to the Free
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "pygame.h"
|
||||||
|
#include "doc/camera_doc.h"
|
||||||
|
|
||||||
|
#if defined(__unix__)
|
||||||
|
#include <structmember.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
#include <fcntl.h> /* low-level i/o */
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
|
||||||
|
/* on freebsd there is no asm/types */
|
||||||
|
#ifdef linux
|
||||||
|
#include <asm/types.h> /* for videodev2.h */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <linux/videodev2.h>
|
||||||
|
#elif defined(__APPLE__)
|
||||||
|
#include <AvailabilityMacros.h>
|
||||||
|
/* We support OSX 10.6 and below. */
|
||||||
|
#if __MAC_OS_X_VERSION_MAX_ALLOWED <= 1060
|
||||||
|
#define PYGAME_MAC_CAMERA_OLD 1
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PYGAME_MAC_CAMERA_OLD)
|
||||||
|
#include <QuickTime/QuickTime.h>
|
||||||
|
#include <QuickTime/Movies.h>
|
||||||
|
#include <QuickTime/ImageCompression.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* some constants used which are not defined on non-v4l machines. */
|
||||||
|
#ifndef V4L2_PIX_FMT_RGB24
|
||||||
|
#define V4L2_PIX_FMT_RGB24 'RGB3'
|
||||||
|
#endif
|
||||||
|
#ifndef V4L2_PIX_FMT_RGB444
|
||||||
|
#define V4L2_PIX_FMT_RGB444 'R444'
|
||||||
|
#endif
|
||||||
|
#ifndef V4L2_PIX_FMT_YUYV
|
||||||
|
#define V4L2_PIX_FMT_YUYV 'YUYV'
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define CLEAR(x) memset (&(x), 0, sizeof (x))
|
||||||
|
#define SAT(c) if (c & (~255)) { if (c < 0) c = 0; else c = 255; }
|
||||||
|
#define SAT2(c) ((c) & (~255) ? ((c) < 0 ? 0 : 255) : (c))
|
||||||
|
#define DEFAULT_WIDTH 640
|
||||||
|
#define DEFAULT_HEIGHT 480
|
||||||
|
#define RGB_OUT 1
|
||||||
|
#define YUV_OUT 2
|
||||||
|
#define HSV_OUT 4
|
||||||
|
#define CAM_V4L 1 /* deprecated. the incomplete support in pygame was removed */
|
||||||
|
#define CAM_V4L2 2
|
||||||
|
|
||||||
|
struct buffer {
|
||||||
|
void * start;
|
||||||
|
size_t length;
|
||||||
|
};
|
||||||
|
|
||||||
|
#if defined(__unix__)
|
||||||
|
typedef struct PyCameraObject {
|
||||||
|
PyObject_HEAD
|
||||||
|
char* device_name;
|
||||||
|
int camera_type;
|
||||||
|
unsigned long pixelformat;
|
||||||
|
unsigned int color_out;
|
||||||
|
struct buffer* buffers;
|
||||||
|
unsigned int n_buffers;
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
int size;
|
||||||
|
int hflip;
|
||||||
|
int vflip;
|
||||||
|
int brightness;
|
||||||
|
int fd;
|
||||||
|
} PyCameraObject;
|
||||||
|
#elif defined(PYGAME_MAC_CAMERA_OLD)
|
||||||
|
typedef struct PyCameraObject {
|
||||||
|
PyObject_HEAD
|
||||||
|
char* device_name; /* unieke name of the device */
|
||||||
|
OSType pixelformat;
|
||||||
|
unsigned int color_out;
|
||||||
|
SeqGrabComponent component; /* A type used by the Sequence Grabber API */
|
||||||
|
SGChannel channel; /* Channel of the Sequence Grabber */
|
||||||
|
GWorldPtr gworld; /* Pointer to the struct that holds the data of the captured image */
|
||||||
|
Rect boundsRect; /* bounds of the image frame */
|
||||||
|
long size; /* size of the image in our buffer to draw */
|
||||||
|
int hflip;
|
||||||
|
int vflip;
|
||||||
|
short depth;
|
||||||
|
struct buffer pixels;
|
||||||
|
//struct buffer tmp_pixels /* place where the flipped image in temporarly stored if hflip or vflip is true.*/
|
||||||
|
} PyCameraObject;
|
||||||
|
|
||||||
|
#else
|
||||||
|
/* generic definition.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct PyCameraObject {
|
||||||
|
PyObject_HEAD
|
||||||
|
char* device_name;
|
||||||
|
int camera_type;
|
||||||
|
unsigned long pixelformat;
|
||||||
|
unsigned int color_out;
|
||||||
|
struct buffer* buffers;
|
||||||
|
unsigned int n_buffers;
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
int size;
|
||||||
|
int hflip;
|
||||||
|
int vflip;
|
||||||
|
int brightness;
|
||||||
|
int fd;
|
||||||
|
} PyCameraObject;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* internal functions for colorspace conversion */
|
||||||
|
void colorspace (SDL_Surface *src, SDL_Surface *dst, int cspace);
|
||||||
|
void rgb24_to_rgb (const void* src, void* dst, int length, SDL_PixelFormat* format);
|
||||||
|
void rgb444_to_rgb (const void* src, void* dst, int length, SDL_PixelFormat* format);
|
||||||
|
void rgb_to_yuv (const void* src, void* dst, int length,
|
||||||
|
unsigned long source, SDL_PixelFormat* format);
|
||||||
|
void rgb_to_hsv (const void* src, void* dst, int length,
|
||||||
|
unsigned long source, SDL_PixelFormat* format);
|
||||||
|
void yuyv_to_rgb (const void* src, void* dst, int length, SDL_PixelFormat* format);
|
||||||
|
void yuyv_to_yuv (const void* src, void* dst, int length, SDL_PixelFormat* format);
|
||||||
|
void uyvy_to_rgb (const void* src, void* dst, int length, SDL_PixelFormat* format);
|
||||||
|
void uyvy_to_yuv (const void* src, void* dst, int length, SDL_PixelFormat* format);
|
||||||
|
void sbggr8_to_rgb (const void* src, void* dst, int width, int height,
|
||||||
|
SDL_PixelFormat* format);
|
||||||
|
void yuv420_to_rgb (const void* src, void* dst, int width, int height,
|
||||||
|
SDL_PixelFormat* format);
|
||||||
|
void yuv420_to_yuv (const void* src, void* dst, int width, int height,
|
||||||
|
SDL_PixelFormat* format);
|
||||||
|
|
||||||
|
#if defined(__unix__)
|
||||||
|
/* internal functions specific to v4l2 */
|
||||||
|
char** v4l2_list_cameras (int* num_devices);
|
||||||
|
int v4l2_get_control (int fd, int id, int *value);
|
||||||
|
int v4l2_set_control (int fd, int id, int value);
|
||||||
|
PyObject* v4l2_read_raw (PyCameraObject* self);
|
||||||
|
int v4l2_xioctl (int fd, int request, void *arg);
|
||||||
|
int v4l2_process_image (PyCameraObject* self, const void *image,
|
||||||
|
unsigned int buffer_size, SDL_Surface* surf);
|
||||||
|
int v4l2_query_buffer (PyCameraObject* self);
|
||||||
|
int v4l2_read_frame (PyCameraObject* self, SDL_Surface* surf);
|
||||||
|
int v4l2_stop_capturing (PyCameraObject* self);
|
||||||
|
int v4l2_start_capturing (PyCameraObject* self);
|
||||||
|
int v4l2_uninit_device (PyCameraObject* self);
|
||||||
|
int v4l2_init_mmap (PyCameraObject* self);
|
||||||
|
int v4l2_init_device (PyCameraObject* self);
|
||||||
|
int v4l2_close_device (PyCameraObject* self);
|
||||||
|
int v4l2_open_device (PyCameraObject* self);
|
||||||
|
|
||||||
|
#elif defined(PYGAME_MAC_CAMERA_OLD)
|
||||||
|
/* internal functions specific to mac */
|
||||||
|
char** mac_list_cameras(int* num_devices);
|
||||||
|
int mac_open_device (PyCameraObject* self);
|
||||||
|
int mac_init_device(PyCameraObject* self);
|
||||||
|
int mac_close_device (PyCameraObject* self);
|
||||||
|
int mac_start_capturing(PyCameraObject* self);
|
||||||
|
int mac_stop_capturing (PyCameraObject* self);
|
||||||
|
|
||||||
|
int mac_get_control(PyCameraObject* self, int id, int* value);
|
||||||
|
int mac_set_control(PyCameraObject* self, int id, int value);
|
||||||
|
|
||||||
|
PyObject* mac_read_raw(PyCameraObject *self);
|
||||||
|
int mac_read_frame(PyCameraObject* self, SDL_Surface* surf);
|
||||||
|
int mac_camera_idle(PyCameraObject* self);
|
||||||
|
int mac_copy_gworld_to_surface(PyCameraObject* self, SDL_Surface* surf);
|
||||||
|
|
||||||
|
void flip_image(const void* image, void* flipped_image, int width, int height,
|
||||||
|
short depth, int hflip, int vflip);
|
||||||
|
|
||||||
|
#endif
|
48
WENV/Include/pygame/fastevents.h
Normal file
48
WENV/Include/pygame/fastevents.h
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
#ifndef _FASTEVENTS_H_
|
||||||
|
#define _FASTEVENTS_H_
|
||||||
|
/*
|
||||||
|
NET2 is a threaded, event based, network IO library for SDL.
|
||||||
|
Copyright (C) 2002 Bob Pendleton
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Lesser General Public License
|
||||||
|
as published by the Free Software Foundation; either version 2.1
|
||||||
|
of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with this library; if not, write to the Free
|
||||||
|
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
|
02111-1307 USA
|
||||||
|
|
||||||
|
If you do not wish to comply with the terms of the LGPL please
|
||||||
|
contact the author as other terms are available for a fee.
|
||||||
|
|
||||||
|
Bob Pendleton
|
||||||
|
Bob@Pendleton.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "SDL.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int FE_Init(void); // Initialize FE
|
||||||
|
void FE_Quit(void); // shutdown FE
|
||||||
|
|
||||||
|
void FE_PumpEvents(void); // replacement for SDL_PumpEvents
|
||||||
|
int FE_PollEvent(SDL_Event *event); // replacement for SDL_PollEvent
|
||||||
|
int FE_WaitEvent(SDL_Event *event); // replacement for SDL_WaitEvent
|
||||||
|
int FE_PushEvent(SDL_Event *event); // replacement for SDL_PushEvent
|
||||||
|
|
||||||
|
char *FE_GetError(void); // get the last error
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
57
WENV/Include/pygame/font.h
Normal file
57
WENV/Include/pygame/font.h
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
pygame - Python Game Library
|
||||||
|
Copyright (C) 2000-2001 Pete Shinners
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this library; if not, write to the Free
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
Pete Shinners
|
||||||
|
pete@shinners.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Python.h>
|
||||||
|
#if defined(HAVE_SNPRINTF) /* also defined in SDL_ttf (SDL.h) */
|
||||||
|
#undef HAVE_SNPRINTF /* remove GCC macro redefine warning */
|
||||||
|
#endif
|
||||||
|
#include <SDL_ttf.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* test font initialization */
|
||||||
|
#define FONT_INIT_CHECK() \
|
||||||
|
if(!(*(int*)PyFONT_C_API[2])) \
|
||||||
|
return RAISE(PyExc_SDLError, "font system not initialized")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define PYGAMEAPI_FONT_FIRSTSLOT 0
|
||||||
|
#define PYGAMEAPI_FONT_NUMSLOTS 3
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
TTF_Font* font;
|
||||||
|
PyObject* weakreflist;
|
||||||
|
} PyFontObject;
|
||||||
|
#define PyFont_AsFont(x) (((PyFontObject*)x)->font)
|
||||||
|
|
||||||
|
#ifndef PYGAMEAPI_FONT_INTERNAL
|
||||||
|
#define PyFont_Check(x) ((x)->ob_type == (PyTypeObject*)PyFONT_C_API[0])
|
||||||
|
#define PyFont_Type (*(PyTypeObject*)PyFONT_C_API[0])
|
||||||
|
#define PyFont_New (*(PyObject*(*)(TTF_Font*))PyFONT_C_API[1])
|
||||||
|
/*slot 2 taken by FONT_INIT_CHECK*/
|
||||||
|
|
||||||
|
#define import_pygame_font() \
|
||||||
|
_IMPORT_PYGAME_MODULE(font, FONT, PyFONT_C_API)
|
||||||
|
|
||||||
|
static void* PyFONT_C_API[PYGAMEAPI_FONT_NUMSLOTS] = {NULL};
|
||||||
|
#endif
|
||||||
|
|
137
WENV/Include/pygame/freetype.h
Normal file
137
WENV/Include/pygame/freetype.h
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
/*
|
||||||
|
pygame - Python Game Library
|
||||||
|
Copyright (C) 2009 Vicent Marti
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this library; if not, write to the Free
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
*/
|
||||||
|
#ifndef _PYGAME_FREETYPE_H_
|
||||||
|
#define _PYGAME_FREETYPE_H_
|
||||||
|
|
||||||
|
#define PGFT_PYGAME1_COMPAT
|
||||||
|
#define HAVE_PYGAME_SDL_VIDEO
|
||||||
|
#define HAVE_PYGAME_SDL_RWOPS
|
||||||
|
|
||||||
|
#include "pygame.h"
|
||||||
|
#include "pgcompat.h"
|
||||||
|
|
||||||
|
#if PY3
|
||||||
|
# define IS_PYTHON_3
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <ft2build.h>
|
||||||
|
#include FT_FREETYPE_H
|
||||||
|
#include FT_CACHE_H
|
||||||
|
#include FT_XFREE86_H
|
||||||
|
#include FT_TRIGONOMETRY_H
|
||||||
|
|
||||||
|
/**********************************************************
|
||||||
|
* Global module constants
|
||||||
|
**********************************************************/
|
||||||
|
|
||||||
|
/* Render styles */
|
||||||
|
#define FT_STYLE_NORMAL 0x00
|
||||||
|
#define FT_STYLE_STRONG 0x01
|
||||||
|
#define FT_STYLE_OBLIQUE 0x02
|
||||||
|
#define FT_STYLE_UNDERLINE 0x04
|
||||||
|
#define FT_STYLE_WIDE 0x08
|
||||||
|
#define FT_STYLE_DEFAULT 0xFF
|
||||||
|
|
||||||
|
/* Bounding box modes */
|
||||||
|
#define FT_BBOX_EXACT FT_GLYPH_BBOX_SUBPIXELS
|
||||||
|
#define FT_BBOX_EXACT_GRIDFIT FT_GLYPH_BBOX_GRIDFIT
|
||||||
|
#define FT_BBOX_PIXEL FT_GLYPH_BBOX_TRUNCATE
|
||||||
|
#define FT_BBOX_PIXEL_GRIDFIT FT_GLYPH_BBOX_PIXELS
|
||||||
|
|
||||||
|
/* Rendering flags */
|
||||||
|
#define FT_RFLAG_NONE (0)
|
||||||
|
#define FT_RFLAG_ANTIALIAS (1 << 0)
|
||||||
|
#define FT_RFLAG_AUTOHINT (1 << 1)
|
||||||
|
#define FT_RFLAG_VERTICAL (1 << 2)
|
||||||
|
#define FT_RFLAG_HINTED (1 << 3)
|
||||||
|
#define FT_RFLAG_KERNING (1 << 4)
|
||||||
|
#define FT_RFLAG_TRANSFORM (1 << 5)
|
||||||
|
#define FT_RFLAG_PAD (1 << 6)
|
||||||
|
#define FT_RFLAG_ORIGIN (1 << 7)
|
||||||
|
#define FT_RFLAG_UCS4 (1 << 8)
|
||||||
|
#define FT_RFLAG_USE_BITMAP_STRIKES (1 << 9)
|
||||||
|
#define FT_RFLAG_DEFAULTS (FT_RFLAG_HINTED | \
|
||||||
|
FT_RFLAG_USE_BITMAP_STRIKES | \
|
||||||
|
FT_RFLAG_ANTIALIAS)
|
||||||
|
|
||||||
|
|
||||||
|
#define FT_RENDER_NEWBYTEARRAY 0x0
|
||||||
|
#define FT_RENDER_NEWSURFACE 0x1
|
||||||
|
#define FT_RENDER_EXISTINGSURFACE 0x2
|
||||||
|
|
||||||
|
/**********************************************************
|
||||||
|
* Global module types
|
||||||
|
**********************************************************/
|
||||||
|
|
||||||
|
typedef struct _scale_s {
|
||||||
|
FT_UInt x, y;
|
||||||
|
} Scale_t;
|
||||||
|
typedef FT_Angle Angle_t;
|
||||||
|
|
||||||
|
struct fontinternals_;
|
||||||
|
struct freetypeinstance_;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
FT_Long font_index;
|
||||||
|
FT_Open_Args open_args;
|
||||||
|
} PgFontId;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
PgFontId id;
|
||||||
|
PyObject *path;
|
||||||
|
int is_scalable;
|
||||||
|
|
||||||
|
Scale_t face_size;
|
||||||
|
FT_Int16 style;
|
||||||
|
FT_Int16 render_flags;
|
||||||
|
double strength;
|
||||||
|
double underline_adjustment;
|
||||||
|
FT_UInt resolution;
|
||||||
|
Angle_t rotation;
|
||||||
|
FT_Matrix transform;
|
||||||
|
FT_Byte fgcolor[4];
|
||||||
|
|
||||||
|
struct freetypeinstance_ *freetype; /* Personal reference */
|
||||||
|
struct fontinternals_ *_internals;
|
||||||
|
} PgFontObject;
|
||||||
|
|
||||||
|
#define PgFont_IS_ALIVE(o) \
|
||||||
|
(((PgFontObject *)(o))->_internals != 0)
|
||||||
|
|
||||||
|
/**********************************************************
|
||||||
|
* Module declaration
|
||||||
|
**********************************************************/
|
||||||
|
#define PYGAMEAPI_FREETYPE_FIRSTSLOT 0
|
||||||
|
#define PYGAMEAPI_FREETYPE_NUMSLOTS 2
|
||||||
|
|
||||||
|
#ifndef PYGAME_FREETYPE_INTERNAL
|
||||||
|
|
||||||
|
#define PgFont_Check(x) ((x)->ob_type == (PyTypeObject*)PgFREETYPE_C_API[0])
|
||||||
|
#define PgFont_Type (*(PyTypeObject*)PgFREETYPE_C_API[1])
|
||||||
|
#define PgFont_New (*(PyObject*(*)(const char*, long))PgFREETYPE_C_API[1])
|
||||||
|
|
||||||
|
#define import_pygame_freetype() \
|
||||||
|
_IMPORT_PYGAME_MODULE(freetype, FREETYPE, PgFREETYPE_C_API)
|
||||||
|
|
||||||
|
static void *PgFREETYPE_C_API[PYGAMEAPI_FREETYPE_NUMSLOTS] = {0};
|
||||||
|
#endif /* PYGAME_FREETYPE_INTERNAL */
|
||||||
|
|
||||||
|
#endif /* _PYGAME_FREETYPE_H_ */
|
25
WENV/Include/pygame/mask.h
Normal file
25
WENV/Include/pygame/mask.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#include <Python.h>
|
||||||
|
#include "bitmask.h"
|
||||||
|
|
||||||
|
#define PYGAMEAPI_MASK_FIRSTSLOT 0
|
||||||
|
#define PYGAMEAPI_MASK_NUMSLOTS 1
|
||||||
|
#define PYGAMEAPI_LOCAL_ENTRY "_PYGAME_C_API"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
bitmask_t *mask;
|
||||||
|
} PyMaskObject;
|
||||||
|
|
||||||
|
#define PyMask_AsBitmap(x) (((PyMaskObject*)x)->mask)
|
||||||
|
|
||||||
|
#ifndef PYGAMEAPI_MASK_INTERNAL
|
||||||
|
|
||||||
|
#define PyMask_Type (*(PyTypeObject*)PyMASK_C_API[0])
|
||||||
|
#define PyMask_Check(x) ((x)->ob_type == &PyMask_Type)
|
||||||
|
|
||||||
|
#define import_pygame_mask() \
|
||||||
|
_IMPORT_PYGAME_MODULE(mask, MASK, PyMASK_C_API)
|
||||||
|
|
||||||
|
static void* PyMASK_C_API[PYGAMEAPI_MASK_NUMSLOTS] = {NULL};
|
||||||
|
#endif /* #ifndef PYGAMEAPI_MASK_INTERNAL */
|
||||||
|
|
66
WENV/Include/pygame/mixer.h
Normal file
66
WENV/Include/pygame/mixer.h
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
pygame - Python Game Library
|
||||||
|
Copyright (C) 2000-2001 Pete Shinners
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this library; if not, write to the Free
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
Pete Shinners
|
||||||
|
pete@shinners.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <Python.h>
|
||||||
|
#include <SDL_mixer.h>
|
||||||
|
#include <structmember.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* test mixer initializations */
|
||||||
|
#define MIXER_INIT_CHECK() \
|
||||||
|
if(!SDL_WasInit(SDL_INIT_AUDIO)) \
|
||||||
|
return RAISE(PyExc_SDLError, "mixer system not initialized")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define PYGAMEAPI_MIXER_FIRSTSLOT 0
|
||||||
|
#define PYGAMEAPI_MIXER_NUMSLOTS 7
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
Mix_Chunk *chunk;
|
||||||
|
Uint8 *mem;
|
||||||
|
PyObject *weakreflist;
|
||||||
|
} PySoundObject;
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
int chan;
|
||||||
|
} PyChannelObject;
|
||||||
|
#define PySound_AsChunk(x) (((PySoundObject*)x)->chunk)
|
||||||
|
#define PyChannel_AsInt(x) (((PyChannelObject*)x)->chan)
|
||||||
|
|
||||||
|
#ifndef PYGAMEAPI_MIXER_INTERNAL
|
||||||
|
#define PySound_Check(x) ((x)->ob_type == (PyTypeObject*)PyMIXER_C_API[0])
|
||||||
|
#define PySound_Type (*(PyTypeObject*)PyMIXER_C_API[0])
|
||||||
|
#define PySound_New (*(PyObject*(*)(Mix_Chunk*))PyMIXER_C_API[1])
|
||||||
|
#define PySound_Play (*(PyObject*(*)(PyObject*, PyObject*))PyMIXER_C_API[2])
|
||||||
|
#define PyChannel_Check(x) ((x)->ob_type == (PyTypeObject*)PyMIXER_C_API[3])
|
||||||
|
#define PyChannel_Type (*(PyTypeObject*)PyMIXER_C_API[3])
|
||||||
|
#define PyChannel_New (*(PyObject*(*)(int))PyMIXER_C_API[4])
|
||||||
|
#define PyMixer_AutoInit (*(PyObject*(*)(PyObject*, PyObject*))PyMIXER_C_API[5])
|
||||||
|
#define PyMixer_AutoQuit (*(void(*)(void))PyMIXER_C_API[6])
|
||||||
|
|
||||||
|
#define import_pygame_mixer() \
|
||||||
|
_IMPORT_PYGAME_MODULE(mixer, MIXER, PyMIXER_C_API)
|
||||||
|
|
||||||
|
static void* PyMIXER_C_API[PYGAMEAPI_MIXER_NUMSLOTS] = {NULL};
|
||||||
|
#endif
|
||||||
|
|
26
WENV/Include/pygame/pgarrinter.h
Normal file
26
WENV/Include/pygame/pgarrinter.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/* array structure interface version 3 declarations */
|
||||||
|
|
||||||
|
#if !defined(PG_ARRAYINTER_HEADER)
|
||||||
|
#define PG_ARRAYINTER_HEADER
|
||||||
|
|
||||||
|
static const int PAI_CONTIGUOUS = 0x01;
|
||||||
|
static const int PAI_FORTRAN = 0x02;
|
||||||
|
static const int PAI_ALIGNED = 0x100;
|
||||||
|
static const int PAI_NOTSWAPPED = 0x200;
|
||||||
|
static const int PAI_WRITEABLE = 0x400;
|
||||||
|
static const int PAI_ARR_HAS_DESCR = 0x800;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int two; /* contains the integer 2 -- simple sanity check */
|
||||||
|
int nd; /* number of dimensions */
|
||||||
|
char typekind; /* kind in array -- character code of typestr */
|
||||||
|
int itemsize; /* size of each element */
|
||||||
|
int flags; /* flags indicating how the data should be */
|
||||||
|
/* interpreted */
|
||||||
|
Py_intptr_t *shape; /* A length-nd array of shape information */
|
||||||
|
Py_intptr_t *strides; /* A length-nd array of stride information */
|
||||||
|
void *data; /* A pointer to the first element of the array */
|
||||||
|
PyObject *descr; /* NULL or a data-description */
|
||||||
|
} PyArrayInterface;
|
||||||
|
|
||||||
|
#endif
|
52
WENV/Include/pygame/pgbufferproxy.h
Normal file
52
WENV/Include/pygame/pgbufferproxy.h
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
pygame - Python Game Library
|
||||||
|
Copyright (C) 2000-2001 Pete Shinners
|
||||||
|
Copyright (C) 2007 Rene Dudfield, Richard Goedeken
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this library; if not, write to the Free
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
Pete Shinners
|
||||||
|
pete@shinners.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Bufferproxy module C api.
|
||||||
|
Depends on pygame.h being included first.
|
||||||
|
*/
|
||||||
|
#if !defined(PG_BUFPROXY_HEADER)
|
||||||
|
|
||||||
|
#define PYGAMEAPI_BUFPROXY_NUMSLOTS 4
|
||||||
|
#define PYGAMEAPI_BUFPROXY_FIRSTSLOT 0
|
||||||
|
|
||||||
|
#if !(defined(PYGAMEAPI_BUFPROXY_INTERNAL) || defined(NO_PYGAME_C_API))
|
||||||
|
static void *PgBUFPROXY_C_API[PYGAMEAPI_BUFPROXY_NUMSLOTS];
|
||||||
|
|
||||||
|
typedef PyObject *(*_pgbufproxy_new_t)(PyObject *, getbufferproc);
|
||||||
|
typedef PyObject *(*_pgbufproxy_get_obj_t)(PyObject *);
|
||||||
|
typedef int (*_pgbufproxy_trip_t)(PyObject *);
|
||||||
|
|
||||||
|
#define PgBufproxy_Type (*(PyTypeObject*)PgBUFPROXY_C_API[0])
|
||||||
|
#define PgBufproxy_New (*(_pgbufproxy_new_t)PgBUFPROXY_C_API[1])
|
||||||
|
#define PgBufproxy_GetParent \
|
||||||
|
(*(_pgbufproxy_get_obj_t)PgBUFPROXY_C_API[2])
|
||||||
|
#define PgBufproxy_Trip (*(_pgbufproxy_trip_t)PgBUFPROXY_C_API[3])
|
||||||
|
#define PgBufproxy_Check(x) ((x)->ob_type == (PgBufproxy_Type))
|
||||||
|
#define import_pygame_bufferproxy() \
|
||||||
|
_IMPORT_PYGAME_MODULE(bufferproxy, BUFPROXY, PgBUFPROXY_C_API)
|
||||||
|
|
||||||
|
#endif /* #if !(defined(PYGAMEAPI_BUFPROXY_INTERNAL) || ... */
|
||||||
|
|
||||||
|
#define PG_BUFPROXY_HEADER
|
||||||
|
|
||||||
|
#endif /* #if !defined(PG_BUFPROXY_HEADER) */
|
210
WENV/Include/pygame/pgcompat.h
Normal file
210
WENV/Include/pygame/pgcompat.h
Normal file
@ -0,0 +1,210 @@
|
|||||||
|
/* Python 2.x/3.x compitibility tools
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !defined(PGCOMPAT_H)
|
||||||
|
#define PGCOMPAT_H
|
||||||
|
|
||||||
|
#if PY_MAJOR_VERSION >= 3
|
||||||
|
|
||||||
|
#define PY3 1
|
||||||
|
|
||||||
|
/* Define some aliases for the removed PyInt_* functions */
|
||||||
|
#define PyInt_Check(op) PyLong_Check(op)
|
||||||
|
#define PyInt_FromString PyLong_FromString
|
||||||
|
#define PyInt_FromUnicode PyLong_FromUnicode
|
||||||
|
#define PyInt_FromLong PyLong_FromLong
|
||||||
|
#define PyInt_FromSize_t PyLong_FromSize_t
|
||||||
|
#define PyInt_FromSsize_t PyLong_FromSsize_t
|
||||||
|
#define PyInt_AsLong PyLong_AsLong
|
||||||
|
#define PyInt_AsSsize_t PyLong_AsSsize_t
|
||||||
|
#define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask
|
||||||
|
#define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
|
||||||
|
#define PyInt_AS_LONG PyLong_AS_LONG
|
||||||
|
#define PyNumber_Int PyNumber_Long
|
||||||
|
|
||||||
|
/* Weakrefs flags changed in 3.x */
|
||||||
|
#define Py_TPFLAGS_HAVE_WEAKREFS 0
|
||||||
|
|
||||||
|
/* Module init function returns new module instance. */
|
||||||
|
#define MODINIT_RETURN(x) return x
|
||||||
|
#define MODINIT_DEFINE(mod_name) PyMODINIT_FUNC PyInit_##mod_name (void)
|
||||||
|
#define DECREF_MOD(mod) Py_DECREF (mod)
|
||||||
|
|
||||||
|
/* Type header differs. */
|
||||||
|
#define TYPE_HEAD(x,y) PyVarObject_HEAD_INIT(x,y)
|
||||||
|
|
||||||
|
/* Text interface. Use unicode strings. */
|
||||||
|
#define Text_Type PyUnicode_Type
|
||||||
|
#define Text_Check PyUnicode_Check
|
||||||
|
#define Text_FromUTF8 PyUnicode_FromString
|
||||||
|
#define Text_FromUTF8AndSize PyUnicode_FromStringAndSize
|
||||||
|
#define Text_FromFormat PyUnicode_FromFormat
|
||||||
|
#define Text_GetSize PyUnicode_GetSize
|
||||||
|
#define Text_GET_SIZE PyUnicode_GET_SIZE
|
||||||
|
|
||||||
|
/* Binary interface. Use bytes. */
|
||||||
|
#define Bytes_Type PyBytes_Type
|
||||||
|
#define Bytes_Check PyBytes_Check
|
||||||
|
#define Bytes_Size PyBytes_Size
|
||||||
|
#define Bytes_AsString PyBytes_AsString
|
||||||
|
#define Bytes_AsStringAndSize PyBytes_AsStringAndSize
|
||||||
|
#define Bytes_FromStringAndSize PyBytes_FromStringAndSize
|
||||||
|
#define Bytes_FromFormat PyBytes_FromFormat
|
||||||
|
#define Bytes_AS_STRING PyBytes_AS_STRING
|
||||||
|
#define Bytes_GET_SIZE PyBytes_GET_SIZE
|
||||||
|
#define Bytes_AsDecodeObject PyBytes_AsDecodedObject
|
||||||
|
|
||||||
|
#define Object_Unicode PyObject_Str
|
||||||
|
|
||||||
|
#define IsTextObj(x) (PyUnicode_Check(x) || PyBytes_Check(x))
|
||||||
|
|
||||||
|
/* Renamed builtins */
|
||||||
|
#define BUILTINS_MODULE "builtins"
|
||||||
|
#define BUILTINS_UNICODE "str"
|
||||||
|
#define BUILTINS_UNICHR "chr"
|
||||||
|
|
||||||
|
/* Defaults for unicode file path encoding */
|
||||||
|
#define UNICODE_DEF_FS_CODEC Py_FileSystemDefaultEncoding
|
||||||
|
#if defined(MS_WIN32)
|
||||||
|
#define UNICODE_DEF_FS_ERROR "replace"
|
||||||
|
#else
|
||||||
|
#define UNICODE_DEF_FS_ERROR "surrogateescape"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else /* #if PY_MAJOR_VERSION >= 3 */
|
||||||
|
|
||||||
|
#define PY3 0
|
||||||
|
|
||||||
|
/* Module init function returns nothing. */
|
||||||
|
#define MODINIT_RETURN(x) return
|
||||||
|
#define MODINIT_DEFINE(mod_name) PyMODINIT_FUNC init##mod_name (void)
|
||||||
|
#define DECREF_MOD(mod)
|
||||||
|
|
||||||
|
/* Type header differs. */
|
||||||
|
#define TYPE_HEAD(x,y) \
|
||||||
|
PyObject_HEAD_INIT(x) \
|
||||||
|
0,
|
||||||
|
|
||||||
|
/* Text interface. Use ascii strings. */
|
||||||
|
#define Text_Type PyString_Type
|
||||||
|
#define Text_Check PyString_Check
|
||||||
|
#define Text_FromUTF8 PyString_FromString
|
||||||
|
#define Text_FromUTF8AndSize PyString_FromStringAndSize
|
||||||
|
#define Text_FromFormat PyString_FromFormat
|
||||||
|
#define Text_GetSize PyString_GetSize
|
||||||
|
#define Text_GET_SIZE PyString_GET_SIZE
|
||||||
|
|
||||||
|
/* Binary interface. Use ascii strings. */
|
||||||
|
#define Bytes_Type PyString_Type
|
||||||
|
#define Bytes_Check PyString_Check
|
||||||
|
#define Bytes_Size PyString_Size
|
||||||
|
#define Bytes_AsString PyString_AsString
|
||||||
|
#define Bytes_AsStringAndSize PyString_AsStringAndSize
|
||||||
|
#define Bytes_FromStringAndSize PyString_FromStringAndSize
|
||||||
|
#define Bytes_FromFormat PyString_FromFormat
|
||||||
|
#define Bytes_AS_STRING PyString_AS_STRING
|
||||||
|
#define Bytes_GET_SIZE PyString_GET_SIZE
|
||||||
|
#define Bytes_AsDecodedObject PyString_AsDecodedObject
|
||||||
|
|
||||||
|
#define Object_Unicode PyObject_Unicode
|
||||||
|
|
||||||
|
/* Renamed builtins */
|
||||||
|
#define BUILTINS_MODULE "__builtin__"
|
||||||
|
#define BUILTINS_UNICODE "unicode"
|
||||||
|
#define BUILTINS_UNICHR "unichr"
|
||||||
|
|
||||||
|
/* Defaults for unicode file path encoding */
|
||||||
|
#define UNICODE_DEF_FS_CODEC Py_FileSystemDefaultEncoding
|
||||||
|
#define UNICODE_DEF_FS_ERROR "strict"
|
||||||
|
|
||||||
|
#endif /* #if PY_MAJOR_VERSION >= 3 */
|
||||||
|
|
||||||
|
#define PY2 (!PY3)
|
||||||
|
|
||||||
|
#define MODINIT_ERROR MODINIT_RETURN (NULL)
|
||||||
|
|
||||||
|
/* Module state. These macros are used to define per-module macros.
|
||||||
|
* v - global state variable (Python 2.x)
|
||||||
|
* s - global state structure (Python 3.x)
|
||||||
|
*/
|
||||||
|
#define PY2_GETSTATE(v) (&(v))
|
||||||
|
#define PY3_GETSTATE(s, m) ((struct s *) PyModule_GetState (m))
|
||||||
|
|
||||||
|
/* Pep 3123: Making PyObject_HEAD conform to standard C */
|
||||||
|
#if !defined(Py_TYPE)
|
||||||
|
#define Py_TYPE(o) (((PyObject *)(o))->ob_type)
|
||||||
|
#define Py_REFCNT(o) (((PyObject *)(o))->ob_refcnt)
|
||||||
|
#define Py_SIZE(o) (((PyVarObject *)(o))->ob_size)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Encode a unicode file path */
|
||||||
|
#define Unicode_AsEncodedPath(u) \
|
||||||
|
PyUnicode_AsEncodedString ((u), UNICODE_DEF_FS_CODEC, UNICODE_DEF_FS_ERROR)
|
||||||
|
|
||||||
|
/* Relative paths introduced in Python 2.6 */
|
||||||
|
#if PY_VERSION_HEX >= 0x02060000
|
||||||
|
#define HAVE_RELATIVE_IMPORT 1
|
||||||
|
#else
|
||||||
|
#define HAVE_RELATIVE_IMPORT 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if HAVE_RELATIVE_IMPORT
|
||||||
|
#define RELATIVE_MODULE(m) ("." m)
|
||||||
|
#else
|
||||||
|
#define RELATIVE_MODULE(m) (m)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Python 3 (PEP 3118) buffer protocol */
|
||||||
|
#if PY_VERSION_HEX >= 0x02060000
|
||||||
|
#define HAVE_NEW_BUFPROTO 1
|
||||||
|
#else
|
||||||
|
#define HAVE_NEW_BUFPROTO 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define HAVE_OLD_BUFPROTO PY2
|
||||||
|
|
||||||
|
#if !defined(PG_ENABLE_OLDBUF) /* allow for command line override */
|
||||||
|
#if HAVE_OLD_BUFPROTO
|
||||||
|
#define PG_ENABLE_OLDBUF 1
|
||||||
|
#else
|
||||||
|
#define PG_ENABLE_OLDBUF 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef Py_TPFLAGS_HAVE_NEWBUFFER
|
||||||
|
#define Py_TPFLAGS_HAVE_NEWBUFFER 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef Py_TPFLAGS_HAVE_CLASS
|
||||||
|
#define Py_TPFLAGS_HAVE_CLASS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef Py_TPFLAGS_CHECKTYPES
|
||||||
|
#define Py_TPFLAGS_CHECKTYPES 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if PY_VERSION_HEX >= 0x03020000
|
||||||
|
#define Slice_GET_INDICES_EX(slice, length, start, stop, step, slicelength) \
|
||||||
|
PySlice_GetIndicesEx(slice, length, start, stop, step, slicelength)
|
||||||
|
#else
|
||||||
|
#define Slice_GET_INDICES_EX(slice, length, start, stop, step, slicelength) \
|
||||||
|
PySlice_GetIndicesEx((PySliceObject *)(slice), length, \
|
||||||
|
start, stop, step, slicelength)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Python 2.4 (PEP 353) ssize_t */
|
||||||
|
#if PY_VERSION_HEX < 0x02050000
|
||||||
|
#define PyInt_AsSsize_t PyInt_AsLong
|
||||||
|
#define PyInt_FromSsizt_t PyInt_FromLong
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Support new buffer protocol? */
|
||||||
|
#if !defined(PG_ENABLE_NEWBUF) /* allow for command line override */
|
||||||
|
#if HAVE_NEW_BUFPROTO && !defined(PYPY_VERSION)
|
||||||
|
#define PG_ENABLE_NEWBUF 1
|
||||||
|
#else
|
||||||
|
#define PG_ENABLE_NEWBUF 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* #if !defined(PGCOMPAT_H) */
|
16
WENV/Include/pygame/pgopengl.h
Normal file
16
WENV/Include/pygame/pgopengl.h
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#if !defined(PGOPENGL_H)
|
||||||
|
#define PGOPENGL_H
|
||||||
|
|
||||||
|
/** This header includes definitions of Opengl functions as pointer types for
|
||||||
|
** use with the SDL function SDL_GL_GetProcAddress.
|
||||||
|
**/
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
#define GL_APIENTRY __stdcall
|
||||||
|
#else
|
||||||
|
#define GL_APIENTRY
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef void (GL_APIENTRY *GL_glReadPixels_Func)(int, int, int, int, unsigned int, unsigned int, void*);
|
||||||
|
|
||||||
|
#endif
|
34
WENV/Include/pygame/pygame.h
Normal file
34
WENV/Include/pygame/pygame.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
pygame - Python Game Library
|
||||||
|
Copyright (C) 2000-2001 Pete Shinners
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this library; if not, write to the Free
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
Pete Shinners
|
||||||
|
pete@shinners.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* To allow the Pygame C api to be globally shared by all code within an
|
||||||
|
* extension module built from multiple C files, only include the pygame.h
|
||||||
|
* header within the top level C file, the one which calls the
|
||||||
|
* 'import_pygame_*' macros. All other C source files of the module should
|
||||||
|
* include _pygame.h instead.
|
||||||
|
*/
|
||||||
|
#ifndef PYGAME_H
|
||||||
|
#define PYGAME_H
|
||||||
|
|
||||||
|
#include "_pygame.h"
|
||||||
|
|
||||||
|
#endif
|
143
WENV/Include/pygame/scrap.h
Normal file
143
WENV/Include/pygame/scrap.h
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
/*
|
||||||
|
pygame - Python Game Library
|
||||||
|
Copyright (C) 2006, 2007 Rene Dudfield, Marcus von Appen
|
||||||
|
|
||||||
|
Originally put in the public domain by Sam Lantinga.
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this library; if not, write to the Free
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* This is unconditionally defined in Python.h */
|
||||||
|
#if defined(_POSIX_C_SOURCE)
|
||||||
|
#undef _POSIX_C_SOURCE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <Python.h>
|
||||||
|
|
||||||
|
/* Handle clipboard text and data in arbitrary formats */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Predefined supported pygame scrap types.
|
||||||
|
*/
|
||||||
|
#define PYGAME_SCRAP_TEXT "text/plain"
|
||||||
|
#define PYGAME_SCRAP_BMP "image/bmp"
|
||||||
|
#define PYGAME_SCRAP_PPM "image/ppm"
|
||||||
|
#define PYGAME_SCRAP_PBM "image/pbm"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The supported scrap clipboard types.
|
||||||
|
*
|
||||||
|
* This is only relevant in a X11 environment, which supports mouse
|
||||||
|
* selections as well. For Win32 and MacOS environments the default
|
||||||
|
* clipboard is used, no matter what value is passed.
|
||||||
|
*/
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
SCRAP_CLIPBOARD,
|
||||||
|
SCRAP_SELECTION /* only supported in X11 environments. */
|
||||||
|
} ScrapClipType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Macro for initialization checks.
|
||||||
|
*/
|
||||||
|
#define PYGAME_SCRAP_INIT_CHECK() \
|
||||||
|
if(!pygame_scrap_initialized()) \
|
||||||
|
return (PyErr_SetString (PyExc_SDLError, \
|
||||||
|
"scrap system not initialized."), NULL)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Checks, whether the pygame scrap module was initialized.
|
||||||
|
*
|
||||||
|
* \return 1 if the modules was initialized, 0 otherwise.
|
||||||
|
*/
|
||||||
|
extern int
|
||||||
|
pygame_scrap_initialized (void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Initializes the pygame scrap module internals. Call this before any
|
||||||
|
* other method.
|
||||||
|
*
|
||||||
|
* \return 1 on successful initialization, 0 otherwise.
|
||||||
|
*/
|
||||||
|
extern int
|
||||||
|
pygame_scrap_init (void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Checks, whether the pygame window lost the clipboard focus or not.
|
||||||
|
*
|
||||||
|
* \return 1 if the window lost the focus, 0 otherwise.
|
||||||
|
*/
|
||||||
|
extern int
|
||||||
|
pygame_scrap_lost (void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Places content of a specific type into the clipboard.
|
||||||
|
*
|
||||||
|
* \note For X11 the following notes are important: The following types
|
||||||
|
* are reserved for internal usage and thus will throw an error on
|
||||||
|
* setting them: "TIMESTAMP", "TARGETS", "SDL_SELECTION".
|
||||||
|
* Setting PYGAME_SCRAP_TEXT ("text/plain") will also automatically
|
||||||
|
* set the X11 types "STRING" (XA_STRING), "TEXT" and "UTF8_STRING".
|
||||||
|
*
|
||||||
|
* For Win32 the following notes are important: Setting
|
||||||
|
* PYGAME_SCRAP_TEXT ("text/plain") will also automatically set
|
||||||
|
* the Win32 type "TEXT" (CF_TEXT).
|
||||||
|
*
|
||||||
|
* For QNX the following notes are important: Setting
|
||||||
|
* PYGAME_SCRAP_TEXT ("text/plain") will also automatically set
|
||||||
|
* the QNX type "TEXT" (Ph_CL_TEXT).
|
||||||
|
*
|
||||||
|
* \param type The type of the content.
|
||||||
|
* \param srclen The length of the content.
|
||||||
|
* \param src The NULL terminated content.
|
||||||
|
* \return 1, if the content could be successfully pasted into the clipboard,
|
||||||
|
* 0 otherwise.
|
||||||
|
*/
|
||||||
|
extern int
|
||||||
|
pygame_scrap_put (char *type, int srclen, char *src);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Gets the current content from the clipboard.
|
||||||
|
*
|
||||||
|
* \note The received content does not need to be the content previously
|
||||||
|
* placed in the clipboard using pygame_put_scrap(). See the
|
||||||
|
* pygame_put_scrap() notes for more details.
|
||||||
|
*
|
||||||
|
* \param type The type of the content to receive.
|
||||||
|
* \param count The size of the returned content.
|
||||||
|
* \return The content or NULL in case of an error or if no content of the
|
||||||
|
* specified type was available.
|
||||||
|
*/
|
||||||
|
extern char*
|
||||||
|
pygame_scrap_get (char *type, unsigned long *count);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Gets the currently available content types from the clipboard.
|
||||||
|
*
|
||||||
|
* \return The different available content types or NULL in case of an
|
||||||
|
* error or if no content type is available.
|
||||||
|
*/
|
||||||
|
extern char**
|
||||||
|
pygame_scrap_get_types (void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Checks whether content for the specified scrap type is currently
|
||||||
|
* available in the clipboard.
|
||||||
|
*
|
||||||
|
* \param type The type to check for.
|
||||||
|
* \return 1, if there is content and 0 otherwise.
|
||||||
|
*/
|
||||||
|
extern int
|
||||||
|
pygame_scrap_contains (char *type);
|
359
WENV/Include/pygame/surface.h
Normal file
359
WENV/Include/pygame/surface.h
Normal file
@ -0,0 +1,359 @@
|
|||||||
|
/*
|
||||||
|
pygame - Python Game Library
|
||||||
|
Copyright (C) 2000-2001 Pete Shinners
|
||||||
|
Copyright (C) 2007 Marcus von Appen
|
||||||
|
|
||||||
|
This library is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU Library General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This library is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with this library; if not, write to the Free
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
Pete Shinners
|
||||||
|
pete@shinners.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SURFACE_H
|
||||||
|
#define SURFACE_H
|
||||||
|
|
||||||
|
/* This is defined in SDL.h */
|
||||||
|
#if defined(_POSIX_C_SOURCE)
|
||||||
|
#undef _POSIX_C_SOURCE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <SDL.h>
|
||||||
|
#include "pygame.h"
|
||||||
|
|
||||||
|
#define PYGAME_BLEND_ADD 0x1
|
||||||
|
#define PYGAME_BLEND_SUB 0x2
|
||||||
|
#define PYGAME_BLEND_MULT 0x3
|
||||||
|
#define PYGAME_BLEND_MIN 0x4
|
||||||
|
#define PYGAME_BLEND_MAX 0x5
|
||||||
|
|
||||||
|
#define PYGAME_BLEND_RGB_ADD 0x1
|
||||||
|
#define PYGAME_BLEND_RGB_SUB 0x2
|
||||||
|
#define PYGAME_BLEND_RGB_MULT 0x3
|
||||||
|
#define PYGAME_BLEND_RGB_MIN 0x4
|
||||||
|
#define PYGAME_BLEND_RGB_MAX 0x5
|
||||||
|
|
||||||
|
#define PYGAME_BLEND_RGBA_ADD 0x6
|
||||||
|
#define PYGAME_BLEND_RGBA_SUB 0x7
|
||||||
|
#define PYGAME_BLEND_RGBA_MULT 0x8
|
||||||
|
#define PYGAME_BLEND_RGBA_MIN 0x9
|
||||||
|
#define PYGAME_BLEND_RGBA_MAX 0x10
|
||||||
|
#define PYGAME_BLEND_PREMULTIPLIED 0x11
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if SDL_BYTEORDER == SDL_LIL_ENDIAN
|
||||||
|
#define GET_PIXEL_24(b) (b[0] + (b[1] << 8) + (b[2] << 16))
|
||||||
|
#else
|
||||||
|
#define GET_PIXEL_24(b) (b[2] + (b[1] << 8) + (b[0] << 16))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define GET_PIXEL(pxl, bpp, source) \
|
||||||
|
switch (bpp) \
|
||||||
|
{ \
|
||||||
|
case 2: \
|
||||||
|
pxl = *((Uint16 *) (source)); \
|
||||||
|
break; \
|
||||||
|
case 4: \
|
||||||
|
pxl = *((Uint32 *) (source)); \
|
||||||
|
break; \
|
||||||
|
default: \
|
||||||
|
{ \
|
||||||
|
Uint8 *b = (Uint8 *) source; \
|
||||||
|
pxl = GET_PIXEL_24(b); \
|
||||||
|
} \
|
||||||
|
break; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define GET_PIXELVALS(_sR, _sG, _sB, _sA, px, fmt, ppa) \
|
||||||
|
_sR = ((px & fmt->Rmask) >> fmt->Rshift); \
|
||||||
|
_sR = (_sR << fmt->Rloss) + (_sR >> (8 - (fmt->Rloss << 1))); \
|
||||||
|
_sG = ((px & fmt->Gmask) >> fmt->Gshift); \
|
||||||
|
_sG = (_sG << fmt->Gloss) + (_sG >> (8 - (fmt->Gloss << 1))); \
|
||||||
|
_sB = ((px & fmt->Bmask) >> fmt->Bshift); \
|
||||||
|
_sB = (_sB << fmt->Bloss) + (_sB >> (8 - (fmt->Bloss << 1))); \
|
||||||
|
if (ppa) \
|
||||||
|
{ \
|
||||||
|
_sA = ((px & fmt->Amask) >> fmt->Ashift); \
|
||||||
|
_sA = (_sA << fmt->Aloss) + (_sA >> (8 - (fmt->Aloss << 1))); \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
{ \
|
||||||
|
_sA = 255; \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define GET_PIXELVALS_1(sr, sg, sb, sa, _src, _fmt) \
|
||||||
|
sr = _fmt->palette->colors[*((Uint8 *) (_src))].r; \
|
||||||
|
sg = _fmt->palette->colors[*((Uint8 *) (_src))].g; \
|
||||||
|
sb = _fmt->palette->colors[*((Uint8 *) (_src))].b; \
|
||||||
|
sa = 255;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if SDL_BYTEORDER == SDL_LIL_ENDIAN
|
||||||
|
#define SET_OFFSETS_24(or, og, ob, fmt) \
|
||||||
|
{ \
|
||||||
|
or = (fmt->Rshift == 0 ? 0 : \
|
||||||
|
fmt->Rshift == 8 ? 1 : \
|
||||||
|
2 ); \
|
||||||
|
og = (fmt->Gshift == 0 ? 0 : \
|
||||||
|
fmt->Gshift == 8 ? 1 : \
|
||||||
|
2 ); \
|
||||||
|
ob = (fmt->Bshift == 0 ? 0 : \
|
||||||
|
fmt->Bshift == 8 ? 1 : \
|
||||||
|
2 ); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define SET_OFFSETS_32(or, og, ob, fmt) \
|
||||||
|
{ \
|
||||||
|
or = (fmt->Rshift == 0 ? 0 : \
|
||||||
|
fmt->Rshift == 8 ? 1 : \
|
||||||
|
fmt->Rshift == 16 ? 2 : \
|
||||||
|
3 ); \
|
||||||
|
og = (fmt->Gshift == 0 ? 0 : \
|
||||||
|
fmt->Gshift == 8 ? 1 : \
|
||||||
|
fmt->Gshift == 16 ? 2 : \
|
||||||
|
3 ); \
|
||||||
|
ob = (fmt->Bshift == 0 ? 0 : \
|
||||||
|
fmt->Bshift == 8 ? 1 : \
|
||||||
|
fmt->Bshift == 16 ? 2 : \
|
||||||
|
3 ); \
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define SET_OFFSETS_24(or, og, ob, fmt) \
|
||||||
|
{ \
|
||||||
|
or = (fmt->Rshift == 0 ? 2 : \
|
||||||
|
fmt->Rshift == 8 ? 1 : \
|
||||||
|
0 ); \
|
||||||
|
og = (fmt->Gshift == 0 ? 2 : \
|
||||||
|
fmt->Gshift == 8 ? 1 : \
|
||||||
|
0 ); \
|
||||||
|
ob = (fmt->Bshift == 0 ? 2 : \
|
||||||
|
fmt->Bshift == 8 ? 1 : \
|
||||||
|
0 ); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define SET_OFFSETS_32(or, og, ob, fmt) \
|
||||||
|
{ \
|
||||||
|
or = (fmt->Rshift == 0 ? 3 : \
|
||||||
|
fmt->Rshift == 8 ? 2 : \
|
||||||
|
fmt->Rshift == 16 ? 1 : \
|
||||||
|
0 ); \
|
||||||
|
og = (fmt->Gshift == 0 ? 3 : \
|
||||||
|
fmt->Gshift == 8 ? 2 : \
|
||||||
|
fmt->Gshift == 16 ? 1 : \
|
||||||
|
0 ); \
|
||||||
|
ob = (fmt->Bshift == 0 ? 3 : \
|
||||||
|
fmt->Bshift == 8 ? 2 : \
|
||||||
|
fmt->Bshift == 16 ? 1 : \
|
||||||
|
0 ); \
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#define CREATE_PIXEL(buf, r, g, b, a, bp, ft) \
|
||||||
|
switch (bp) \
|
||||||
|
{ \
|
||||||
|
case 2: \
|
||||||
|
*((Uint16 *) (buf)) = \
|
||||||
|
((r >> ft->Rloss) << ft->Rshift) | \
|
||||||
|
((g >> ft->Gloss) << ft->Gshift) | \
|
||||||
|
((b >> ft->Bloss) << ft->Bshift) | \
|
||||||
|
((a >> ft->Aloss) << ft->Ashift); \
|
||||||
|
break; \
|
||||||
|
case 4: \
|
||||||
|
*((Uint32 *) (buf)) = \
|
||||||
|
((r >> ft->Rloss) << ft->Rshift) | \
|
||||||
|
((g >> ft->Gloss) << ft->Gshift) | \
|
||||||
|
((b >> ft->Bloss) << ft->Bshift) | \
|
||||||
|
((a >> ft->Aloss) << ft->Ashift); \
|
||||||
|
break; \
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Pretty good idea from Tom Duff :-). */
|
||||||
|
#define LOOP_UNROLLED4(code, n, width) \
|
||||||
|
n = (width + 3) / 4; \
|
||||||
|
switch (width & 3) \
|
||||||
|
{ \
|
||||||
|
case 0: do { code; \
|
||||||
|
case 3: code; \
|
||||||
|
case 2: code; \
|
||||||
|
case 1: code; \
|
||||||
|
} while (--n > 0); \
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Used in the srcbpp == dstbpp == 1 blend functions */
|
||||||
|
#define REPEAT_3(code) \
|
||||||
|
code; \
|
||||||
|
code; \
|
||||||
|
code;
|
||||||
|
|
||||||
|
#define REPEAT_4(code) \
|
||||||
|
code; \
|
||||||
|
code; \
|
||||||
|
code; \
|
||||||
|
code;
|
||||||
|
|
||||||
|
|
||||||
|
#define BLEND_ADD(tmp, sR, sG, sB, sA, dR, dG, dB, dA) \
|
||||||
|
tmp = dR + sR; dR = (tmp <= 255 ? tmp : 255); \
|
||||||
|
tmp = dG + sG; dG = (tmp <= 255 ? tmp : 255); \
|
||||||
|
tmp = dB + sB; dB = (tmp <= 255 ? tmp : 255);
|
||||||
|
|
||||||
|
#define BLEND_SUB(tmp, sR, sG, sB, sA, dR, dG, dB, dA) \
|
||||||
|
tmp = dR - sR; dR = (tmp >= 0 ? tmp : 0); \
|
||||||
|
tmp = dG - sG; dG = (tmp >= 0 ? tmp : 0); \
|
||||||
|
tmp = dB - sB; dB = (tmp >= 0 ? tmp : 0);
|
||||||
|
|
||||||
|
#define BLEND_MULT(sR, sG, sB, sA, dR, dG, dB, dA) \
|
||||||
|
dR = (dR && sR) ? (dR * sR) >> 8 : 0; \
|
||||||
|
dG = (dG && sG) ? (dG * sG) >> 8 : 0; \
|
||||||
|
dB = (dB && sB) ? (dB * sB) >> 8 : 0;
|
||||||
|
|
||||||
|
#define BLEND_MIN(sR, sG, sB, sA, dR, dG, dB, dA) \
|
||||||
|
if(sR < dR) { dR = sR; } \
|
||||||
|
if(sG < dG) { dG = sG; } \
|
||||||
|
if(sB < dB) { dB = sB; }
|
||||||
|
|
||||||
|
#define BLEND_MAX(sR, sG, sB, sA, dR, dG, dB, dA) \
|
||||||
|
if(sR > dR) { dR = sR; } \
|
||||||
|
if(sG > dG) { dG = sG; } \
|
||||||
|
if(sB > dB) { dB = sB; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define BLEND_RGBA_ADD(tmp, sR, sG, sB, sA, dR, dG, dB, dA) \
|
||||||
|
tmp = dR + sR; dR = (tmp <= 255 ? tmp : 255); \
|
||||||
|
tmp = dG + sG; dG = (tmp <= 255 ? tmp : 255); \
|
||||||
|
tmp = dB + sB; dB = (tmp <= 255 ? tmp : 255); \
|
||||||
|
tmp = dA + sA; dA = (tmp <= 255 ? tmp : 255);
|
||||||
|
|
||||||
|
#define BLEND_RGBA_SUB(tmp, sR, sG, sB, sA, dR, dG, dB, dA) \
|
||||||
|
tmp = dR - sR; dR = (tmp >= 0 ? tmp : 0); \
|
||||||
|
tmp = dG - sG; dG = (tmp >= 0 ? tmp : 0); \
|
||||||
|
tmp = dB - sB; dB = (tmp >= 0 ? tmp : 0); \
|
||||||
|
tmp = dA - sA; dA = (tmp >= 0 ? tmp : 0);
|
||||||
|
|
||||||
|
#define BLEND_RGBA_MULT(sR, sG, sB, sA, dR, dG, dB, dA) \
|
||||||
|
dR = (dR && sR) ? (dR * sR) >> 8 : 0; \
|
||||||
|
dG = (dG && sG) ? (dG * sG) >> 8 : 0; \
|
||||||
|
dB = (dB && sB) ? (dB * sB) >> 8 : 0; \
|
||||||
|
dA = (dA && sA) ? (dA * sA) >> 8 : 0;
|
||||||
|
|
||||||
|
#define BLEND_RGBA_MIN(sR, sG, sB, sA, dR, dG, dB, dA) \
|
||||||
|
if(sR < dR) { dR = sR; } \
|
||||||
|
if(sG < dG) { dG = sG; } \
|
||||||
|
if(sB < dB) { dB = sB; } \
|
||||||
|
if(sA < dA) { dA = sA; }
|
||||||
|
|
||||||
|
#define BLEND_RGBA_MAX(sR, sG, sB, sA, dR, dG, dB, dA) \
|
||||||
|
if(sR > dR) { dR = sR; } \
|
||||||
|
if(sG > dG) { dG = sG; } \
|
||||||
|
if(sB > dB) { dB = sB; } \
|
||||||
|
if(sA > dA) { dA = sA; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
/* Choose an alpha blend equation. If the sign is preserved on a right shift
|
||||||
|
* then use a specialized, faster, equation. Otherwise a more general form,
|
||||||
|
* where all additions are done before the shift, is needed.
|
||||||
|
*/
|
||||||
|
#if (-1 >> 1) < 0
|
||||||
|
#define ALPHA_BLEND_COMP(sC, dC, sA) ((((sC - dC) * sA + sC) >> 8) + dC)
|
||||||
|
#else
|
||||||
|
#define ALPHA_BLEND_COMP(sC, dC, sA) (((dC << 8) + (sC - dC) * sA + sC) >> 8)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ALPHA_BLEND(sR, sG, sB, sA, dR, dG, dB, dA) \
|
||||||
|
do { \
|
||||||
|
if (dA) \
|
||||||
|
{ \
|
||||||
|
dR = ALPHA_BLEND_COMP(sR, dR, sA); \
|
||||||
|
dG = ALPHA_BLEND_COMP(sG, dG, sA); \
|
||||||
|
dB = ALPHA_BLEND_COMP(sB, dB, sA); \
|
||||||
|
dA = sA + dA - ((sA * dA) / 255); \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
{ \
|
||||||
|
dR = sR; \
|
||||||
|
dG = sG; \
|
||||||
|
dB = sB; \
|
||||||
|
dA = sA; \
|
||||||
|
} \
|
||||||
|
} while(0)
|
||||||
|
|
||||||
|
#define ALPHA_BLEND_PREMULTIPLIED_COMP(sC, dC, sA) (sC + dC - ((dC * sA) >> 8))
|
||||||
|
|
||||||
|
#define ALPHA_BLEND_PREMULTIPLIED(tmp, sR, sG, sB, sA, dR, dG, dB, dA) \
|
||||||
|
do { \
|
||||||
|
tmp = ALPHA_BLEND_PREMULTIPLIED_COMP(sR, dR, sA); dR = (tmp > 255 ? 255 : tmp); \
|
||||||
|
tmp = ALPHA_BLEND_PREMULTIPLIED_COMP(sG, dG, sA); dG = (tmp > 255 ? 255 : tmp); \
|
||||||
|
tmp = ALPHA_BLEND_PREMULTIPLIED_COMP(sB, dB, sA); dB = (tmp > 255 ? 255 : tmp); \
|
||||||
|
dA = sA + dA - ((sA * dA) / 255); \
|
||||||
|
} while(0)
|
||||||
|
#elif 0
|
||||||
|
|
||||||
|
#define ALPHA_BLEND(sR, sG, sB, sA, dR, dG, dB, dA) \
|
||||||
|
do { \
|
||||||
|
if(sA){ \
|
||||||
|
if(dA && sA < 255){ \
|
||||||
|
int dContrib = dA*(255 - sA)/255; \
|
||||||
|
dA = sA+dA - ((sA*dA)/255); \
|
||||||
|
dR = (dR*dContrib + sR*sA)/dA; \
|
||||||
|
dG = (dG*dContrib + sG*sA)/dA; \
|
||||||
|
dB = (dB*dContrib + sB*sA)/dA; \
|
||||||
|
}else{ \
|
||||||
|
dR = sR; \
|
||||||
|
dG = sG; \
|
||||||
|
dB = sB; \
|
||||||
|
dA = sA; \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
} while(0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int
|
||||||
|
surface_fill_blend (SDL_Surface *surface, SDL_Rect *rect, Uint32 color,
|
||||||
|
int blendargs);
|
||||||
|
|
||||||
|
void
|
||||||
|
surface_respect_clip_rect (SDL_Surface *surface, SDL_Rect *rect);
|
||||||
|
|
||||||
|
int
|
||||||
|
pygame_AlphaBlit (SDL_Surface * src, SDL_Rect * srcrect,
|
||||||
|
SDL_Surface * dst, SDL_Rect * dstrect, int the_args);
|
||||||
|
|
||||||
|
int
|
||||||
|
pygame_Blit (SDL_Surface * src, SDL_Rect * srcrect,
|
||||||
|
SDL_Surface * dst, SDL_Rect * dstrect, int the_args);
|
||||||
|
|
||||||
|
#endif /* SURFACE_H */
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user