Showing the changes to sys/src/cmd/python/Include (80 of 3706 files). Show all
Unified · Split
| @@ -0,0 +1,501 @@ | |||
| 1 | /* File automatically generated by Parser/asdl_c.py */ | ||
| 2 | |||
| 3 | #include "asdl.h" | ||
| 4 | |||
| 5 | typedef struct _mod *mod_ty; | ||
| 6 | |||
| 7 | typedef struct _stmt *stmt_ty; | ||
| 8 | |||
| 9 | typedef struct _expr *expr_ty; | ||
| 10 | |||
| 11 | typedef enum _expr_context { Load=1, Store=2, Del=3, AugLoad=4, AugStore=5, | ||
| 12 | Param=6 } expr_context_ty; | ||
| 13 | |||
| 14 | typedef struct _slice *slice_ty; | ||
| 15 | |||
| 16 | typedef enum _boolop { And=1, Or=2 } boolop_ty; | ||
| 17 | |||
| 18 | typedef enum _operator { Add=1, Sub=2, Mult=3, Div=4, Mod=5, Pow=6, LShift=7, | ||
| 19 | RShift=8, BitOr=9, BitXor=10, BitAnd=11, FloorDiv=12 } | ||
| 20 | operator_ty; | ||
| 21 | |||
| 22 | typedef enum _unaryop { Invert=1, Not=2, UAdd=3, USub=4 } unaryop_ty; | ||
| 23 | |||
| 24 | typedef enum _cmpop { Eq=1, NotEq=2, Lt=3, LtE=4, Gt=5, GtE=6, Is=7, IsNot=8, | ||
| 25 | In=9, NotIn=10 } cmpop_ty; | ||
| 26 | |||
| 27 | typedef struct _comprehension *comprehension_ty; | ||
| 28 | |||
| 29 | typedef struct _excepthandler *excepthandler_ty; | ||
| 30 | |||
| 31 | typedef struct _arguments *arguments_ty; | ||
| 32 | |||
| 33 | typedef struct _keyword *keyword_ty; | ||
| 34 | |||
| 35 | typedef struct _alias *alias_ty; | ||
| 36 | |||
| 37 | |||
| 38 | enum _mod_kind {Module_kind=1, Interactive_kind=2, Expression_kind=3, | ||
| 39 | Suite_kind=4}; | ||
| 40 | struct _mod { | ||
| 41 | enum _mod_kind kind; | ||
| 42 | union { | ||
| 43 | struct { | ||
| 44 | asdl_seq *body; | ||
| 45 | } Module; | ||
| 46 | |||
| 47 | struct { | ||
| 48 | asdl_seq *body; | ||
| 49 | } Interactive; | ||
| 50 | |||
| 51 | struct { | ||
| 52 | expr_ty body; | ||
| 53 | } Expression; | ||
| 54 | |||
| 55 | struct { | ||
| 56 | asdl_seq *body; | ||
| 57 | } Suite; | ||
| 58 | |||
| 59 | } v; | ||
| 60 | }; | ||
| 61 | |||
| 62 | enum _stmt_kind {FunctionDef_kind=1, ClassDef_kind=2, Return_kind=3, | ||
| 63 | Delete_kind=4, Assign_kind=5, AugAssign_kind=6, Print_kind=7, | ||
| 64 | For_kind=8, While_kind=9, If_kind=10, With_kind=11, | ||
| 65 | Raise_kind=12, TryExcept_kind=13, TryFinally_kind=14, | ||
| 66 | Assert_kind=15, Import_kind=16, ImportFrom_kind=17, | ||
| 67 | Exec_kind=18, Global_kind=19, Expr_kind=20, Pass_kind=21, | ||
| 68 | Break_kind=22, Continue_kind=23}; | ||
| 69 | struct _stmt { | ||
| 70 | enum _stmt_kind kind; | ||
| 71 | union { | ||
| 72 | struct { | ||
| 73 | identifier name; | ||
| 74 | arguments_ty args; | ||
| 75 | asdl_seq *body; | ||
| 76 | asdl_seq *decorators; | ||
| 77 | } FunctionDef; | ||
| 78 | |||
| 79 | struct { | ||
| 80 | identifier name; | ||
| 81 | asdl_seq *bases; | ||
| 82 | asdl_seq *body; | ||
| 83 | } ClassDef; | ||
| 84 | |||
| 85 | struct { | ||
| 86 | expr_ty value; | ||
| 87 | } Return; | ||
| 88 | |||
| 89 | struct { | ||
| 90 | asdl_seq *targets; | ||
| 91 | } Delete; | ||
| 92 | |||
| 93 | struct { | ||
| 94 | asdl_seq *targets; | ||
| 95 | expr_ty value; | ||
| 96 | } Assign; | ||
| 97 | |||
| 98 | struct { | ||
| 99 | expr_ty target; | ||
| 100 | operator_ty op; | ||
| 101 | expr_ty value; | ||
| 102 | } AugAssign; | ||
| 103 | |||
| 104 | struct { | ||
| 105 | expr_ty dest; | ||
| 106 | asdl_seq *values; | ||
| 107 | bool nl; | ||
| 108 | } Print; | ||
| 109 | |||
| 110 | struct { | ||
| 111 | expr_ty target; | ||
| 112 | expr_ty iter; | ||
| 113 | asdl_seq *body; | ||
| 114 | asdl_seq *orelse; | ||
| 115 | } For; | ||
| 116 | |||
| 117 | struct { | ||
| 118 | expr_ty test; | ||
| 119 | asdl_seq *body; | ||
| 120 | asdl_seq *orelse; | ||
| 121 | } While; | ||
| 122 | |||
| 123 | struct { | ||
| 124 | expr_ty test; | ||
| 125 | asdl_seq *body; | ||
| 126 | asdl_seq *orelse; | ||
| 127 | } If; | ||
| 128 | |||
| 129 | struct { | ||
| 130 | expr_ty context_expr; | ||
| 131 | expr_ty optional_vars; | ||
| 132 | asdl_seq *body; | ||
| 133 | } With; | ||
| 134 | |||
| 135 | struct { | ||
| 136 | expr_ty type; | ||
| 137 | expr_ty inst; | ||
| 138 | expr_ty tback; | ||
| 139 | } Raise; | ||
| 140 | |||
| 141 | struct { | ||
| 142 | asdl_seq *body; | ||
| 143 | asdl_seq *handlers; | ||
| 144 | asdl_seq *orelse; | ||
| 145 | } TryExcept; | ||
| 146 | |||
| 147 | struct { | ||
| 148 | asdl_seq *body; | ||
| 149 | asdl_seq *finalbody; | ||
| 150 | } TryFinally; | ||
| 151 | |||
| 152 | struct { | ||
| 153 | expr_ty test; | ||
| 154 | expr_ty msg; | ||
| 155 | } Assert; | ||
| 156 | |||
| 157 | struct { | ||
| 158 | asdl_seq *names; | ||
| 159 | } Import; | ||
| 160 | |||
| 161 | struct { | ||
| 162 | identifier module; | ||
| 163 | asdl_seq *names; | ||
| 164 | int level; | ||
| 165 | } ImportFrom; | ||
| 166 | |||
| 167 | struct { | ||
| 168 | expr_ty body; | ||
| 169 | expr_ty globals; | ||
| 170 | expr_ty locals; | ||
| 171 | } Exec; | ||
| 172 | |||
| 173 | struct { | ||
| 174 | asdl_seq *names; | ||
| 175 | } Global; | ||
| 176 | |||
| 177 | struct { | ||
| 178 | expr_ty value; | ||
| 179 | } Expr; | ||
| 180 | |||
| 181 | } v; | ||
| 182 | int lineno; | ||
| 183 | int col_offset; | ||
| 184 | }; | ||
| 185 | |||
| 186 | enum _expr_kind {BoolOp_kind=1, BinOp_kind=2, UnaryOp_kind=3, Lambda_kind=4, | ||
| 187 | IfExp_kind=5, Dict_kind=6, ListComp_kind=7, | ||
| 188 | GeneratorExp_kind=8, Yield_kind=9, Compare_kind=10, | ||
| 189 | Call_kind=11, Repr_kind=12, Num_kind=13, Str_kind=14, | ||
| 190 | Attribute_kind=15, Subscript_kind=16, Name_kind=17, | ||
| 191 | List_kind=18, Tuple_kind=19}; | ||
| 192 | struct _expr { | ||
| 193 | enum _expr_kind kind; | ||
| 194 | union { | ||
| 195 | struct { | ||
| 196 | boolop_ty op; | ||
| 197 | asdl_seq *values; | ||
| 198 | } BoolOp; | ||
| 199 | |||
| 200 | struct { | ||
| 201 | expr_ty left; | ||
| 202 | operator_ty op; | ||
| 203 | expr_ty right; | ||
| 204 | } BinOp; | ||
| 205 | |||
| 206 | struct { | ||
| 207 | unaryop_ty op; | ||
| 208 | expr_ty operand; | ||
| 209 | } UnaryOp; | ||
| 210 | |||
| 211 | struct { | ||
| 212 | arguments_ty args; | ||
| 213 | expr_ty body; | ||
| 214 | } Lambda; | ||
| 215 | |||
| 216 | struct { | ||
| 217 | expr_ty test; | ||
| 218 | expr_ty body; | ||
| 219 | expr_ty orelse; | ||
| 220 | } IfExp; | ||
| 221 | |||
| 222 | struct { | ||
| 223 | asdl_seq *keys; | ||
| 224 | asdl_seq *values; | ||
| 225 | } Dict; | ||
| 226 | |||
| 227 | struct { | ||
| 228 | expr_ty elt; | ||
| 229 | asdl_seq *generators; | ||
| 230 | } ListComp; | ||
| 231 | |||
| 232 | struct { | ||
| 233 | expr_ty elt; | ||
| 234 | asdl_seq *generators; | ||
| 235 | } GeneratorExp; | ||
| 236 | |||
| 237 | struct { | ||
| 238 | expr_ty value; | ||
| 239 | } Yield; | ||
| 240 | |||
| 241 | struct { | ||
| 242 | expr_ty left; | ||
| 243 | asdl_int_seq *ops; | ||
| 244 | asdl_seq *comparators; | ||
| 245 | } Compare; | ||
| 246 | |||
| 247 | struct { | ||
| 248 | expr_ty func; | ||
| 249 | asdl_seq *args; | ||
| 250 | asdl_seq *keywords; | ||
| 251 | expr_ty starargs; | ||
| 252 | expr_ty kwargs; | ||
| 253 | } Call; | ||
| 254 | |||
| 255 | struct { | ||
| 256 | expr_ty value; | ||
| 257 | } Repr; | ||
| 258 | |||
| 259 | struct { | ||
| 260 | object n; | ||
| 261 | } Num; | ||
| 262 | |||
| 263 | struct { | ||
| 264 | string s; | ||
| 265 | } Str; | ||
| 266 | |||
| 267 | struct { | ||
| 268 | expr_ty value; | ||
| 269 | identifier attr; | ||
| 270 | expr_context_ty ctx; | ||
| 271 | } Attribute; | ||
| 272 | |||
| 273 | struct { | ||
| 274 | expr_ty value; | ||
| 275 | slice_ty slice; | ||
| 276 | expr_context_ty ctx; | ||
| 277 | } Subscript; | ||
| 278 | |||
| 279 | struct { | ||
| 280 | identifier id; | ||
| 281 | expr_context_ty ctx; | ||
| 282 | } Name; | ||
| 283 | |||
| 284 | struct { | ||
| 285 | asdl_seq *elts; | ||
| 286 | expr_context_ty ctx; | ||
| 287 | } List; | ||
| 288 | |||
| 289 | struct { | ||
| 290 | asdl_seq *elts; | ||
| 291 | expr_context_ty ctx; | ||
| 292 | } Tuple; | ||
| 293 | |||
| 294 | } v; | ||
| 295 | int lineno; | ||
| 296 | int col_offset; | ||
| 297 | }; | ||
| 298 | |||
| 299 | enum _slice_kind {Ellipsis_kind=1, Slice_kind=2, ExtSlice_kind=3, Index_kind=4}; | ||
| 300 | struct _slice { | ||
| 301 | enum _slice_kind kind; | ||
| 302 | union { | ||
| 303 | struct { | ||
| 304 | expr_ty lower; | ||
| 305 | expr_ty upper; | ||
| 306 | expr_ty step; | ||
| 307 | } Slice; | ||
| 308 | |||
| 309 | struct { | ||
| 310 | asdl_seq *dims; | ||
| 311 | } ExtSlice; | ||
| 312 | |||
| 313 | struct { | ||
| 314 | expr_ty value; | ||
| 315 | } Index; | ||
| 316 | |||
| 317 | } v; | ||
| 318 | }; | ||
| 319 | |||
| 320 | struct _comprehension { | ||
| 321 | expr_ty target; | ||
| 322 | expr_ty iter; | ||
| 323 | asdl_seq *ifs; | ||
| 324 | }; | ||
| 325 | |||
| 326 | struct _excepthandler { | ||
| 327 | expr_ty type; | ||
| 328 | expr_ty name; | ||
| 329 | asdl_seq *body; | ||
| 330 | int lineno; | ||
| 331 | int col_offset; | ||
| 332 | }; | ||
| 333 | |||
| 334 | struct _arguments { | ||
| 335 | asdl_seq *args; | ||
| 336 | identifier vararg; | ||
| 337 | identifier kwarg; | ||
| 338 | asdl_seq *defaults; | ||
| 339 | }; | ||
| 340 | |||
| 341 | struct _keyword { | ||
| 342 | identifier arg; | ||
| 343 | expr_ty value; | ||
| 344 | }; | ||
| 345 | |||
| 346 | struct _alias { | ||
| 347 | identifier name; | ||
| 348 | identifier asname; | ||
| 349 | }; | ||
| 350 | |||
| 351 | |||
| 352 | #define Module(a0, a1) _Py_Module(a0, a1) | ||
| 353 | mod_ty _Py_Module(asdl_seq * body, PyArena *arena); | ||
| 354 | #define Interactive(a0, a1) _Py_Interactive(a0, a1) | ||
| 355 | mod_ty _Py_Interactive(asdl_seq * body, PyArena *arena); | ||
| 356 | #define Expression(a0, a1) _Py_Expression(a0, a1) | ||
| 357 | mod_ty _Py_Expression(expr_ty body, PyArena *arena); | ||
| 358 | #define Suite(a0, a1) _Py_Suite(a0, a1) | ||
| 359 | mod_ty _Py_Suite(asdl_seq * body, PyArena *arena); | ||
| 360 | #define FunctionDef(a0, a1, a2, a3, a4, a5, a6) _Py_FunctionDef(a0, a1, a2, a3, a4, a5, a6) | ||
| 361 | stmt_ty _Py_FunctionDef(identifier name, arguments_ty args, asdl_seq * body, | ||
| 362 | asdl_seq * decorators, int lineno, int col_offset, | ||
| 363 | PyArena *arena); | ||
| 364 | #define ClassDef(a0, a1, a2, a3, a4, a5) _Py_ClassDef(a0, a1, a2, a3, a4, a5) | ||
| 365 | stmt_ty _Py_ClassDef(identifier name, asdl_seq * bases, asdl_seq * body, int | ||
| 366 | lineno, int col_offset, PyArena *arena); | ||
| 367 | #define Return(a0, a1, a2, a3) _Py_Return(a0, a1, a2, a3) | ||
| 368 | stmt_ty _Py_Return(expr_ty value, int lineno, int col_offset, PyArena *arena); | ||
| 369 | #define Delete(a0, a1, a2, a3) _Py_Delete(a0, a1, a2, a3) | ||
| 370 | stmt_ty _Py_Delete(asdl_seq * targets, int lineno, int col_offset, PyArena | ||
| 371 | *arena); | ||
| 372 | #define Assign(a0, a1, a2, a3, a4) _Py_Assign(a0, a1, a2, a3, a4) | ||
| 373 | stmt_ty _Py_Assign(asdl_seq * targets, expr_ty value, int lineno, int | ||
| 374 | col_offset, PyArena *arena); | ||
| 375 | #define AugAssign(a0, a1, a2, a3, a4, a5) _Py_AugAssign(a0, a1, a2, a3, a4, a5) | ||
| 376 | stmt_ty _Py_AugAssign(expr_ty target, operator_ty op, expr_ty value, int | ||
| 377 | lineno, int col_offset, PyArena *arena); | ||
| 378 | #define Print(a0, a1, a2, a3, a4, a5) _Py_Print(a0, a1, a2, a3, a4, a5) | ||
| 379 | stmt_ty _Py_Print(expr_ty dest, asdl_seq * values, bool nl, int lineno, int | ||
| 380 | col_offset, PyArena *arena); | ||
| 381 | #define For(a0, a1, a2, a3, a4, a5, a6) _Py_For(a0, a1, a2, a3, a4, a5, a6) | ||
| 382 | stmt_ty _Py_For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * | ||
| 383 | orelse, int lineno, int col_offset, PyArena *arena); | ||
| 384 | #define While(a0, a1, a2, a3, a4, a5) _Py_While(a0, a1, a2, a3, a4, a5) | ||
| 385 | stmt_ty _Py_While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, | ||
| 386 | int col_offset, PyArena *arena); | ||
| 387 | #define If(a0, a1, a2, a3, a4, a5) _Py_If(a0, a1, a2, a3, a4, a5) | ||
| 388 | stmt_ty _Py_If(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno, | ||
| 389 | int col_offset, PyArena *arena); | ||
| 390 | #define With(a0, a1, a2, a3, a4, a5) _Py_With(a0, a1, a2, a3, a4, a5) | ||
| 391 | stmt_ty _Py_With(expr_ty context_expr, expr_ty optional_vars, asdl_seq * body, | ||
| 392 | int lineno, int col_offset, PyArena *arena); | ||
| 393 | #define Raise(a0, a1, a2, a3, a4, a5) _Py_Raise(a0, a1, a2, a3, a4, a5) | ||
| 394 | stmt_ty _Py_Raise(expr_ty type, expr_ty inst, expr_ty tback, int lineno, int | ||
| 395 | col_offset, PyArena *arena); | ||
| 396 | #define TryExcept(a0, a1, a2, a3, a4, a5) _Py_TryExcept(a0, a1, a2, a3, a4, a5) | ||
| 397 | stmt_ty _Py_TryExcept(asdl_seq * body, asdl_seq * handlers, asdl_seq * orelse, | ||
| 398 | int lineno, int col_offset, PyArena *arena); | ||
| 399 | #define TryFinally(a0, a1, a2, a3, a4) _Py_TryFinally(a0, a1, a2, a3, a4) | ||
| 400 | stmt_ty _Py_TryFinally(asdl_seq * body, asdl_seq * finalbody, int lineno, int | ||
| 401 | col_offset, PyArena *arena); | ||
| 402 | #define Assert(a0, a1, a2, a3, a4) _Py_Assert(a0, a1, a2, a3, a4) | ||
| 403 | stmt_ty _Py_Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, | ||
| 404 | PyArena *arena); | ||
| 405 | #define Import(a0, a1, a2, a3) _Py_Import(a0, a1, a2, a3) | ||
| 406 | stmt_ty _Py_Import(asdl_seq * names, int lineno, int col_offset, PyArena | ||
| 407 | *arena); | ||
| 408 | #define ImportFrom(a0, a1, a2, a3, a4, a5) _Py_ImportFrom(a0, a1, a2, a3, a4, a5) | ||
| 409 | stmt_ty _Py_ImportFrom(identifier module, asdl_seq * names, int level, int | ||
| 410 | lineno, int col_offset, PyArena *arena); | ||
| 411 | #define Exec(a0, a1, a2, a3, a4, a5) _Py_Exec(a0, a1, a2, a3, a4, a5) | ||
| 412 | stmt_ty _Py_Exec(expr_ty body, expr_ty globals, expr_ty locals, int lineno, int | ||
| 413 | col_offset, PyArena *arena); | ||
| 414 | #define Global(a0, a1, a2, a3) _Py_Global(a0, a1, a2, a3) | ||
| 415 | stmt_ty _Py_Global(asdl_seq * names, int lineno, int col_offset, PyArena | ||
| 416 | *arena); | ||
| 417 | #define Expr(a0, a1, a2, a3) _Py_Expr(a0, a1, a2, a3) | ||
| 418 | stmt_ty _Py_Expr(expr_ty value, int lineno, int col_offset, PyArena *arena); | ||
| 419 | #define Pass(a0, a1, a2) _Py_Pass(a0, a1, a2) | ||
| 420 | stmt_ty _Py_Pass(int lineno, int col_offset, PyArena *arena); | ||
| 421 | #define Break(a0, a1, a2) _Py_Break(a0, a1, a2) | ||
| 422 | stmt_ty _Py_Break(int lineno, int col_offset, PyArena *arena); | ||
| 423 | #define Continue(a0, a1, a2) _Py_Continue(a0, a1, a2) | ||
| 424 | stmt_ty _Py_Continue(int lineno, int col_offset, PyArena *arena); | ||
| 425 | #define BoolOp(a0, a1, a2, a3, a4) _Py_BoolOp(a0, a1, a2, a3, a4) | ||
| 426 | expr_ty _Py_BoolOp(boolop_ty op, asdl_seq * values, int lineno, int col_offset, | ||
| 427 | PyArena *arena); | ||
| 428 | #define BinOp(a0, a1, a2, a3, a4, a5) _Py_BinOp(a0, a1, a2, a3, a4, a5) | ||
| 429 | expr_ty _Py_BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int | ||
| 430 | col_offset, PyArena *arena); | ||
| 431 | #define UnaryOp(a0, a1, a2, a3, a4) _Py_UnaryOp(a0, a1, a2, a3, a4) | ||
| 432 | expr_ty _Py_UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset, | ||
| 433 | PyArena *arena); | ||
| 434 | #define Lambda(a0, a1, a2, a3, a4) _Py_Lambda(a0, a1, a2, a3, a4) | ||
| 435 | expr_ty _Py_Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset, | ||
| 436 | PyArena *arena); | ||
| 437 | #define IfExp(a0, a1, a2, a3, a4, a5) _Py_IfExp(a0, a1, a2, a3, a4, a5) | ||
| 438 | expr_ty _Py_IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int | ||
| 439 | col_offset, PyArena *arena); | ||
| 440 | #define Dict(a0, a1, a2, a3, a4) _Py_Dict(a0, a1, a2, a3, a4) | ||
| 441 | expr_ty _Py_Dict(asdl_seq * keys, asdl_seq * values, int lineno, int | ||
| 442 | col_offset, PyArena *arena); | ||
| 443 | #define ListComp(a0, a1, a2, a3, a4) _Py_ListComp(a0, a1, a2, a3, a4) | ||
| 444 | expr_ty _Py_ListComp(expr_ty elt, asdl_seq * generators, int lineno, int | ||
| 445 | col_offset, PyArena *arena); | ||
| 446 | #define GeneratorExp(a0, a1, a2, a3, a4) _Py_GeneratorExp(a0, a1, a2, a3, a4) | ||
| 447 | expr_ty _Py_GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno, int | ||
| 448 | col_offset, PyArena *arena); | ||
| 449 | #define Yield(a0, a1, a2, a3) _Py_Yield(a0, a1, a2, a3) | ||
| 450 | expr_ty _Py_Yield(expr_ty value, int lineno, int col_offset, PyArena *arena); | ||
| 451 | #define Compare(a0, a1, a2, a3, a4, a5) _Py_Compare(a0, a1, a2, a3, a4, a5) | ||
| 452 | expr_ty _Py_Compare(expr_ty left, asdl_int_seq * ops, asdl_seq * comparators, | ||
| 453 | int lineno, int col_offset, PyArena *arena); | ||
| 454 | #define Call(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Call(a0, a1, a2, a3, a4, a5, a6, a7) | ||
| 455 | expr_ty _Py_Call(expr_ty func, asdl_seq * args, asdl_seq * keywords, expr_ty | ||
| 456 | starargs, expr_ty kwargs, int lineno, int col_offset, PyArena | ||
| 457 | *arena); | ||
| 458 | #define Repr(a0, a1, a2, a3) _Py_Repr(a0, a1, a2, a3) | ||
| 459 | expr_ty _Py_Repr(expr_ty value, int lineno, int col_offset, PyArena *arena); | ||
| 460 | #define Num(a0, a1, a2, a3) _Py_Num(a0, a1, a2, a3) | ||
| 461 | expr_ty _Py_Num(object n, int lineno, int col_offset, PyArena *arena); | ||
| 462 | #define Str(a0, a1, a2, a3) _Py_Str(a0, a1, a2, a3) | ||
| 463 | expr_ty _Py_Str(string s, int lineno, int col_offset, PyArena *arena); | ||
| 464 | #define Attribute(a0, a1, a2, a3, a4, a5) _Py_Attribute(a0, a1, a2, a3, a4, a5) | ||
| 465 | expr_ty _Py_Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int | ||
| 466 | lineno, int col_offset, PyArena *arena); | ||
| 467 | #define Subscript(a0, a1, a2, a3, a4, a5) _Py_Subscript(a0, a1, a2, a3, a4, a5) | ||
| 468 | expr_ty _Py_Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int | ||
| 469 | lineno, int col_offset, PyArena *arena); | ||
| 470 | #define Name(a0, a1, a2, a3, a4) _Py_Name(a0, a1, a2, a3, a4) | ||
| 471 | expr_ty _Py_Name(identifier id, expr_context_ty ctx, int lineno, int | ||
| 472 | col_offset, PyArena *arena); | ||
| 473 | #define List(a0, a1, a2, a3, a4) _Py_List(a0, a1, a2, a3, a4) | ||
| 474 | expr_ty _Py_List(asdl_seq * elts, expr_context_ty ctx, int lineno, int | ||
| 475 | col_offset, PyArena *arena); | ||
| 476 | #define Tuple(a0, a1, a2, a3, a4) _Py_Tuple(a0, a1, a2, a3, a4) | ||
| 477 | expr_ty _Py_Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, int | ||
| 478 | col_offset, PyArena *arena); | ||
| 479 | #define Ellipsis(a0) _Py_Ellipsis(a0) | ||
| 480 | slice_ty _Py_Ellipsis(PyArena *arena); | ||
| 481 | #define Slice(a0, a1, a2, a3) _Py_Slice(a0, a1, a2, a3) | ||
| 482 | slice_ty _Py_Slice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena); | ||
| 483 | #define ExtSlice(a0, a1) _Py_ExtSlice(a0, a1) | ||
| 484 | slice_ty _Py_ExtSlice(asdl_seq * dims, PyArena *arena); | ||
| 485 | #define Index(a0, a1) _Py_Index(a0, a1) | ||
| 486 | slice_ty _Py_Index(expr_ty value, PyArena *arena); | ||
| 487 | #define comprehension(a0, a1, a2, a3) _Py_comprehension(a0, a1, a2, a3) | ||
| 488 | comprehension_ty _Py_comprehension(expr_ty target, expr_ty iter, asdl_seq * | ||
| 489 | ifs, PyArena *arena); | ||
| 490 | #define excepthandler(a0, a1, a2, a3, a4, a5) _Py_excepthandler(a0, a1, a2, a3, a4, a5) | ||
| 491 | excepthandler_ty _Py_excepthandler(expr_ty type, expr_ty name, asdl_seq * body, | ||
| 492 | int lineno, int col_offset, PyArena *arena); | ||
| 493 | #define arguments(a0, a1, a2, a3, a4) _Py_arguments(a0, a1, a2, a3, a4) | ||
| 494 | arguments_ty _Py_arguments(asdl_seq * args, identifier vararg, identifier | ||
| 495 | kwarg, asdl_seq * defaults, PyArena *arena); | ||
| 496 | #define keyword(a0, a1, a2) _Py_keyword(a0, a1, a2) | ||
| 497 | keyword_ty _Py_keyword(identifier arg, expr_ty value, PyArena *arena); | ||
| 498 | #define alias(a0, a1, a2) _Py_alias(a0, a1, a2) | ||
| 499 | alias_ty _Py_alias(identifier name, identifier asname, PyArena *arena); | ||
| 500 | |||
| 501 | PyObject* PyAST_mod2obj(mod_ty t); | ||
| @@ -0,0 +1,173 @@ | |||
| 1 | #ifndef Py_PYTHON_H | ||
| 2 | #define Py_PYTHON_H | ||
| 3 | /* Since this is a "meta-include" file, no #ifdef __cplusplus / extern "C" { */ | ||
| 4 | |||
| 5 | /* Include nearly all Python header files */ | ||
| 6 | |||
| 7 | #include "patchlevel.h" | ||
| 8 | #include "pyconfig.h" | ||
| 9 | |||
| 10 | /* Cyclic gc is always enabled, starting with release 2.3a1. Supply the | ||
| 11 | * old symbol for the benefit of extension modules written before then | ||
| 12 | * that may be conditionalizing on it. The core doesn't use it anymore. | ||
| 13 | */ | ||
| 14 | #ifndef WITH_CYCLE_GC | ||
| 15 | #define WITH_CYCLE_GC 1 | ||
| 16 | #endif | ||
| 17 | |||
| 18 | #include <limits.h> | ||
| 19 | |||
| 20 | #ifndef UCHAR_MAX | ||
| 21 | #error "Something's broken. UCHAR_MAX should be defined in limits.h." | ||
| 22 | #endif | ||
| 23 | |||
| 24 | #if UCHAR_MAX != 255 | ||
| 25 | #error "Python's source code assumes C's unsigned char is an 8-bit type." | ||
| 26 | #endif | ||
| 27 | |||
| 28 | #if defined(__sgi) && defined(WITH_THREAD) && !defined(_SGI_MP_SOURCE) | ||
| 29 | #define _SGI_MP_SOURCE | ||
| 30 | #endif | ||
| 31 | |||
| 32 | #include <stdio.h> | ||
| 33 | #ifndef NULL | ||
| 34 | # error "Python.h requires that stdio.h define NULL." | ||
| 35 | #endif | ||
| 36 | |||
| 37 | #include <string.h> | ||
| 38 | #ifdef HAVE_ERRNO_H | ||
| 39 | #include <errno.h> | ||
| 40 | #endif | ||
| 41 | #include <stdlib.h> | ||
| 42 | #ifdef HAVE_UNISTD_H | ||
| 43 | #include <unistd.h> | ||
| 44 | #endif | ||
| 45 | |||
| 46 | /* For uintptr_t, intptr_t */ | ||
| 47 | #ifdef HAVE_STDDEF_H | ||
| 48 | #include <stddef.h> | ||
| 49 | #endif | ||
| 50 | |||
| 51 | /* CAUTION: Build setups should ensure that NDEBUG is defined on the | ||
| 52 | * compiler command line when building Python in release mode; else | ||
| 53 | * assert() calls won't be removed. | ||
| 54 | */ | ||
| 55 | #include <assert.h> | ||
| 56 | |||
| 57 | #include "pyport.h" | ||
| 58 | |||
| 59 | /* pyconfig.h or pyport.h may or may not define DL_IMPORT */ | ||
| 60 | #ifndef DL_IMPORT /* declarations for DLL import/export */ | ||
| 61 | #define DL_IMPORT(RTYPE) RTYPE | ||
| 62 | #endif | ||
| 63 | #ifndef DL_EXPORT /* declarations for DLL import/export */ | ||
| 64 | #define DL_EXPORT(RTYPE) RTYPE | ||
| 65 | #endif | ||
| 66 | |||
| 67 | /* Debug-mode build with pymalloc implies PYMALLOC_DEBUG. | ||
| 68 | * PYMALLOC_DEBUG is in error if pymalloc is not in use. | ||
| 69 | */ | ||
| 70 | #if defined(Py_DEBUG) && defined(WITH_PYMALLOC) && !defined(PYMALLOC_DEBUG) | ||
| 71 | #define PYMALLOC_DEBUG | ||
| 72 | #endif | ||
| 73 | #if defined(PYMALLOC_DEBUG) && !defined(WITH_PYMALLOC) | ||
| 74 | #error "PYMALLOC_DEBUG requires WITH_PYMALLOC" | ||
| 75 | #endif | ||
| 76 | #include "pymem.h" | ||
| 77 | |||
| 78 | #include "object.h" | ||
| 79 | #include "objimpl.h" | ||
| 80 | |||
| 81 | #include "pydebug.h" | ||
| 82 | |||
| 83 | #include "unicodeobject.h" | ||
| 84 | #include "intobject.h" | ||
| 85 | #include "boolobject.h" | ||
| 86 | #include "longobject.h" | ||
| 87 | #include "floatobject.h" | ||
| 88 | #ifndef WITHOUT_COMPLEX | ||
| 89 | #include "complexobject.h" | ||
| 90 | #endif | ||
| 91 | #include "rangeobject.h" | ||
| 92 | #include "stringobject.h" | ||
| 93 | #include "bufferobject.h" | ||
| 94 | #include "tupleobject.h" | ||
| 95 | #include "listobject.h" | ||
| 96 | #include "dictobject.h" | ||
| 97 | #include "enumobject.h" | ||
| 98 | #include "setobject.h" | ||
| 99 | #include "methodobject.h" | ||
| 100 | #include "moduleobject.h" | ||
| 101 | #include "funcobject.h" | ||
| 102 | #include "classobject.h" | ||
| 103 | #include "fileobject.h" | ||
| 104 | #include "cobject.h" | ||
| 105 | #include "traceback.h" | ||
| 106 | #include "sliceobject.h" | ||
| 107 | #include "cellobject.h" | ||
| 108 | #include "iterobject.h" | ||
| 109 | #include "genobject.h" | ||
| 110 | #include "descrobject.h" | ||
| 111 | #include "weakrefobject.h" | ||
| 112 | |||
| 113 | #include "codecs.h" | ||
| 114 | #include "pyerrors.h" | ||
| 115 | |||
| 116 | #include "pystate.h" | ||
| 117 | |||
| 118 | #include "pyarena.h" | ||
| 119 | #include "modsupport.h" | ||
| 120 | #include "pythonrun.h" | ||
| 121 | #include "ceval.h" | ||
| 122 | #include "sysmodule.h" | ||
| 123 | #include "intrcheck.h" | ||
| 124 | #include "import.h" | ||
| 125 | |||
| 126 | #include "abstract.h" | ||
| 127 | |||
| 128 | #include "compile.h" | ||
| 129 | #include "eval.h" | ||
| 130 | |||
| 131 | #include "pystrtod.h" | ||
| 132 | |||
| 133 | /* _Py_Mangle is defined in compile.c */ | ||
| 134 | PyAPI_FUNC(PyObject*) _Py_Mangle(PyObject *p, PyObject *name); | ||
| 135 | |||
| 136 | /* PyArg_GetInt is deprecated and should not be used, use PyArg_Parse(). */ | ||
| 137 | #define PyArg_GetInt(v, a) PyArg_Parse((v), "i", (a)) | ||
| 138 | |||
| 139 | /* PyArg_NoArgs should not be necessary. | ||
| 140 | Set ml_flags in the PyMethodDef to METH_NOARGS. */ | ||
| 141 | #define PyArg_NoArgs(v) PyArg_Parse(v, "") | ||
| 142 | |||
| 143 | /* Convert a possibly signed character to a nonnegative int */ | ||
| 144 | /* XXX This assumes characters are 8 bits wide */ | ||
| 145 | #ifdef __CHAR_UNSIGNED__ | ||
| 146 | #define Py_CHARMASK(c) (c) | ||
| 147 | #else | ||
| 148 | #define Py_CHARMASK(c) ((c) & 0xff) | ||
| 149 | #endif | ||
| 150 | |||
| 151 | #include "pyfpe.h" | ||
| 152 | |||
| 153 | /* These definitions must match corresponding definitions in graminit.h. | ||
| 154 | There's code in compile.c that checks that they are the same. */ | ||
| 155 | #define Py_single_input 256 | ||
| 156 | #define Py_file_input 257 | ||
| 157 | #define Py_eval_input 258 | ||
| 158 | |||
| 159 | #ifdef HAVE_PTH | ||
| 160 | /* GNU pth user-space thread support */ | ||
| 161 | #include <pth.h> | ||
| 162 | #endif | ||
| 163 | |||
| 164 | /* Define macros for inline documentation. */ | ||
| 165 | #define PyDoc_VAR(name) static char name[] | ||
| 166 | #define PyDoc_STRVAR(name,str) PyDoc_VAR(name) = PyDoc_STR(str) | ||
| 167 | #ifdef WITH_DOC_STRINGS | ||
| 168 | #define PyDoc_STR(str) str | ||
| 169 | #else | ||
| 170 | #define PyDoc_STR(str) "" | ||
| 171 | #endif | ||
| 172 | |||
| 173 | #endif /* !Py_PYTHON_H */ | ||
| @@ -0,0 +1,1276 @@ | |||
| 1 | #ifndef Py_ABSTRACTOBJECT_H | ||
| 2 | #define Py_ABSTRACTOBJECT_H | ||
| 3 | #ifdef __cplusplus | ||
| 4 | extern "C" { | ||
| 5 | #endif | ||
| 6 | |||
| 7 | #ifdef PY_SSIZE_T_CLEAN | ||
| 8 | #define PyObject_CallFunction _PyObject_CallFunction_SizeT | ||
| 9 | #define PyObject_CallMethod _PyObject_CallMethod_SizeT | ||
| 10 | #endif | ||
| 11 | |||
| 12 | /* Abstract Object Interface (many thanks to Jim Fulton) */ | ||
| 13 | |||
| 14 | /* | ||
| 15 | PROPOSAL: A Generic Python Object Interface for Python C Modules | ||
| 16 | |||
| 17 | Problem | ||
| 18 | |||
| 19 | Python modules written in C that must access Python objects must do | ||
| 20 | so through routines whose interfaces are described by a set of | ||
| 21 | include files. Unfortunately, these routines vary according to the | ||
| 22 | object accessed. To use these routines, the C programmer must check | ||
| 23 | the type of the object being used and must call a routine based on | ||
| 24 | the object type. For example, to access an element of a sequence, | ||
| 25 | the programmer must determine whether the sequence is a list or a | ||
| 26 | tuple: | ||
| 27 | |||
| 28 | if(is_tupleobject(o)) | ||
| 29 | e=gettupleitem(o,i) | ||
| 30 | else if(is_listitem(o)) | ||
| 31 | e=getlistitem(o,i) | ||
| 32 | |||
| 33 | If the programmer wants to get an item from another type of object | ||
| 34 | that provides sequence behavior, there is no clear way to do it | ||
| 35 | correctly. | ||
| 36 | |||
| 37 | The persistent programmer may peruse object.h and find that the | ||
| 38 | _typeobject structure provides a means of invoking up to (currently | ||
| 39 | about) 41 special operators. So, for example, a routine can get an | ||
| 40 | item from any object that provides sequence behavior. However, to | ||
| 41 | use this mechanism, the programmer must make their code dependent on | ||
| 42 | the current Python implementation. | ||
| 43 | |||
| 44 | Also, certain semantics, especially memory management semantics, may | ||
| 45 | differ by the type of object being used. Unfortunately, these | ||
| 46 | semantics are not clearly described in the current include files. | ||
| 47 | An abstract interface providing more consistent semantics is needed. | ||
| 48 | |||
| 49 | Proposal | ||
| 50 | |||
| 51 | I propose the creation of a standard interface (with an associated | ||
| 52 | library of routines and/or macros) for generically obtaining the | ||
| 53 | services of Python objects. This proposal can be viewed as one | ||
| 54 | components of a Python C interface consisting of several components. | ||
| 55 | |||
| 56 | From the viewpoint of C access to Python services, we have (as | ||
| 57 | suggested by Guido in off-line discussions): | ||
| 58 | |||
| 59 | - "Very high level layer": two or three functions that let you exec or | ||
| 60 | eval arbitrary Python code given as a string in a module whose name is | ||
| 61 | given, passing C values in and getting C values out using | ||
| 62 | mkvalue/getargs style format strings. This does not require the user | ||
| 63 | to declare any variables of type "PyObject *". This should be enough | ||
| 64 | to write a simple application that gets Python code from the user, | ||
| 65 | execs it, and returns the output or errors. (Error handling must also | ||
| 66 | be part of this API.) | ||
| 67 | |||
| 68 | - "Abstract objects layer": which is the subject of this proposal. | ||
| 69 | It has many functions operating on objects, and lest you do many | ||
| 70 | things from C that you can also write in Python, without going | ||
| 71 | through the Python parser. | ||
| 72 | |||
| 73 | - "Concrete objects layer": This is the public type-dependent | ||
| 74 | interface provided by the standard built-in types, such as floats, | ||
| 75 | strings, and lists. This interface exists and is currently | ||
| 76 | documented by the collection of include files provided with the | ||
| 77 | Python distributions. | ||
| 78 | |||
| 79 | From the point of view of Python accessing services provided by C | ||
| 80 | modules: | ||
| 81 | |||
| 82 | - "Python module interface": this interface consist of the basic | ||
| 83 | routines used to define modules and their members. Most of the | ||
| 84 | current extensions-writing guide deals with this interface. | ||
| 85 | |||
| 86 | - "Built-in object interface": this is the interface that a new | ||
| 87 | built-in type must provide and the mechanisms and rules that a | ||
| 88 | developer of a new built-in type must use and follow. | ||
| 89 | |||
| 90 | This proposal is a "first-cut" that is intended to spur | ||
| 91 | discussion. See especially the lists of notes. | ||
| 92 | |||
| 93 | The Python C object interface will provide four protocols: object, | ||
| 94 | numeric, sequence, and mapping. Each protocol consists of a | ||
| 95 | collection of related operations. If an operation that is not | ||
| 96 | provided by a particular type is invoked, then a standard exception, | ||
| 97 | NotImplementedError is raised with a operation name as an argument. | ||
| 98 | In addition, for convenience this interface defines a set of | ||
| 99 | constructors for building objects of built-in types. This is needed | ||
| 100 | so new objects can be returned from C functions that otherwise treat | ||
| 101 | objects generically. | ||
| 102 | |||
| 103 | Memory Management | ||
| 104 | |||
| 105 | For all of the functions described in this proposal, if a function | ||
| 106 | retains a reference to a Python object passed as an argument, then the | ||
| 107 | function will increase the reference count of the object. It is | ||
| 108 | unnecessary for the caller to increase the reference count of an | ||
| 109 | argument in anticipation of the object's retention. | ||
| 110 | |||
| 111 | All Python objects returned from functions should be treated as new | ||
| 112 | objects. Functions that return objects assume that the caller will | ||
| 113 | retain a reference and the reference count of the object has already | ||
| 114 | been incremented to account for this fact. A caller that does not | ||
| 115 | retain a reference to an object that is returned from a function | ||
| 116 | must decrement the reference count of the object (using | ||
| 117 | DECREF(object)) to prevent memory leaks. | ||
| 118 | |||
| 119 | Note that the behavior mentioned here is different from the current | ||
| 120 | behavior for some objects (e.g. lists and tuples) when certain | ||
| 121 | type-specific routines are called directly (e.g. setlistitem). The | ||
| 122 | proposed abstraction layer will provide a consistent memory | ||
| 123 | management interface, correcting for inconsistent behavior for some | ||
| 124 | built-in types. | ||
| 125 | |||
| 126 | Protocols | ||
| 127 | |||
| 128 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx*/ | ||
| 129 | |||
| 130 | /* Object Protocol: */ | ||
| 131 | |||
| 132 | /* Implemented elsewhere: | ||
| 133 | |||
| 134 | int PyObject_Print(PyObject *o, FILE *fp, int flags); | ||
| 135 | |||
| 136 | Print an object, o, on file, fp. Returns -1 on | ||
| 137 | error. The flags argument is used to enable certain printing | ||
| 138 | options. The only option currently supported is Py_Print_RAW. | ||
| 139 | |||
| 140 | (What should be said about Py_Print_RAW?) | ||
| 141 | |||
| 142 | */ | ||
| 143 | |||
| 144 | /* Implemented elsewhere: | ||
| 145 | |||
| 146 | int PyObject_HasAttrString(PyObject *o, char *attr_name); | ||
| 147 | |||
| 148 | Returns 1 if o has the attribute attr_name, and 0 otherwise. | ||
| 149 | This is equivalent to the Python expression: | ||
| 150 | hasattr(o,attr_name). | ||
| 151 | |||
| 152 | This function always succeeds. | ||
| 153 | |||
| 154 | */ | ||
| 155 | |||
| 156 | /* Implemented elsewhere: | ||
| 157 | |||
| 158 | PyObject* PyObject_GetAttrString(PyObject *o, char *attr_name); | ||
| 159 | |||
| 160 | Retrieve an attributed named attr_name form object o. | ||
| 161 | Returns the attribute value on success, or NULL on failure. | ||
| 162 | This is the equivalent of the Python expression: o.attr_name. | ||
| 163 | |||
| 164 | */ | ||
| 165 | |||
| 166 | /* Implemented elsewhere: | ||
| 167 | |||
| 168 | int PyObject_HasAttr(PyObject *o, PyObject *attr_name); | ||
| 169 | |||
| 170 | Returns 1 if o has the attribute attr_name, and 0 otherwise. | ||
| 171 | This is equivalent to the Python expression: | ||
| 172 | hasattr(o,attr_name). | ||
| 173 | |||
| 174 | This function always succeeds. | ||
| 175 | |||
| 176 | */ | ||
| 177 | |||
| 178 | /* Implemented elsewhere: | ||
| 179 | |||
| 180 | PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name); | ||
| 181 | |||
| 182 | Retrieve an attributed named attr_name form object o. | ||
| 183 | Returns the attribute value on success, or NULL on failure. | ||
| 184 | This is the equivalent of the Python expression: o.attr_name. | ||
| 185 | |||
| 186 | */ | ||
| 187 | |||
| 188 | |||
| 189 | /* Implemented elsewhere: | ||
| 190 | |||
| 191 | int PyObject_SetAttrString(PyObject *o, char *attr_name, PyObject *v); | ||
| 192 | |||
| 193 | Set the value of the attribute named attr_name, for object o, | ||
| 194 | to the value, v. Returns -1 on failure. This is | ||
| 195 | the equivalent of the Python statement: o.attr_name=v. | ||
| 196 | |||
| 197 | */ | ||
| 198 | |||
| 199 | /* Implemented elsewhere: | ||
| 200 | |||
| 201 | int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v); | ||
| 202 | |||
| 203 | Set the value of the attribute named attr_name, for object o, | ||
| 204 | to the value, v. Returns -1 on failure. This is | ||
| 205 | the equivalent of the Python statement: o.attr_name=v. | ||
| 206 | |||
| 207 | */ | ||
| 208 | |||
| 209 | /* implemented as a macro: | ||
| 210 | |||
| 211 | int PyObject_DelAttrString(PyObject *o, char *attr_name); | ||
| 212 | |||
| 213 | Delete attribute named attr_name, for object o. Returns | ||
| 214 | -1 on failure. This is the equivalent of the Python | ||
| 215 | statement: del o.attr_name. | ||
| 216 | |||
| 217 | */ | ||
| 218 | #define PyObject_DelAttrString(O,A) PyObject_SetAttrString((O),(A),NULL) | ||
| 219 | |||
| 220 | /* implemented as a macro: | ||
| 221 | |||
| 222 | int PyObject_DelAttr(PyObject *o, PyObject *attr_name); | ||
| 223 | |||
| 224 | Delete attribute named attr_name, for object o. Returns -1 | ||
| 225 | on failure. This is the equivalent of the Python | ||
| 226 | statement: del o.attr_name. | ||
| 227 | |||
| 228 | */ | ||
| 229 | #define PyObject_DelAttr(O,A) PyObject_SetAttr((O),(A),NULL) | ||
| 230 | |||
| 231 | PyAPI_FUNC(int) PyObject_Cmp(PyObject *o1, PyObject *o2, int *result); | ||
| 232 | |||
| 233 | /* | ||
| 234 | Compare the values of o1 and o2 using a routine provided by | ||
| 235 | o1, if one exists, otherwise with a routine provided by o2. | ||
| 236 | The result of the comparison is returned in result. Returns | ||
| 237 | -1 on failure. This is the equivalent of the Python | ||
| 238 | statement: result=cmp(o1,o2). | ||
| 239 | |||
| 240 | */ | ||
| 241 | |||
| 242 | /* Implemented elsewhere: | ||
| 243 | |||
| 244 | int PyObject_Compare(PyObject *o1, PyObject *o2); | ||
| 245 | |||
| 246 | Compare the values of o1 and o2 using a routine provided by | ||
| 247 | o1, if one exists, otherwise with a routine provided by o2. | ||
| 248 | Returns the result of the comparison on success. On error, | ||
| 249 | the value returned is undefined. This is equivalent to the | ||
| 250 | Python expression: cmp(o1,o2). | ||
| 251 | |||
| 252 | */ | ||
| 253 | |||
| 254 | /* Implemented elsewhere: | ||
| 255 | |||
| 256 | PyObject *PyObject_Repr(PyObject *o); | ||
| 257 | |||
| 258 | Compute the string representation of object, o. Returns the | ||
| 259 | string representation on success, NULL on failure. This is | ||
| 260 | the equivalent of the Python expression: repr(o). | ||
| 261 | |||
| 262 | Called by the repr() built-in function and by reverse quotes. | ||
| 263 | |||
| 264 | */ | ||
| 265 | |||
| 266 | /* Implemented elsewhere: | ||
| 267 | |||
| 268 | PyObject *PyObject_Str(PyObject *o); | ||
| 269 | |||
| 270 | Compute the string representation of object, o. Returns the | ||
| 271 | string representation on success, NULL on failure. This is | ||
| 272 | the equivalent of the Python expression: str(o).) | ||
| 273 | |||
| 274 | Called by the str() built-in function and by the print | ||
| 275 | statement. | ||
| 276 | |||
| 277 | */ | ||
| 278 | |||
| 279 | /* Implemented elsewhere: | ||
| 280 | |||
| 281 | PyObject *PyObject_Unicode(PyObject *o); | ||
| 282 | |||
| 283 | Compute the unicode representation of object, o. Returns the | ||
| 284 | unicode representation on success, NULL on failure. This is | ||
| 285 | the equivalent of the Python expression: unistr(o).) | ||
| 286 | |||
| 287 | Called by the unistr() built-in function. | ||
| 288 | |||
| 289 | */ | ||
| 290 | |||
| 291 | /* Declared elsewhere | ||
| 292 | |||
| 293 | PyAPI_FUNC(int) PyCallable_Check(PyObject *o); | ||
| 294 | |||
| 295 | Determine if the object, o, is callable. Return 1 if the | ||
| 296 | object is callable and 0 otherwise. | ||
| 297 | |||
| 298 | This function always succeeds. | ||
| 299 | |||
| 300 | */ | ||
| 301 | |||
| 302 | |||
| 303 | |||
| 304 | PyAPI_FUNC(PyObject *) PyObject_Call(PyObject *callable_object, | ||
| 305 | PyObject *args, PyObject *kw); | ||
| 306 | |||
| 307 | /* | ||
| 308 | Call a callable Python object, callable_object, with | ||
| 309 | arguments and keywords arguments. The 'args' argument can not be | ||
| 310 | NULL, but the 'kw' argument can be NULL. | ||
| 311 | |||
| 312 | */ | ||
| 313 | |||
| 314 | PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable_object, | ||
| 315 | PyObject *args); | ||
| 316 | |||
| 317 | /* | ||
| 318 | Call a callable Python object, callable_object, with | ||
| 319 | arguments given by the tuple, args. If no arguments are | ||
| 320 | needed, then args may be NULL. Returns the result of the | ||
| 321 | call on success, or NULL on failure. This is the equivalent | ||
| 322 | of the Python expression: apply(o,args). | ||
| 323 | |||
| 324 | */ | ||
| 325 | |||
| 326 | PyAPI_FUNC(PyObject *) PyObject_CallFunction(PyObject *callable_object, | ||
| 327 | char *format, ...); | ||
| 328 | |||
| 329 | /* | ||
| 330 | Call a callable Python object, callable_object, with a | ||
| 331 | variable number of C arguments. The C arguments are described | ||
| 332 | using a mkvalue-style format string. The format may be NULL, | ||
| 333 | indicating that no arguments are provided. Returns the | ||
| 334 | result of the call on success, or NULL on failure. This is | ||
| 335 | the equivalent of the Python expression: apply(o,args). | ||
| 336 | |||
| 337 | */ | ||
| 338 | |||
| 339 | |||
| 340 | PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *o, char *m, | ||
| 341 | char *format, ...); | ||
| 342 | |||
| 343 | /* | ||
| 344 | Call the method named m of object o with a variable number of | ||
| 345 | C arguments. The C arguments are described by a mkvalue | ||
| 346 | format string. The format may be NULL, indicating that no | ||
| 347 | arguments are provided. Returns the result of the call on | ||
| 348 | success, or NULL on failure. This is the equivalent of the | ||
| 349 | Python expression: o.method(args). | ||
| 350 | */ | ||
| 351 | |||
| 352 | PyAPI_FUNC(PyObject *) _PyObject_CallFunction_SizeT(PyObject *callable, | ||
| 353 | char *format, ...); | ||
| 354 | PyAPI_FUNC(PyObject *) _PyObject_CallMethod_SizeT(PyObject *o, | ||
| 355 | char *name, | ||
| 356 | char *format, ...); | ||
| 357 | |||
| 358 | PyAPI_FUNC(PyObject *) PyObject_CallFunctionObjArgs(PyObject *callable, | ||
| 359 | ...); | ||
| 360 | |||
| 361 | /* | ||
| 362 | Call a callable Python object, callable_object, with a | ||
| 363 | variable number of C arguments. The C arguments are provided | ||
| 364 | as PyObject * values, terminated by a NULL. Returns the | ||
| 365 | result of the call on success, or NULL on failure. This is | ||
| 366 | the equivalent of the Python expression: apply(o,args). | ||
| 367 | */ | ||
| 368 | |||
| 369 | |||
| 370 | PyAPI_FUNC(PyObject *) PyObject_CallMethodObjArgs(PyObject *o, | ||
| 371 | PyObject *m, ...); | ||
| 372 | |||
| 373 | /* | ||
| 374 | Call the method named m of object o with a variable number of | ||
| 375 | C arguments. The C arguments are provided as PyObject * | ||
| 376 | values, terminated by NULL. Returns the result of the call | ||
| 377 | on success, or NULL on failure. This is the equivalent of | ||
| 378 | the Python expression: o.method(args). | ||
| 379 | */ | ||
| 380 | |||
| 381 | |||
| 382 | /* Implemented elsewhere: | ||
| 383 | |||
| 384 | long PyObject_Hash(PyObject *o); | ||
| 385 | |||
| 386 | Compute and return the hash, hash_value, of an object, o. On | ||
| 387 | failure, return -1. This is the equivalent of the Python | ||
| 388 | expression: hash(o). | ||
| 389 | |||
| 390 | */ | ||
| 391 | |||
| 392 | |||
| 393 | /* Implemented elsewhere: | ||
| 394 | |||
| 395 | int PyObject_IsTrue(PyObject *o); | ||
| 396 | |||
| 397 | Returns 1 if the object, o, is considered to be true, 0 if o is | ||
| 398 | considered to be false and -1 on failure. This is equivalent to the | ||
| 399 | Python expression: not not o | ||
| 400 | |||
| 401 | */ | ||
| 402 | |||
| 403 | /* Implemented elsewhere: | ||
| 404 | |||
| 405 | int PyObject_Not(PyObject *o); | ||
| 406 | |||
| 407 | Returns 0 if the object, o, is considered to be true, 1 if o is | ||
| 408 | considered to be false and -1 on failure. This is equivalent to the | ||
| 409 | Python expression: not o | ||
| 410 | |||
| 411 | */ | ||
| 412 | |||
| 413 | PyAPI_FUNC(PyObject *) PyObject_Type(PyObject *o); | ||
| 414 | |||
| 415 | /* | ||
| 416 | On success, returns a type object corresponding to the object | ||
| 417 | type of object o. On failure, returns NULL. This is | ||
| 418 | equivalent to the Python expression: type(o). | ||
| 419 | */ | ||
| 420 | |||
| 421 | PyAPI_FUNC(Py_ssize_t) PyObject_Size(PyObject *o); | ||
| 422 | |||
| 423 | /* | ||
| 424 | Return the size of object o. If the object, o, provides | ||
| 425 | both sequence and mapping protocols, the sequence size is | ||
| 426 | returned. On error, -1 is returned. This is the equivalent | ||
| 427 | to the Python expression: len(o). | ||
| 428 | |||
| 429 | */ | ||
| 430 | |||
| 431 | /* For DLL compatibility */ | ||
| 432 | #undef PyObject_Length | ||
| 433 | PyAPI_FUNC(Py_ssize_t) PyObject_Length(PyObject *o); | ||
| 434 | #define PyObject_Length PyObject_Size | ||
| 435 | |||
| 436 | PyAPI_FUNC(Py_ssize_t) _PyObject_LengthHint(PyObject *o); | ||
| 437 | |||
| 438 | /* | ||
| 439 | Return the size of object o. If the object, o, provides | ||
| 440 | both sequence and mapping protocols, the sequence size is | ||
| 441 | returned. On error, -1 is returned. If the object provides | ||
| 442 | a __length_hint__() method, its value is returned. This is an | ||
| 443 | internal undocumented API provided for performance reasons; | ||
| 444 | for compatibility, don't use it outside the core. This is the | ||
| 445 | equivalent to the Python expression: | ||
| 446 | try: | ||
| 447 | return len(o) | ||
| 448 | except (AttributeError, TypeError): | ||
| 449 | exc_type, exc_value, exc_tb = sys.exc_info() | ||
| 450 | try: | ||
| 451 | return o.__length_hint__() | ||
| 452 | except: | ||
| 453 | pass | ||
| 454 | raise exc_type, exc_value, exc_tb | ||
| 455 | */ | ||
| 456 | |||
| 457 | PyAPI_FUNC(PyObject *) PyObject_GetItem(PyObject *o, PyObject *key); | ||
| 458 | |||
| 459 | /* | ||
| 460 | Return element of o corresponding to the object, key, or NULL | ||
| 461 | on failure. This is the equivalent of the Python expression: | ||
| 462 | o[key]. | ||
| 463 | |||
| 464 | */ | ||
| 465 | |||
| 466 | PyAPI_FUNC(int) PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v); | ||
| 467 | |||
| 468 | /* | ||
| 469 | Map the object, key, to the value, v. Returns | ||
| 470 | -1 on failure. This is the equivalent of the Python | ||
| 471 | statement: o[key]=v. | ||
| 472 | */ | ||
| 473 | |||
| 474 | PyAPI_FUNC(int) PyObject_DelItemString(PyObject *o, char *key); | ||
| 475 | |||
| 476 | /* | ||
| 477 | Remove the mapping for object, key, from the object *o. | ||
| 478 | Returns -1 on failure. This is equivalent to | ||
| 479 | the Python statement: del o[key]. | ||
| 480 | */ | ||
| 481 | |||
| 482 | PyAPI_FUNC(int) PyObject_DelItem(PyObject *o, PyObject *key); | ||
| 483 | |||
| 484 | /* | ||
| 485 | Delete the mapping for key from *o. Returns -1 on failure. | ||
| 486 | This is the equivalent of the Python statement: del o[key]. | ||
| 487 | */ | ||
| 488 | |||
| 489 | PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj, | ||
| 490 | const char **buffer, | ||
| 491 | Py_ssize_t *buffer_len); | ||
| 492 | |||
| 493 | /* | ||
| 494 | Takes an arbitrary object which must support the (character, | ||
| 495 | single segment) buffer interface and returns a pointer to a | ||
| 496 | read-only memory location useable as character based input | ||
| 497 | for subsequent processing. | ||
| 498 | |||
| 499 | 0 is returned on success. buffer and buffer_len are only | ||
| 500 | set in case no error occurs. Otherwise, -1 is returned and | ||
| 501 | an exception set. | ||
| 502 | |||
| 503 | */ | ||
| 504 | |||
| 505 | PyAPI_FUNC(int) PyObject_CheckReadBuffer(PyObject *obj); | ||
| 506 | |||
| 507 | /* | ||
| 508 | Checks whether an arbitrary object supports the (character, | ||
| 509 | single segment) buffer interface. Returns 1 on success, 0 | ||
| 510 | on failure. | ||
| 511 | |||
| 512 | */ | ||
| 513 | |||
| 514 | PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj, | ||
| 515 | const void **buffer, | ||
| 516 | Py_ssize_t *buffer_len); | ||
| 517 | |||
| 518 | /* | ||
| 519 | Same as PyObject_AsCharBuffer() except that this API expects | ||
| 520 | (readable, single segment) buffer interface and returns a | ||
| 521 | pointer to a read-only memory location which can contain | ||
| 522 | arbitrary data. | ||
| 523 | |||
| 524 | 0 is returned on success. buffer and buffer_len are only | ||
| 525 | set in case no error occurrs. Otherwise, -1 is returned and | ||
| 526 | an exception set. | ||
| 527 | |||
| 528 | */ | ||
| 529 | |||
| 530 | PyAPI_FUNC(int) PyObject_AsWriteBuffer(PyObject *obj, | ||
| 531 | void **buffer, | ||
| 532 | Py_ssize_t *buffer_len); | ||
| 533 | |||
| 534 | /* | ||
| 535 | Takes an arbitrary object which must support the (writeable, | ||
| 536 | single segment) buffer interface and returns a pointer to a | ||
| 537 | writeable memory location in buffer of size buffer_len. | ||
| 538 | |||
| 539 | 0 is returned on success. buffer and buffer_len are only | ||
| 540 | set in case no error occurrs. Otherwise, -1 is returned and | ||
| 541 | an exception set. | ||
| 542 | |||
| 543 | */ | ||
| 544 | |||
| 545 | /* Iterators */ | ||
| 546 | |||
| 547 | PyAPI_FUNC(PyObject *) PyObject_GetIter(PyObject *); | ||
| 548 | /* Takes an object and returns an iterator for it. | ||
| 549 | This is typically a new iterator but if the argument | ||
| 550 | is an iterator, this returns itself. */ | ||
| 551 | |||
| 552 | #define PyIter_Check(obj) \ | ||
| 553 | (PyType_HasFeature((obj)->ob_type, Py_TPFLAGS_HAVE_ITER) && \ | ||
| 554 | (obj)->ob_type->tp_iternext != NULL) | ||
| 555 | |||
| 556 | PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *); | ||
| 557 | /* Takes an iterator object and calls its tp_iternext slot, | ||
| 558 | returning the next value. If the iterator is exhausted, | ||
| 559 | this returns NULL without setting an exception. | ||
| 560 | NULL with an exception means an error occurred. */ | ||
| 561 | |||
| 562 | /* Number Protocol:*/ | ||
| 563 | |||
| 564 | PyAPI_FUNC(int) PyNumber_Check(PyObject *o); | ||
| 565 | |||
| 566 | /* | ||
| 567 | Returns 1 if the object, o, provides numeric protocols, and | ||
| 568 | false otherwise. | ||
| 569 | |||
| 570 | This function always succeeds. | ||
| 571 | |||
| 572 | */ | ||
| 573 | |||
| 574 | PyAPI_FUNC(PyObject *) PyNumber_Add(PyObject *o1, PyObject *o2); | ||
| 575 | |||
| 576 | /* | ||
| 577 | Returns the result of adding o1 and o2, or null on failure. | ||
| 578 | This is the equivalent of the Python expression: o1+o2. | ||
| 579 | |||
| 580 | |||
| 581 | */ | ||
| 582 | |||
| 583 | PyAPI_FUNC(PyObject *) PyNumber_Subtract(PyObject *o1, PyObject *o2); | ||
| 584 | |||
| 585 | /* | ||
| 586 | Returns the result of subtracting o2 from o1, or null on | ||
| 587 | failure. This is the equivalent of the Python expression: | ||
| 588 | o1-o2. | ||
| 589 | |||
| 590 | */ | ||
| 591 | |||
| 592 | PyAPI_FUNC(PyObject *) PyNumber_Multiply(PyObject *o1, PyObject *o2); | ||
| 593 | |||
| 594 | /* | ||
| 595 | Returns the result of multiplying o1 and o2, or null on | ||
| 596 | failure. This is the equivalent of the Python expression: | ||
| 597 | o1*o2. | ||
| 598 | |||
| 599 | |||
| 600 | */ | ||
| 601 | |||
| 602 | PyAPI_FUNC(PyObject *) PyNumber_Divide(PyObject *o1, PyObject *o2); | ||
| 603 | |||
| 604 | /* | ||
| 605 | Returns the result of dividing o1 by o2, or null on failure. | ||
| 606 | This is the equivalent of the Python expression: o1/o2. | ||
| 607 | |||
| 608 | |||
| 609 | */ | ||
| 610 | |||
| 611 | PyAPI_FUNC(PyObject *) PyNumber_FloorDivide(PyObject *o1, PyObject *o2); | ||
| 612 | |||
| 613 | /* | ||
| 614 | Returns the result of dividing o1 by o2 giving an integral result, | ||
| 615 | or null on failure. | ||
| 616 | This is the equivalent of the Python expression: o1//o2. | ||
| 617 | |||
| 618 | |||
| 619 | */ | ||
| 620 | |||
| 621 | PyAPI_FUNC(PyObject *) PyNumber_TrueDivide(PyObject *o1, PyObject *o2); | ||
| 622 | |||
| 623 | /* | ||
| 624 | Returns the result of dividing o1 by o2 giving a float result, | ||
| 625 | or null on failure. | ||
| 626 | This is the equivalent of the Python expression: o1/o2. | ||
| 627 | |||
| 628 | |||
| 629 | */ | ||
| 630 | |||
| 631 | PyAPI_FUNC(PyObject *) PyNumber_Remainder(PyObject *o1, PyObject *o2); | ||
| 632 | |||
| 633 | /* | ||
| 634 | Returns the remainder of dividing o1 by o2, or null on | ||
| 635 | failure. This is the equivalent of the Python expression: | ||
| 636 | o1%o2. | ||
| 637 | |||
| 638 | |||
| 639 | */ | ||
| 640 | |||
| 641 | PyAPI_FUNC(PyObject *) PyNumber_Divmod(PyObject *o1, PyObject *o2); | ||
| 642 | |||
| 643 | /* | ||
| 644 | See the built-in function divmod. Returns NULL on failure. | ||
| 645 | This is the equivalent of the Python expression: | ||
| 646 | divmod(o1,o2). | ||
| 647 | |||
| 648 | |||
| 649 | */ | ||
| 650 | |||
| 651 | PyAPI_FUNC(PyObject *) PyNumber_Power(PyObject *o1, PyObject *o2, | ||
| 652 | PyObject *o3); | ||
| 653 | |||
| 654 | /* | ||
| 655 | See the built-in function pow. Returns NULL on failure. | ||
| 656 | This is the equivalent of the Python expression: | ||
| 657 | pow(o1,o2,o3), where o3 is optional. | ||
| 658 | |||
| 659 | */ | ||
| 660 | |||
| 661 | PyAPI_FUNC(PyObject *) PyNumber_Negative(PyObject *o); | ||
| 662 | |||
| 663 | /* | ||
| 664 | Returns the negation of o on success, or null on failure. | ||
| 665 | This is the equivalent of the Python expression: -o. | ||
| 666 | |||
| 667 | */ | ||
| 668 | |||
| 669 | PyAPI_FUNC(PyObject *) PyNumber_Positive(PyObject *o); | ||
| 670 | |||
| 671 | /* | ||
| 672 | Returns the (what?) of o on success, or NULL on failure. | ||
| 673 | This is the equivalent of the Python expression: +o. | ||
| 674 | |||
| 675 | */ | ||
| 676 | |||
| 677 | PyAPI_FUNC(PyObject *) PyNumber_Absolute(PyObject *o); | ||
| 678 | |||
| 679 | /* | ||
| 680 | Returns the absolute value of o, or null on failure. This is | ||
| 681 | the equivalent of the Python expression: abs(o). | ||
| 682 | |||
| 683 | */ | ||
| 684 | |||
| 685 | PyAPI_FUNC(PyObject *) PyNumber_Invert(PyObject *o); | ||
| 686 | |||
| 687 | /* | ||
| 688 | Returns the bitwise negation of o on success, or NULL on | ||
| 689 | failure. This is the equivalent of the Python expression: | ||
| 690 | ~o. | ||
| 691 | |||
| 692 | |||
| 693 | */ | ||
| 694 | |||
| 695 | PyAPI_FUNC(PyObject *) PyNumber_Lshift(PyObject *o1, PyObject *o2); | ||
| 696 | |||
| 697 | /* | ||
| 698 | Returns the result of left shifting o1 by o2 on success, or | ||
| 699 | NULL on failure. This is the equivalent of the Python | ||
| 700 | expression: o1 << o2. | ||
| 701 | |||
| 702 | |||
| 703 | */ | ||
| 704 | |||
| 705 | PyAPI_FUNC(PyObject *) PyNumber_Rshift(PyObject *o1, PyObject *o2); | ||
| 706 | |||
| 707 | /* | ||
| 708 | Returns the result of right shifting o1 by o2 on success, or | ||
| 709 | NULL on failure. This is the equivalent of the Python | ||
| 710 | expression: o1 >> o2. | ||
| 711 | |||
| 712 | */ | ||
| 713 | |||
| 714 | PyAPI_FUNC(PyObject *) PyNumber_And(PyObject *o1, PyObject *o2); | ||
| 715 | |||
| 716 | /* | ||
| 717 | Returns the result of bitwise and of o1 and o2 on success, or | ||
| 718 | NULL on failure. This is the equivalent of the Python | ||
| 719 | expression: o1&o2. | ||
| 720 | |||
| 721 | |||
| 722 | */ | ||
| 723 | |||
| 724 | PyAPI_FUNC(PyObject *) PyNumber_Xor(PyObject *o1, PyObject *o2); | ||
| 725 | |||
| 726 | /* | ||
| 727 | Returns the bitwise exclusive or of o1 by o2 on success, or | ||
| 728 | NULL on failure. This is the equivalent of the Python | ||
| 729 | expression: o1^o2. | ||
| 730 | |||
| 731 | |||
| 732 | */ | ||
| 733 | |||
| 734 | PyAPI_FUNC(PyObject *) PyNumber_Or(PyObject *o1, PyObject *o2); | ||
| 735 | |||
| 736 | /* | ||
| 737 | Returns the result of bitwise or on o1 and o2 on success, or | ||
| 738 | NULL on failure. This is the equivalent of the Python | ||
| 739 | expression: o1|o2. | ||
| 740 | |||
| 741 | */ | ||
| 742 | |||
| 743 | /* Implemented elsewhere: | ||
| 744 | |||
| 745 | int PyNumber_Coerce(PyObject **p1, PyObject **p2); | ||
| 746 | |||
| 747 | This function takes the addresses of two variables of type | ||
| 748 | PyObject*. | ||
| 749 | |||
| 750 | If the objects pointed to by *p1 and *p2 have the same type, | ||
| 751 | increment their reference count and return 0 (success). | ||
| 752 | If the objects can be converted to a common numeric type, | ||
| 753 | replace *p1 and *p2 by their converted value (with 'new' | ||
| 754 | reference counts), and return 0. | ||
| 755 | If no conversion is possible, or if some other error occurs, | ||
| 756 | return -1 (failure) and don't increment the reference counts. | ||
| 757 | The call PyNumber_Coerce(&o1, &o2) is equivalent to the Python | ||
| 758 | statement o1, o2 = coerce(o1, o2). | ||
| 759 | |||
| 760 | */ | ||
| 761 | |||
| 762 | #define PyIndex_Check(obj) \ | ||
| 763 | ((obj)->ob_type->tp_as_number != NULL && \ | ||
| 764 | PyType_HasFeature((obj)->ob_type, Py_TPFLAGS_HAVE_INDEX) && \ | ||
| 765 | (obj)->ob_type->tp_as_number->nb_index != NULL) | ||
| 766 | |||
| 767 | PyAPI_FUNC(PyObject *) PyNumber_Index(PyObject *o); | ||
| 768 | |||
| 769 | /* | ||
| 770 | Returns the object converted to a Python long or int | ||
| 771 | or NULL with an error raised on failure. | ||
| 772 | */ | ||
| 773 | |||
| 774 | PyAPI_FUNC(Py_ssize_t) PyNumber_AsSsize_t(PyObject *o, PyObject *exc); | ||
| 775 | |||
| 776 | /* | ||
| 777 | Returns the object converted to Py_ssize_t by going through | ||
| 778 | PyNumber_Index first. If an overflow error occurs while | ||
| 779 | converting the int-or-long to Py_ssize_t, then the second argument | ||
| 780 | is the error-type to return. If it is NULL, then the overflow error | ||
| 781 | is cleared and the value is clipped. | ||
| 782 | */ | ||
| 783 | |||
| 784 | PyAPI_FUNC(PyObject *) PyNumber_Int(PyObject *o); | ||
| 785 | |||
| 786 | /* | ||
| 787 | Returns the o converted to an integer object on success, or | ||
| 788 | NULL on failure. This is the equivalent of the Python | ||
| 789 | expression: int(o). | ||
| 790 | |||
| 791 | */ | ||
| 792 | |||
| 793 | PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o); | ||
| 794 | |||
| 795 | /* | ||
| 796 | Returns the o converted to a long integer object on success, | ||
| 797 | or NULL on failure. This is the equivalent of the Python | ||
| 798 | expression: long(o). | ||
| 799 | |||
| 800 | */ | ||
| 801 | |||
| 802 | PyAPI_FUNC(PyObject *) PyNumber_Float(PyObject *o); | ||
| 803 | |||
| 804 | /* | ||
| 805 | Returns the o converted to a float object on success, or NULL | ||
| 806 | on failure. This is the equivalent of the Python expression: | ||
| 807 | float(o). | ||
| 808 | */ | ||
| 809 | |||
| 810 | /* In-place variants of (some of) the above number protocol functions */ | ||
| 811 | |||
| 812 | PyAPI_FUNC(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2); | ||
| 813 | |||
| 814 | /* | ||
| 815 | Returns the result of adding o2 to o1, possibly in-place, or null | ||
| 816 | on failure. This is the equivalent of the Python expression: | ||
| 817 | o1 += o2. | ||
| 818 | |||
| 819 | */ | ||
| 820 | |||
| 821 | PyAPI_FUNC(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2); | ||
| 822 | |||
| 823 | /* | ||
| 824 | Returns the result of subtracting o2 from o1, possibly in-place or | ||
| 825 | null on failure. This is the equivalent of the Python expression: | ||
| 826 | o1 -= o2. | ||
| 827 | |||
| 828 | */ | ||
| 829 | |||
| 830 | PyAPI_FUNC(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2); | ||
| 831 | |||
| 832 | /* | ||
| 833 | Returns the result of multiplying o1 by o2, possibly in-place, or | ||
| 834 | null on failure. This is the equivalent of the Python expression: | ||
| 835 | o1 *= o2. | ||
| 836 | |||
| 837 | */ | ||
| 838 | |||
| 839 | PyAPI_FUNC(PyObject *) PyNumber_InPlaceDivide(PyObject *o1, PyObject *o2); | ||
| 840 | |||
| 841 | /* | ||
| 842 | Returns the result of dividing o1 by o2, possibly in-place, or null | ||
| 843 | on failure. This is the equivalent of the Python expression: | ||
| 844 | o1 /= o2. | ||
| 845 | |||
| 846 | */ | ||
| 847 | |||
| 848 | PyAPI_FUNC(PyObject *) PyNumber_InPlaceFloorDivide(PyObject *o1, | ||
| 849 | PyObject *o2); | ||
| 850 | |||
| 851 | /* | ||
| 852 | Returns the result of dividing o1 by o2 giving an integral result, | ||
| 853 | possibly in-place, or null on failure. | ||
| 854 | This is the equivalent of the Python expression: | ||
| 855 | o1 /= o2. | ||
| 856 | |||
| 857 | */ | ||
| 858 | |||
| 859 | PyAPI_FUNC(PyObject *) PyNumber_InPlaceTrueDivide(PyObject *o1, | ||
| 860 | PyObject *o2); | ||
| 861 | |||
| 862 | /* | ||
| 863 | Returns the result of dividing o1 by o2 giving a float result, | ||
| 864 | possibly in-place, or null on failure. | ||
| 865 | This is the equivalent of the Python expression: | ||
| 866 | o1 /= o2. | ||
| 867 | |||
| 868 | */ | ||
| 869 | |||
| 870 | PyAPI_FUNC(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2); | ||
| 871 | |||
| 872 | /* | ||
| 873 | Returns the remainder of dividing o1 by o2, possibly in-place, or | ||
| 874 | null on failure. This is the equivalent of the Python expression: | ||
| 875 | o1 %= o2. | ||
| 876 | |||
| 877 | */ | ||
| 878 | |||
| 879 | PyAPI_FUNC(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2, | ||
| 880 | PyObject *o3); | ||
| 881 | |||
| 882 | /* | ||
| 883 | Returns the result of raising o1 to the power of o2, possibly | ||
| 884 | in-place, or null on failure. This is the equivalent of the Python | ||
| 885 | expression: o1 **= o2, or pow(o1, o2, o3) if o3 is present. | ||
| 886 | |||
| 887 | */ | ||
| 888 | |||
| 889 | PyAPI_FUNC(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2); | ||
| 890 | |||
| 891 | /* | ||
| 892 | Returns the result of left shifting o1 by o2, possibly in-place, or | ||
| 893 | null on failure. This is the equivalent of the Python expression: | ||
| 894 | o1 <<= o2. | ||
| 895 | |||
| 896 | */ | ||
| 897 | |||
| 898 | PyAPI_FUNC(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2); | ||
| 899 | |||
| 900 | /* | ||
| 901 | Returns the result of right shifting o1 by o2, possibly in-place or | ||
| 902 | null on failure. This is the equivalent of the Python expression: | ||
| 903 | o1 >>= o2. | ||
| 904 | |||
| 905 | */ | ||
| 906 | |||
| 907 | PyAPI_FUNC(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2); | ||
| 908 | |||
| 909 | /* | ||
| 910 | Returns the result of bitwise and of o1 and o2, possibly in-place, | ||
| 911 | or null on failure. This is the equivalent of the Python | ||
| 912 | expression: o1 &= o2. | ||
| 913 | |||
| 914 | */ | ||
| 915 | |||
| 916 | PyAPI_FUNC(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2); | ||
| 917 | |||
| 918 | /* | ||
| 919 | Returns the bitwise exclusive or of o1 by o2, possibly in-place, or | ||
| 920 | null on failure. This is the equivalent of the Python expression: | ||
| 921 | o1 ^= o2. | ||
| 922 | |||
| 923 | */ | ||
| 924 | |||
| 925 | PyAPI_FUNC(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2); | ||
| 926 | |||
| 927 | /* | ||
| 928 | Returns the result of bitwise or of o1 and o2, possibly in-place, | ||
| 929 | or null on failure. This is the equivalent of the Python | ||
| 930 | expression: o1 |= o2. | ||
| 931 | |||
| 932 | */ | ||
| 933 | |||
| 934 | |||
| 935 | /* Sequence protocol:*/ | ||
| 936 | |||
| 937 | PyAPI_FUNC(int) PySequence_Check(PyObject *o); | ||
| 938 | |||
| 939 | /* | ||
| 940 | Return 1 if the object provides sequence protocol, and zero | ||
| 941 | otherwise. | ||
| 942 | |||
| 943 | This function always succeeds. | ||
| 944 | |||
| 945 | */ | ||
| 946 | |||
| 947 | PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o); | ||
| 948 | |||
| 949 | /* | ||
| 950 | Return the size of sequence object o, or -1 on failure. | ||
| 951 | |||
| 952 | */ | ||
| 953 | |||
| 954 | /* For DLL compatibility */ | ||
| 955 | #undef PySequence_Length | ||
| 956 | PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o); | ||
| 957 | #define PySequence_Length PySequence_Size | ||
| 958 | |||
| 959 | |||
| 960 | PyAPI_FUNC(PyObject *) PySequence_Concat(PyObject *o1, PyObject *o2); | ||
| 961 | |||
| 962 | /* | ||
| 963 | Return the concatenation of o1 and o2 on success, and NULL on | ||
| 964 | failure. This is the equivalent of the Python | ||
| 965 | expression: o1+o2. | ||
| 966 | |||
| 967 | */ | ||
| 968 | |||
| 969 | PyAPI_FUNC(PyObject *) PySequence_Repeat(PyObject *o, Py_ssize_t count); | ||
| 970 | |||
| 971 | /* | ||
| 972 | Return the result of repeating sequence object o count times, | ||
| 973 | or NULL on failure. This is the equivalent of the Python | ||
| 974 | expression: o1*count. | ||
| 975 | |||
| 976 | */ | ||
| 977 | |||
| 978 | PyAPI_FUNC(PyObject *) PySequence_GetItem(PyObject *o, Py_ssize_t i); | ||
| 979 | |||
| 980 | /* | ||
| 981 | Return the ith element of o, or NULL on failure. This is the | ||
| 982 | equivalent of the Python expression: o[i]. | ||
| 983 | */ | ||
| 984 | |||
| 985 | PyAPI_FUNC(PyObject *) PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2); | ||
| 986 | |||
| 987 | /* | ||
| 988 | Return the slice of sequence object o between i1 and i2, or | ||
| 989 | NULL on failure. This is the equivalent of the Python | ||
| 990 | expression: o[i1:i2]. | ||
| 991 | |||
| 992 | */ | ||
| 993 | |||
| 994 | PyAPI_FUNC(int) PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v); | ||
| 995 | |||
| 996 | /* | ||
| 997 | Assign object v to the ith element of o. Returns | ||
| 998 | -1 on failure. This is the equivalent of the Python | ||
| 999 | statement: o[i]=v. | ||
| 1000 | |||
| 1001 | */ | ||
| 1002 | |||
| 1003 | PyAPI_FUNC(int) PySequence_DelItem(PyObject *o, Py_ssize_t i); | ||
| 1004 | |||
| 1005 | /* | ||
| 1006 | Delete the ith element of object v. Returns | ||
| 1007 | -1 on failure. This is the equivalent of the Python | ||
| 1008 | statement: del o[i]. | ||
| 1009 | */ | ||
| 1010 | |||
| 1011 | PyAPI_FUNC(int) PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2, | ||
| 1012 | PyObject *v); | ||
| 1013 | |||
| 1014 | /* | ||
| 1015 | Assign the sequence object, v, to the slice in sequence | ||
| 1016 | object, o, from i1 to i2. Returns -1 on failure. This is the | ||
| 1017 | equivalent of the Python statement: o[i1:i2]=v. | ||
| 1018 | */ | ||
| 1019 | |||
| 1020 | PyAPI_FUNC(int) PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2); | ||
| 1021 | |||
| 1022 | /* | ||
| 1023 | Delete the slice in sequence object, o, from i1 to i2. | ||
| 1024 | Returns -1 on failure. This is the equivalent of the Python | ||
| 1025 | statement: del o[i1:i2]. | ||
| 1026 | */ | ||
| 1027 | |||
| 1028 | PyAPI_FUNC(PyObject *) PySequence_Tuple(PyObject *o); | ||
| 1029 | |||
| 1030 | /* | ||
| 1031 | Returns the sequence, o, as a tuple on success, and NULL on failure. | ||
| 1032 | This is equivalent to the Python expression: tuple(o) | ||
| 1033 | */ | ||
| 1034 | |||
| 1035 | |||
| 1036 | PyAPI_FUNC(PyObject *) PySequence_List(PyObject *o); | ||
| 1037 | /* | ||
| 1038 | Returns the sequence, o, as a list on success, and NULL on failure. | ||
| 1039 | This is equivalent to the Python expression: list(o) | ||
| 1040 | */ | ||
| 1041 | |||
| 1042 | PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m); | ||
| 1043 | /* | ||
| 1044 | Returns the sequence, o, as a tuple, unless it's already a | ||
| 1045 | tuple or list. Use PySequence_Fast_GET_ITEM to access the | ||
| 1046 | members of this list, and PySequence_Fast_GET_SIZE to get its length. | ||
| 1047 | |||
| 1048 | Returns NULL on failure. If the object does not support iteration, | ||
| 1049 | raises a TypeError exception with m as the message text. | ||
| 1050 | */ | ||
| 1051 | |||
| 1052 | #define PySequence_Fast_GET_SIZE(o) \ | ||
| 1053 | (PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o)) | ||
| 1054 | /* | ||
| 1055 | Return the size of o, assuming that o was returned by | ||
| 1056 | PySequence_Fast and is not NULL. | ||
| 1057 | */ | ||
| 1058 | |||
| 1059 | #define PySequence_Fast_GET_ITEM(o, i)\ | ||
| 1060 | (PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i)) | ||
| 1061 | /* | ||
| 1062 | Return the ith element of o, assuming that o was returned by | ||
| 1063 | PySequence_Fast, and that i is within bounds. | ||
| 1064 | */ | ||
| 1065 | |||
| 1066 | #define PySequence_ITEM(o, i)\ | ||
| 1067 | ( o->ob_type->tp_as_sequence->sq_item(o, i) ) | ||
| 1068 | /* Assume tp_as_sequence and sq_item exist and that i does not | ||
| 1069 | need to be corrected for a negative index | ||
| 1070 | */ | ||
| 1071 | |||
| 1072 | #define PySequence_Fast_ITEMS(sf) \ | ||
| 1073 | (PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \ | ||
| 1074 | : ((PyTupleObject *)(sf))->ob_item) | ||
| 1075 | /* Return a pointer to the underlying item array for | ||
| 1076 | an object retured by PySequence_Fast */ | ||
| 1077 | |||
| 1078 | PyAPI_FUNC(Py_ssize_t) PySequence_Count(PyObject *o, PyObject *value); | ||
| 1079 | |||
| 1080 | /* | ||
| 1081 | Return the number of occurrences on value on o, that is, | ||
| 1082 | return the number of keys for which o[key]==value. On | ||
| 1083 | failure, return -1. This is equivalent to the Python | ||
| 1084 | expression: o.count(value). | ||
| 1085 | */ | ||
| 1086 | |||
| 1087 | PyAPI_FUNC(int) PySequence_Contains(PyObject *seq, PyObject *ob); | ||
| 1088 | /* | ||
| 1089 | Return -1 if error; 1 if ob in seq; 0 if ob not in seq. | ||
| 1090 | Use __contains__ if possible, else _PySequence_IterSearch(). | ||
| 1091 | */ | ||
| 1092 | |||
| 1093 | #define PY_ITERSEARCH_COUNT 1 | ||
| 1094 | #define PY_ITERSEARCH_INDEX 2 | ||
| 1095 | #define PY_ITERSEARCH_CONTAINS 3 | ||
| 1096 | PyAPI_FUNC(Py_ssize_t) _PySequence_IterSearch(PyObject *seq, | ||
| 1097 | PyObject *obj, int operation); | ||
| 1098 | /* | ||
| 1099 | Iterate over seq. Result depends on the operation: | ||
| 1100 | PY_ITERSEARCH_COUNT: return # of times obj appears in seq; -1 if | ||
| 1101 | error. | ||
| 1102 | PY_ITERSEARCH_INDEX: return 0-based index of first occurrence of | ||
| 1103 | obj in seq; set ValueError and return -1 if none found; | ||
| 1104 | also return -1 on error. | ||
| 1105 | PY_ITERSEARCH_CONTAINS: return 1 if obj in seq, else 0; -1 on | ||
| 1106 | error. | ||
| 1107 | */ | ||
| 1108 | |||
| 1109 | /* For DLL-level backwards compatibility */ | ||
| 1110 | #undef PySequence_In | ||
| 1111 | PyAPI_FUNC(int) PySequence_In(PyObject *o, PyObject *value); | ||
| 1112 | |||
| 1113 | /* For source-level backwards compatibility */ | ||
| 1114 | #define PySequence_In PySequence_Contains | ||
| 1115 | |||
| 1116 | /* | ||
| 1117 | Determine if o contains value. If an item in o is equal to | ||
| 1118 | X, return 1, otherwise return 0. On error, return -1. This | ||
| 1119 | is equivalent to the Python expression: value in o. | ||
| 1120 | */ | ||
| 1121 | |||
| 1122 | PyAPI_FUNC(Py_ssize_t) PySequence_Index(PyObject *o, PyObject *value); | ||
| 1123 | |||
| 1124 | /* | ||
| 1125 | Return the first index for which o[i]=value. On error, | ||
| 1126 | return -1. This is equivalent to the Python | ||
| 1127 | expression: o.index(value). | ||
| 1128 | */ | ||
| 1129 | |||
| 1130 | /* In-place versions of some of the above Sequence functions. */ | ||
| 1131 | |||
| 1132 | PyAPI_FUNC(PyObject *) PySequence_InPlaceConcat(PyObject *o1, PyObject *o2); | ||
| 1133 | |||
| 1134 | /* | ||
| 1135 | Append o2 to o1, in-place when possible. Return the resulting | ||
| 1136 | object, which could be o1, or NULL on failure. This is the | ||
| 1137 | equivalent of the Python expression: o1 += o2. | ||
| 1138 | |||
| 1139 | */ | ||
| 1140 | |||
| 1141 | PyAPI_FUNC(PyObject *) PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count); | ||
| 1142 | |||
| 1143 | /* | ||
| 1144 | Repeat o1 by count, in-place when possible. Return the resulting | ||
| 1145 | object, which could be o1, or NULL on failure. This is the | ||
| 1146 | equivalent of the Python expression: o1 *= count. | ||
| 1147 | |||
| 1148 | */ | ||
| 1149 | |||
| 1150 | /* Mapping protocol:*/ | ||
| 1151 | |||
| 1152 | PyAPI_FUNC(int) PyMapping_Check(PyObject *o); | ||
| 1153 | |||
| 1154 | /* | ||
| 1155 | Return 1 if the object provides mapping protocol, and zero | ||
| 1156 | otherwise. | ||
| 1157 | |||
| 1158 | This function always succeeds. | ||
| 1159 | */ | ||
| 1160 | |||
| 1161 | PyAPI_FUNC(Py_ssize_t) PyMapping_Size(PyObject *o); | ||
| 1162 | |||
| 1163 | /* | ||
| 1164 | Returns the number of keys in object o on success, and -1 on | ||
| 1165 | failure. For objects that do not provide sequence protocol, | ||
| 1166 | this is equivalent to the Python expression: len(o). | ||
| 1167 | */ | ||
| 1168 | |||
| 1169 | /* For DLL compatibility */ | ||
| 1170 | #undef PyMapping_Length | ||
| 1171 | PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o); | ||
| 1172 | #define PyMapping_Length PyMapping_Size | ||
| 1173 | |||
| 1174 | |||
| 1175 | /* implemented as a macro: | ||
| 1176 | |||
| 1177 | int PyMapping_DelItemString(PyObject *o, char *key); | ||
| 1178 | |||
| 1179 | Remove the mapping for object, key, from the object *o. | ||
| 1180 | Returns -1 on failure. This is equivalent to | ||
| 1181 | the Python statement: del o[key]. | ||
| 1182 | */ | ||
| 1183 | #define PyMapping_DelItemString(O,K) PyObject_DelItemString((O),(K)) | ||
| 1184 | |||
| 1185 | /* implemented as a macro: | ||
| 1186 | |||
| 1187 | int PyMapping_DelItem(PyObject *o, PyObject *key); | ||
| 1188 | |||
| 1189 | Remove the mapping for object, key, from the object *o. | ||
| 1190 | Returns -1 on failure. This is equivalent to | ||
| 1191 | the Python statement: del o[key]. | ||
| 1192 | */ | ||
| 1193 | #define PyMapping_DelItem(O,K) PyObject_DelItem((O),(K)) | ||
| 1194 | |||
| 1195 | PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, char *key); | ||
| 1196 | |||
| 1197 | /* | ||
| 1198 | On success, return 1 if the mapping object has the key, key, | ||
| 1199 | and 0 otherwise. This is equivalent to the Python expression: | ||
| 1200 | o.has_key(key). | ||
| 1201 | |||
| 1202 | This function always succeeds. | ||
| 1203 | */ | ||
| 1204 | |||
| 1205 | PyAPI_FUNC(int) PyMapping_HasKey(PyObject *o, PyObject *key); | ||
| 1206 | |||
| 1207 | /* | ||
| 1208 | Return 1 if the mapping object has the key, key, | ||
| 1209 | and 0 otherwise. This is equivalent to the Python expression: | ||
| 1210 | o.has_key(key). | ||
| 1211 | |||
| 1212 | This function always succeeds. | ||
| 1213 | |||
| 1214 | */ | ||
| 1215 | |||
| 1216 | /* Implemented as macro: | ||
| 1217 | |||
| 1218 | PyObject *PyMapping_Keys(PyObject *o); | ||
| 1219 | |||
| 1220 | On success, return a list of the keys in object o. On | ||
| 1221 | failure, return NULL. This is equivalent to the Python | ||
| 1222 | expression: o.keys(). | ||
| 1223 | */ | ||
| 1224 | #define PyMapping_Keys(O) PyObject_CallMethod(O,"keys",NULL) | ||
| 1225 | |||
| 1226 | /* Implemented as macro: | ||
| 1227 | |||
| 1228 | PyObject *PyMapping_Values(PyObject *o); | ||
| 1229 | |||
| 1230 | On success, return a list of the values in object o. On | ||
| 1231 | failure, return NULL. This is equivalent to the Python | ||
| 1232 | expression: o.values(). | ||
| 1233 | */ | ||
| 1234 | #define PyMapping_Values(O) PyObject_CallMethod(O,"values",NULL) | ||
| 1235 | |||
| 1236 | /* Implemented as macro: | ||
| 1237 | |||
| 1238 | PyObject *PyMapping_Items(PyObject *o); | ||
| 1239 | |||
| 1240 | On success, return a list of the items in object o, where | ||
| 1241 | each item is a tuple containing a key-value pair. On | ||
| 1242 | failure, return NULL. This is equivalent to the Python | ||
| 1243 | expression: o.items(). | ||
| 1244 | |||
| 1245 | */ | ||
| 1246 | #define PyMapping_Items(O) PyObject_CallMethod(O,"items",NULL) | ||
| 1247 | |||
| 1248 | PyAPI_FUNC(PyObject *) PyMapping_GetItemString(PyObject *o, char *key); | ||
| 1249 | |||
| 1250 | /* | ||
| 1251 | Return element of o corresponding to the object, key, or NULL | ||
| 1252 | on failure. This is the equivalent of the Python expression: | ||
| 1253 | o[key]. | ||
| 1254 | */ | ||
| 1255 | |||
| 1256 | PyAPI_FUNC(int) PyMapping_SetItemString(PyObject *o, char *key, | ||
| 1257 | PyObject *value); | ||
| 1258 | |||
| 1259 | /* | ||
| 1260 | Map the object, key, to the value, v. Returns | ||
| 1261 | -1 on failure. This is the equivalent of the Python | ||
| 1262 | statement: o[key]=v. | ||
| 1263 | */ | ||
| 1264 | |||
| 1265 | |||
| 1266 | PyAPI_FUNC(int) PyObject_IsInstance(PyObject *object, PyObject *typeorclass); | ||
| 1267 | /* isinstance(object, typeorclass) */ | ||
| 1268 | |||
| 1269 | PyAPI_FUNC(int) PyObject_IsSubclass(PyObject *object, PyObject *typeorclass); | ||
| 1270 | /* issubclass(object, typeorclass) */ | ||
| 1271 | |||
| 1272 | |||
| 1273 | #ifdef __cplusplus | ||
| 1274 | } | ||
| 1275 | #endif | ||
| 1276 | #endif /* Py_ABSTRACTOBJECT_H */ | ||
| @@ -0,0 +1,45 @@ | |||
| 1 | #ifndef Py_ASDL_H | ||
| 2 | #define Py_ASDL_H | ||
| 3 | |||
| 4 | typedef PyObject * identifier; | ||
| 5 | typedef PyObject * string; | ||
| 6 | typedef PyObject * object; | ||
| 7 | |||
| 8 | #ifndef __cplusplus | ||
| 9 | typedef enum {false, true} bool; | ||
| 10 | #endif | ||
| 11 | |||
| 12 | /* It would be nice if the code generated by asdl_c.py was completely | ||
| 13 | independent of Python, but it is a goal the requires too much work | ||
| 14 | at this stage. So, for example, I'll represent identifiers as | ||
| 15 | interned Python strings. | ||
| 16 | */ | ||
| 17 | |||
| 18 | /* XXX A sequence should be typed so that its use can be typechecked. */ | ||
| 19 | |||
| 20 | typedef struct { | ||
| 21 | int size; | ||
| 22 | void *elements[1]; | ||
| 23 | } asdl_seq; | ||
| 24 | |||
| 25 | typedef struct { | ||
| 26 | int size; | ||
| 27 | int elements[1]; | ||
| 28 | } asdl_int_seq; | ||
| 29 | |||
| 30 | asdl_seq *asdl_seq_new(int size, PyArena *arena); | ||
| 31 | asdl_int_seq *asdl_int_seq_new(int size, PyArena *arena); | ||
| 32 | |||
| 33 | #define asdl_seq_GET(S, I) (S)->elements[(I)] | ||
| 34 | #define asdl_seq_LEN(S) ((S) == NULL ? 0 : (S)->size) | ||
| 35 | #ifdef Py_DEBUG | ||
| 36 | #define asdl_seq_SET(S, I, V) { \ | ||
| 37 | int _asdl_i = (I); \ | ||
| 38 | assert((S) && _asdl_i < (S)->size); \ | ||
| 39 | (S)->elements[_asdl_i] = (V); \ | ||
| 40 | } | ||
| 41 | #else | ||
| 42 | #define asdl_seq_SET(S, I, V) (S)->elements[I] = (V) | ||
| 43 | #endif | ||
| 44 | |||
| 45 | #endif /* !Py_ASDL_H */ | ||
| @@ -0,0 +1,13 @@ | |||
| 1 | #ifndef Py_AST_H | ||
| 2 | #define Py_AST_H | ||
| 3 | #ifdef __cplusplus | ||
| 4 | extern "C" { | ||
| 5 | #endif | ||
| 6 | |||
| 7 | PyAPI_FUNC(mod_ty) PyAST_FromNode(const node *, PyCompilerFlags *flags, | ||
| 8 | const char *, PyArena *); | ||
| 9 | |||
| 10 | #ifdef __cplusplus | ||
| 11 | } | ||
| 12 | #endif | ||
| 13 | #endif /* !Py_AST_H */ | ||
| @@ -0,0 +1,32 @@ | |||
| 1 | |||
| 2 | #ifndef Py_BITSET_H | ||
| 3 | #define Py_BITSET_H | ||
| 4 | #ifdef __cplusplus | ||
| 5 | extern "C" { | ||
| 6 | #endif | ||
| 7 | |||
| 8 | /* Bitset interface */ | ||
| 9 | |||
| 10 | #define BYTE char | ||
| 11 | |||
| 12 | typedef BYTE *bitset; | ||
| 13 | |||
| 14 | bitset newbitset(int nbits); | ||
| 15 | void delbitset(bitset bs); | ||
| 16 | #define testbit(ss, ibit) (((ss)[BIT2BYTE(ibit)] & BIT2MASK(ibit)) != 0) | ||
| 17 | int addbit(bitset bs, int ibit); /* Returns 0 if already set */ | ||
| 18 | int samebitset(bitset bs1, bitset bs2, int nbits); | ||
| 19 | void mergebitset(bitset bs1, bitset bs2, int nbits); | ||
| 20 | |||
| 21 | #define BITSPERBYTE (8*sizeof(BYTE)) | ||
| 22 | #define NBYTES(nbits) (((nbits) + BITSPERBYTE - 1) / BITSPERBYTE) | ||
| 23 | |||
| 24 | #define BIT2BYTE(ibit) ((ibit) / BITSPERBYTE) | ||
| 25 | #define BIT2SHIFT(ibit) ((ibit) % BITSPERBYTE) | ||
| 26 | #define BIT2MASK(ibit) (1 << BIT2SHIFT(ibit)) | ||
| 27 | #define BYTE2BIT(ibyte) ((ibyte) * BITSPERBYTE) | ||
| 28 | |||
| 29 | #ifdef __cplusplus | ||
| 30 | } | ||
| 31 | #endif | ||
| 32 | #endif /* !Py_BITSET_H */ | ||
| @@ -0,0 +1,36 @@ | |||
| 1 | /* Boolean object interface */ | ||
| 2 | |||
| 3 | #ifndef Py_BOOLOBJECT_H | ||
| 4 | #define Py_BOOLOBJECT_H | ||
| 5 | #ifdef __cplusplus | ||
| 6 | extern "C" { | ||
| 7 | #endif | ||
| 8 | |||
| 9 | |||
| 10 | typedef PyIntObject PyBoolObject; | ||
| 11 | |||
| 12 | PyAPI_DATA(PyTypeObject) PyBool_Type; | ||
| 13 | |||
| 14 | #define PyBool_Check(x) ((x)->ob_type == &PyBool_Type) | ||
| 15 | |||
| 16 | /* Py_False and Py_True are the only two bools in existence. | ||
| 17 | Don't forget to apply Py_INCREF() when returning either!!! */ | ||
| 18 | |||
| 19 | /* Don't use these directly */ | ||
| 20 | PyAPI_DATA(PyIntObject) _Py_ZeroStruct, _Py_TrueStruct; | ||
| 21 | |||
| 22 | /* Use these macros */ | ||
| 23 | #define Py_False ((PyObject *) &_Py_ZeroStruct) | ||
| 24 | #define Py_True ((PyObject *) &_Py_TrueStruct) | ||
| 25 | |||
| 26 | /* Macros for returning Py_True or Py_False, respectively */ | ||
| 27 | #define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True | ||
| 28 | #define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False | ||
| 29 | |||
| 30 | /* Function to return a bool from a C long */ | ||
| 31 | PyAPI_FUNC(PyObject *) PyBool_FromLong(long); | ||
| 32 | |||
| 33 | #ifdef __cplusplus | ||
| 34 | } | ||
| 35 | #endif | ||
| 36 | #endif /* !Py_BOOLOBJECT_H */ | ||
| @@ -0,0 +1,33 @@ | |||
| 1 | |||
| 2 | /* Buffer object interface */ | ||
| 3 | |||
| 4 | /* Note: the object's structure is private */ | ||
| 5 | |||
| 6 | #ifndef Py_BUFFEROBJECT_H | ||
| 7 | #define Py_BUFFEROBJECT_H | ||
| 8 | #ifdef __cplusplus | ||
| 9 | extern "C" { | ||
| 10 | #endif | ||
| 11 | |||
| 12 | |||
| 13 | PyAPI_DATA(PyTypeObject) PyBuffer_Type; | ||
| 14 | |||
| 15 | #define PyBuffer_Check(op) ((op)->ob_type == &PyBuffer_Type) | ||
| 16 | |||
| 17 | #define Py_END_OF_BUFFER (-1) | ||
| 18 | |||
| 19 | PyAPI_FUNC(PyObject *) PyBuffer_FromObject(PyObject *base, | ||
| 20 | Py_ssize_t offset, Py_ssize_t size); | ||
| 21 | PyAPI_FUNC(PyObject *) PyBuffer_FromReadWriteObject(PyObject *base, | ||
| 22 | Py_ssize_t offset, | ||
| 23 | Py_ssize_t size); | ||
| 24 | |||
| 25 | PyAPI_FUNC(PyObject *) PyBuffer_FromMemory(void *ptr, Py_ssize_t size); | ||
| 26 | PyAPI_FUNC(PyObject *) PyBuffer_FromReadWriteMemory(void *ptr, Py_ssize_t size); | ||
| 27 | |||
| 28 | PyAPI_FUNC(PyObject *) PyBuffer_New(Py_ssize_t size); | ||
| 29 | |||
| 30 | #ifdef __cplusplus | ||
| 31 | } | ||
| 32 | #endif | ||
| 33 | #endif /* !Py_BUFFEROBJECT_H */ | ||
| @@ -0,0 +1,70 @@ | |||
| 1 | #ifndef Py_CSTRINGIO_H | ||
| 2 | #define Py_CSTRINGIO_H | ||
| 3 | #ifdef __cplusplus | ||
| 4 | extern "C" { | ||
| 5 | #endif | ||
| 6 | /* | ||
| 7 | |||
| 8 | This header provides access to cStringIO objects from C. | ||
| 9 | Functions are provided for calling cStringIO objects and | ||
| 10 | macros are provided for testing whether you have cStringIO | ||
| 11 | objects. | ||
| 12 | |||
| 13 | Before calling any of the functions or macros, you must initialize | ||
| 14 | the routines with: | ||
| 15 | |||
| 16 | PycString_IMPORT | ||
| 17 | |||
| 18 | This would typically be done in your init function. | ||
| 19 | |||
| 20 | */ | ||
| 21 | #define PycString_IMPORT \ | ||
| 22 | PycStringIO = (struct PycStringIO_CAPI*)PyCObject_Import("cStringIO", \ | ||
| 23 | "cStringIO_CAPI") | ||
| 24 | |||
| 25 | /* Basic functions to manipulate cStringIO objects from C */ | ||
| 26 | |||
| 27 | static struct PycStringIO_CAPI { | ||
| 28 | |||
| 29 | /* Read a string from an input object. If the last argument | ||
| 30 | is -1, the remainder will be read. | ||
| 31 | */ | ||
| 32 | int(*cread)(PyObject *, char **, Py_ssize_t); | ||
| 33 | |||
| 34 | /* Read a line from an input object. Returns the length of the read | ||
| 35 | line as an int and a pointer inside the object buffer as char** (so | ||
| 36 | the caller doesn't have to provide its own buffer as destination). | ||
| 37 | */ | ||
| 38 | int(*creadline)(PyObject *, char **); | ||
| 39 | |||
| 40 | /* Write a string to an output object*/ | ||
| 41 | int(*cwrite)(PyObject *, const char *, Py_ssize_t); | ||
| 42 | |||
| 43 | /* Get the output object as a Python string (returns new reference). */ | ||
| 44 | PyObject *(*cgetvalue)(PyObject *); | ||
| 45 | |||
| 46 | /* Create a new output object */ | ||
| 47 | PyObject *(*NewOutput)(int); | ||
| 48 | |||
| 49 | /* Create an input object from a Python string | ||
| 50 | (copies the Python string reference). | ||
| 51 | */ | ||
| 52 | PyObject *(*NewInput)(PyObject *); | ||
| 53 | |||
| 54 | /* The Python types for cStringIO input and output objects. | ||
| 55 | Note that you can do input on an output object. | ||
| 56 | */ | ||
| 57 | PyTypeObject *InputType, *OutputType; | ||
| 58 | |||
| 59 | } *PycStringIO; | ||
| 60 | |||
| 61 | /* These can be used to test if you have one */ | ||
| 62 | #define PycStringIO_InputCheck(O) \ | ||
| 63 | ((O)->ob_type==PycStringIO->InputType) | ||
| 64 | #define PycStringIO_OutputCheck(O) \ | ||
| 65 | ((O)->ob_type==PycStringIO->OutputType) | ||
| 66 | |||
| 67 | #ifdef __cplusplus | ||
| 68 | } | ||
| 69 | #endif | ||
| 70 | #endif /* !Py_CSTRINGIO_H */ | ||
| @@ -0,0 +1,28 @@ | |||
| 1 | /* Cell object interface */ | ||
| 2 | |||
| 3 | #ifndef Py_CELLOBJECT_H | ||
| 4 | #define Py_CELLOBJECT_H | ||
| 5 | #ifdef __cplusplus | ||
| 6 | extern "C" { | ||
| 7 | #endif | ||
| 8 | |||
| 9 | typedef struct { | ||
| 10 | PyObject_HEAD | ||
| 11 | PyObject *ob_ref; /* Content of the cell or NULL when empty */ | ||
| 12 | } PyCellObject; | ||
| 13 | |||
| 14 | PyAPI_DATA(PyTypeObject) PyCell_Type; | ||
| 15 | |||
| 16 | #define PyCell_Check(op) ((op)->ob_type == &PyCell_Type) | ||
| 17 | |||
| 18 | PyAPI_FUNC(PyObject *) PyCell_New(PyObject *); | ||
| 19 | PyAPI_FUNC(PyObject *) PyCell_Get(PyObject *); | ||
| 20 | PyAPI_FUNC(int) PyCell_Set(PyObject *, PyObject *); | ||
| 21 | |||
| 22 | #define PyCell_GET(op) (((PyCellObject *)(op))->ob_ref) | ||
| 23 | #define PyCell_SET(op, v) (((PyCellObject *)(op))->ob_ref = v) | ||
| 24 | |||
| 25 | #ifdef __cplusplus | ||
| 26 | } | ||
| 27 | #endif | ||
| 28 | #endif /* !Py_TUPLEOBJECT_H */ | ||
| @@ -0,0 +1,157 @@ | |||
| 1 | #ifndef Py_CEVAL_H | ||
| 2 | #define Py_CEVAL_H | ||
| 3 | #ifdef __cplusplus | ||
| 4 | extern "C" { | ||
| 5 | #endif | ||
| 6 | |||
| 7 | |||
| 8 | /* Interface to random parts in ceval.c */ | ||
| 9 | |||
| 10 | PyAPI_FUNC(PyObject *) PyEval_CallObjectWithKeywords( | ||
| 11 | PyObject *, PyObject *, PyObject *); | ||
| 12 | |||
| 13 | /* DLL-level Backwards compatibility: */ | ||
| 14 | #undef PyEval_CallObject | ||
| 15 | PyAPI_FUNC(PyObject *) PyEval_CallObject(PyObject *, PyObject *); | ||
| 16 | |||
| 17 | /* Inline this */ | ||
| 18 | #define PyEval_CallObject(func,arg) \ | ||
| 19 | PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL) | ||
| 20 | |||
| 21 | PyAPI_FUNC(PyObject *) PyEval_CallFunction(PyObject *obj, | ||
| 22 | const char *format, ...); | ||
| 23 | PyAPI_FUNC(PyObject *) PyEval_CallMethod(PyObject *obj, | ||
| 24 | const char *methodname, | ||
| 25 | const char *format, ...); | ||
| 26 | |||
| 27 | PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *); | ||
| 28 | PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *); | ||
| 29 | |||
| 30 | struct _frame; /* Avoid including frameobject.h */ | ||
| 31 | |||
| 32 | PyAPI_FUNC(PyObject *) PyEval_GetBuiltins(void); | ||
| 33 | PyAPI_FUNC(PyObject *) PyEval_GetGlobals(void); | ||
| 34 | PyAPI_FUNC(PyObject *) PyEval_GetLocals(void); | ||
| 35 | PyAPI_FUNC(struct _frame *) PyEval_GetFrame(void); | ||
| 36 | PyAPI_FUNC(int) PyEval_GetRestricted(void); | ||
| 37 | |||
| 38 | /* Look at the current frame's (if any) code's co_flags, and turn on | ||
| 39 | the corresponding compiler flags in cf->cf_flags. Return 1 if any | ||
| 40 | flag was set, else return 0. */ | ||
| 41 | PyAPI_FUNC(int) PyEval_MergeCompilerFlags(PyCompilerFlags *cf); | ||
| 42 | |||
| 43 | PyAPI_FUNC(int) Py_FlushLine(void); | ||
| 44 | |||
| 45 | PyAPI_FUNC(int) Py_AddPendingCall(int (*func)(void *), void *arg); | ||
| 46 | PyAPI_FUNC(int) Py_MakePendingCalls(void); | ||
| 47 | |||
| 48 | /* Protection against deeply nested recursive calls */ | ||
| 49 | PyAPI_FUNC(void) Py_SetRecursionLimit(int); | ||
| 50 | PyAPI_FUNC(int) Py_GetRecursionLimit(void); | ||
| 51 | |||
| 52 | #define Py_EnterRecursiveCall(where) \ | ||
| 53 | (_Py_MakeRecCheck(PyThreadState_GET()->recursion_depth) && \ | ||
| 54 | _Py_CheckRecursiveCall(where)) | ||
| 55 | #define Py_LeaveRecursiveCall() \ | ||
| 56 | (--PyThreadState_GET()->recursion_depth) | ||
| 57 | PyAPI_FUNC(int) _Py_CheckRecursiveCall(char *where); | ||
| 58 | PyAPI_DATA(int) _Py_CheckRecursionLimit; | ||
| 59 | #ifdef USE_STACKCHECK | ||
| 60 | # define _Py_MakeRecCheck(x) (++(x) > --_Py_CheckRecursionLimit) | ||
| 61 | #else | ||
| 62 | # define _Py_MakeRecCheck(x) (++(x) > _Py_CheckRecursionLimit) | ||
| 63 | #endif | ||
| 64 | |||
| 65 | PyAPI_FUNC(const char *) PyEval_GetFuncName(PyObject *); | ||
| 66 | PyAPI_FUNC(const char *) PyEval_GetFuncDesc(PyObject *); | ||
| 67 | |||
| 68 | PyAPI_FUNC(PyObject *) PyEval_GetCallStats(PyObject *); | ||
| 69 | PyAPI_FUNC(PyObject *) PyEval_EvalFrame(struct _frame *); | ||
| 70 | PyAPI_FUNC(PyObject *) PyEval_EvalFrameEx(struct _frame *f, int exc); | ||
| 71 | |||
| 72 | /* this used to be handled on a per-thread basis - now just two globals */ | ||
| 73 | PyAPI_DATA(volatile int) _Py_Ticker; | ||
| 74 | PyAPI_DATA(int) _Py_CheckInterval; | ||
| 75 | |||
| 76 | /* Interface for threads. | ||
| 77 | |||
| 78 | A module that plans to do a blocking system call (or something else | ||
| 79 | that lasts a long time and doesn't touch Python data) can allow other | ||
| 80 | threads to run as follows: | ||
| 81 | |||
| 82 | ...preparations here... | ||
| 83 | Py_BEGIN_ALLOW_THREADS | ||
| 84 | ...blocking system call here... | ||
| 85 | Py_END_ALLOW_THREADS | ||
| 86 | ...interpret result here... | ||
| 87 | |||
| 88 | The Py_BEGIN_ALLOW_THREADS/Py_END_ALLOW_THREADS pair expands to a | ||
| 89 | {}-surrounded block. | ||
| 90 | To leave the block in the middle (e.g., with return), you must insert | ||
| 91 | a line containing Py_BLOCK_THREADS before the return, e.g. | ||
| 92 | |||
| 93 | if (...premature_exit...) { | ||
| 94 | Py_BLOCK_THREADS | ||
| 95 | PyErr_SetFromErrno(PyExc_IOError); | ||
| 96 | return NULL; | ||
| 97 | } | ||
| 98 | |||
| 99 | An alternative is: | ||
| 100 | |||
| 101 | Py_BLOCK_THREADS | ||
| 102 | if (...premature_exit...) { | ||
| 103 | PyErr_SetFromErrno(PyExc_IOError); | ||
| 104 | return NULL; | ||
| 105 | } | ||
| 106 | Py_UNBLOCK_THREADS | ||
| 107 | |||
| 108 | For convenience, that the value of 'errno' is restored across | ||
| 109 | Py_END_ALLOW_THREADS and Py_BLOCK_THREADS. | ||
| 110 | |||
| 111 | WARNING: NEVER NEST CALLS TO Py_BEGIN_ALLOW_THREADS AND | ||
| 112 | Py_END_ALLOW_THREADS!!! | ||
| 113 | |||
| 114 | The function PyEval_InitThreads() should be called only from | ||
| 115 | initthread() in "threadmodule.c". | ||
| 116 | |||
| 117 | Note that not yet all candidates have been converted to use this | ||
| 118 | mechanism! | ||
| 119 | */ | ||
| 120 | |||
| 121 | PyAPI_FUNC(PyThreadState *) PyEval_SaveThread(void); | ||
| 122 | PyAPI_FUNC(void) PyEval_RestoreThread(PyThreadState *); | ||
| 123 | |||
| 124 | #ifdef WITH_THREAD | ||
| 125 | |||
| 126 | PyAPI_FUNC(int) PyEval_ThreadsInitialized(void); | ||
| 127 | PyAPI_FUNC(void) PyEval_InitThreads(void); | ||
| 128 | PyAPI_FUNC(void) PyEval_AcquireLock(void); | ||
| 129 | PyAPI_FUNC(void) PyEval_ReleaseLock(void); | ||
| 130 | PyAPI_FUNC(void) PyEval_AcquireThread(PyThreadState *tstate); | ||
| 131 | PyAPI_FUNC(void) PyEval_ReleaseThread(PyThreadState *tstate); | ||
| 132 | PyAPI_FUNC(void) PyEval_ReInitThreads(void); | ||
| 133 | |||
| 134 | #define Py_BEGIN_ALLOW_THREADS { \ | ||
| 135 | PyThreadState *_save; \ | ||
| 136 | _save = PyEval_SaveThread(); | ||
| 137 | #define Py_BLOCK_THREADS PyEval_RestoreThread(_save); | ||
| 138 | #define Py_UNBLOCK_THREADS _save = PyEval_SaveThread(); | ||
| 139 | #define Py_END_ALLOW_THREADS PyEval_RestoreThread(_save); \ | ||
| 140 | } | ||
| 141 | |||
| 142 | #else /* !WITH_THREAD */ | ||
| 143 | |||
| 144 | #define Py_BEGIN_ALLOW_THREADS { | ||
| 145 | #define Py_BLOCK_THREADS | ||
| 146 | #define Py_UNBLOCK_THREADS | ||
| 147 | #define Py_END_ALLOW_THREADS } | ||
| 148 | |||
| 149 | #endif /* !WITH_THREAD */ | ||
| 150 | |||
| 151 | PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *); | ||
| 152 | |||
| 153 | |||
| 154 | #ifdef __cplusplus | ||
| 155 | } | ||
| 156 | #endif | ||
| 157 | #endif /* !Py_CEVAL_H */ | ||
| @@ -0,0 +1,81 @@ | |||
| 1 | |||
| 2 | /* Class object interface */ | ||
| 3 | |||
| 4 | /* Revealing some structures (not for general use) */ | ||
| 5 | |||
| 6 | #ifndef Py_CLASSOBJECT_H | ||
| 7 | #define Py_CLASSOBJECT_H | ||
| 8 | #ifdef __cplusplus | ||
| 9 | extern "C" { | ||
| 10 | #endif | ||
| 11 | |||
| 12 | typedef struct { | ||
| 13 | PyObject_HEAD | ||
| 14 | PyObject *cl_bases; /* A tuple of class objects */ | ||
| 15 | PyObject *cl_dict; /* A dictionary */ | ||
| 16 | PyObject *cl_name; /* A string */ | ||
| 17 | /* The following three are functions or NULL */ | ||
| 18 | PyObject *cl_getattr; | ||
| 19 | PyObject *cl_setattr; | ||
| 20 | PyObject *cl_delattr; | ||
| 21 | } PyClassObject; | ||
| 22 | |||
| 23 | typedef struct { | ||
| 24 | PyObject_HEAD | ||
| 25 | PyClassObject *in_class; /* The class object */ | ||
| 26 | PyObject *in_dict; /* A dictionary */ | ||
| 27 | PyObject *in_weakreflist; /* List of weak references */ | ||
| 28 | } PyInstanceObject; | ||
| 29 | |||
| 30 | typedef struct { | ||
| 31 | PyObject_HEAD | ||
| 32 | PyObject *im_func; /* The callable object implementing the method */ | ||
| 33 | PyObject *im_self; /* The instance it is bound to, or NULL */ | ||
| 34 | PyObject *im_class; /* The class that asked for the method */ | ||
| 35 | PyObject *im_weakreflist; /* List of weak references */ | ||
| 36 | } PyMethodObject; | ||
| 37 | |||
| 38 | PyAPI_DATA(PyTypeObject) PyClass_Type, PyInstance_Type, PyMethod_Type; | ||
| 39 | |||
| 40 | #define PyClass_Check(op) ((op)->ob_type == &PyClass_Type) | ||
| 41 | #define PyInstance_Check(op) ((op)->ob_type == &PyInstance_Type) | ||
| 42 | #define PyMethod_Check(op) ((op)->ob_type == &PyMethod_Type) | ||
| 43 | |||
| 44 | PyAPI_FUNC(PyObject *) PyClass_New(PyObject *, PyObject *, PyObject *); | ||
| 45 | PyAPI_FUNC(PyObject *) PyInstance_New(PyObject *, PyObject *, | ||
| 46 | PyObject *); | ||
| 47 | PyAPI_FUNC(PyObject *) PyInstance_NewRaw(PyObject *, PyObject *); | ||
| 48 | PyAPI_FUNC(PyObject *) PyMethod_New(PyObject *, PyObject *, PyObject *); | ||
| 49 | |||
| 50 | PyAPI_FUNC(PyObject *) PyMethod_Function(PyObject *); | ||
| 51 | PyAPI_FUNC(PyObject *) PyMethod_Self(PyObject *); | ||
| 52 | PyAPI_FUNC(PyObject *) PyMethod_Class(PyObject *); | ||
| 53 | |||
| 54 | /* Look up attribute with name (a string) on instance object pinst, using | ||
| 55 | * only the instance and base class dicts. If a descriptor is found in | ||
| 56 | * a class dict, the descriptor is returned without calling it. | ||
| 57 | * Returns NULL if nothing found, else a borrowed reference to the | ||
| 58 | * value associated with name in the dict in which name was found. | ||
| 59 | * The point of this routine is that it never calls arbitrary Python | ||
| 60 | * code, so is always "safe": all it does is dict lookups. The function | ||
| 61 | * can't fail, never sets an exception, and NULL is not an error (it just | ||
| 62 | * means "not found"). | ||
| 63 | */ | ||
| 64 | PyAPI_FUNC(PyObject *) _PyInstance_Lookup(PyObject *pinst, PyObject *name); | ||
| 65 | |||
| 66 | /* Macros for direct access to these values. Type checks are *not* | ||
| 67 | done, so use with care. */ | ||
| 68 | #define PyMethod_GET_FUNCTION(meth) \ | ||
| 69 | (((PyMethodObject *)meth) -> im_func) | ||
| 70 | #define PyMethod_GET_SELF(meth) \ | ||
| 71 | (((PyMethodObject *)meth) -> im_self) | ||
| 72 | #define PyMethod_GET_CLASS(meth) \ | ||
| 73 | (((PyMethodObject *)meth) -> im_class) | ||
| 74 | |||
| 75 | PyAPI_FUNC(int) PyClass_IsSubclass(PyObject *, PyObject *); | ||
| 76 | |||
| 77 | |||
| 78 | #ifdef __cplusplus | ||
| 79 | } | ||
| 80 | #endif | ||
| 81 | #endif /* !Py_CLASSOBJECT_H */ | ||
| @@ -0,0 +1,54 @@ | |||
| 1 | |||
| 2 | /* C objects to be exported from one extension module to another. | ||
| 3 | |||
| 4 | C objects are used for communication between extension modules. | ||
| 5 | They provide a way for an extension module to export a C interface | ||
| 6 | to other extension modules, so that extension modules can use the | ||
| 7 | Python import mechanism to link to one another. | ||
| 8 | |||
| 9 | */ | ||
| 10 | |||
| 11 | #ifndef Py_COBJECT_H | ||
| 12 | #define Py_COBJECT_H | ||
| 13 | #ifdef __cplusplus | ||
| 14 | extern "C" { | ||
| 15 | #endif | ||
| 16 | |||
| 17 | PyAPI_DATA(PyTypeObject) PyCObject_Type; | ||
| 18 | |||
| 19 | #define PyCObject_Check(op) ((op)->ob_type == &PyCObject_Type) | ||
| 20 | |||
| 21 | /* Create a PyCObject from a pointer to a C object and an optional | ||
| 22 | destructor function. If the second argument is non-null, then it | ||
| 23 | will be called with the first argument if and when the PyCObject is | ||
| 24 | destroyed. | ||
| 25 | |||
| 26 | */ | ||
| 27 | PyAPI_FUNC(PyObject *) PyCObject_FromVoidPtr( | ||
| 28 | void *cobj, void (*destruct)(void*)); | ||
| 29 | |||
| 30 | |||
| 31 | /* Create a PyCObject from a pointer to a C object, a description object, | ||
| 32 | and an optional destructor function. If the third argument is non-null, | ||
| 33 | then it will be called with the first and second arguments if and when | ||
| 34 | the PyCObject is destroyed. | ||
| 35 | */ | ||
| 36 | PyAPI_FUNC(PyObject *) PyCObject_FromVoidPtrAndDesc( | ||
| 37 | void *cobj, void *desc, void (*destruct)(void*,void*)); | ||
| 38 | |||
| 39 | /* Retrieve a pointer to a C object from a PyCObject. */ | ||
| 40 | PyAPI_FUNC(void *) PyCObject_AsVoidPtr(PyObject *); | ||
| 41 | |||
| 42 | /* Retrieve a pointer to a description object from a PyCObject. */ | ||
| 43 | PyAPI_FUNC(void *) PyCObject_GetDesc(PyObject *); | ||
| 44 | |||
| 45 | /* Import a pointer to a C object from a module using a PyCObject. */ | ||
| 46 | PyAPI_FUNC(void *) PyCObject_Import(char *module_name, char *cobject_name); | ||
| 47 | |||
| 48 | /* Modify a C object. Fails (==0) if object has a destructor. */ | ||
| 49 | PyAPI_FUNC(int) PyCObject_SetVoidPtr(PyObject *self, void *cobj); | ||
| 50 | |||
| 51 | #ifdef __cplusplus | ||
| 52 | } | ||
| 53 | #endif | ||
| 54 | #endif /* !Py_COBJECT_H */ | ||
| @@ -0,0 +1,94 @@ | |||
| 1 | /* Definitions for bytecode */ | ||
| 2 | |||
| 3 | #ifndef Py_CODE_H | ||
| 4 | #define Py_CODE_H | ||
| 5 | #ifdef __cplusplus | ||
| 6 | extern "C" { | ||
| 7 | #endif | ||
| 8 | |||
| 9 | /* Bytecode object */ | ||
| 10 | typedef struct { | ||
| 11 | PyObject_HEAD | ||
| 12 | int co_argcount; /* #arguments, except *args */ | ||
| 13 | int co_nlocals; /* #local variables */ | ||
| 14 | int co_stacksize; /* #entries needed for evaluation stack */ | ||
| 15 | int co_flags; /* CO_..., see below */ | ||
| 16 | PyObject *co_code; /* instruction opcodes */ | ||
| 17 | PyObject *co_consts; /* list (constants used) */ | ||
| 18 | PyObject *co_names; /* list of strings (names used) */ | ||
| 19 | PyObject *co_varnames; /* tuple of strings (local variable names) */ | ||
| 20 | PyObject *co_freevars; /* tuple of strings (free variable names) */ | ||
| 21 | PyObject *co_cellvars; /* tuple of strings (cell variable names) */ | ||
| 22 | /* The rest doesn't count for hash/cmp */ | ||
| 23 | PyObject *co_filename; /* string (where it was loaded from) */ | ||
| 24 | PyObject *co_name; /* string (name, for reference) */ | ||
| 25 | int co_firstlineno; /* first source line number */ | ||
| 26 | PyObject *co_lnotab; /* string (encoding addr<->lineno mapping) */ | ||
| 27 | void *co_zombieframe; /* for optimization only (see frameobject.c) */ | ||
| 28 | } PyCodeObject; | ||
| 29 | |||
| 30 | /* Masks for co_flags above */ | ||
| 31 | #define CO_OPTIMIZED 0x0001 | ||
| 32 | #define CO_NEWLOCALS 0x0002 | ||
| 33 | #define CO_VARARGS 0x0004 | ||
| 34 | #define CO_VARKEYWORDS 0x0008 | ||
| 35 | #define CO_NESTED 0x0010 | ||
| 36 | #define CO_GENERATOR 0x0020 | ||
| 37 | /* The CO_NOFREE flag is set if there are no free or cell variables. | ||
| 38 | This information is redundant, but it allows a single flag test | ||
| 39 | to determine whether there is any extra work to be done when the | ||
| 40 | call frame it setup. | ||
| 41 | */ | ||
| 42 | #define CO_NOFREE 0x0040 | ||
| 43 | |||
| 44 | #if 0 | ||
| 45 | /* This is no longer used. Stopped defining in 2.5, do not re-use. */ | ||
| 46 | #define CO_GENERATOR_ALLOWED 0x1000 | ||
| 47 | #endif | ||
| 48 | #define CO_FUTURE_DIVISION 0x2000 | ||
| 49 | #define CO_FUTURE_ABSOLUTE_IMPORT 0x4000 /* do absolute imports by default */ | ||
| 50 | #define CO_FUTURE_WITH_STATEMENT 0x8000 | ||
| 51 | |||
| 52 | /* This should be defined if a future statement modifies the syntax. | ||
| 53 | For example, when a keyword is added. | ||
| 54 | */ | ||
| 55 | #define PY_PARSER_REQUIRES_FUTURE_KEYWORD | ||
| 56 | |||
| 57 | #define CO_MAXBLOCKS 20 /* Max static block nesting within a function */ | ||
| 58 | |||
| 59 | PyAPI_DATA(PyTypeObject) PyCode_Type; | ||
| 60 | |||
| 61 | #define PyCode_Check(op) ((op)->ob_type == &PyCode_Type) | ||
| 62 | #define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars)) | ||
| 63 | |||
| 64 | /* Public interface */ | ||
| 65 | PyAPI_FUNC(PyCodeObject *) PyCode_New( | ||
| 66 | int, int, int, int, PyObject *, PyObject *, PyObject *, PyObject *, | ||
| 67 | PyObject *, PyObject *, PyObject *, PyObject *, int, PyObject *); | ||
| 68 | /* same as struct above */ | ||
| 69 | PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int); | ||
| 70 | |||
| 71 | /* for internal use only */ | ||
| 72 | #define _PyCode_GETCODEPTR(co, pp) \ | ||
| 73 | ((*(co)->co_code->ob_type->tp_as_buffer->bf_getreadbuffer) \ | ||
| 74 | ((co)->co_code, 0, (void **)(pp))) | ||
| 75 | |||
| 76 | typedef struct _addr_pair { | ||
| 77 | int ap_lower; | ||
| 78 | int ap_upper; | ||
| 79 | } PyAddrPair; | ||
| 80 | |||
| 81 | /* Check whether lasti (an instruction offset) falls outside bounds | ||
| 82 | and whether it is a line number that should be traced. Returns | ||
| 83 | a line number if it should be traced or -1 if the line should not. | ||
| 84 | |||
| 85 | If lasti is not within bounds, updates bounds. | ||
| 86 | */ | ||
| 87 | |||
| 88 | PyAPI_FUNC(int) PyCode_CheckLineNumber(PyCodeObject* co, | ||
| 89 | int lasti, PyAddrPair *bounds); | ||
| 90 | |||
| 91 | #ifdef __cplusplus | ||
| 92 | } | ||
| 93 | #endif | ||
| 94 | #endif /* !Py_CODE_H */ | ||
| @@ -0,0 +1,167 @@ | |||
| 1 | #ifndef Py_CODECREGISTRY_H | ||
| 2 | #define Py_CODECREGISTRY_H | ||
| 3 | #ifdef __cplusplus | ||
| 4 | extern "C" { | ||
| 5 | #endif | ||
| 6 | |||
| 7 | /* ------------------------------------------------------------------------ | ||
| 8 | |||
| 9 | Python Codec Registry and support functions | ||
| 10 | |||
| 11 | |||
| 12 | Written by Marc-Andre Lemburg (mal@lemburg.com). | ||
| 13 | |||
| 14 | Copyright (c) Corporation for National Research Initiatives. | ||
| 15 | |||
| 16 | ------------------------------------------------------------------------ */ | ||
| 17 | |||
| 18 | /* Register a new codec search function. | ||
| 19 | |||
| 20 | As side effect, this tries to load the encodings package, if not | ||
| 21 | yet done, to make sure that it is always first in the list of | ||
| 22 | search functions. | ||
| 23 | |||
| 24 | The search_function's refcount is incremented by this function. */ | ||
| 25 | |||
| 26 | PyAPI_FUNC(int) PyCodec_Register( | ||
| 27 | PyObject *search_function | ||
| 28 | ); | ||
| 29 | |||
| 30 | /* Codec register lookup API. | ||
| 31 | |||
| 32 | Looks up the given encoding and returns a CodecInfo object with | ||
| 33 | function attributes which implement the different aspects of | ||
| 34 | processing the encoding. | ||
| 35 | |||
| 36 | The encoding string is looked up converted to all lower-case | ||
| 37 | characters. This makes encodings looked up through this mechanism | ||
| 38 | effectively case-insensitive. | ||
| 39 | |||
| 40 | If no codec is found, a KeyError is set and NULL returned. | ||
| 41 | |||
| 42 | As side effect, this tries to load the encodings package, if not | ||
| 43 | yet done. This is part of the lazy load strategy for the encodings | ||
| 44 | package. | ||
| 45 | |||
| 46 | */ | ||
| 47 | |||
| 48 | PyAPI_FUNC(PyObject *) _PyCodec_Lookup( | ||
| 49 | const char *encoding | ||
| 50 | ); | ||
| 51 | |||
| 52 | /* Generic codec based encoding API. | ||
| 53 | |||
| 54 | object is passed through the encoder function found for the given | ||
| 55 | encoding using the error handling method defined by errors. errors | ||
| 56 | may be NULL to use the default method defined for the codec. | ||
| 57 | |||
| 58 | Raises a LookupError in case no encoder can be found. | ||
| 59 | |||
| 60 | */ | ||
| 61 | |||
| 62 | PyAPI_FUNC(PyObject *) PyCodec_Encode( | ||
| 63 | PyObject *object, | ||
| 64 | const char *encoding, | ||
| 65 | const char *errors | ||
| 66 | ); | ||
| 67 | |||
| 68 | /* Generic codec based decoding API. | ||
| 69 | |||
| 70 | object is passed through the decoder function found for the given | ||
| 71 | encoding using the error handling method defined by errors. errors | ||
| 72 | may be NULL to use the default method defined for the codec. | ||
| 73 | |||
| 74 | Raises a LookupError in case no encoder can be found. | ||
| 75 | |||
| 76 | */ | ||
| 77 | |||
| 78 | PyAPI_FUNC(PyObject *) PyCodec_Decode( | ||
| 79 | PyObject *object, | ||
| 80 | const char *encoding, | ||
| 81 | const char *errors | ||
| 82 | ); | ||
| 83 | |||
| 84 | /* --- Codec Lookup APIs -------------------------------------------------- | ||
| 85 | |||
| 86 | All APIs return a codec object with incremented refcount and are | ||
| 87 | based on _PyCodec_Lookup(). The same comments w/r to the encoding | ||
| 88 | name also apply to these APIs. | ||
| 89 | |||
| 90 | */ | ||
| 91 | |||
| 92 | /* Get an encoder function for the given encoding. */ | ||
| 93 | |||
| 94 | PyAPI_FUNC(PyObject *) PyCodec_Encoder( | ||
| 95 | const char *encoding | ||
| 96 | ); | ||
| 97 | |||
| 98 | /* Get a decoder function for the given encoding. */ | ||
| 99 | |||
| 100 | PyAPI_FUNC(PyObject *) PyCodec_Decoder( | ||
| 101 | const char *encoding | ||
| 102 | ); | ||
| 103 | |||
| 104 | /* Get a IncrementalEncoder object for the given encoding. */ | ||
| 105 | |||
| 106 | PyAPI_FUNC(PyObject *) PyCodec_IncrementalEncoder( | ||
| 107 | const char *encoding, | ||
| 108 | const char *errors | ||
| 109 | ); | ||
| 110 | |||
| 111 | /* Get a IncrementalDecoder object function for the given encoding. */ | ||
| 112 | |||
| 113 | PyAPI_FUNC(PyObject *) PyCodec_IncrementalDecoder( | ||
| 114 | const char *encoding, | ||
| 115 | const char *errors | ||
| 116 | ); | ||
| 117 | |||
| 118 | /* Get a StreamReader factory function for the given encoding. */ | ||
| 119 | |||
| 120 | PyAPI_FUNC(PyObject *) PyCodec_StreamReader( | ||
| 121 | const char *encoding, | ||
| 122 | PyObject *stream, | ||
| 123 | const char *errors | ||
| 124 | ); | ||
| 125 | |||
| 126 | /* Get a StreamWriter factory function for the given encoding. */ | ||
| 127 | |||
| 128 | PyAPI_FUNC(PyObject *) PyCodec_StreamWriter( | ||
| 129 | const char *encoding, | ||
| 130 | PyObject *stream, | ||
| 131 | const char *errors | ||
| 132 | ); | ||
| 133 | |||
| 134 | /* Unicode encoding error handling callback registry API */ | ||
| 135 | |||
| 136 | /* Register the error handling callback function error under the name | ||
| 137 | name. This function will be called by the codec when it encounters | ||
| 138 | unencodable characters/undecodable bytes and doesn't know the | ||
| 139 | callback name, when name is specified as the error parameter | ||
| 140 | in the call to the encode/decode function. | ||
| 141 | Return 0 on success, -1 on error */ | ||
| 142 | PyAPI_FUNC(int) PyCodec_RegisterError(const char *name, PyObject *error); | ||
| 143 | |||
| 144 | /* Lookup the error handling callback function registered under the | ||
| 145 | name error. As a special case NULL can be passed, in which case | ||
| 146 | the error handling callback for "strict" will be returned. */ | ||
| 147 | PyAPI_FUNC(PyObject *) PyCodec_LookupError(const char *name); | ||
| 148 | |||
| 149 | /* raise exc as an exception */ | ||
| 150 | PyAPI_FUNC(PyObject *) PyCodec_StrictErrors(PyObject *exc); | ||
| 151 | |||
| 152 | /* ignore the unicode error, skipping the faulty input */ | ||
| 153 | PyAPI_FUNC(PyObject *) PyCodec_IgnoreErrors(PyObject *exc); | ||
| 154 | |||
| 155 | /* replace the unicode error with ? or U+FFFD */ | ||
| 156 | PyAPI_FUNC(PyObject *) PyCodec_ReplaceErrors(PyObject *exc); | ||
| 157 | |||
| 158 | /* replace the unicode encode error with XML character references */ | ||
| 159 | PyAPI_FUNC(PyObject *) PyCodec_XMLCharRefReplaceErrors(PyObject *exc); | ||
| 160 | |||
| 161 | /* replace the unicode encode error with backslash escapes (\x, \u and \U) */ | ||
| 162 | PyAPI_FUNC(PyObject *) PyCodec_BackslashReplaceErrors(PyObject *exc); | ||
| 163 | |||
| 164 | #ifdef __cplusplus | ||
| 165 | } | ||
| 166 | #endif | ||
| 167 | #endif /* !Py_CODECREGISTRY_H */ | ||
| @@ -0,0 +1,39 @@ | |||
| 1 | |||
| 2 | #ifndef Py_COMPILE_H | ||
| 3 | #define Py_COMPILE_H | ||
| 4 | |||
| 5 | #include "code.h" | ||
| 6 | |||
| 7 | #ifdef __cplusplus | ||
| 8 | extern "C" { | ||
| 9 | #endif | ||
| 10 | |||
| 11 | /* Public interface */ | ||
| 12 | struct _node; /* Declare the existence of this type */ | ||
| 13 | PyAPI_FUNC(PyCodeObject *) PyNode_Compile(struct _node *, const char *); | ||
| 14 | |||
| 15 | /* Future feature support */ | ||
| 16 | |||
| 17 | typedef struct { | ||
| 18 | int ff_features; /* flags set by future statements */ | ||
| 19 | int ff_lineno; /* line number of last future statement */ | ||
| 20 | } PyFutureFeatures; | ||
| 21 | |||
| 22 | #define FUTURE_NESTED_SCOPES "nested_scopes" | ||
| 23 | #define FUTURE_GENERATORS "generators" | ||
| 24 | #define FUTURE_DIVISION "division" | ||
| 25 | #define FUTURE_ABSOLUTE_IMPORT "absolute_import" | ||
| 26 | #define FUTURE_WITH_STATEMENT "with_statement" | ||
| 27 | |||
| 28 | struct _mod; /* Declare the existence of this type */ | ||
| 29 | PyAPI_FUNC(PyCodeObject *) PyAST_Compile(struct _mod *, const char *, | ||
| 30 | PyCompilerFlags *, PyArena *); | ||
| 31 | PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(struct _mod *, const char *); | ||
| 32 | |||
| 33 | #define ERR_LATE_FUTURE \ | ||
| 34 | "from __future__ imports must occur at the beginning of the file" | ||
| 35 | |||
| 36 | #ifdef __cplusplus | ||
| 37 | } | ||
| 38 | #endif | ||
| 39 | #endif /* !Py_COMPILE_H */ | ||
| @@ -0,0 +1,58 @@ | |||
| 1 | /* Complex number structure */ | ||
| 2 | |||
| 3 | #ifndef Py_COMPLEXOBJECT_H | ||
| 4 | #define Py_COMPLEXOBJECT_H | ||
| 5 | #ifdef __cplusplus | ||
| 6 | extern "C" { | ||
| 7 | #endif | ||
| 8 | |||
| 9 | typedef struct { | ||
| 10 | double real; | ||
| 11 | double imag; | ||
| 12 | } Py_complex; | ||
| 13 | |||
| 14 | /* Operations on complex numbers from complexmodule.c */ | ||
| 15 | |||
| 16 | #define c_sum _Py_c_sum | ||
| 17 | #define c_diff _Py_c_diff | ||
| 18 | #define c_neg _Py_c_neg | ||
| 19 | #define c_prod _Py_c_prod | ||
| 20 | #define c_quot _Py_c_quot | ||
| 21 | #define c_pow _Py_c_pow | ||
| 22 | |||
| 23 | PyAPI_FUNC(Py_complex) c_sum(Py_complex, Py_complex); | ||
| 24 | PyAPI_FUNC(Py_complex) c_diff(Py_complex, Py_complex); | ||
| 25 | PyAPI_FUNC(Py_complex) c_neg(Py_complex); | ||
| 26 | PyAPI_FUNC(Py_complex) c_prod(Py_complex, Py_complex); | ||
| 27 | PyAPI_FUNC(Py_complex) c_quot(Py_complex, Py_complex); | ||
| 28 | PyAPI_FUNC(Py_complex) c_pow(Py_complex, Py_complex); | ||
| 29 | |||
| 30 | |||
| 31 | /* Complex object interface */ | ||
| 32 | |||
| 33 | /* | ||
| 34 | PyComplexObject represents a complex number with double-precision | ||
| 35 | real and imaginary parts. | ||
| 36 | */ | ||
| 37 | |||
| 38 | typedef struct { | ||
| 39 | PyObject_HEAD | ||
| 40 | Py_complex cval; | ||
| 41 | } PyComplexObject; | ||
| 42 | |||
| 43 | PyAPI_DATA(PyTypeObject) PyComplex_Type; | ||
| 44 | |||
| 45 | #define PyComplex_Check(op) PyObject_TypeCheck(op, &PyComplex_Type) | ||
| 46 | #define PyComplex_CheckExact(op) ((op)->ob_type == &PyComplex_Type) | ||
| 47 | |||
| 48 | PyAPI_FUNC(PyObject *) PyComplex_FromCComplex(Py_complex); | ||
| 49 | PyAPI_FUNC(PyObject *) PyComplex_FromDoubles(double real, double imag); | ||
| 50 | |||
| 51 | PyAPI_FUNC(double) PyComplex_RealAsDouble(PyObject *op); | ||
| 52 | PyAPI_FUNC(double) PyComplex_ImagAsDouble(PyObject *op); | ||
| 53 | PyAPI_FUNC(Py_complex) PyComplex_AsCComplex(PyObject *op); | ||
| 54 | |||
| 55 | #ifdef __cplusplus | ||
| 56 | } | ||
| 57 | #endif | ||
| 58 | #endif /* !Py_COMPLEXOBJECT_H */ | ||
| @@ -0,0 +1,245 @@ | |||
| 1 | /* datetime.h | ||
| 2 | */ | ||
| 3 | |||
| 4 | #ifndef DATETIME_H | ||
| 5 | #define DATETIME_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | /* Fields are packed into successive bytes, each viewed as unsigned and | ||
| 11 | * big-endian, unless otherwise noted: | ||
| 12 | * | ||
| 13 | * byte offset | ||
| 14 | * 0 year 2 bytes, 1-9999 | ||
| 15 | * 2 month 1 byte, 1-12 | ||
| 16 | * 3 day 1 byte, 1-31 | ||
| 17 | * 4 hour 1 byte, 0-23 | ||
| 18 | * 5 minute 1 byte, 0-59 | ||
| 19 | * 6 second 1 byte, 0-59 | ||
| 20 | * 7 usecond 3 bytes, 0-999999 | ||
| 21 | * 10 | ||
| 22 | */ | ||
| 23 | |||
| 24 | /* # of bytes for year, month, and day. */ | ||
| 25 | #define _PyDateTime_DATE_DATASIZE 4 | ||
| 26 | |||
| 27 | /* # of bytes for hour, minute, second, and usecond. */ | ||
| 28 | #define _PyDateTime_TIME_DATASIZE 6 | ||
| 29 | |||
| 30 | /* # of bytes for year, month, day, hour, minute, second, and usecond. */ | ||
| 31 | #define _PyDateTime_DATETIME_DATASIZE 10 | ||
| 32 | |||
| 33 | |||
| 34 | typedef struct | ||
| 35 | { | ||
| 36 | PyObject_HEAD | ||
| 37 | long hashcode; /* -1 when unknown */ | ||
| 38 | int days; /* -MAX_DELTA_DAYS <= days <= MAX_DELTA_DAYS */ | ||
| 39 | int seconds; /* 0 <= seconds < 24*3600 is invariant */ | ||
| 40 | int microseconds; /* 0 <= microseconds < 1000000 is invariant */ | ||
| 41 | } PyDateTime_Delta; | ||
| 42 | |||
| 43 | typedef struct | ||
| 44 | { | ||
| 45 | PyObject_HEAD /* a pure abstract base clase */ | ||
| 46 | } PyDateTime_TZInfo; | ||
| 47 | |||
| 48 | |||
| 49 | /* The datetime and time types have hashcodes, and an optional tzinfo member, | ||
| 50 | * present if and only if hastzinfo is true. | ||
| 51 | */ | ||
| 52 | #define _PyTZINFO_HEAD \ | ||
| 53 | PyObject_HEAD \ | ||
| 54 | long hashcode; \ | ||
| 55 | char hastzinfo; /* boolean flag */ | ||
| 56 | |||
| 57 | /* No _PyDateTime_BaseTZInfo is allocated; it's just to have something | ||
| 58 | * convenient to cast to, when getting at the hastzinfo member of objects | ||
| 59 | * starting with _PyTZINFO_HEAD. | ||
| 60 | */ | ||
| 61 | typedef struct | ||
| 62 | { | ||
| 63 | _PyTZINFO_HEAD | ||
| 64 | } _PyDateTime_BaseTZInfo; | ||
| 65 | |||
| 66 | /* All time objects are of PyDateTime_TimeType, but that can be allocated | ||
| 67 | * in two ways, with or without a tzinfo member. Without is the same as | ||
| 68 | * tzinfo == None, but consumes less memory. _PyDateTime_BaseTime is an | ||
| 69 | * internal struct used to allocate the right amount of space for the | ||
| 70 | * "without" case. | ||
| 71 | */ | ||
| 72 | #define _PyDateTime_TIMEHEAD \ | ||
| 73 | _PyTZINFO_HEAD \ | ||
| 74 | unsigned char data[_PyDateTime_TIME_DATASIZE]; | ||
| 75 | |||
| 76 | typedef struct | ||
| 77 | { | ||
| 78 | _PyDateTime_TIMEHEAD | ||
| 79 | } _PyDateTime_BaseTime; /* hastzinfo false */ | ||
| 80 | |||
| 81 | typedef struct | ||
| 82 | { | ||
| 83 | _PyDateTime_TIMEHEAD | ||
| 84 | PyObject *tzinfo; | ||
| 85 | } PyDateTime_Time; /* hastzinfo true */ | ||
| 86 | |||
| 87 | |||
| 88 | /* All datetime objects are of PyDateTime_DateTimeType, but that can be | ||
| 89 | * allocated in two ways too, just like for time objects above. In addition, | ||
| 90 | * the plain date type is a base class for datetime, so it must also have | ||
| 91 | * a hastzinfo member (although it's unused there). | ||
| 92 | */ | ||
| 93 | typedef struct | ||
| 94 | { | ||
| 95 | _PyTZINFO_HEAD | ||
| 96 | unsigned char data[_PyDateTime_DATE_DATASIZE]; | ||
| 97 | } PyDateTime_Date; | ||
| 98 | |||
| 99 | #define _PyDateTime_DATETIMEHEAD \ | ||
| 100 | _PyTZINFO_HEAD \ | ||
| 101 | unsigned char data[_PyDateTime_DATETIME_DATASIZE]; | ||
| 102 | |||
| 103 | typedef struct | ||
| 104 | { | ||
| 105 | _PyDateTime_DATETIMEHEAD | ||
| 106 | } _PyDateTime_BaseDateTime; /* hastzinfo false */ | ||
| 107 | |||
| 108 | typedef struct | ||
| 109 | { | ||
| 110 | _PyDateTime_DATETIMEHEAD | ||
| 111 | PyObject *tzinfo; | ||
| 112 | } PyDateTime_DateTime; /* hastzinfo true */ | ||
| 113 | |||
| 114 | |||
| 115 | /* Apply for date and datetime instances. */ | ||
| 116 | #define PyDateTime_GET_YEAR(o) ((((PyDateTime_Date*)o)->data[0] << 8) | \ | ||
| 117 | ((PyDateTime_Date*)o)->data[1]) | ||
| 118 | #define PyDateTime_GET_MONTH(o) (((PyDateTime_Date*)o)->data[2]) | ||
| 119 | #define PyDateTime_GET_DAY(o) (((PyDateTime_Date*)o)->data[3]) | ||
| 120 | |||
| 121 | #define PyDateTime_DATE_GET_HOUR(o) (((PyDateTime_DateTime*)o)->data[4]) | ||
| 122 | #define PyDateTime_DATE_GET_MINUTE(o) (((PyDateTime_DateTime*)o)->data[5]) | ||
| 123 | #define PyDateTime_DATE_GET_SECOND(o) (((PyDateTime_DateTime*)o)->data[6]) | ||
| 124 | #define PyDateTime_DATE_GET_MICROSECOND(o) \ | ||
| 125 | ((((PyDateTime_DateTime*)o)->data[7] << 16) | \ | ||
| 126 | (((PyDateTime_DateTime*)o)->data[8] << 8) | \ | ||
| 127 | ((PyDateTime_DateTime*)o)->data[9]) | ||
| 128 | |||
| 129 | /* Apply for time instances. */ | ||
| 130 | #define PyDateTime_TIME_GET_HOUR(o) (((PyDateTime_Time*)o)->data[0]) | ||
| 131 | #define PyDateTime_TIME_GET_MINUTE(o) (((PyDateTime_Time*)o)->data[1]) | ||
| 132 | #define PyDateTime_TIME_GET_SECOND(o) (((PyDateTime_Time*)o)->data[2]) | ||
| 133 | #define PyDateTime_TIME_GET_MICROSECOND(o) \ | ||
| 134 | ((((PyDateTime_Time*)o)->data[3] << 16) | \ | ||
| 135 | (((PyDateTime_Time*)o)->data[4] << 8) | \ | ||
| 136 | ((PyDateTime_Time*)o)->data[5]) | ||
| 137 | |||
| 138 | |||
| 139 | /* Define structure for C API. */ | ||
| 140 | typedef struct { | ||
| 141 | /* type objects */ | ||
| 142 | PyTypeObject *DateType; | ||
| 143 | PyTypeObject *DateTimeType; | ||
| 144 | PyTypeObject *TimeType; | ||
| 145 | PyTypeObject *DeltaType; | ||
| 146 | PyTypeObject *TZInfoType; | ||
| 147 | |||
| 148 | /* constructors */ | ||
| 149 | PyObject *(*Date_FromDate)(int, int, int, PyTypeObject*); | ||
| 150 | PyObject *(*DateTime_FromDateAndTime)(int, int, int, int, int, int, int, | ||
| 151 | PyObject*, PyTypeObject*); | ||
| 152 | PyObject *(*Time_FromTime)(int, int, int, int, PyObject*, PyTypeObject*); | ||
| 153 | PyObject *(*Delta_FromDelta)(int, int, int, int, PyTypeObject*); | ||
| 154 | |||
| 155 | /* constructors for the DB API */ | ||
| 156 | PyObject *(*DateTime_FromTimestamp)(PyObject*, PyObject*, PyObject*); | ||
| 157 | PyObject *(*Date_FromTimestamp)(PyObject*, PyObject*); | ||
| 158 | |||
| 159 | } PyDateTime_CAPI; | ||
| 160 | |||
| 161 | |||
| 162 | /* "magic" constant used to partially protect against developer mistakes. */ | ||
| 163 | #define DATETIME_API_MAGIC 0x414548d5 | ||
| 164 | |||
| 165 | #ifdef Py_BUILD_CORE | ||
| 166 | |||
| 167 | /* Macros for type checking when building the Python core. */ | ||
| 168 | #define PyDate_Check(op) PyObject_TypeCheck(op, &PyDateTime_DateType) | ||
| 169 | #define PyDate_CheckExact(op) ((op)->ob_type == &PyDateTime_DateType) | ||
| 170 | |||
| 171 | #define PyDateTime_Check(op) PyObject_TypeCheck(op, &PyDateTime_DateTimeType) | ||
| 172 | #define PyDateTime_CheckExact(op) ((op)->ob_type == &PyDateTime_DateTimeType) | ||
| 173 | |||
| 174 | #define PyTime_Check(op) PyObject_TypeCheck(op, &PyDateTime_TimeType) | ||
| 175 | #define PyTime_CheckExact(op) ((op)->ob_type == &PyDateTime_TimeType) | ||
| 176 | |||
| 177 | #define PyDelta_Check(op) PyObject_TypeCheck(op, &PyDateTime_DeltaType) | ||
| 178 | #define PyDelta_CheckExact(op) ((op)->ob_type == &PyDateTime_DeltaType) | ||
| 179 | |||
| 180 | #define PyTZInfo_Check(op) PyObject_TypeCheck(op, &PyDateTime_TZInfoType) | ||
| 181 | #define PyTZInfo_CheckExact(op) ((op)->ob_type == &PyDateTime_TZInfoType) | ||
| 182 | |||
| 183 | #else | ||
| 184 | |||
| 185 | /* Define global variable for the C API and a macro for setting it. */ | ||
| 186 | static PyDateTime_CAPI *PyDateTimeAPI; | ||
| 187 | |||
| 188 | #define PyDateTime_IMPORT \ | ||
| 189 | PyDateTimeAPI = (PyDateTime_CAPI*) PyCObject_Import("datetime", \ | ||
| 190 | "datetime_CAPI") | ||
| 191 | |||
| 192 | /* This macro would be used if PyCObject_ImportEx() was created. | ||
| 193 | #define PyDateTime_IMPORT \ | ||
| 194 | PyDateTimeAPI = (PyDateTime_CAPI*) PyCObject_ImportEx("datetime", \ | ||
| 195 | "datetime_CAPI", \ | ||
| 196 | DATETIME_API_MAGIC) | ||
| 197 | */ | ||
| 198 | |||
| 199 | /* Macros for type checking when not building the Python core. */ | ||
| 200 | #define PyDate_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateType) | ||
| 201 | #define PyDate_CheckExact(op) ((op)->ob_type == PyDateTimeAPI->DateType) | ||
| 202 | |||
| 203 | #define PyDateTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DateTimeType) | ||
| 204 | #define PyDateTime_CheckExact(op) ((op)->ob_type == PyDateTimeAPI->DateTimeType) | ||
| 205 | |||
| 206 | #define PyTime_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TimeType) | ||
| 207 | #define PyTime_CheckExact(op) ((op)->ob_type == PyDateTimeAPI->TimeType) | ||
| 208 | |||
| 209 | #define PyDelta_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->DeltaType) | ||
| 210 | #define PyDelta_CheckExact(op) ((op)->ob_type == PyDateTimeAPI->DeltaType) | ||
| 211 | |||
| 212 | #define PyTZInfo_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TZInfoType) | ||
| 213 | #define PyTZInfo_CheckExact(op) ((op)->ob_type == PyDateTimeAPI->TZInfoType) | ||
| 214 | |||
| 215 | /* Macros for accessing constructors in a simplified fashion. */ | ||
| 216 | #define PyDate_FromDate(year, month, day) \ | ||
| 217 | PyDateTimeAPI->Date_FromDate(year, month, day, PyDateTimeAPI->DateType) | ||
| 218 | |||
| 219 | #define PyDateTime_FromDateAndTime(year, month, day, hour, min, sec, usec) \ | ||
| 220 | PyDateTimeAPI->DateTime_FromDateAndTime(year, month, day, hour, \ | ||
| 221 | min, sec, usec, Py_None, PyDateTimeAPI->DateTimeType) | ||
| 222 | |||
| 223 | #define PyTime_FromTime(hour, minute, second, usecond) \ | ||
| 224 | PyDateTimeAPI->Time_FromTime(hour, minute, second, usecond, \ | ||
| 225 | Py_None, PyDateTimeAPI->TimeType) | ||
| 226 | |||
| 227 | #define PyDelta_FromDSU(days, seconds, useconds) \ | ||
| 228 | PyDateTimeAPI->Delta_FromDelta(days, seconds, useconds, 1, \ | ||
| 229 | PyDateTimeAPI->DeltaType) | ||
| 230 | |||
| 231 | /* Macros supporting the DB API. */ | ||
| 232 | #define PyDateTime_FromTimestamp(args) \ | ||
| 233 | PyDateTimeAPI->DateTime_FromTimestamp( \ | ||
| 234 | (PyObject*) (PyDateTimeAPI->DateTimeType), args, NULL) | ||
| 235 | |||
| 236 | #define PyDate_FromTimestamp(args) \ | ||
| 237 | PyDateTimeAPI->Date_FromTimestamp( \ | ||
| 238 | (PyObject*) (PyDateTimeAPI->DateType), args) | ||
| 239 | |||
| 240 | #endif /* Py_BUILD_CORE */ | ||
| 241 | |||
| 242 | #ifdef __cplusplus | ||
| 243 | } | ||
| 244 | #endif | ||
| 245 | #endif | ||
| @@ -0,0 +1,91 @@ | |||
| 1 | /* Descriptors */ | ||
| 2 | #ifndef Py_DESCROBJECT_H | ||
| 3 | #define Py_DESCROBJECT_H | ||
| 4 | #ifdef __cplusplus | ||
| 5 | extern "C" { | ||
| 6 | #endif | ||
| 7 | |||
| 8 | typedef PyObject *(*getter)(PyObject *, void *); | ||
| 9 | typedef int (*setter)(PyObject *, PyObject *, void *); | ||
| 10 | |||
| 11 | typedef struct PyGetSetDef { | ||
| 12 | char *name; | ||
| 13 | getter get; | ||
| 14 | setter set; | ||
| 15 | char *doc; | ||
| 16 | void *closure; | ||
| 17 | } PyGetSetDef; | ||
| 18 | |||
| 19 | typedef PyObject *(*wrapperfunc)(PyObject *self, PyObject *args, | ||
| 20 | void *wrapped); | ||
| 21 | |||
| 22 | typedef PyObject *(*wrapperfunc_kwds)(PyObject *self, PyObject *args, | ||
| 23 | void *wrapped, PyObject *kwds); | ||
| 24 | |||
| 25 | struct wrapperbase { | ||
| 26 | char *name; | ||
| 27 | int offset; | ||
| 28 | void *function; | ||
| 29 | wrapperfunc wrapper; | ||
| 30 | char *doc; | ||
| 31 | int flags; | ||
| 32 | PyObject *name_strobj; | ||
| 33 | }; | ||
| 34 | |||
| 35 | /* Flags for above struct */ | ||
| 36 | #define PyWrapperFlag_KEYWORDS 1 /* wrapper function takes keyword args */ | ||
| 37 | |||
| 38 | /* Various kinds of descriptor objects */ | ||
| 39 | |||
| 40 | #define PyDescr_COMMON \ | ||
| 41 | PyObject_HEAD \ | ||
| 42 | PyTypeObject *d_type; \ | ||
| 43 | PyObject *d_name | ||
| 44 | |||
| 45 | typedef struct { | ||
| 46 | PyDescr_COMMON; | ||
| 47 | } PyDescrObject; | ||
| 48 | |||
| 49 | typedef struct { | ||
| 50 | PyDescr_COMMON; | ||
| 51 | PyMethodDef *d_method; | ||
| 52 | } PyMethodDescrObject; | ||
| 53 | |||
| 54 | typedef struct { | ||
| 55 | PyDescr_COMMON; | ||
| 56 | struct PyMemberDef *d_member; | ||
| 57 | } PyMemberDescrObject; | ||
| 58 | |||
| 59 | typedef struct { | ||
| 60 | PyDescr_COMMON; | ||
| 61 | PyGetSetDef *d_getset; | ||
| 62 | } PyGetSetDescrObject; | ||
| 63 | |||
| 64 | typedef struct { | ||
| 65 | PyDescr_COMMON; | ||
| 66 | struct wrapperbase *d_base; | ||
| 67 | void *d_wrapped; /* This can be any function pointer */ | ||
| 68 | } PyWrapperDescrObject; | ||
| 69 | |||
| 70 | PyAPI_DATA(PyTypeObject) PyWrapperDescr_Type; | ||
| 71 | |||
| 72 | PyAPI_FUNC(PyObject *) PyDescr_NewMethod(PyTypeObject *, PyMethodDef *); | ||
| 73 | PyAPI_FUNC(PyObject *) PyDescr_NewClassMethod(PyTypeObject *, PyMethodDef *); | ||
| 74 | PyAPI_FUNC(PyObject *) PyDescr_NewMember(PyTypeObject *, | ||
| 75 | struct PyMemberDef *); | ||
| 76 | PyAPI_FUNC(PyObject *) PyDescr_NewGetSet(PyTypeObject *, | ||
| 77 | struct PyGetSetDef *); | ||
| 78 | PyAPI_FUNC(PyObject *) PyDescr_NewWrapper(PyTypeObject *, | ||
| 79 | struct wrapperbase *, void *); | ||
| 80 | #define PyDescr_IsData(d) ((d)->ob_type->tp_descr_set != NULL) | ||
| 81 | |||
| 82 | PyAPI_FUNC(PyObject *) PyDictProxy_New(PyObject *); | ||
| 83 | PyAPI_FUNC(PyObject *) PyWrapper_New(PyObject *, PyObject *); | ||
| 84 | |||
| 85 | |||
| 86 | PyAPI_DATA(PyTypeObject) PyProperty_Type; | ||
| 87 | #ifdef __cplusplus | ||
| 88 | } | ||
| 89 | #endif | ||
| 90 | #endif /* !Py_DESCROBJECT_H */ | ||
| 91 | |||
| @@ -0,0 +1,141 @@ | |||
| 1 | #ifndef Py_DICTOBJECT_H | ||
| 2 | #define Py_DICTOBJECT_H | ||
| 3 | #ifdef __cplusplus | ||
| 4 | extern "C" { | ||
| 5 | #endif | ||
| 6 | |||
| 7 | |||
| 8 | /* Dictionary object type -- mapping from hashable object to object */ | ||
| 9 | |||
| 10 | /* The distribution includes a separate file, Objects/dictnotes.txt, | ||
| 11 | describing explorations into dictionary design and optimization. | ||
| 12 | It covers typical dictionary use patterns, the parameters for | ||
| 13 | tuning dictionaries, and several ideas for possible optimizations. | ||
| 14 | */ | ||
| 15 | |||
| 16 | /* | ||
| 17 | There are three kinds of slots in the table: | ||
| 18 | |||
| 19 | 1. Unused. me_key == me_value == NULL | ||
| 20 | Does not hold an active (key, value) pair now and never did. Unused can | ||
| 21 | transition to Active upon key insertion. This is the only case in which | ||
| 22 | me_key is NULL, and is each slot's initial state. | ||
| 23 | |||
| 24 | 2. Active. me_key != NULL and me_key != dummy and me_value != NULL | ||
| 25 | Holds an active (key, value) pair. Active can transition to Dummy upon | ||
| 26 | key deletion. This is the only case in which me_value != NULL. | ||
| 27 | |||
| 28 | 3. Dummy. me_key == dummy and me_value == NULL | ||
| 29 | Previously held an active (key, value) pair, but that was deleted and an | ||
| 30 | active pair has not yet overwritten the slot. Dummy can transition to | ||
| 31 | Active upon key insertion. Dummy slots cannot be made Unused again | ||
| 32 | (cannot have me_key set to NULL), else the probe sequence in case of | ||
| 33 | collision would have no way to know they were once active. | ||
| 34 | |||
| 35 | Note: .popitem() abuses the me_hash field of an Unused or Dummy slot to | ||
| 36 | hold a search finger. The me_hash field of Unused or Dummy slots has no | ||
| 37 | meaning otherwise. | ||
| 38 | */ | ||
| 39 | |||
| 40 | /* PyDict_MINSIZE is the minimum size of a dictionary. This many slots are | ||
| 41 | * allocated directly in the dict object (in the ma_smalltable member). | ||
| 42 | * It must be a power of 2, and at least 4. 8 allows dicts with no more | ||
| 43 | * than 5 active entries to live in ma_smalltable (and so avoid an | ||
| 44 | * additional malloc); instrumentation suggested this suffices for the | ||
| 45 | * majority of dicts (consisting mostly of usually-small instance dicts and | ||
| 46 | * usually-small dicts created to pass keyword arguments). | ||
| 47 | */ | ||
| 48 | #define PyDict_MINSIZE 8 | ||
| 49 | |||
| 50 | typedef struct { | ||
| 51 | /* Cached hash code of me_key. Note that hash codes are C longs. | ||
| 52 | * We have to use Py_ssize_t instead because dict_popitem() abuses | ||
| 53 | * me_hash to hold a search finger. | ||
| 54 | */ | ||
| 55 | Py_ssize_t me_hash; | ||
| 56 | PyObject *me_key; | ||
| 57 | PyObject *me_value; | ||
| 58 | } PyDictEntry; | ||
| 59 | |||
| 60 | /* | ||
| 61 | To ensure the lookup algorithm terminates, there must be at least one Unused | ||
| 62 | slot (NULL key) in the table. | ||
| 63 | The value ma_fill is the number of non-NULL keys (sum of Active and Dummy); | ||
| 64 | ma_used is the number of non-NULL, non-dummy keys (== the number of non-NULL | ||
| 65 | values == the number of Active items). | ||
| 66 | To avoid slowing down lookups on a near-full table, we resize the table when | ||
| 67 | it's two-thirds full. | ||
| 68 | */ | ||
| 69 | typedef struct _dictobject PyDictObject; | ||
| 70 | struct _dictobject { | ||
| 71 | PyObject_HEAD | ||
| 72 | Py_ssize_t ma_fill; /* # Active + # Dummy */ | ||
| 73 | Py_ssize_t ma_used; /* # Active */ | ||
| 74 | |||
| 75 | /* The table contains ma_mask + 1 slots, and that's a power of 2. | ||
| 76 | * We store the mask instead of the size because the mask is more | ||
| 77 | * frequently needed. | ||
| 78 | */ | ||
| 79 | Py_ssize_t ma_mask; | ||
| 80 | |||
| 81 | /* ma_table points to ma_smalltable for small tables, else to | ||
| 82 | * additional malloc'ed memory. ma_table is never NULL! This rule | ||
| 83 | * saves repeated runtime null-tests in the workhorse getitem and | ||
| 84 | * setitem calls. | ||
| 85 | */ | ||
| 86 | PyDictEntry *ma_table; | ||
| 87 | PyDictEntry *(*ma_lookup)(PyDictObject *mp, PyObject *key, long hash); | ||
| 88 | PyDictEntry ma_smalltable[PyDict_MINSIZE]; | ||
| 89 | }; | ||
| 90 | |||
| 91 | PyAPI_DATA(PyTypeObject) PyDict_Type; | ||
| 92 | |||
| 93 | #define PyDict_Check(op) PyObject_TypeCheck(op, &PyDict_Type) | ||
| 94 | #define PyDict_CheckExact(op) ((op)->ob_type == &PyDict_Type) | ||
| 95 | |||
| 96 | PyAPI_FUNC(PyObject *) PyDict_New(void); | ||
| 97 | PyAPI_FUNC(PyObject *) PyDict_GetItem(PyObject *mp, PyObject *key); | ||
| 98 | PyAPI_FUNC(int) PyDict_SetItem(PyObject *mp, PyObject *key, PyObject *item); | ||
| 99 | PyAPI_FUNC(int) PyDict_DelItem(PyObject *mp, PyObject *key); | ||
| 100 | PyAPI_FUNC(void) PyDict_Clear(PyObject *mp); | ||
| 101 | PyAPI_FUNC(int) PyDict_Next( | ||
| 102 | PyObject *mp, Py_ssize_t *pos, PyObject **key, PyObject **value); | ||
| 103 | PyAPI_FUNC(int) _PyDict_Next( | ||
| 104 | PyObject *mp, Py_ssize_t *pos, PyObject **key, PyObject **value, long *hash); | ||
| 105 | PyAPI_FUNC(PyObject *) PyDict_Keys(PyObject *mp); | ||
| 106 | PyAPI_FUNC(PyObject *) PyDict_Values(PyObject *mp); | ||
| 107 | PyAPI_FUNC(PyObject *) PyDict_Items(PyObject *mp); | ||
| 108 | PyAPI_FUNC(Py_ssize_t) PyDict_Size(PyObject *mp); | ||
| 109 | PyAPI_FUNC(PyObject *) PyDict_Copy(PyObject *mp); | ||
| 110 | PyAPI_FUNC(int) PyDict_Contains(PyObject *mp, PyObject *key); | ||
| 111 | PyAPI_FUNC(int) _PyDict_Contains(PyObject *mp, PyObject *key, long hash); | ||
| 112 | |||
| 113 | /* PyDict_Update(mp, other) is equivalent to PyDict_Merge(mp, other, 1). */ | ||
| 114 | PyAPI_FUNC(int) PyDict_Update(PyObject *mp, PyObject *other); | ||
| 115 | |||
| 116 | /* PyDict_Merge updates/merges from a mapping object (an object that | ||
| 117 | supports PyMapping_Keys() and PyObject_GetItem()). If override is true, | ||
| 118 | the last occurrence of a key wins, else the first. The Python | ||
| 119 | dict.update(other) is equivalent to PyDict_Merge(dict, other, 1). | ||
| 120 | */ | ||
| 121 | PyAPI_FUNC(int) PyDict_Merge(PyObject *mp, | ||
| 122 | PyObject *other, | ||
| 123 | int override); | ||
| 124 | |||
| 125 | /* PyDict_MergeFromSeq2 updates/merges from an iterable object producing | ||
| 126 | iterable objects of length 2. If override is true, the last occurrence | ||
| 127 | of a key wins, else the first. The Python dict constructor dict(seq2) | ||
| 128 | is equivalent to dict={}; PyDict_MergeFromSeq(dict, seq2, 1). | ||
| 129 | */ | ||
| 130 | PyAPI_FUNC(int) PyDict_MergeFromSeq2(PyObject *d, | ||
| 131 | PyObject *seq2, | ||
| 132 | int override); | ||
| 133 | |||
| 134 | PyAPI_FUNC(PyObject *) PyDict_GetItemString(PyObject *dp, const char *key); | ||
| 135 | PyAPI_FUNC(int) PyDict_SetItemString(PyObject *dp, const char *key, PyObject *item); | ||
| 136 | PyAPI_FUNC(int) PyDict_DelItemString(PyObject *dp, const char *key); | ||
| 137 | |||
| 138 | #ifdef __cplusplus | ||
| 139 | } | ||
| 140 | #endif | ||
| 141 | #endif /* !Py_DICTOBJECT_H */ | ||
| @@ -0,0 +1,17 @@ | |||
| 1 | #ifndef Py_ENUMOBJECT_H | ||
| 2 | #define Py_ENUMOBJECT_H | ||
| 3 | |||
| 4 | /* Enumerate Object */ | ||
| 5 | |||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | PyAPI_DATA(PyTypeObject) PyEnum_Type; | ||
| 11 | PyAPI_DATA(PyTypeObject) PyReversed_Type; | ||
| 12 | |||
| 13 | #ifdef __cplusplus | ||
| 14 | } | ||
| 15 | #endif | ||
| 16 | |||
| 17 | #endif /* !Py_ENUMOBJECT_H */ | ||
| @@ -0,0 +1,36 @@ | |||
| 1 | #ifndef Py_ERRCODE_H | ||
| 2 | #define Py_ERRCODE_H | ||
| 3 | #ifdef __cplusplus | ||
| 4 | extern "C" { | ||
| 5 | #endif | ||
| 6 | |||
| 7 | |||
| 8 | /* Error codes passed around between file input, tokenizer, parser and | ||
| 9 | interpreter. This is necessary so we can turn them into Python | ||
| 10 | exceptions at a higher level. Note that some errors have a | ||
| 11 | slightly different meaning when passed from the tokenizer to the | ||
| 12 | parser than when passed from the parser to the interpreter; e.g. | ||
| 13 | the parser only returns E_EOF when it hits EOF immediately, and it | ||
| 14 | never returns E_OK. */ | ||
| 15 | |||
| 16 | #define E_OK 10 /* No error */ | ||
| 17 | #define E_EOF 11 /* End Of File */ | ||
| 18 | #define E_INTR 12 /* Interrupted */ | ||
| 19 | #define E_TOKEN 13 /* Bad token */ | ||
| 20 | #define E_SYNTAX 14 /* Syntax error */ | ||
| 21 | #define E_NOMEM 15 /* Ran out of memory */ | ||
| 22 | #define E_DONE 16 /* Parsing complete */ | ||
| 23 | #define E_ERROR 17 /* Execution error */ | ||
| 24 | #define E_TABSPACE 18 /* Inconsistent mixing of tabs and spaces */ | ||
| 25 | #define E_OVERFLOW 19 /* Node had too many children */ | ||
| 26 | #define E_TOODEEP 20 /* Too many indentation levels */ | ||
| 27 | #define E_DEDENT 21 /* No matching outer block for dedent */ | ||
| 28 | #define E_DECODE 22 /* Error in decoding into Unicode */ | ||
| 29 | #define E_EOFS 23 /* EOF in triple-quoted string */ | ||
| 30 | #define E_EOLS 24 /* EOL in single-quoted string */ | ||
| 31 | #define E_LINECONT 25 /* Unexpected characters after a line continuation */ | ||
| 32 | |||
| 33 | #ifdef __cplusplus | ||
| 34 | } | ||
| 35 | #endif | ||
| 36 | #endif /* !Py_ERRCODE_H */ | ||
| @@ -0,0 +1,25 @@ | |||
| 1 | |||
| 2 | /* Interface to execute compiled code */ | ||
| 3 | |||
| 4 | #ifndef Py_EVAL_H | ||
| 5 | #define Py_EVAL_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | PyAPI_FUNC(PyObject *) PyEval_EvalCode(PyCodeObject *, PyObject *, PyObject *); | ||
| 11 | |||
| 12 | PyAPI_FUNC(PyObject *) PyEval_EvalCodeEx(PyCodeObject *co, | ||
| 13 | PyObject *globals, | ||
| 14 | PyObject *locals, | ||
| 15 | PyObject **args, int argc, | ||
| 16 | PyObject **kwds, int kwdc, | ||
| 17 | PyObject **defs, int defc, | ||
| 18 | PyObject *closure); | ||
| 19 | |||
| 20 | PyAPI_FUNC(PyObject *) _PyEval_CallTracing(PyObject *func, PyObject *args); | ||
| 21 | |||
| 22 | #ifdef __cplusplus | ||
| 23 | } | ||
| 24 | #endif | ||
| 25 | #endif /* !Py_EVAL_H */ | ||
| @@ -0,0 +1,63 @@ | |||
| 1 | |||
| 2 | /* File object interface */ | ||
| 3 | |||
| 4 | #ifndef Py_FILEOBJECT_H | ||
| 5 | #define Py_FILEOBJECT_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | typedef struct { | ||
| 11 | PyObject_HEAD | ||
| 12 | FILE *f_fp; | ||
| 13 | PyObject *f_name; | ||
| 14 | PyObject *f_mode; | ||
| 15 | int (*f_close)(FILE *); | ||
| 16 | int f_softspace; /* Flag used by 'print' command */ | ||
| 17 | int f_binary; /* Flag which indicates whether the file is | ||
| 18 | open in binary (1) or text (0) mode */ | ||
| 19 | char* f_buf; /* Allocated readahead buffer */ | ||
| 20 | char* f_bufend; /* Points after last occupied position */ | ||
| 21 | char* f_bufptr; /* Current buffer position */ | ||
| 22 | char *f_setbuf; /* Buffer for setbuf(3) and setvbuf(3) */ | ||
| 23 | int f_univ_newline; /* Handle any newline convention */ | ||
| 24 | int f_newlinetypes; /* Types of newlines seen */ | ||
| 25 | int f_skipnextlf; /* Skip next \n */ | ||
| 26 | PyObject *f_encoding; | ||
| 27 | PyObject *weakreflist; /* List of weak references */ | ||
| 28 | } PyFileObject; | ||
| 29 | |||
| 30 | PyAPI_DATA(PyTypeObject) PyFile_Type; | ||
| 31 | |||
| 32 | #define PyFile_Check(op) PyObject_TypeCheck(op, &PyFile_Type) | ||
| 33 | #define PyFile_CheckExact(op) ((op)->ob_type == &PyFile_Type) | ||
| 34 | |||
| 35 | PyAPI_FUNC(PyObject *) PyFile_FromString(char *, char *); | ||
| 36 | PyAPI_FUNC(void) PyFile_SetBufSize(PyObject *, int); | ||
| 37 | PyAPI_FUNC(int) PyFile_SetEncoding(PyObject *, const char *); | ||
| 38 | PyAPI_FUNC(PyObject *) PyFile_FromFile(FILE *, char *, char *, | ||
| 39 | int (*)(FILE *)); | ||
| 40 | PyAPI_FUNC(FILE *) PyFile_AsFile(PyObject *); | ||
| 41 | PyAPI_FUNC(PyObject *) PyFile_Name(PyObject *); | ||
| 42 | PyAPI_FUNC(PyObject *) PyFile_GetLine(PyObject *, int); | ||
| 43 | PyAPI_FUNC(int) PyFile_WriteObject(PyObject *, PyObject *, int); | ||
| 44 | PyAPI_FUNC(int) PyFile_SoftSpace(PyObject *, int); | ||
| 45 | PyAPI_FUNC(int) PyFile_WriteString(const char *, PyObject *); | ||
| 46 | PyAPI_FUNC(int) PyObject_AsFileDescriptor(PyObject *); | ||
| 47 | |||
| 48 | /* The default encoding used by the platform file system APIs | ||
| 49 | If non-NULL, this is different than the default encoding for strings | ||
| 50 | */ | ||
| 51 | PyAPI_DATA(const char *) Py_FileSystemDefaultEncoding; | ||
| 52 | |||
| 53 | /* Routines to replace fread() and fgets() which accept any of \r, \n | ||
| 54 | or \r\n as line terminators. | ||
| 55 | */ | ||
| 56 | #define PY_STDIOTEXTMODE "b" | ||
| 57 | char *Py_UniversalNewlineFgets(char *, int, FILE*, PyObject *); | ||
| 58 | size_t Py_UniversalNewlineFread(char *, size_t, FILE *, PyObject *); | ||
| 59 | |||
| 60 | #ifdef __cplusplus | ||
| 61 | } | ||
| 62 | #endif | ||
| 63 | #endif /* !Py_FILEOBJECT_H */ | ||
| @@ -0,0 +1,100 @@ | |||
| 1 | |||
| 2 | /* Float object interface */ | ||
| 3 | |||
| 4 | /* | ||
| 5 | PyFloatObject represents a (double precision) floating point number. | ||
| 6 | */ | ||
| 7 | |||
| 8 | #ifndef Py_FLOATOBJECT_H | ||
| 9 | #define Py_FLOATOBJECT_H | ||
| 10 | #ifdef __cplusplus | ||
| 11 | extern "C" { | ||
| 12 | #endif | ||
| 13 | |||
| 14 | typedef struct { | ||
| 15 | PyObject_HEAD | ||
| 16 | double ob_fval; | ||
| 17 | } PyFloatObject; | ||
| 18 | |||
| 19 | PyAPI_DATA(PyTypeObject) PyFloat_Type; | ||
| 20 | |||
| 21 | #define PyFloat_Check(op) PyObject_TypeCheck(op, &PyFloat_Type) | ||
| 22 | #define PyFloat_CheckExact(op) ((op)->ob_type == &PyFloat_Type) | ||
| 23 | |||
| 24 | /* Return Python float from string PyObject. Second argument ignored on | ||
| 25 | input, and, if non-NULL, NULL is stored into *junk (this tried to serve a | ||
| 26 | purpose once but can't be made to work as intended). */ | ||
| 27 | PyAPI_FUNC(PyObject *) PyFloat_FromString(PyObject*, char** junk); | ||
| 28 | |||
| 29 | /* Return Python float from C double. */ | ||
| 30 | PyAPI_FUNC(PyObject *) PyFloat_FromDouble(double); | ||
| 31 | |||
| 32 | /* Extract C double from Python float. The macro version trades safety for | ||
| 33 | speed. */ | ||
| 34 | PyAPI_FUNC(double) PyFloat_AsDouble(PyObject *); | ||
| 35 | #define PyFloat_AS_DOUBLE(op) (((PyFloatObject *)(op))->ob_fval) | ||
| 36 | |||
| 37 | /* Write repr(v) into the char buffer argument, followed by null byte. The | ||
| 38 | buffer must be "big enough"; >= 100 is very safe. | ||
| 39 | PyFloat_AsReprString(buf, x) strives to print enough digits so that | ||
| 40 | PyFloat_FromString(buf) then reproduces x exactly. */ | ||
| 41 | PyAPI_FUNC(void) PyFloat_AsReprString(char*, PyFloatObject *v); | ||
| 42 | |||
| 43 | /* Write str(v) into the char buffer argument, followed by null byte. The | ||
| 44 | buffer must be "big enough"; >= 100 is very safe. Note that it's | ||
| 45 | unusual to be able to get back the float you started with from | ||
| 46 | PyFloat_AsString's result -- use PyFloat_AsReprString() if you want to | ||
| 47 | preserve precision across conversions. */ | ||
| 48 | PyAPI_FUNC(void) PyFloat_AsString(char*, PyFloatObject *v); | ||
| 49 | |||
| 50 | /* _PyFloat_{Pack,Unpack}{4,8} | ||
| 51 | * | ||
| 52 | * The struct and pickle (at least) modules need an efficient platform- | ||
| 53 | * independent way to store floating-point values as byte strings. | ||
| 54 | * The Pack routines produce a string from a C double, and the Unpack | ||
| 55 | * routines produce a C double from such a string. The suffix (4 or 8) | ||
| 56 | * specifies the number of bytes in the string. | ||
| 57 | * | ||
| 58 | * On platforms that appear to use (see _PyFloat_Init()) IEEE-754 formats | ||
| 59 | * these functions work by copying bits. On other platforms, the formats the | ||
| 60 | * 4- byte format is identical to the IEEE-754 single precision format, and | ||
| 61 | * the 8-byte format to the IEEE-754 double precision format, although the | ||
| 62 | * packing of INFs and NaNs (if such things exist on the platform) isn't | ||
| 63 | * handled correctly, and attempting to unpack a string containing an IEEE | ||
| 64 | * INF or NaN will raise an exception. | ||
| 65 | * | ||
| 66 | * On non-IEEE platforms with more precision, or larger dynamic range, than | ||
| 67 | * 754 supports, not all values can be packed; on non-IEEE platforms with less | ||
| 68 | * precision, or smaller dynamic range, not all values can be unpacked. What | ||
| 69 | * happens in such cases is partly accidental (alas). | ||
| 70 | */ | ||
| 71 | |||
| 72 | /* The pack routines write 4 or 8 bytes, starting at p. le is a bool | ||
| 73 | * argument, true if you want the string in little-endian format (exponent | ||
| 74 | * last, at p+3 or p+7), false if you want big-endian format (exponent | ||
| 75 | * first, at p). | ||
| 76 | * Return value: 0 if all is OK, -1 if error (and an exception is | ||
| 77 | * set, most likely OverflowError). | ||
| 78 | * There are two problems on non-IEEE platforms: | ||
| 79 | * 1): What this does is undefined if x is a NaN or infinity. | ||
| 80 | * 2): -0.0 and +0.0 produce the same string. | ||
| 81 | */ | ||
| 82 | PyAPI_FUNC(int) _PyFloat_Pack4(double x, unsigned char *p, int le); | ||
| 83 | PyAPI_FUNC(int) _PyFloat_Pack8(double x, unsigned char *p, int le); | ||
| 84 | |||
| 85 | /* The unpack routines read 4 or 8 bytes, starting at p. le is a bool | ||
| 86 | * argument, true if the string is in little-endian format (exponent | ||
| 87 | * last, at p+3 or p+7), false if big-endian (exponent first, at p). | ||
| 88 | * Return value: The unpacked double. On error, this is -1.0 and | ||
| 89 | * PyErr_Occurred() is true (and an exception is set, most likely | ||
| 90 | * OverflowError). Note that on a non-IEEE platform this will refuse | ||
| 91 | * to unpack a string that represents a NaN or infinity. | ||
| 92 | */ | ||
| 93 | PyAPI_FUNC(double) _PyFloat_Unpack4(const unsigned char *p, int le); | ||
| 94 | PyAPI_FUNC(double) _PyFloat_Unpack8(const unsigned char *p, int le); | ||
| 95 | |||
| 96 | |||
| 97 | #ifdef __cplusplus | ||
| 98 | } | ||
| 99 | #endif | ||
| 100 | #endif /* !Py_FLOATOBJECT_H */ | ||
| @@ -0,0 +1,81 @@ | |||
| 1 | |||
| 2 | /* Frame object interface */ | ||
| 3 | |||
| 4 | #ifndef Py_FRAMEOBJECT_H | ||
| 5 | #define Py_FRAMEOBJECT_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | typedef struct { | ||
| 11 | int b_type; /* what kind of block this is */ | ||
| 12 | int b_handler; /* where to jump to find handler */ | ||
| 13 | int b_level; /* value stack level to pop to */ | ||
| 14 | } PyTryBlock; | ||
| 15 | |||
| 16 | typedef struct _frame { | ||
| 17 | PyObject_VAR_HEAD | ||
| 18 | struct _frame *f_back; /* previous frame, or NULL */ | ||
| 19 | PyCodeObject *f_code; /* code segment */ | ||
| 20 | PyObject *f_builtins; /* builtin symbol table (PyDictObject) */ | ||
| 21 | PyObject *f_globals; /* global symbol table (PyDictObject) */ | ||
| 22 | PyObject *f_locals; /* local symbol table (any mapping) */ | ||
| 23 | PyObject **f_valuestack; /* points after the last local */ | ||
| 24 | /* Next free slot in f_valuestack. Frame creation sets to f_valuestack. | ||
| 25 | Frame evaluation usually NULLs it, but a frame that yields sets it | ||
| 26 | to the current stack top. */ | ||
| 27 | PyObject **f_stacktop; | ||
| 28 | PyObject *f_trace; /* Trace function */ | ||
| 29 | |||
| 30 | /* If an exception is raised in this frame, the next three are used to | ||
| 31 | * record the exception info (if any) originally in the thread state. See | ||
| 32 | * comments before set_exc_info() -- it's not obvious. | ||
| 33 | * Invariant: if _type is NULL, then so are _value and _traceback. | ||
| 34 | * Desired invariant: all three are NULL, or all three are non-NULL. That | ||
| 35 | * one isn't currently true, but "should be". | ||
| 36 | */ | ||
| 37 | PyObject *f_exc_type, *f_exc_value, *f_exc_traceback; | ||
| 38 | |||
| 39 | PyThreadState *f_tstate; | ||
| 40 | int f_lasti; /* Last instruction if called */ | ||
| 41 | /* As of 2.3 f_lineno is only valid when tracing is active (i.e. when | ||
| 42 | f_trace is set) -- at other times use PyCode_Addr2Line instead. */ | ||
| 43 | int f_lineno; /* Current line number */ | ||
| 44 | int f_iblock; /* index in f_blockstack */ | ||
| 45 | PyTryBlock f_blockstack[CO_MAXBLOCKS]; /* for try and loop blocks */ | ||
| 46 | PyObject *f_localsplus[1]; /* locals+stack, dynamically sized */ | ||
| 47 | } PyFrameObject; | ||
| 48 | |||
| 49 | |||
| 50 | /* Standard object interface */ | ||
| 51 | |||
| 52 | PyAPI_DATA(PyTypeObject) PyFrame_Type; | ||
| 53 | |||
| 54 | #define PyFrame_Check(op) ((op)->ob_type == &PyFrame_Type) | ||
| 55 | #define PyFrame_IsRestricted(f) \ | ||
| 56 | ((f)->f_builtins != (f)->f_tstate->interp->builtins) | ||
| 57 | |||
| 58 | PyAPI_FUNC(PyFrameObject *) PyFrame_New(PyThreadState *, PyCodeObject *, | ||
| 59 | PyObject *, PyObject *); | ||
| 60 | |||
| 61 | |||
| 62 | /* The rest of the interface is specific for frame objects */ | ||
| 63 | |||
| 64 | /* Block management functions */ | ||
| 65 | |||
| 66 | PyAPI_FUNC(void) PyFrame_BlockSetup(PyFrameObject *, int, int, int); | ||
| 67 | PyAPI_FUNC(PyTryBlock *) PyFrame_BlockPop(PyFrameObject *); | ||
| 68 | |||
| 69 | /* Extend the value stack */ | ||
| 70 | |||
| 71 | PyAPI_FUNC(PyObject **) PyFrame_ExtendStack(PyFrameObject *, int, int); | ||
| 72 | |||
| 73 | /* Conversions between "fast locals" and locals in dictionary */ | ||
| 74 | |||
| 75 | PyAPI_FUNC(void) PyFrame_LocalsToFast(PyFrameObject *, int); | ||
| 76 | PyAPI_FUNC(void) PyFrame_FastToLocals(PyFrameObject *); | ||
| 77 | |||
| 78 | #ifdef __cplusplus | ||
| 79 | } | ||
| 80 | #endif | ||
| 81 | #endif /* !Py_FRAMEOBJECT_H */ | ||
| @@ -0,0 +1,76 @@ | |||
| 1 | |||
| 2 | /* Function object interface */ | ||
| 3 | |||
| 4 | #ifndef Py_FUNCOBJECT_H | ||
| 5 | #define Py_FUNCOBJECT_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | /* Function objects and code objects should not be confused with each other: | ||
| 11 | * | ||
| 12 | * Function objects are created by the execution of the 'def' statement. | ||
| 13 | * They reference a code object in their func_code attribute, which is a | ||
| 14 | * purely syntactic object, i.e. nothing more than a compiled version of some | ||
| 15 | * source code lines. There is one code object per source code "fragment", | ||
| 16 | * but each code object can be referenced by zero or many function objects | ||
| 17 | * depending only on how many times the 'def' statement in the source was | ||
| 18 | * executed so far. | ||
| 19 | */ | ||
| 20 | |||
| 21 | typedef struct { | ||
| 22 | PyObject_HEAD | ||
| 23 | PyObject *func_code; /* A code object */ | ||
| 24 | PyObject *func_globals; /* A dictionary (other mappings won't do) */ | ||
| 25 | PyObject *func_defaults; /* NULL or a tuple */ | ||
| 26 | PyObject *func_closure; /* NULL or a tuple of cell objects */ | ||
| 27 | PyObject *func_doc; /* The __doc__ attribute, can be anything */ | ||
| 28 | PyObject *func_name; /* The __name__ attribute, a string object */ | ||
| 29 | PyObject *func_dict; /* The __dict__ attribute, a dict or NULL */ | ||
| 30 | PyObject *func_weakreflist; /* List of weak references */ | ||
| 31 | PyObject *func_module; /* The __module__ attribute, can be anything */ | ||
| 32 | |||
| 33 | /* Invariant: | ||
| 34 | * func_closure contains the bindings for func_code->co_freevars, so | ||
| 35 | * PyTuple_Size(func_closure) == PyCode_GetNumFree(func_code) | ||
| 36 | * (func_closure may be NULL if PyCode_GetNumFree(func_code) == 0). | ||
| 37 | */ | ||
| 38 | } PyFunctionObject; | ||
| 39 | |||
| 40 | PyAPI_DATA(PyTypeObject) PyFunction_Type; | ||
| 41 | |||
| 42 | #define PyFunction_Check(op) ((op)->ob_type == &PyFunction_Type) | ||
| 43 | |||
| 44 | PyAPI_FUNC(PyObject *) PyFunction_New(PyObject *, PyObject *); | ||
| 45 | PyAPI_FUNC(PyObject *) PyFunction_GetCode(PyObject *); | ||
| 46 | PyAPI_FUNC(PyObject *) PyFunction_GetGlobals(PyObject *); | ||
| 47 | PyAPI_FUNC(PyObject *) PyFunction_GetModule(PyObject *); | ||
| 48 | PyAPI_FUNC(PyObject *) PyFunction_GetDefaults(PyObject *); | ||
| 49 | PyAPI_FUNC(int) PyFunction_SetDefaults(PyObject *, PyObject *); | ||
| 50 | PyAPI_FUNC(PyObject *) PyFunction_GetClosure(PyObject *); | ||
| 51 | PyAPI_FUNC(int) PyFunction_SetClosure(PyObject *, PyObject *); | ||
| 52 | |||
| 53 | /* Macros for direct access to these values. Type checks are *not* | ||
| 54 | done, so use with care. */ | ||
| 55 | #define PyFunction_GET_CODE(func) \ | ||
| 56 | (((PyFunctionObject *)func) -> func_code) | ||
| 57 | #define PyFunction_GET_GLOBALS(func) \ | ||
| 58 | (((PyFunctionObject *)func) -> func_globals) | ||
| 59 | #define PyFunction_GET_MODULE(func) \ | ||
| 60 | (((PyFunctionObject *)func) -> func_module) | ||
| 61 | #define PyFunction_GET_DEFAULTS(func) \ | ||
| 62 | (((PyFunctionObject *)func) -> func_defaults) | ||
| 63 | #define PyFunction_GET_CLOSURE(func) \ | ||
| 64 | (((PyFunctionObject *)func) -> func_closure) | ||
| 65 | |||
| 66 | /* The classmethod and staticmethod types lives here, too */ | ||
| 67 | PyAPI_DATA(PyTypeObject) PyClassMethod_Type; | ||
| 68 | PyAPI_DATA(PyTypeObject) PyStaticMethod_Type; | ||
| 69 | |||
| 70 | PyAPI_FUNC(PyObject *) PyClassMethod_New(PyObject *); | ||
| 71 | PyAPI_FUNC(PyObject *) PyStaticMethod_New(PyObject *); | ||
| 72 | |||
| 73 | #ifdef __cplusplus | ||
| 74 | } | ||
| 75 | #endif | ||
| 76 | #endif /* !Py_FUNCOBJECT_H */ | ||
| @@ -0,0 +1,37 @@ | |||
| 1 | |||
| 2 | /* Generator object interface */ | ||
| 3 | |||
| 4 | #ifndef Py_GENOBJECT_H | ||
| 5 | #define Py_GENOBJECT_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | struct _frame; /* Avoid including frameobject.h */ | ||
| 11 | |||
| 12 | typedef struct { | ||
| 13 | PyObject_HEAD | ||
| 14 | /* The gi_ prefix is intended to remind of generator-iterator. */ | ||
| 15 | |||
| 16 | /* Note: gi_frame can be NULL if the generator is "finished" */ | ||
| 17 | struct _frame *gi_frame; | ||
| 18 | |||
| 19 | /* True if generator is being executed. */ | ||
| 20 | int gi_running; | ||
| 21 | |||
| 22 | /* List of weak reference. */ | ||
| 23 | PyObject *gi_weakreflist; | ||
| 24 | } PyGenObject; | ||
| 25 | |||
| 26 | PyAPI_DATA(PyTypeObject) PyGen_Type; | ||
| 27 | |||
| 28 | #define PyGen_Check(op) PyObject_TypeCheck(op, &PyGen_Type) | ||
| 29 | #define PyGen_CheckExact(op) ((op)->ob_type == &PyGen_Type) | ||
| 30 | |||
| 31 | PyAPI_FUNC(PyObject *) PyGen_New(struct _frame *); | ||
| 32 | PyAPI_FUNC(int) PyGen_NeedsFinalizing(PyGenObject *); | ||
| 33 | |||
| 34 | #ifdef __cplusplus | ||
| 35 | } | ||
| 36 | #endif | ||
| 37 | #endif /* !Py_GENOBJECT_H */ | ||
| @@ -0,0 +1,84 @@ | |||
| 1 | #define single_input 256 | ||
| 2 | #define file_input 257 | ||
| 3 | #define eval_input 258 | ||
| 4 | #define decorator 259 | ||
| 5 | #define decorators 260 | ||
| 6 | #define funcdef 261 | ||
| 7 | #define parameters 262 | ||
| 8 | #define varargslist 263 | ||
| 9 | #define fpdef 264 | ||
| 10 | #define fplist 265 | ||
| 11 | #define stmt 266 | ||
| 12 | #define simple_stmt 267 | ||
| 13 | #define small_stmt 268 | ||
| 14 | #define expr_stmt 269 | ||
| 15 | #define augassign 270 | ||
| 16 | #define print_stmt 271 | ||
| 17 | #define del_stmt 272 | ||
| 18 | #define pass_stmt 273 | ||
| 19 | #define flow_stmt 274 | ||
| 20 | #define break_stmt 275 | ||
| 21 | #define continue_stmt 276 | ||
| 22 | #define return_stmt 277 | ||
| 23 | #define yield_stmt 278 | ||
| 24 | #define raise_stmt 279 | ||
| 25 | #define import_stmt 280 | ||
| 26 | #define import_name 281 | ||
| 27 | #define import_from 282 | ||
| 28 | #define import_as_name 283 | ||
| 29 | #define dotted_as_name 284 | ||
| 30 | #define import_as_names 285 | ||
| 31 | #define dotted_as_names 286 | ||
| 32 | #define dotted_name 287 | ||
| 33 | #define global_stmt 288 | ||
| 34 | #define exec_stmt 289 | ||
| 35 | #define assert_stmt 290 | ||
| 36 | #define compound_stmt 291 | ||
| 37 | #define if_stmt 292 | ||
| 38 | #define while_stmt 293 | ||
| 39 | #define for_stmt 294 | ||
| 40 | #define try_stmt 295 | ||
| 41 | #define with_stmt 296 | ||
| 42 | #define with_var 297 | ||
| 43 | #define except_clause 298 | ||
| 44 | #define suite 299 | ||
| 45 | #define testlist_safe 300 | ||
| 46 | #define old_test 301 | ||
| 47 | #define old_lambdef 302 | ||
| 48 | #define test 303 | ||
| 49 | #define or_test 304 | ||
| 50 | #define and_test 305 | ||
| 51 | #define not_test 306 | ||
| 52 | #define comparison 307 | ||
| 53 | #define comp_op 308 | ||
| 54 | #define expr 309 | ||
| 55 | #define xor_expr 310 | ||
| 56 | #define and_expr 311 | ||
| 57 | #define shift_expr 312 | ||
| 58 | #define arith_expr 313 | ||
| 59 | #define term 314 | ||
| 60 | #define factor 315 | ||
| 61 | #define power 316 | ||
| 62 | #define atom 317 | ||
| 63 | #define listmaker 318 | ||
| 64 | #define testlist_gexp 319 | ||
| 65 | #define lambdef 320 | ||
| 66 | #define trailer 321 | ||
| 67 | #define subscriptlist 322 | ||
| 68 | #define subscript 323 | ||
| 69 | #define sliceop 324 | ||
| 70 | #define exprlist 325 | ||
| 71 | #define testlist 326 | ||
| 72 | #define dictmaker 327 | ||
| 73 | #define classdef 328 | ||
| 74 | #define arglist 329 | ||
| 75 | #define argument 330 | ||
| 76 | #define list_iter 331 | ||
| 77 | #define list_for 332 | ||
| 78 | #define list_if 333 | ||
| 79 | #define gen_iter 334 | ||
| 80 | #define gen_for 335 | ||
| 81 | #define gen_if 336 | ||
| 82 | #define testlist1 337 | ||
| 83 | #define encoding_decl 338 | ||
| 84 | #define yield_expr 339 | ||
| @@ -0,0 +1,93 @@ | |||
| 1 | |||
| 2 | /* Grammar interface */ | ||
| 3 | |||
| 4 | #ifndef Py_GRAMMAR_H | ||
| 5 | #define Py_GRAMMAR_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | #include "bitset.h" /* Sigh... */ | ||
| 11 | |||
| 12 | /* A label of an arc */ | ||
| 13 | |||
| 14 | typedef struct { | ||
| 15 | int lb_type; | ||
| 16 | char *lb_str; | ||
| 17 | } label; | ||
| 18 | |||
| 19 | #define EMPTY 0 /* Label number 0 is by definition the empty label */ | ||
| 20 | |||
| 21 | /* A list of labels */ | ||
| 22 | |||
| 23 | typedef struct { | ||
| 24 | int ll_nlabels; | ||
| 25 | label *ll_label; | ||
| 26 | } labellist; | ||
| 27 | |||
| 28 | /* An arc from one state to another */ | ||
| 29 | |||
| 30 | typedef struct { | ||
| 31 | short a_lbl; /* Label of this arc */ | ||
| 32 | short a_arrow; /* State where this arc goes to */ | ||
| 33 | } arc; | ||
| 34 | |||
| 35 | /* A state in a DFA */ | ||
| 36 | |||
| 37 | typedef struct { | ||
| 38 | int s_narcs; | ||
| 39 | arc *s_arc; /* Array of arcs */ | ||
| 40 | |||
| 41 | /* Optional accelerators */ | ||
| 42 | int s_lower; /* Lowest label index */ | ||
| 43 | int s_upper; /* Highest label index */ | ||
| 44 | int *s_accel; /* Accelerator */ | ||
| 45 | int s_accept; /* Nonzero for accepting state */ | ||
| 46 | } state; | ||
| 47 | |||
| 48 | /* A DFA */ | ||
| 49 | |||
| 50 | typedef struct { | ||
| 51 | int d_type; /* Non-terminal this represents */ | ||
| 52 | char *d_name; /* For printing */ | ||
| 53 | int d_initial; /* Initial state */ | ||
| 54 | int d_nstates; | ||
| 55 | state *d_state; /* Array of states */ | ||
| 56 | bitset d_first; | ||
| 57 | } dfa; | ||
| 58 | |||
| 59 | /* A grammar */ | ||
| 60 | |||
| 61 | typedef struct { | ||
| 62 | int g_ndfas; | ||
| 63 | dfa *g_dfa; /* Array of DFAs */ | ||
| 64 | labellist g_ll; | ||
| 65 | int g_start; /* Start symbol of the grammar */ | ||
| 66 | int g_accel; /* Set if accelerators present */ | ||
| 67 | } grammar; | ||
| 68 | |||
| 69 | /* FUNCTIONS */ | ||
| 70 | |||
| 71 | grammar *newgrammar(int start); | ||
| 72 | dfa *adddfa(grammar *g, int type, char *name); | ||
| 73 | int addstate(dfa *d); | ||
| 74 | void addarc(dfa *d, int from, int to, int lbl); | ||
| 75 | dfa *PyGrammar_FindDFA(grammar *g, int type); | ||
| 76 | |||
| 77 | int addlabel(labellist *ll, int type, char *str); | ||
| 78 | int findlabel(labellist *ll, int type, char *str); | ||
| 79 | char *PyGrammar_LabelRepr(label *lb); | ||
| 80 | void translatelabels(grammar *g); | ||
| 81 | |||
| 82 | void addfirstsets(grammar *g); | ||
| 83 | |||
| 84 | void PyGrammar_AddAccelerators(grammar *g); | ||
| 85 | void PyGrammar_RemoveAccelerators(grammar *); | ||
| 86 | |||
| 87 | void printgrammar(grammar *g, FILE *fp); | ||
| 88 | void printnonterminals(grammar *g, FILE *fp); | ||
| 89 | |||
| 90 | #ifdef __cplusplus | ||
| 91 | } | ||
| 92 | #endif | ||
| 93 | #endif /* !Py_GRAMMAR_H */ | ||
| @@ -0,0 +1,64 @@ | |||
| 1 | |||
| 2 | /* Module definition and import interface */ | ||
| 3 | |||
| 4 | #ifndef Py_IMPORT_H | ||
| 5 | #define Py_IMPORT_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | PyAPI_FUNC(long) PyImport_GetMagicNumber(void); | ||
| 11 | PyAPI_FUNC(PyObject *) PyImport_ExecCodeModule(char *name, PyObject *co); | ||
| 12 | PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleEx( | ||
| 13 | char *name, PyObject *co, char *pathname); | ||
| 14 | PyAPI_FUNC(PyObject *) PyImport_GetModuleDict(void); | ||
| 15 | PyAPI_FUNC(PyObject *) PyImport_AddModule(const char *name); | ||
| 16 | PyAPI_FUNC(PyObject *) PyImport_ImportModule(const char *name); | ||
| 17 | PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevel(char *name, | ||
| 18 | PyObject *globals, PyObject *locals, PyObject *fromlist, int level); | ||
| 19 | |||
| 20 | /* For DLL compatibility */ | ||
| 21 | #undef PyImport_ImportModuleEx | ||
| 22 | PyAPI_FUNC(PyObject *) PyImport_ImportModuleEx( | ||
| 23 | char *name, PyObject *globals, PyObject *locals, PyObject *fromlist); | ||
| 24 | #define PyImport_ImportModuleEx(n, g, l, f) \ | ||
| 25 | PyImport_ImportModuleLevel(n, g, l, f, -1) | ||
| 26 | |||
| 27 | PyAPI_FUNC(PyObject *) PyImport_Import(PyObject *name); | ||
| 28 | PyAPI_FUNC(PyObject *) PyImport_ReloadModule(PyObject *m); | ||
| 29 | PyAPI_FUNC(void) PyImport_Cleanup(void); | ||
| 30 | PyAPI_FUNC(int) PyImport_ImportFrozenModule(char *); | ||
| 31 | |||
| 32 | PyAPI_FUNC(struct filedescr *) _PyImport_FindModule( | ||
| 33 | const char *, PyObject *, char *, size_t, FILE **, PyObject **); | ||
| 34 | PyAPI_FUNC(int) _PyImport_IsScript(struct filedescr *); | ||
| 35 | PyAPI_FUNC(void) _PyImport_ReInitLock(void); | ||
| 36 | |||
| 37 | PyAPI_FUNC(PyObject *)_PyImport_FindExtension(char *, char *); | ||
| 38 | PyAPI_FUNC(PyObject *)_PyImport_FixupExtension(char *, char *); | ||
| 39 | |||
| 40 | struct _inittab { | ||
| 41 | char *name; | ||
| 42 | void (*initfunc)(void); | ||
| 43 | }; | ||
| 44 | |||
| 45 | PyAPI_DATA(struct _inittab *) PyImport_Inittab; | ||
| 46 | |||
| 47 | PyAPI_FUNC(int) PyImport_AppendInittab(char *name, void (*initfunc)(void)); | ||
| 48 | PyAPI_FUNC(int) PyImport_ExtendInittab(struct _inittab *newtab); | ||
| 49 | |||
| 50 | struct _frozen { | ||
| 51 | char *name; | ||
| 52 | unsigned char *code; | ||
| 53 | int size; | ||
| 54 | }; | ||
| 55 | |||
| 56 | /* Embedding apps may change this pointer to point to their favorite | ||
| 57 | collection of frozen modules: */ | ||
| 58 | |||
| 59 | PyAPI_DATA(struct _frozen *) PyImport_FrozenModules; | ||
| 60 | |||
| 61 | #ifdef __cplusplus | ||
| 62 | } | ||
| 63 | #endif | ||
| 64 | #endif /* !Py_IMPORT_H */ | ||
| @@ -0,0 +1,64 @@ | |||
| 1 | |||
| 2 | /* Integer object interface */ | ||
| 3 | |||
| 4 | /* | ||
| 5 | PyIntObject represents a (long) integer. This is an immutable object; | ||
| 6 | an integer cannot change its value after creation. | ||
| 7 | |||
| 8 | There are functions to create new integer objects, to test an object | ||
| 9 | for integer-ness, and to get the integer value. The latter functions | ||
| 10 | returns -1 and sets errno to EBADF if the object is not an PyIntObject. | ||
| 11 | None of the functions should be applied to nil objects. | ||
| 12 | |||
| 13 | The type PyIntObject is (unfortunately) exposed here so we can declare | ||
| 14 | _Py_TrueStruct and _Py_ZeroStruct in boolobject.h; don't use this. | ||
| 15 | */ | ||
| 16 | |||
| 17 | #ifndef Py_INTOBJECT_H | ||
| 18 | #define Py_INTOBJECT_H | ||
| 19 | #ifdef __cplusplus | ||
| 20 | extern "C" { | ||
| 21 | #endif | ||
| 22 | |||
| 23 | typedef struct { | ||
| 24 | PyObject_HEAD | ||
| 25 | long ob_ival; | ||
| 26 | } PyIntObject; | ||
| 27 | |||
| 28 | PyAPI_DATA(PyTypeObject) PyInt_Type; | ||
| 29 | |||
| 30 | #define PyInt_Check(op) PyObject_TypeCheck(op, &PyInt_Type) | ||
| 31 | #define PyInt_CheckExact(op) ((op)->ob_type == &PyInt_Type) | ||
| 32 | |||
| 33 | PyAPI_FUNC(PyObject *) PyInt_FromString(char*, char**, int); | ||
| 34 | #ifdef Py_USING_UNICODE | ||
| 35 | PyAPI_FUNC(PyObject *) PyInt_FromUnicode(Py_UNICODE*, Py_ssize_t, int); | ||
| 36 | #endif | ||
| 37 | PyAPI_FUNC(PyObject *) PyInt_FromLong(long); | ||
| 38 | PyAPI_FUNC(PyObject *) PyInt_FromSize_t(size_t); | ||
| 39 | PyAPI_FUNC(PyObject *) PyInt_FromSsize_t(Py_ssize_t); | ||
| 40 | PyAPI_FUNC(long) PyInt_AsLong(PyObject *); | ||
| 41 | PyAPI_FUNC(Py_ssize_t) PyInt_AsSsize_t(PyObject *); | ||
| 42 | PyAPI_FUNC(unsigned long) PyInt_AsUnsignedLongMask(PyObject *); | ||
| 43 | #ifdef HAVE_LONG_LONG | ||
| 44 | PyAPI_FUNC(unsigned PY_LONG_LONG) PyInt_AsUnsignedLongLongMask(PyObject *); | ||
| 45 | #endif | ||
| 46 | |||
| 47 | PyAPI_FUNC(long) PyInt_GetMax(void); | ||
| 48 | |||
| 49 | /* Macro, trading safety for speed */ | ||
| 50 | #define PyInt_AS_LONG(op) (((PyIntObject *)(op))->ob_ival) | ||
| 51 | |||
| 52 | /* These aren't really part of the Int object, but they're handy; the protos | ||
| 53 | * are necessary for systems that need the magic of PyAPI_FUNC and that want | ||
| 54 | * to have stropmodule as a dynamically loaded module instead of building it | ||
| 55 | * into the main Python shared library/DLL. Guido thinks I'm weird for | ||
| 56 | * building it this way. :-) [cjh] | ||
| 57 | */ | ||
| 58 | PyAPI_FUNC(unsigned long) PyOS_strtoul(char *, char **, int); | ||
| 59 | PyAPI_FUNC(long) PyOS_strtol(char *, char **, int); | ||
| 60 | |||
| 61 | #ifdef __cplusplus | ||
| 62 | } | ||
| 63 | #endif | ||
| 64 | #endif /* !Py_INTOBJECT_H */ | ||
| @@ -0,0 +1,15 @@ | |||
| 1 | |||
| 2 | #ifndef Py_INTRCHECK_H | ||
| 3 | #define Py_INTRCHECK_H | ||
| 4 | #ifdef __cplusplus | ||
| 5 | extern "C" { | ||
| 6 | #endif | ||
| 7 | |||
| 8 | PyAPI_FUNC(int) PyOS_InterruptOccurred(void); | ||
| 9 | PyAPI_FUNC(void) PyOS_InitInterrupts(void); | ||
| 10 | PyAPI_FUNC(void) PyOS_AfterFork(void); | ||
| 11 | |||
| 12 | #ifdef __cplusplus | ||
| 13 | } | ||
| 14 | #endif | ||
| 15 | #endif /* !Py_INTRCHECK_H */ | ||
| @@ -0,0 +1,23 @@ | |||
| 1 | #ifndef Py_ITEROBJECT_H | ||
| 2 | #define Py_ITEROBJECT_H | ||
| 3 | /* Iterators (the basic kind, over a sequence) */ | ||
| 4 | #ifdef __cplusplus | ||
| 5 | extern "C" { | ||
| 6 | #endif | ||
| 7 | |||
| 8 | PyAPI_DATA(PyTypeObject) PySeqIter_Type; | ||
| 9 | |||
| 10 | #define PySeqIter_Check(op) ((op)->ob_type == &PySeqIter_Type) | ||
| 11 | |||
| 12 | PyAPI_FUNC(PyObject *) PySeqIter_New(PyObject *); | ||
| 13 | |||
| 14 | PyAPI_DATA(PyTypeObject) PyCallIter_Type; | ||
| 15 | |||
| 16 | #define PyCallIter_Check(op) ((op)->ob_type == &PyCallIter_Type) | ||
| 17 | |||
| 18 | PyAPI_FUNC(PyObject *) PyCallIter_New(PyObject *, PyObject *); | ||
| 19 | #ifdef __cplusplus | ||
| 20 | } | ||
| 21 | #endif | ||
| 22 | #endif /* !Py_ITEROBJECT_H */ | ||
| 23 | |||
| @@ -0,0 +1,67 @@ | |||
| 1 | |||
| 2 | /* List object interface */ | ||
| 3 | |||
| 4 | /* | ||
| 5 | Another generally useful object type is an list of object pointers. | ||
| 6 | This is a mutable type: the list items can be changed, and items can be | ||
| 7 | added or removed. Out-of-range indices or non-list objects are ignored. | ||
| 8 | |||
| 9 | *** WARNING *** PyList_SetItem does not increment the new item's reference | ||
| 10 | count, but does decrement the reference count of the item it replaces, | ||
| 11 | if not nil. It does *decrement* the reference count if it is *not* | ||
| 12 | inserted in the list. Similarly, PyList_GetItem does not increment the | ||
| 13 | returned item's reference count. | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef Py_LISTOBJECT_H | ||
| 17 | #define Py_LISTOBJECT_H | ||
| 18 | #ifdef __cplusplus | ||
| 19 | extern "C" { | ||
| 20 | #endif | ||
| 21 | |||
| 22 | typedef struct { | ||
| 23 | PyObject_VAR_HEAD | ||
| 24 | /* Vector of pointers to list elements. list[0] is ob_item[0], etc. */ | ||
| 25 | PyObject **ob_item; | ||
| 26 | |||
| 27 | /* ob_item contains space for 'allocated' elements. The number | ||
| 28 | * currently in use is ob_size. | ||
| 29 | * Invariants: | ||
| 30 | * 0 <= ob_size <= allocated | ||
| 31 | * len(list) == ob_size | ||
| 32 | * ob_item == NULL implies ob_size == allocated == 0 | ||
| 33 | * list.sort() temporarily sets allocated to -1 to detect mutations. | ||
| 34 | * | ||
| 35 | * Items must normally not be NULL, except during construction when | ||
| 36 | * the list is not yet visible outside the function that builds it. | ||
| 37 | */ | ||
| 38 | Py_ssize_t allocated; | ||
| 39 | } PyListObject; | ||
| 40 | |||
| 41 | PyAPI_DATA(PyTypeObject) PyList_Type; | ||
| 42 | |||
| 43 | #define PyList_Check(op) PyObject_TypeCheck(op, &PyList_Type) | ||
| 44 | #define PyList_CheckExact(op) ((op)->ob_type == &PyList_Type) | ||
| 45 | |||
| 46 | PyAPI_FUNC(PyObject *) PyList_New(Py_ssize_t size); | ||
| 47 | PyAPI_FUNC(Py_ssize_t) PyList_Size(PyObject *); | ||
| 48 | PyAPI_FUNC(PyObject *) PyList_GetItem(PyObject *, Py_ssize_t); | ||
| 49 | PyAPI_FUNC(int) PyList_SetItem(PyObject *, Py_ssize_t, PyObject *); | ||
| 50 | PyAPI_FUNC(int) PyList_Insert(PyObject *, Py_ssize_t, PyObject *); | ||
| 51 | PyAPI_FUNC(int) PyList_Append(PyObject *, PyObject *); | ||
| 52 | PyAPI_FUNC(PyObject *) PyList_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t); | ||
| 53 | PyAPI_FUNC(int) PyList_SetSlice(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *); | ||
| 54 | PyAPI_FUNC(int) PyList_Sort(PyObject *); | ||
| 55 | PyAPI_FUNC(int) PyList_Reverse(PyObject *); | ||
| 56 | PyAPI_FUNC(PyObject *) PyList_AsTuple(PyObject *); | ||
| 57 | PyAPI_FUNC(PyObject *) _PyList_Extend(PyListObject *, PyObject *); | ||
| 58 | |||
| 59 | /* Macro, trading safety for speed */ | ||
| 60 | #define PyList_GET_ITEM(op, i) (((PyListObject *)(op))->ob_item[i]) | ||
| 61 | #define PyList_SET_ITEM(op, i, v) (((PyListObject *)(op))->ob_item[i] = (v)) | ||
| 62 | #define PyList_GET_SIZE(op) (((PyListObject *)(op))->ob_size) | ||
| 63 | |||
| 64 | #ifdef __cplusplus | ||
| 65 | } | ||
| 66 | #endif | ||
| 67 | #endif /* !Py_LISTOBJECT_H */ | ||
| @@ -0,0 +1,63 @@ | |||
| 1 | #ifndef Py_LONGINTREPR_H | ||
| 2 | #define Py_LONGINTREPR_H | ||
| 3 | #ifdef __cplusplus | ||
| 4 | extern "C" { | ||
| 5 | #endif | ||
| 6 | |||
| 7 | |||
| 8 | /* This is published for the benefit of "friend" marshal.c only. */ | ||
| 9 | |||
| 10 | /* Parameters of the long integer representation. | ||
| 11 | These shouldn't have to be changed as C should guarantee that a short | ||
| 12 | contains at least 16 bits, but it's made changeable anyway. | ||
| 13 | Note: 'digit' should be able to hold 2*MASK+1, and 'twodigits' | ||
| 14 | should be able to hold the intermediate results in 'mul' | ||
| 15 | (at most (BASE-1)*(2*BASE+1) == MASK*(2*MASK+3)). | ||
| 16 | Also, x_sub assumes that 'digit' is an unsigned type, and overflow | ||
| 17 | is handled by taking the result mod 2**N for some N > SHIFT. | ||
| 18 | And, at some places it is assumed that MASK fits in an int, as well. | ||
| 19 | long_pow() requires that SHIFT be divisible by 5. */ | ||
| 20 | |||
| 21 | typedef unsigned short digit; | ||
| 22 | typedef unsigned int wdigit; /* digit widened to parameter size */ | ||
| 23 | #define BASE_TWODIGITS_TYPE long | ||
| 24 | typedef unsigned BASE_TWODIGITS_TYPE twodigits; | ||
| 25 | typedef BASE_TWODIGITS_TYPE stwodigits; /* signed variant of twodigits */ | ||
| 26 | |||
| 27 | #define SHIFT 15 | ||
| 28 | #define BASE ((digit)1 << SHIFT) | ||
| 29 | #define MASK ((int)(BASE - 1)) | ||
| 30 | |||
| 31 | #if SHIFT % 5 != 0 | ||
| 32 | #error "longobject.c requires that SHIFT be divisible by 5" | ||
| 33 | #endif | ||
| 34 | |||
| 35 | /* Long integer representation. | ||
| 36 | The absolute value of a number is equal to | ||
| 37 | SUM(for i=0 through abs(ob_size)-1) ob_digit[i] * 2**(SHIFT*i) | ||
| 38 | Negative numbers are represented with ob_size < 0; | ||
| 39 | zero is represented by ob_size == 0. | ||
| 40 | In a normalized number, ob_digit[abs(ob_size)-1] (the most significant | ||
| 41 | digit) is never zero. Also, in all cases, for all valid i, | ||
| 42 | 0 <= ob_digit[i] <= MASK. | ||
| 43 | The allocation function takes care of allocating extra memory | ||
| 44 | so that ob_digit[0] ... ob_digit[abs(ob_size)-1] are actually available. | ||
| 45 | |||
| 46 | CAUTION: Generic code manipulating subtypes of PyVarObject has to | ||
| 47 | aware that longs abuse ob_size's sign bit. | ||
| 48 | */ | ||
| 49 | |||
| 50 | struct _longobject { | ||
| 51 | PyObject_VAR_HEAD | ||
| 52 | digit ob_digit[1]; | ||
| 53 | }; | ||
| 54 | |||
| 55 | PyAPI_FUNC(PyLongObject *) _PyLong_New(Py_ssize_t); | ||
| 56 | |||
| 57 | /* Return a copy of src. */ | ||
| 58 | PyAPI_FUNC(PyObject *) _PyLong_Copy(PyLongObject *src); | ||
| 59 | |||
| 60 | #ifdef __cplusplus | ||
| 61 | } | ||
| 62 | #endif | ||
| 63 | #endif /* !Py_LONGINTREPR_H */ | ||
| @@ -0,0 +1,114 @@ | |||
| 1 | #ifndef Py_LONGOBJECT_H | ||
| 2 | #define Py_LONGOBJECT_H | ||
| 3 | #ifdef __cplusplus | ||
| 4 | extern "C" { | ||
| 5 | #endif | ||
| 6 | |||
| 7 | |||
| 8 | /* Long (arbitrary precision) integer object interface */ | ||
| 9 | |||
| 10 | typedef struct _longobject PyLongObject; /* Revealed in longintrepr.h */ | ||
| 11 | |||
| 12 | PyAPI_DATA(PyTypeObject) PyLong_Type; | ||
| 13 | |||
| 14 | #define PyLong_Check(op) PyObject_TypeCheck(op, &PyLong_Type) | ||
| 15 | #define PyLong_CheckExact(op) ((op)->ob_type == &PyLong_Type) | ||
| 16 | |||
| 17 | PyAPI_FUNC(PyObject *) PyLong_FromLong(long); | ||
| 18 | PyAPI_FUNC(PyObject *) PyLong_FromUnsignedLong(unsigned long); | ||
| 19 | PyAPI_FUNC(PyObject *) PyLong_FromDouble(double); | ||
| 20 | PyAPI_FUNC(long) PyLong_AsLong(PyObject *); | ||
| 21 | PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLong(PyObject *); | ||
| 22 | PyAPI_FUNC(unsigned long) PyLong_AsUnsignedLongMask(PyObject *); | ||
| 23 | |||
| 24 | /* For use by intobject.c only */ | ||
| 25 | PyAPI_FUNC(Py_ssize_t) _PyLong_AsSsize_t(PyObject *); | ||
| 26 | PyAPI_FUNC(PyObject *) _PyLong_FromSize_t(size_t); | ||
| 27 | PyAPI_FUNC(PyObject *) _PyLong_FromSsize_t(Py_ssize_t); | ||
| 28 | PyAPI_DATA(int) _PyLong_DigitValue[256]; | ||
| 29 | |||
| 30 | /* _PyLong_AsScaledDouble returns a double x and an exponent e such that | ||
| 31 | the true value is approximately equal to x * 2**(SHIFT*e). e is >= 0. | ||
| 32 | x is 0.0 if and only if the input is 0 (in which case, e and x are both | ||
| 33 | zeroes). Overflow is impossible. Note that the exponent returned must | ||
| 34 | be multiplied by SHIFT! There may not be enough room in an int to store | ||
| 35 | e*SHIFT directly. */ | ||
| 36 | PyAPI_FUNC(double) _PyLong_AsScaledDouble(PyObject *vv, int *e); | ||
| 37 | |||
| 38 | PyAPI_FUNC(double) PyLong_AsDouble(PyObject *); | ||
| 39 | PyAPI_FUNC(PyObject *) PyLong_FromVoidPtr(void *); | ||
| 40 | PyAPI_FUNC(void *) PyLong_AsVoidPtr(PyObject *); | ||
| 41 | |||
| 42 | #ifdef HAVE_LONG_LONG | ||
| 43 | PyAPI_FUNC(PyObject *) PyLong_FromLongLong(PY_LONG_LONG); | ||
| 44 | PyAPI_FUNC(PyObject *) PyLong_FromUnsignedLongLong(unsigned PY_LONG_LONG); | ||
| 45 | PyAPI_FUNC(PY_LONG_LONG) PyLong_AsLongLong(PyObject *); | ||
| 46 | PyAPI_FUNC(unsigned PY_LONG_LONG) PyLong_AsUnsignedLongLong(PyObject *); | ||
| 47 | PyAPI_FUNC(unsigned PY_LONG_LONG) PyLong_AsUnsignedLongLongMask(PyObject *); | ||
| 48 | #endif /* HAVE_LONG_LONG */ | ||
| 49 | |||
| 50 | PyAPI_FUNC(PyObject *) PyLong_FromString(char *, char **, int); | ||
| 51 | #ifdef Py_USING_UNICODE | ||
| 52 | PyAPI_FUNC(PyObject *) PyLong_FromUnicode(Py_UNICODE*, Py_ssize_t, int); | ||
| 53 | #endif | ||
| 54 | |||
| 55 | /* _PyLong_Sign. Return 0 if v is 0, -1 if v < 0, +1 if v > 0. | ||
| 56 | v must not be NULL, and must be a normalized long. | ||
| 57 | There are no error cases. | ||
| 58 | */ | ||
| 59 | PyAPI_FUNC(int) _PyLong_Sign(PyObject *v); | ||
| 60 | |||
| 61 | |||
| 62 | /* _PyLong_NumBits. Return the number of bits needed to represent the | ||
| 63 | absolute value of a long. For example, this returns 1 for 1 and -1, 2 | ||
| 64 | for 2 and -2, and 2 for 3 and -3. It returns 0 for 0. | ||
| 65 | v must not be NULL, and must be a normalized long. | ||
| 66 | (size_t)-1 is returned and OverflowError set if the true result doesn't | ||
| 67 | fit in a size_t. | ||
| 68 | */ | ||
| 69 | PyAPI_FUNC(size_t) _PyLong_NumBits(PyObject *v); | ||
| 70 | |||
| 71 | /* _PyLong_FromByteArray: View the n unsigned bytes as a binary integer in | ||
| 72 | base 256, and return a Python long with the same numeric value. | ||
| 73 | If n is 0, the integer is 0. Else: | ||
| 74 | If little_endian is 1/true, bytes[n-1] is the MSB and bytes[0] the LSB; | ||
| 75 | else (little_endian is 0/false) bytes[0] is the MSB and bytes[n-1] the | ||
| 76 | LSB. | ||
| 77 | If is_signed is 0/false, view the bytes as a non-negative integer. | ||
| 78 | If is_signed is 1/true, view the bytes as a 2's-complement integer, | ||
| 79 | non-negative if bit 0x80 of the MSB is clear, negative if set. | ||
| 80 | Error returns: | ||
| 81 | + Return NULL with the appropriate exception set if there's not | ||
| 82 | enough memory to create the Python long. | ||
| 83 | */ | ||
| 84 | PyAPI_FUNC(PyObject *) _PyLong_FromByteArray( | ||
| 85 | const unsigned char* bytes, size_t n, | ||
| 86 | int little_endian, int is_signed); | ||
| 87 | |||
| 88 | /* _PyLong_AsByteArray: Convert the least-significant 8*n bits of long | ||
| 89 | v to a base-256 integer, stored in array bytes. Normally return 0, | ||
| 90 | return -1 on error. | ||
| 91 | If little_endian is 1/true, store the MSB at bytes[n-1] and the LSB at | ||
| 92 | bytes[0]; else (little_endian is 0/false) store the MSB at bytes[0] and | ||
| 93 | the LSB at bytes[n-1]. | ||
| 94 | If is_signed is 0/false, it's an error if v < 0; else (v >= 0) n bytes | ||
| 95 | are filled and there's nothing special about bit 0x80 of the MSB. | ||
| 96 | If is_signed is 1/true, bytes is filled with the 2's-complement | ||
| 97 | representation of v's value. Bit 0x80 of the MSB is the sign bit. | ||
| 98 | Error returns (-1): | ||
| 99 | + is_signed is 0 and v < 0. TypeError is set in this case, and bytes | ||
| 100 | isn't altered. | ||
| 101 | + n isn't big enough to hold the full mathematical value of v. For | ||
| 102 | example, if is_signed is 0 and there are more digits in the v than | ||
| 103 | fit in n; or if is_signed is 1, v < 0, and n is just 1 bit shy of | ||
| 104 | being large enough to hold a sign bit. OverflowError is set in this | ||
| 105 | case, but bytes holds the least-signficant n bytes of the true value. | ||
| 106 | */ | ||
| 107 | PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v, | ||
| 108 | unsigned char* bytes, size_t n, | ||
| 109 | int little_endian, int is_signed); | ||
| 110 | |||
| 111 | #ifdef __cplusplus | ||
| 112 | } | ||
| 113 | #endif | ||
| 114 | #endif /* !Py_LONGOBJECT_H */ | ||
| @@ -0,0 +1,25 @@ | |||
| 1 | |||
| 2 | /* Interface for marshal.c */ | ||
| 3 | |||
| 4 | #ifndef Py_MARSHAL_H | ||
| 5 | #define Py_MARSHAL_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | #define Py_MARSHAL_VERSION 2 | ||
| 11 | |||
| 12 | PyAPI_FUNC(void) PyMarshal_WriteLongToFile(long, FILE *, int); | ||
| 13 | PyAPI_FUNC(void) PyMarshal_WriteObjectToFile(PyObject *, FILE *, int); | ||
| 14 | PyAPI_FUNC(PyObject *) PyMarshal_WriteObjectToString(PyObject *, int); | ||
| 15 | |||
| 16 | PyAPI_FUNC(long) PyMarshal_ReadLongFromFile(FILE *); | ||
| 17 | PyAPI_FUNC(int) PyMarshal_ReadShortFromFile(FILE *); | ||
| 18 | PyAPI_FUNC(PyObject *) PyMarshal_ReadObjectFromFile(FILE *); | ||
| 19 | PyAPI_FUNC(PyObject *) PyMarshal_ReadLastObjectFromFile(FILE *); | ||
| 20 | PyAPI_FUNC(PyObject *) PyMarshal_ReadObjectFromString(char *, Py_ssize_t); | ||
| 21 | |||
| 22 | #ifdef __cplusplus | ||
| 23 | } | ||
| 24 | #endif | ||
| 25 | #endif /* !Py_MARSHAL_H */ | ||
| @@ -0,0 +1,18 @@ | |||
| 1 | #ifndef Py_METAGRAMMAR_H | ||
| 2 | #define Py_METAGRAMMAR_H | ||
| 3 | #ifdef __cplusplus | ||
| 4 | extern "C" { | ||
| 5 | #endif | ||
| 6 | |||
| 7 | |||
| 8 | #define MSTART 256 | ||
| 9 | #define RULE 257 | ||
| 10 | #define RHS 258 | ||
| 11 | #define ALT 259 | ||
| 12 | #define ITEM 260 | ||
| 13 | #define ATOM 261 | ||
| 14 | |||
| 15 | #ifdef __cplusplus | ||
| 16 | } | ||
| 17 | #endif | ||
| 18 | #endif /* !Py_METAGRAMMAR_H */ | ||
| @@ -0,0 +1,91 @@ | |||
| 1 | |||
| 2 | /* Method object interface */ | ||
| 3 | |||
| 4 | #ifndef Py_METHODOBJECT_H | ||
| 5 | #define Py_METHODOBJECT_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | /* This is about the type 'builtin_function_or_method', | ||
| 11 | not Python methods in user-defined classes. See classobject.h | ||
| 12 | for the latter. */ | ||
| 13 | |||
| 14 | PyAPI_DATA(PyTypeObject) PyCFunction_Type; | ||
| 15 | |||
| 16 | #define PyCFunction_Check(op) ((op)->ob_type == &PyCFunction_Type) | ||
| 17 | |||
| 18 | typedef PyObject *(*PyCFunction)(PyObject *, PyObject *); | ||
| 19 | typedef PyObject *(*PyCFunctionWithKeywords)(PyObject *, PyObject *, | ||
| 20 | PyObject *); | ||
| 21 | typedef PyObject *(*PyNoArgsFunction)(PyObject *); | ||
| 22 | |||
| 23 | PyAPI_FUNC(PyCFunction) PyCFunction_GetFunction(PyObject *); | ||
| 24 | PyAPI_FUNC(PyObject *) PyCFunction_GetSelf(PyObject *); | ||
| 25 | PyAPI_FUNC(int) PyCFunction_GetFlags(PyObject *); | ||
| 26 | |||
| 27 | /* Macros for direct access to these values. Type checks are *not* | ||
| 28 | done, so use with care. */ | ||
| 29 | #define PyCFunction_GET_FUNCTION(func) \ | ||
| 30 | (((PyCFunctionObject *)func) -> m_ml -> ml_meth) | ||
| 31 | #define PyCFunction_GET_SELF(func) \ | ||
| 32 | (((PyCFunctionObject *)func) -> m_self) | ||
| 33 | #define PyCFunction_GET_FLAGS(func) \ | ||
| 34 | (((PyCFunctionObject *)func) -> m_ml -> ml_flags) | ||
| 35 | PyAPI_FUNC(PyObject *) PyCFunction_Call(PyObject *, PyObject *, PyObject *); | ||
| 36 | |||
| 37 | struct PyMethodDef { | ||
| 38 | const char *ml_name; /* The name of the built-in function/method */ | ||
| 39 | PyCFunction ml_meth; /* The C function that implements it */ | ||
| 40 | int ml_flags; /* Combination of METH_xxx flags, which mostly | ||
| 41 | describe the args expected by the C func */ | ||
| 42 | const char *ml_doc; /* The __doc__ attribute, or NULL */ | ||
| 43 | }; | ||
| 44 | typedef struct PyMethodDef PyMethodDef; | ||
| 45 | |||
| 46 | PyAPI_FUNC(PyObject *) Py_FindMethod(PyMethodDef[], PyObject *, const char *); | ||
| 47 | |||
| 48 | #define PyCFunction_New(ML, SELF) PyCFunction_NewEx((ML), (SELF), NULL) | ||
| 49 | PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *, | ||
| 50 | PyObject *); | ||
| 51 | |||
| 52 | /* Flag passed to newmethodobject */ | ||
| 53 | #define METH_OLDARGS 0x0000 | ||
| 54 | #define METH_VARARGS 0x0001 | ||
| 55 | #define METH_KEYWORDS 0x0002 | ||
| 56 | /* METH_NOARGS and METH_O must not be combined with the flags above. */ | ||
| 57 | #define METH_NOARGS 0x0004 | ||
| 58 | #define METH_O 0x0008 | ||
| 59 | |||
| 60 | /* METH_CLASS and METH_STATIC are a little different; these control | ||
| 61 | the construction of methods for a class. These cannot be used for | ||
| 62 | functions in modules. */ | ||
| 63 | #define METH_CLASS 0x0010 | ||
| 64 | #define METH_STATIC 0x0020 | ||
| 65 | |||
| 66 | /* METH_COEXIST allows a method to be entered eventhough a slot has | ||
| 67 | already filled the entry. When defined, the flag allows a separate | ||
| 68 | method, "__contains__" for example, to coexist with a defined | ||
| 69 | slot like sq_contains. */ | ||
| 70 | |||
| 71 | #define METH_COEXIST 0x0040 | ||
| 72 | |||
| 73 | typedef struct PyMethodChain { | ||
| 74 | PyMethodDef *methods; /* Methods of this type */ | ||
| 75 | struct PyMethodChain *link; /* NULL or base type */ | ||
| 76 | } PyMethodChain; | ||
| 77 | |||
| 78 | PyAPI_FUNC(PyObject *) Py_FindMethodInChain(PyMethodChain *, PyObject *, | ||
| 79 | const char *); | ||
| 80 | |||
| 81 | typedef struct { | ||
| 82 | PyObject_HEAD | ||
| 83 | PyMethodDef *m_ml; /* Description of the C function to call */ | ||
| 84 | PyObject *m_self; /* Passed as 'self' arg to the C func, can be NULL */ | ||
| 85 | PyObject *m_module; /* The __module__ attribute, can be anything */ | ||
| 86 | } PyCFunctionObject; | ||
| 87 | |||
| 88 | #ifdef __cplusplus | ||
| 89 | } | ||
| 90 | #endif | ||
| 91 | #endif /* !Py_METHODOBJECT_H */ | ||
| @@ -0,0 +1,133 @@ | |||
| 1 | |||
| 2 | #ifndef Py_MODSUPPORT_H | ||
| 3 | #define Py_MODSUPPORT_H | ||
| 4 | #ifdef __cplusplus | ||
| 5 | extern "C" { | ||
| 6 | #endif | ||
| 7 | |||
| 8 | /* Module support interface */ | ||
| 9 | |||
| 10 | #include <stdarg.h> | ||
| 11 | |||
| 12 | /* If PY_SSIZE_T_CLEAN is defined, each functions treats #-specifier | ||
| 13 | to mean Py_ssize_t */ | ||
| 14 | #ifdef PY_SSIZE_T_CLEAN | ||
| 15 | #define PyArg_Parse _PyArg_Parse_SizeT | ||
| 16 | #define PyArg_ParseTuple _PyArg_ParseTuple_SizeT | ||
| 17 | #define PyArg_ParseTupleAndKeywords _PyArg_ParseTupleAndKeywords_SizeT | ||
| 18 | #define PyArg_VaParse _PyArg_VaParse_SizeT | ||
| 19 | #define PyArg_VaParseTupleAndKeywords _PyArg_VaParseTupleAndKeywords_SizeT | ||
| 20 | #define Py_BuildValue _Py_BuildValue_SizeT | ||
| 21 | #define Py_VaBuildValue _Py_VaBuildValue_SizeT | ||
| 22 | #else | ||
| 23 | PyAPI_FUNC(PyObject *) _Py_VaBuildValue_SizeT(const char *, va_list); | ||
| 24 | #endif | ||
| 25 | |||
| 26 | PyAPI_FUNC(int) PyArg_Parse(PyObject *, const char *, ...); | ||
| 27 | PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, const char *, ...); | ||
| 28 | PyAPI_FUNC(int) PyArg_ParseTupleAndKeywords(PyObject *, PyObject *, | ||
| 29 | const char *, char **, ...); | ||
| 30 | PyAPI_FUNC(int) PyArg_UnpackTuple(PyObject *, const char *, Py_ssize_t, Py_ssize_t, ...); | ||
| 31 | PyAPI_FUNC(PyObject *) Py_BuildValue(const char *, ...); | ||
| 32 | PyAPI_FUNC(PyObject *) _Py_BuildValue_SizeT(const char *, ...); | ||
| 33 | PyAPI_FUNC(int) _PyArg_NoKeywords(const char *funcname, PyObject *kw); | ||
| 34 | |||
| 35 | PyAPI_FUNC(int) PyArg_VaParse(PyObject *, const char *, va_list); | ||
| 36 | PyAPI_FUNC(int) PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *, | ||
| 37 | const char *, char **, va_list); | ||
| 38 | PyAPI_FUNC(PyObject *) Py_VaBuildValue(const char *, va_list); | ||
| 39 | |||
| 40 | PyAPI_FUNC(int) PyModule_AddObject(PyObject *, const char *, PyObject *); | ||
| 41 | PyAPI_FUNC(int) PyModule_AddIntConstant(PyObject *, const char *, long); | ||
| 42 | PyAPI_FUNC(int) PyModule_AddStringConstant(PyObject *, const char *, const char *); | ||
| 43 | |||
| 44 | |||
| 45 | #define PYTHON_API_VERSION 1013 | ||
| 46 | #define PYTHON_API_STRING "1013" | ||
| 47 | /* The API version is maintained (independently from the Python version) | ||
| 48 | so we can detect mismatches between the interpreter and dynamically | ||
| 49 | loaded modules. These are diagnosed by an error message but | ||
| 50 | the module is still loaded (because the mismatch can only be tested | ||
| 51 | after loading the module). The error message is intended to | ||
| 52 | explain the core dump a few seconds later. | ||
| 53 | |||
| 54 | The symbol PYTHON_API_STRING defines the same value as a string | ||
| 55 | literal. *** PLEASE MAKE SURE THE DEFINITIONS MATCH. *** | ||
| 56 | |||
| 57 | Please add a line or two to the top of this log for each API | ||
| 58 | version change: | ||
| 59 | |||
| 60 | 22-Feb-2006 MvL 1013 PEP 353 - long indices for sequence lengths | ||
| 61 | |||
| 62 | 19-Aug-2002 GvR 1012 Changes to string object struct for | ||
| 63 | interning changes, saving 3 bytes. | ||
| 64 | |||
| 65 | 17-Jul-2001 GvR 1011 Descr-branch, just to be on the safe side | ||
| 66 | |||
| 67 | 25-Jan-2001 FLD 1010 Parameters added to PyCode_New() and | ||
| 68 | PyFrame_New(); Python 2.1a2 | ||
| 69 | |||
| 70 | 14-Mar-2000 GvR 1009 Unicode API added | ||
| 71 | |||
| 72 | 3-Jan-1999 GvR 1007 Decided to change back! (Don't reuse 1008!) | ||
| 73 | |||
| 74 | 3-Dec-1998 GvR 1008 Python 1.5.2b1 | ||
| 75 | |||
| 76 | 18-Jan-1997 GvR 1007 string interning and other speedups | ||
| 77 | |||
| 78 | 11-Oct-1996 GvR renamed Py_Ellipses to Py_Ellipsis :-( | ||
| 79 | |||
| 80 | 30-Jul-1996 GvR Slice and ellipses syntax added | ||
| 81 | |||
| 82 | 23-Jul-1996 GvR For 1.4 -- better safe than sorry this time :-) | ||
| 83 | |||
| 84 | 7-Nov-1995 GvR Keyword arguments (should've been done at 1.3 :-( ) | ||
| 85 | |||
| 86 | 10-Jan-1995 GvR Renamed globals to new naming scheme | ||
| 87 | |||
| 88 | 9-Jan-1995 GvR Initial version (incompatible with older API) | ||
| 89 | */ | ||
| 90 | |||
| 91 | #ifdef MS_WINDOWS | ||
| 92 | /* Special defines for Windows versions used to live here. Things | ||
| 93 | have changed, and the "Version" is now in a global string variable. | ||
| 94 | Reason for this is that this for easier branding of a "custom DLL" | ||
| 95 | without actually needing a recompile. */ | ||
| 96 | #endif /* MS_WINDOWS */ | ||
| 97 | |||
| 98 | #if SIZEOF_SIZE_T != SIZEOF_INT | ||
| 99 | /* On a 64-bit system, rename the Py_InitModule4 so that 2.4 | ||
| 100 | modules cannot get loaded into a 2.5 interpreter */ | ||
| 101 | #define Py_InitModule4 Py_InitModule4_64 | ||
| 102 | #endif | ||
| 103 | |||
| 104 | #ifdef Py_TRACE_REFS | ||
| 105 | /* When we are tracing reference counts, rename Py_InitModule4 so | ||
| 106 | modules compiled with incompatible settings will generate a | ||
| 107 | link-time error. */ | ||
| 108 | #if SIZEOF_SIZE_T != SIZEOF_INT | ||
| 109 | #undef Py_InitModule4 | ||
| 110 | #define Py_InitModule4 Py_InitModule4TraceRefs_64 | ||
| 111 | #else | ||
| 112 | #define Py_InitModule4 Py_InitModule4TraceRefs | ||
| 113 | #endif | ||
| 114 | #endif | ||
| 115 | |||
| 116 | PyAPI_FUNC(PyObject *) Py_InitModule4(const char *name, PyMethodDef *methods, | ||
| 117 | const char *doc, PyObject *self, | ||
| 118 | int apiver); | ||
| 119 | |||
| 120 | #define Py_InitModule(name, methods) \ | ||
| 121 | Py_InitModule4(name, methods, (char *)NULL, (PyObject *)NULL, \ | ||
| 122 | PYTHON_API_VERSION) | ||
| 123 | |||
| 124 | #define Py_InitModule3(name, methods, doc) \ | ||
| 125 | Py_InitModule4(name, methods, doc, (PyObject *)NULL, \ | ||
| 126 | PYTHON_API_VERSION) | ||
| 127 | |||
| 128 | PyAPI_DATA(char *) _Py_PackageContext; | ||
| 129 | |||
| 130 | #ifdef __cplusplus | ||
| 131 | } | ||
| 132 | #endif | ||
| 133 | #endif /* !Py_MODSUPPORT_H */ | ||
| @@ -0,0 +1,24 @@ | |||
| 1 | |||
| 2 | /* Module object interface */ | ||
| 3 | |||
| 4 | #ifndef Py_MODULEOBJECT_H | ||
| 5 | #define Py_MODULEOBJECT_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | PyAPI_DATA(PyTypeObject) PyModule_Type; | ||
| 11 | |||
| 12 | #define PyModule_Check(op) PyObject_TypeCheck(op, &PyModule_Type) | ||
| 13 | #define PyModule_CheckExact(op) ((op)->ob_type == &PyModule_Type) | ||
| 14 | |||
| 15 | PyAPI_FUNC(PyObject *) PyModule_New(const char *); | ||
| 16 | PyAPI_FUNC(PyObject *) PyModule_GetDict(PyObject *); | ||
| 17 | PyAPI_FUNC(char *) PyModule_GetName(PyObject *); | ||
| 18 | PyAPI_FUNC(char *) PyModule_GetFilename(PyObject *); | ||
| 19 | PyAPI_FUNC(void) _PyModule_Clear(PyObject *); | ||
| 20 | |||
| 21 | #ifdef __cplusplus | ||
| 22 | } | ||
| 23 | #endif | ||
| 24 | #endif /* !Py_MODULEOBJECT_H */ | ||
| @@ -0,0 +1,40 @@ | |||
| 1 | |||
| 2 | /* Parse tree node interface */ | ||
| 3 | |||
| 4 | #ifndef Py_NODE_H | ||
| 5 | #define Py_NODE_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | typedef struct _node { | ||
| 11 | short n_type; | ||
| 12 | char *n_str; | ||
| 13 | int n_lineno; | ||
| 14 | int n_col_offset; | ||
| 15 | int n_nchildren; | ||
| 16 | struct _node *n_child; | ||
| 17 | } node; | ||
| 18 | |||
| 19 | PyAPI_FUNC(node *) PyNode_New(int type); | ||
| 20 | PyAPI_FUNC(int) PyNode_AddChild(node *n, int type, | ||
| 21 | char *str, int lineno, int col_offset); | ||
| 22 | PyAPI_FUNC(void) PyNode_Free(node *n); | ||
| 23 | |||
| 24 | /* Node access functions */ | ||
| 25 | #define NCH(n) ((n)->n_nchildren) | ||
| 26 | |||
| 27 | #define CHILD(n, i) (&(n)->n_child[i]) | ||
| 28 | #define RCHILD(n, i) (CHILD(n, NCH(n) + i)) | ||
| 29 | #define TYPE(n) ((n)->n_type) | ||
| 30 | #define STR(n) ((n)->n_str) | ||
| 31 | |||
| 32 | /* Assert that the type of a node is what we expect */ | ||
| 33 | #define REQ(n, type) assert(TYPE(n) == (type)) | ||
| 34 | |||
| 35 | PyAPI_FUNC(void) PyNode_ListTree(node *); | ||
| 36 | |||
| 37 | #ifdef __cplusplus | ||
| 38 | } | ||
| 39 | #endif | ||
| 40 | #endif /* !Py_NODE_H */ | ||
| @@ -0,0 +1,868 @@ | |||
| 1 | #ifndef Py_OBJECT_H | ||
| 2 | #define Py_OBJECT_H | ||
| 3 | #ifdef __cplusplus | ||
| 4 | extern "C" { | ||
| 5 | #endif | ||
| 6 | |||
| 7 | |||
| 8 | /* Object and type object interface */ | ||
| 9 | |||
| 10 | /* | ||
| 11 | Objects are structures allocated on the heap. Special rules apply to | ||
| 12 | the use of objects to ensure they are properly garbage-collected. | ||
| 13 | Objects are never allocated statically or on the stack; they must be | ||
| 14 | accessed through special macros and functions only. (Type objects are | ||
| 15 | exceptions to the first rule; the standard types are represented by | ||
| 16 | statically initialized type objects, although work on type/class unification | ||
| 17 | for Python 2.2 made it possible to have heap-allocated type objects too). | ||
| 18 | |||
| 19 | An object has a 'reference count' that is increased or decreased when a | ||
| 20 | pointer to the object is copied or deleted; when the reference count | ||
| 21 | reaches zero there are no references to the object left and it can be | ||
| 22 | removed from the heap. | ||
| 23 | |||
| 24 | An object has a 'type' that determines what it represents and what kind | ||
| 25 | of data it contains. An object's type is fixed when it is created. | ||
| 26 | Types themselves are represented as objects; an object contains a | ||
| 27 | pointer to the corresponding type object. The type itself has a type | ||
| 28 | pointer pointing to the object representing the type 'type', which | ||
| 29 | contains a pointer to itself!). | ||
| 30 | |||
| 31 | Objects do not float around in memory; once allocated an object keeps | ||
| 32 | the same size and address. Objects that must hold variable-size data | ||
| 33 | can contain pointers to variable-size parts of the object. Not all | ||
| 34 | objects of the same type have the same size; but the size cannot change | ||
| 35 | after allocation. (These restrictions are made so a reference to an | ||
| 36 | object can be simply a pointer -- moving an object would require | ||
| 37 | updating all the pointers, and changing an object's size would require | ||
| 38 | moving it if there was another object right next to it.) | ||
| 39 | |||
| 40 | Objects are always accessed through pointers of the type 'PyObject *'. | ||
| 41 | The type 'PyObject' is a structure that only contains the reference count | ||
| 42 | and the type pointer. The actual memory allocated for an object | ||
| 43 | contains other data that can only be accessed after casting the pointer | ||
| 44 | to a pointer to a longer structure type. This longer type must start | ||
| 45 | with the reference count and type fields; the macro PyObject_HEAD should be | ||
| 46 | used for this (to accommodate for future changes). The implementation | ||
| 47 | of a particular object type can cast the object pointer to the proper | ||
| 48 | type and back. | ||
| 49 | |||
| 50 | A standard interface exists for objects that contain an array of items | ||
| 51 | whose size is determined when the object is allocated. | ||
| 52 | */ | ||
| 53 | |||
| 54 | /* Py_DEBUG implies Py_TRACE_REFS. */ | ||
| 55 | #if defined(Py_DEBUG) && !defined(Py_TRACE_REFS) | ||
| 56 | #define Py_TRACE_REFS | ||
| 57 | #endif | ||
| 58 | |||
| 59 | /* Py_TRACE_REFS implies Py_REF_DEBUG. */ | ||
| 60 | #if defined(Py_TRACE_REFS) && !defined(Py_REF_DEBUG) | ||
| 61 | #define Py_REF_DEBUG | ||
| 62 | #endif | ||
| 63 | |||
| 64 | #ifdef Py_TRACE_REFS | ||
| 65 | /* Define pointers to support a doubly-linked list of all live heap objects. */ | ||
| 66 | #define _PyObject_HEAD_EXTRA \ | ||
| 67 | struct _object *_ob_next; \ | ||
| 68 | struct _object *_ob_prev; | ||
| 69 | |||
| 70 | #define _PyObject_EXTRA_INIT 0, 0, | ||
| 71 | |||
| 72 | #else | ||
| 73 | #define _PyObject_HEAD_EXTRA | ||
| 74 | #define _PyObject_EXTRA_INIT | ||
| 75 | #endif | ||
| 76 | |||
| 77 | /* PyObject_HEAD defines the initial segment of every PyObject. */ | ||
| 78 | #define PyObject_HEAD \ | ||
| 79 | _PyObject_HEAD_EXTRA \ | ||
| 80 | Py_ssize_t ob_refcnt; \ | ||
| 81 | struct _typeobject *ob_type; | ||
| 82 | |||
| 83 | #define PyObject_HEAD_INIT(type) \ | ||
| 84 | _PyObject_EXTRA_INIT \ | ||
| 85 | 1, type, | ||
| 86 | |||
| 87 | /* PyObject_VAR_HEAD defines the initial segment of all variable-size | ||
| 88 | * container objects. These end with a declaration of an array with 1 | ||
| 89 | * element, but enough space is malloc'ed so that the array actually | ||
| 90 | * has room for ob_size elements. Note that ob_size is an element count, | ||
| 91 | * not necessarily a byte count. | ||
| 92 | */ | ||
| 93 | #define PyObject_VAR_HEAD \ | ||
| 94 | PyObject_HEAD \ | ||
| 95 | Py_ssize_t ob_size; /* Number of items in variable part */ | ||
| 96 | #define Py_INVALID_SIZE (Py_ssize_t)-1 | ||
| 97 | |||
| 98 | /* Nothing is actually declared to be a PyObject, but every pointer to | ||
| 99 | * a Python object can be cast to a PyObject*. This is inheritance built | ||
| 100 | * by hand. Similarly every pointer to a variable-size Python object can, | ||
| 101 | * in addition, be cast to PyVarObject*. | ||
| 102 | */ | ||
| 103 | typedef struct _object { | ||
| 104 | PyObject_HEAD | ||
| 105 | } PyObject; | ||
| 106 | |||
| 107 | typedef struct { | ||
| 108 | PyObject_VAR_HEAD | ||
| 109 | } PyVarObject; | ||
| 110 | |||
| 111 | |||
| 112 | /* | ||
| 113 | Type objects contain a string containing the type name (to help somewhat | ||
| 114 | in debugging), the allocation parameters (see PyObject_New() and | ||
| 115 | PyObject_NewVar()), | ||
| 116 | and methods for accessing objects of the type. Methods are optional, a | ||
| 117 | nil pointer meaning that particular kind of access is not available for | ||
| 118 | this type. The Py_DECREF() macro uses the tp_dealloc method without | ||
| 119 | checking for a nil pointer; it should always be implemented except if | ||
| 120 | the implementation can guarantee that the reference count will never | ||
| 121 | reach zero (e.g., for statically allocated type objects). | ||
| 122 | |||
| 123 | NB: the methods for certain type groups are now contained in separate | ||
| 124 | method blocks. | ||
| 125 | */ | ||
| 126 | |||
| 127 | typedef PyObject * (*unaryfunc)(PyObject *); | ||
| 128 | typedef PyObject * (*binaryfunc)(PyObject *, PyObject *); | ||
| 129 | typedef PyObject * (*ternaryfunc)(PyObject *, PyObject *, PyObject *); | ||
| 130 | typedef int (*inquiry)(PyObject *); | ||
| 131 | typedef Py_ssize_t (*lenfunc)(PyObject *); | ||
| 132 | typedef int (*coercion)(PyObject **, PyObject **); | ||
| 133 | typedef PyObject *(*intargfunc)(PyObject *, int) Py_DEPRECATED(2.5); | ||
| 134 | typedef PyObject *(*intintargfunc)(PyObject *, int, int) Py_DEPRECATED(2.5); | ||
| 135 | typedef PyObject *(*ssizeargfunc)(PyObject *, Py_ssize_t); | ||
| 136 | typedef PyObject *(*ssizessizeargfunc)(PyObject *, Py_ssize_t, Py_ssize_t); | ||
| 137 | typedef int(*intobjargproc)(PyObject *, int, PyObject *); | ||
| 138 | typedef int(*intintobjargproc)(PyObject *, int, int, PyObject *); | ||
| 139 | typedef int(*ssizeobjargproc)(PyObject *, Py_ssize_t, PyObject *); | ||
| 140 | typedef int(*ssizessizeobjargproc)(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *); | ||
| 141 | typedef int(*objobjargproc)(PyObject *, PyObject *, PyObject *); | ||
| 142 | |||
| 143 | /* int-based buffer interface */ | ||
| 144 | typedef int (*getreadbufferproc)(PyObject *, int, void **); | ||
| 145 | typedef int (*getwritebufferproc)(PyObject *, int, void **); | ||
| 146 | typedef int (*getsegcountproc)(PyObject *, int *); | ||
| 147 | typedef int (*getcharbufferproc)(PyObject *, int, char **); | ||
| 148 | /* ssize_t-based buffer interface */ | ||
| 149 | typedef Py_ssize_t (*readbufferproc)(PyObject *, Py_ssize_t, void **); | ||
| 150 | typedef Py_ssize_t (*writebufferproc)(PyObject *, Py_ssize_t, void **); | ||
| 151 | typedef Py_ssize_t (*segcountproc)(PyObject *, Py_ssize_t *); | ||
| 152 | typedef Py_ssize_t (*charbufferproc)(PyObject *, Py_ssize_t, char **); | ||
| 153 | |||
| 154 | typedef int (*objobjproc)(PyObject *, PyObject *); | ||
| 155 | typedef int (*visitproc)(PyObject *, void *); | ||
| 156 | typedef int (*traverseproc)(PyObject *, visitproc, void *); | ||
| 157 | |||
| 158 | typedef struct { | ||
| 159 | /* For numbers without flag bit Py_TPFLAGS_CHECKTYPES set, all | ||
| 160 | arguments are guaranteed to be of the object's type (modulo | ||
| 161 | coercion hacks -- i.e. if the type's coercion function | ||
| 162 | returns other types, then these are allowed as well). Numbers that | ||
| 163 | have the Py_TPFLAGS_CHECKTYPES flag bit set should check *both* | ||
| 164 | arguments for proper type and implement the necessary conversions | ||
| 165 | in the slot functions themselves. */ | ||
| 166 | |||
| 167 | binaryfunc nb_add; | ||
| 168 | binaryfunc nb_subtract; | ||
| 169 | binaryfunc nb_multiply; | ||
| 170 | binaryfunc nb_divide; | ||
| 171 | binaryfunc nb_remainder; | ||
| 172 | binaryfunc nb_divmod; | ||
| 173 | ternaryfunc nb_power; | ||
| 174 | unaryfunc nb_negative; | ||
| 175 | unaryfunc nb_positive; | ||
| 176 | unaryfunc nb_absolute; | ||
| 177 | inquiry nb_nonzero; | ||
| 178 | unaryfunc nb_invert; | ||
| 179 | binaryfunc nb_lshift; | ||
| 180 | binaryfunc nb_rshift; | ||
| 181 | binaryfunc nb_and; | ||
| 182 | binaryfunc nb_xor; | ||
| 183 | binaryfunc nb_or; | ||
| 184 | coercion nb_coerce; | ||
| 185 | unaryfunc nb_int; | ||
| 186 | unaryfunc nb_long; | ||
| 187 | unaryfunc nb_float; | ||
| 188 | unaryfunc nb_oct; | ||
| 189 | unaryfunc nb_hex; | ||
| 190 | /* Added in release 2.0 */ | ||
| 191 | binaryfunc nb_inplace_add; | ||
| 192 | binaryfunc nb_inplace_subtract; | ||
| 193 | binaryfunc nb_inplace_multiply; | ||
| 194 | binaryfunc nb_inplace_divide; | ||
| 195 | binaryfunc nb_inplace_remainder; | ||
| 196 | ternaryfunc nb_inplace_power; | ||
| 197 | binaryfunc nb_inplace_lshift; | ||
| 198 | binaryfunc nb_inplace_rshift; | ||
| 199 | binaryfunc nb_inplace_and; | ||
| 200 | binaryfunc nb_inplace_xor; | ||
| 201 | binaryfunc nb_inplace_or; | ||
| 202 | |||
| 203 | /* Added in release 2.2 */ | ||
| 204 | /* The following require the Py_TPFLAGS_HAVE_CLASS flag */ | ||
| 205 | binaryfunc nb_floor_divide; | ||
| 206 | binaryfunc nb_true_divide; | ||
| 207 | binaryfunc nb_inplace_floor_divide; | ||
| 208 | binaryfunc nb_inplace_true_divide; | ||
| 209 | |||
| 210 | /* Added in release 2.5 */ | ||
| 211 | unaryfunc nb_index; | ||
| 212 | } PyNumberMethods; | ||
| 213 | |||
| 214 | typedef struct { | ||
| 215 | lenfunc sq_length; | ||
| 216 | binaryfunc sq_concat; | ||
| 217 | ssizeargfunc sq_repeat; | ||
| 218 | ssizeargfunc sq_item; | ||
| 219 | ssizessizeargfunc sq_slice; | ||
| 220 | ssizeobjargproc sq_ass_item; | ||
| 221 | ssizessizeobjargproc sq_ass_slice; | ||
| 222 | objobjproc sq_contains; | ||
| 223 | /* Added in release 2.0 */ | ||
| 224 | binaryfunc sq_inplace_concat; | ||
| 225 | ssizeargfunc sq_inplace_repeat; | ||
| 226 | } PySequenceMethods; | ||
| 227 | |||
| 228 | typedef struct { | ||
| 229 | lenfunc mp_length; | ||
| 230 | binaryfunc mp_subscript; | ||
| 231 | objobjargproc mp_ass_subscript; | ||
| 232 | } PyMappingMethods; | ||
| 233 | |||
| 234 | typedef struct { | ||
| 235 | readbufferproc bf_getreadbuffer; | ||
| 236 | writebufferproc bf_getwritebuffer; | ||
| 237 | segcountproc bf_getsegcount; | ||
| 238 | charbufferproc bf_getcharbuffer; | ||
| 239 | } PyBufferProcs; | ||
| 240 | |||
| 241 | |||
| 242 | typedef void (*freefunc)(void *); | ||
| 243 | typedef void (*destructor)(PyObject *); | ||
| 244 | typedef int (*printfunc)(PyObject *, FILE *, int); | ||
| 245 | typedef PyObject *(*getattrfunc)(PyObject *, char *); | ||
| 246 | typedef PyObject *(*getattrofunc)(PyObject *, PyObject *); | ||
| 247 | typedef int (*setattrfunc)(PyObject *, char *, PyObject *); | ||
| 248 | typedef int (*setattrofunc)(PyObject *, PyObject *, PyObject *); | ||
| 249 | typedef int (*cmpfunc)(PyObject *, PyObject *); | ||
| 250 | typedef PyObject *(*reprfunc)(PyObject *); | ||
| 251 | typedef long (*hashfunc)(PyObject *); | ||
| 252 | typedef PyObject *(*richcmpfunc) (PyObject *, PyObject *, int); | ||
| 253 | typedef PyObject *(*getiterfunc) (PyObject *); | ||
| 254 | typedef PyObject *(*iternextfunc) (PyObject *); | ||
| 255 | typedef PyObject *(*descrgetfunc) (PyObject *, PyObject *, PyObject *); | ||
| 256 | typedef int (*descrsetfunc) (PyObject *, PyObject *, PyObject *); | ||
| 257 | typedef int (*initproc)(PyObject *, PyObject *, PyObject *); | ||
| 258 | typedef PyObject *(*newfunc)(struct _typeobject *, PyObject *, PyObject *); | ||
| 259 | typedef PyObject *(*allocfunc)(struct _typeobject *, Py_ssize_t); | ||
| 260 | |||
| 261 | typedef struct _typeobject { | ||
| 262 | PyObject_VAR_HEAD | ||
| 263 | const char *tp_name; /* For printing, in format "<module>.<name>" */ | ||
| 264 | Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */ | ||
| 265 | |||
| 266 | /* Methods to implement standard operations */ | ||
| 267 | |||
| 268 | destructor tp_dealloc; | ||
| 269 | printfunc tp_print; | ||
| 270 | getattrfunc tp_getattr; | ||
| 271 | setattrfunc tp_setattr; | ||
| 272 | cmpfunc tp_compare; | ||
| 273 | reprfunc tp_repr; | ||
| 274 | |||
| 275 | /* Method suites for standard classes */ | ||
| 276 | |||
| 277 | PyNumberMethods *tp_as_number; | ||
| 278 | PySequenceMethods *tp_as_sequence; | ||
| 279 | PyMappingMethods *tp_as_mapping; | ||
| 280 | |||
| 281 | /* More standard operations (here for binary compatibility) */ | ||
| 282 | |||
| 283 | hashfunc tp_hash; | ||
| 284 | ternaryfunc tp_call; | ||
| 285 | reprfunc tp_str; | ||
| 286 | getattrofunc tp_getattro; | ||
| 287 | setattrofunc tp_setattro; | ||
| 288 | |||
| 289 | /* Functions to access object as input/output buffer */ | ||
| 290 | PyBufferProcs *tp_as_buffer; | ||
| 291 | |||
| 292 | /* Flags to define presence of optional/expanded features */ | ||
| 293 | long tp_flags; | ||
| 294 | |||
| 295 | const char *tp_doc; /* Documentation string */ | ||
| 296 | |||
| 297 | /* Assigned meaning in release 2.0 */ | ||
| 298 | /* call function for all accessible objects */ | ||
| 299 | traverseproc tp_traverse; | ||
| 300 | |||
| 301 | /* delete references to contained objects */ | ||
| 302 | inquiry tp_clear; | ||
| 303 | |||
| 304 | /* Assigned meaning in release 2.1 */ | ||
| 305 | /* rich comparisons */ | ||
| 306 | richcmpfunc tp_richcompare; | ||
| 307 | |||
| 308 | /* weak reference enabler */ | ||
| 309 | Py_ssize_t tp_weaklistoffset; | ||
| 310 | |||
| 311 | /* Added in release 2.2 */ | ||
| 312 | /* Iterators */ | ||
| 313 | getiterfunc tp_iter; | ||
| 314 | iternextfunc tp_iternext; | ||
| 315 | |||
| 316 | /* Attribute descriptor and subclassing stuff */ | ||
| 317 | struct PyMethodDef *tp_methods; | ||
| 318 | struct PyMemberDef *tp_members; | ||
| 319 | struct PyGetSetDef *tp_getset; | ||
| 320 | struct _typeobject *tp_base; | ||
| 321 | PyObject *tp_dict; | ||
| 322 | descrgetfunc tp_descr_get; | ||
| 323 | descrsetfunc tp_descr_set; | ||
| 324 | Py_ssize_t tp_dictoffset; | ||
| 325 | initproc tp_init; | ||
| 326 | allocfunc tp_alloc; | ||
| 327 | newfunc tp_new; | ||
| 328 | freefunc tp_free; /* Low-level free-memory routine */ | ||
| 329 | inquiry tp_is_gc; /* For PyObject_IS_GC */ | ||
| 330 | PyObject *tp_bases; | ||
| 331 | PyObject *tp_mro; /* method resolution order */ | ||
| 332 | PyObject *tp_cache; | ||
| 333 | PyObject *tp_subclasses; | ||
| 334 | PyObject *tp_weaklist; | ||
| 335 | destructor tp_del; | ||
| 336 | |||
| 337 | #ifdef COUNT_ALLOCS | ||
| 338 | /* these must be last and never explicitly initialized */ | ||
| 339 | Py_ssize_t tp_allocs; | ||
| 340 | Py_ssize_t tp_frees; | ||
| 341 | Py_ssize_t tp_maxalloc; | ||
| 342 | struct _typeobject *tp_prev; | ||
| 343 | struct _typeobject *tp_next; | ||
| 344 | #endif | ||
| 345 | } PyTypeObject; | ||
| 346 | |||
| 347 | |||
| 348 | /* The *real* layout of a type object when allocated on the heap */ | ||
| 349 | typedef struct _heaptypeobject { | ||
| 350 | /* Note: there's a dependency on the order of these members | ||
| 351 | in slotptr() in typeobject.c . */ | ||
| 352 | PyTypeObject ht_type; | ||
| 353 | PyNumberMethods as_number; | ||
| 354 | PyMappingMethods as_mapping; | ||
| 355 | PySequenceMethods as_sequence; /* as_sequence comes after as_mapping, | ||
| 356 | so that the mapping wins when both | ||
| 357 | the mapping and the sequence define | ||
| 358 | a given operator (e.g. __getitem__). | ||
| 359 | see add_operators() in typeobject.c . */ | ||
| 360 | PyBufferProcs as_buffer; | ||
| 361 | PyObject *ht_name, *ht_slots; | ||
| 362 | /* here are optional user slots, followed by the members. */ | ||
| 363 | } PyHeapTypeObject; | ||
| 364 | |||
| 365 | /* access macro to the members which are floating "behind" the object */ | ||
| 366 | #define PyHeapType_GET_MEMBERS(etype) \ | ||
| 367 | ((PyMemberDef *)(((char *)etype) + (etype)->ht_type.ob_type->tp_basicsize)) | ||
| 368 | |||
| 369 | |||
| 370 | /* Generic type check */ | ||
| 371 | PyAPI_FUNC(int) PyType_IsSubtype(PyTypeObject *, PyTypeObject *); | ||
| 372 | #define PyObject_TypeCheck(ob, tp) \ | ||
| 373 | ((ob)->ob_type == (tp) || PyType_IsSubtype((ob)->ob_type, (tp))) | ||
| 374 | |||
| 375 | PyAPI_DATA(PyTypeObject) PyType_Type; /* built-in 'type' */ | ||
| 376 | PyAPI_DATA(PyTypeObject) PyBaseObject_Type; /* built-in 'object' */ | ||
| 377 | PyAPI_DATA(PyTypeObject) PySuper_Type; /* built-in 'super' */ | ||
| 378 | |||
| 379 | #define PyType_Check(op) PyObject_TypeCheck(op, &PyType_Type) | ||
| 380 | #define PyType_CheckExact(op) ((op)->ob_type == &PyType_Type) | ||
| 381 | |||
| 382 | PyAPI_FUNC(int) PyType_Ready(PyTypeObject *); | ||
| 383 | PyAPI_FUNC(PyObject *) PyType_GenericAlloc(PyTypeObject *, Py_ssize_t); | ||
| 384 | PyAPI_FUNC(PyObject *) PyType_GenericNew(PyTypeObject *, | ||
| 385 | PyObject *, PyObject *); | ||
| 386 | PyAPI_FUNC(PyObject *) _PyType_Lookup(PyTypeObject *, PyObject *); | ||
| 387 | |||
| 388 | /* Generic operations on objects */ | ||
| 389 | PyAPI_FUNC(int) PyObject_Print(PyObject *, FILE *, int); | ||
| 390 | PyAPI_FUNC(void) _PyObject_Dump(PyObject *); | ||
| 391 | PyAPI_FUNC(PyObject *) PyObject_Repr(PyObject *); | ||
| 392 | PyAPI_FUNC(PyObject *) _PyObject_Str(PyObject *); | ||
| 393 | PyAPI_FUNC(PyObject *) PyObject_Str(PyObject *); | ||
| 394 | #ifdef Py_USING_UNICODE | ||
| 395 | PyAPI_FUNC(PyObject *) PyObject_Unicode(PyObject *); | ||
| 396 | #endif | ||
| 397 | PyAPI_FUNC(int) PyObject_Compare(PyObject *, PyObject *); | ||
| 398 | PyAPI_FUNC(PyObject *) PyObject_RichCompare(PyObject *, PyObject *, int); | ||
| 399 | PyAPI_FUNC(int) PyObject_RichCompareBool(PyObject *, PyObject *, int); | ||
| 400 | PyAPI_FUNC(PyObject *) PyObject_GetAttrString(PyObject *, const char *); | ||
| 401 | PyAPI_FUNC(int) PyObject_SetAttrString(PyObject *, const char *, PyObject *); | ||
| 402 | PyAPI_FUNC(int) PyObject_HasAttrString(PyObject *, const char *); | ||
| 403 | PyAPI_FUNC(PyObject *) PyObject_GetAttr(PyObject *, PyObject *); | ||
| 404 | PyAPI_FUNC(int) PyObject_SetAttr(PyObject *, PyObject *, PyObject *); | ||
| 405 | PyAPI_FUNC(int) PyObject_HasAttr(PyObject *, PyObject *); | ||
| 406 | PyAPI_FUNC(PyObject **) _PyObject_GetDictPtr(PyObject *); | ||
| 407 | PyAPI_FUNC(PyObject *) PyObject_SelfIter(PyObject *); | ||
| 408 | PyAPI_FUNC(PyObject *) PyObject_GenericGetAttr(PyObject *, PyObject *); | ||
| 409 | PyAPI_FUNC(int) PyObject_GenericSetAttr(PyObject *, | ||
| 410 | PyObject *, PyObject *); | ||
| 411 | PyAPI_FUNC(long) PyObject_Hash(PyObject *); | ||
| 412 | PyAPI_FUNC(int) PyObject_IsTrue(PyObject *); | ||
| 413 | PyAPI_FUNC(int) PyObject_Not(PyObject *); | ||
| 414 | PyAPI_FUNC(int) PyCallable_Check(PyObject *); | ||
| 415 | PyAPI_FUNC(int) PyNumber_Coerce(PyObject **, PyObject **); | ||
| 416 | PyAPI_FUNC(int) PyNumber_CoerceEx(PyObject **, PyObject **); | ||
| 417 | |||
| 418 | PyAPI_FUNC(void) PyObject_ClearWeakRefs(PyObject *); | ||
| 419 | |||
| 420 | /* A slot function whose address we need to compare */ | ||
| 421 | extern int _PyObject_SlotCompare(PyObject *, PyObject *); | ||
| 422 | |||
| 423 | |||
| 424 | /* PyObject_Dir(obj) acts like Python __builtin__.dir(obj), returning a | ||
| 425 | list of strings. PyObject_Dir(NULL) is like __builtin__.dir(), | ||
| 426 | returning the names of the current locals. In this case, if there are | ||
| 427 | no current locals, NULL is returned, and PyErr_Occurred() is false. | ||
| 428 | */ | ||
| 429 | PyAPI_FUNC(PyObject *) PyObject_Dir(PyObject *); | ||
| 430 | |||
| 431 | |||
| 432 | /* Helpers for printing recursive container types */ | ||
| 433 | PyAPI_FUNC(int) Py_ReprEnter(PyObject *); | ||
| 434 | PyAPI_FUNC(void) Py_ReprLeave(PyObject *); | ||
| 435 | |||
| 436 | /* Helpers for hash functions */ | ||
| 437 | PyAPI_FUNC(long) _Py_HashDouble(double); | ||
| 438 | PyAPI_FUNC(long) _Py_HashPointer(void*); | ||
| 439 | |||
| 440 | /* Helper for passing objects to printf and the like */ | ||
| 441 | #define PyObject_REPR(obj) PyString_AS_STRING(PyObject_Repr(obj)) | ||
| 442 | |||
| 443 | /* Flag bits for printing: */ | ||
| 444 | #define Py_PRINT_RAW 1 /* No string quotes etc. */ | ||
| 445 | |||
| 446 | /* | ||
| 447 | `Type flags (tp_flags) | ||
| 448 | |||
| 449 | These flags are used to extend the type structure in a backwards-compatible | ||
| 450 | fashion. Extensions can use the flags to indicate (and test) when a given | ||
| 451 | type structure contains a new feature. The Python core will use these when | ||
| 452 | introducing new functionality between major revisions (to avoid mid-version | ||
| 453 | changes in the PYTHON_API_VERSION). | ||
| 454 | |||
| 455 | Arbitration of the flag bit positions will need to be coordinated among | ||
| 456 | all extension writers who publically release their extensions (this will | ||
| 457 | be fewer than you might expect!).. | ||
| 458 | |||
| 459 | Python 1.5.2 introduced the bf_getcharbuffer slot into PyBufferProcs. | ||
| 460 | |||
| 461 | Type definitions should use Py_TPFLAGS_DEFAULT for their tp_flags value. | ||
| 462 | |||
| 463 | Code can use PyType_HasFeature(type_ob, flag_value) to test whether the | ||
| 464 | given type object has a specified feature. | ||
| 465 | */ | ||
| 466 | |||
| 467 | /* PyBufferProcs contains bf_getcharbuffer */ | ||
| 468 | #define Py_TPFLAGS_HAVE_GETCHARBUFFER (1L<<0) | ||
| 469 | |||
| 470 | /* PySequenceMethods contains sq_contains */ | ||
| 471 | #define Py_TPFLAGS_HAVE_SEQUENCE_IN (1L<<1) | ||
| 472 | |||
| 473 | /* This is here for backwards compatibility. Extensions that use the old GC | ||
| 474 | * API will still compile but the objects will not be tracked by the GC. */ | ||
| 475 | #define Py_TPFLAGS_GC 0 /* used to be (1L<<2) */ | ||
| 476 | |||
| 477 | /* PySequenceMethods and PyNumberMethods contain in-place operators */ | ||
| 478 | #define Py_TPFLAGS_HAVE_INPLACEOPS (1L<<3) | ||
| 479 | |||
| 480 | /* PyNumberMethods do their own coercion */ | ||
| 481 | #define Py_TPFLAGS_CHECKTYPES (1L<<4) | ||
| 482 | |||
| 483 | /* tp_richcompare is defined */ | ||
| 484 | #define Py_TPFLAGS_HAVE_RICHCOMPARE (1L<<5) | ||
| 485 | |||
| 486 | /* Objects which are weakly referencable if their tp_weaklistoffset is >0 */ | ||
| 487 | #define Py_TPFLAGS_HAVE_WEAKREFS (1L<<6) | ||
| 488 | |||
| 489 | /* tp_iter is defined */ | ||
| 490 | #define Py_TPFLAGS_HAVE_ITER (1L<<7) | ||
| 491 | |||
| 492 | /* New members introduced by Python 2.2 exist */ | ||
| 493 | #define Py_TPFLAGS_HAVE_CLASS (1L<<8) | ||
| 494 | |||
| 495 | /* Set if the type object is dynamically allocated */ | ||
| 496 | #define Py_TPFLAGS_HEAPTYPE (1L<<9) | ||
| 497 | |||
| 498 | /* Set if the type allows subclassing */ | ||
| 499 | #define Py_TPFLAGS_BASETYPE (1L<<10) | ||
| 500 | |||
| 501 | /* Set if the type is 'ready' -- fully initialized */ | ||
| 502 | #define Py_TPFLAGS_READY (1L<<12) | ||
| 503 | |||
| 504 | /* Set while the type is being 'readied', to prevent recursive ready calls */ | ||
| 505 | #define Py_TPFLAGS_READYING (1L<<13) | ||
| 506 | |||
| 507 | /* Objects support garbage collection (see objimp.h) */ | ||
| 508 | #define Py_TPFLAGS_HAVE_GC (1L<<14) | ||
| 509 | |||
| 510 | /* These two bits are preserved for Stackless Python, next after this is 17 */ | ||
| 511 | #ifdef STACKLESS | ||
| 512 | #define Py_TPFLAGS_HAVE_STACKLESS_EXTENSION (3L<<15) | ||
| 513 | #else | ||
| 514 | #define Py_TPFLAGS_HAVE_STACKLESS_EXTENSION 0 | ||
| 515 | #endif | ||
| 516 | |||
| 517 | /* Objects support nb_index in PyNumberMethods */ | ||
| 518 | #define Py_TPFLAGS_HAVE_INDEX (1L<<17) | ||
| 519 | |||
| 520 | #define Py_TPFLAGS_DEFAULT ( \ | ||
| 521 | Py_TPFLAGS_HAVE_GETCHARBUFFER | \ | ||
| 522 | Py_TPFLAGS_HAVE_SEQUENCE_IN | \ | ||
| 523 | Py_TPFLAGS_HAVE_INPLACEOPS | \ | ||
| 524 | Py_TPFLAGS_HAVE_RICHCOMPARE | \ | ||
| 525 | Py_TPFLAGS_HAVE_WEAKREFS | \ | ||
| 526 | Py_TPFLAGS_HAVE_ITER | \ | ||
| 527 | Py_TPFLAGS_HAVE_CLASS | \ | ||
| 528 | Py_TPFLAGS_HAVE_STACKLESS_EXTENSION | \ | ||
| 529 | Py_TPFLAGS_HAVE_INDEX | \ | ||
| 530 | 0) | ||
| 531 | |||
| 532 | #define PyType_HasFeature(t,f) (((t)->tp_flags & (f)) != 0) | ||
| 533 | |||
| 534 | |||
| 535 | /* | ||
| 536 | The macros Py_INCREF(op) and Py_DECREF(op) are used to increment or decrement | ||
| 537 | reference counts. Py_DECREF calls the object's deallocator function when | ||
| 538 | the refcount falls to 0; for | ||
| 539 | objects that don't contain references to other objects or heap memory | ||
| 540 | this can be the standard function free(). Both macros can be used | ||
| 541 | wherever a void expression is allowed. The argument must not be a | ||
| 542 | NIL pointer. If it may be NIL, use Py_XINCREF/Py_XDECREF instead. | ||
| 543 | The macro _Py_NewReference(op) initialize reference counts to 1, and | ||
| 544 | in special builds (Py_REF_DEBUG, Py_TRACE_REFS) performs additional | ||
| 545 | bookkeeping appropriate to the special build. | ||
| 546 | |||
| 547 | We assume that the reference count field can never overflow; this can | ||
| 548 | be proven when the size of the field is the same as the pointer size, so | ||
| 549 | we ignore the possibility. Provided a C int is at least 32 bits (which | ||
| 550 | is implicitly assumed in many parts of this code), that's enough for | ||
| 551 | about 2**31 references to an object. | ||
| 552 | |||
| 553 | XXX The following became out of date in Python 2.2, but I'm not sure | ||
| 554 | XXX what the full truth is now. Certainly, heap-allocated type objects | ||
| 555 | XXX can and should be deallocated. | ||
| 556 | Type objects should never be deallocated; the type pointer in an object | ||
| 557 | is not considered to be a reference to the type object, to save | ||
| 558 | complications in the deallocation function. (This is actually a | ||
| 559 | decision that's up to the implementer of each new type so if you want, | ||
| 560 | you can count such references to the type object.) | ||
| 561 | |||
| 562 | *** WARNING*** The Py_DECREF macro must have a side-effect-free argument | ||
| 563 | since it may evaluate its argument multiple times. (The alternative | ||
| 564 | would be to mace it a proper function or assign it to a global temporary | ||
| 565 | variable first, both of which are slower; and in a multi-threaded | ||
| 566 | environment the global variable trick is not safe.) | ||
| 567 | */ | ||
| 568 | |||
| 569 | /* First define a pile of simple helper macros, one set per special | ||
| 570 | * build symbol. These either expand to the obvious things, or to | ||
| 571 | * nothing at all when the special mode isn't in effect. The main | ||
| 572 | * macros can later be defined just once then, yet expand to different | ||
| 573 | * things depending on which special build options are and aren't in effect. | ||
| 574 | * Trust me <wink>: while painful, this is 20x easier to understand than, | ||
| 575 | * e.g, defining _Py_NewReference five different times in a maze of nested | ||
| 576 | * #ifdefs (we used to do that -- it was impenetrable). | ||
| 577 | */ | ||
| 578 | #ifdef Py_REF_DEBUG | ||
| 579 | PyAPI_DATA(Py_ssize_t) _Py_RefTotal; | ||
| 580 | PyAPI_FUNC(void) _Py_NegativeRefcount(const char *fname, | ||
| 581 | int lineno, PyObject *op); | ||
| 582 | PyAPI_FUNC(PyObject *) _PyDict_Dummy(void); | ||
| 583 | PyAPI_FUNC(PyObject *) _PySet_Dummy(void); | ||
| 584 | PyAPI_FUNC(Py_ssize_t) _Py_GetRefTotal(void); | ||
| 585 | #define _Py_INC_REFTOTAL _Py_RefTotal++ | ||
| 586 | #define _Py_DEC_REFTOTAL _Py_RefTotal-- | ||
| 587 | #define _Py_REF_DEBUG_COMMA , | ||
| 588 | #define _Py_CHECK_REFCNT(OP) \ | ||
| 589 | { if ((OP)->ob_refcnt < 0) \ | ||
| 590 | _Py_NegativeRefcount(__FILE__, __LINE__, \ | ||
| 591 | (PyObject *)(OP)); \ | ||
| 592 | } | ||
| 593 | #else | ||
| 594 | #define _Py_INC_REFTOTAL | ||
| 595 | #define _Py_DEC_REFTOTAL | ||
| 596 | #define _Py_REF_DEBUG_COMMA | ||
| 597 | #define _Py_CHECK_REFCNT(OP) /* a semicolon */; | ||
| 598 | #endif /* Py_REF_DEBUG */ | ||
| 599 | |||
| 600 | #ifdef COUNT_ALLOCS | ||
| 601 | PyAPI_FUNC(void) inc_count(PyTypeObject *); | ||
| 602 | PyAPI_FUNC(void) dec_count(PyTypeObject *); | ||
| 603 | #define _Py_INC_TPALLOCS(OP) inc_count((OP)->ob_type) | ||
| 604 | #define _Py_INC_TPFREES(OP) dec_count((OP)->ob_type) | ||
| 605 | #define _Py_DEC_TPFREES(OP) (OP)->ob_type->tp_frees-- | ||
| 606 | #define _Py_COUNT_ALLOCS_COMMA , | ||
| 607 | #else | ||
| 608 | #define _Py_INC_TPALLOCS(OP) | ||
| 609 | #define _Py_INC_TPFREES(OP) | ||
| 610 | #define _Py_DEC_TPFREES(OP) | ||
| 611 | #define _Py_COUNT_ALLOCS_COMMA | ||
| 612 | #endif /* COUNT_ALLOCS */ | ||
| 613 | |||
| 614 | #ifdef Py_TRACE_REFS | ||
| 615 | /* Py_TRACE_REFS is such major surgery that we call external routines. */ | ||
| 616 | PyAPI_FUNC(void) _Py_NewReference(PyObject *); | ||
| 617 | PyAPI_FUNC(void) _Py_ForgetReference(PyObject *); | ||
| 618 | PyAPI_FUNC(void) _Py_Dealloc(PyObject *); | ||
| 619 | PyAPI_FUNC(void) _Py_PrintReferences(FILE *); | ||
| 620 | PyAPI_FUNC(void) _Py_PrintReferenceAddresses(FILE *); | ||
| 621 | PyAPI_FUNC(void) _Py_AddToAllObjects(PyObject *, int force); | ||
| 622 | |||
| 623 | #else | ||
| 624 | /* Without Py_TRACE_REFS, there's little enough to do that we expand code | ||
| 625 | * inline. | ||
| 626 | */ | ||
| 627 | #define _Py_NewReference(op) ( \ | ||
| 628 | _Py_INC_TPALLOCS(op) _Py_COUNT_ALLOCS_COMMA \ | ||
| 629 | _Py_INC_REFTOTAL _Py_REF_DEBUG_COMMA \ | ||
| 630 | (op)->ob_refcnt = 1) | ||
| 631 | |||
| 632 | #define _Py_ForgetReference(op) _Py_INC_TPFREES(op) | ||
| 633 | |||
| 634 | #define _Py_Dealloc(op) ( \ | ||
| 635 | _Py_INC_TPFREES(op) _Py_COUNT_ALLOCS_COMMA \ | ||
| 636 | (*(op)->ob_type->tp_dealloc)((PyObject *)(op))) | ||
| 637 | #endif /* !Py_TRACE_REFS */ | ||
| 638 | |||
| 639 | #define Py_INCREF(op) ( \ | ||
| 640 | _Py_INC_REFTOTAL _Py_REF_DEBUG_COMMA \ | ||
| 641 | (op)->ob_refcnt++) | ||
| 642 | |||
| 643 | #define Py_DECREF(op) \ | ||
| 644 | if (_Py_DEC_REFTOTAL _Py_REF_DEBUG_COMMA \ | ||
| 645 | --(op)->ob_refcnt != 0) \ | ||
| 646 | _Py_CHECK_REFCNT(op) \ | ||
| 647 | else \ | ||
| 648 | _Py_Dealloc((PyObject *)(op)) | ||
| 649 | |||
| 650 | /* Safely decref `op` and set `op` to NULL, especially useful in tp_clear | ||
| 651 | * and tp_dealloc implementatons. | ||
| 652 | * | ||
| 653 | * Note that "the obvious" code can be deadly: | ||
| 654 | * | ||
| 655 | * Py_XDECREF(op); | ||
| 656 | * op = NULL; | ||
| 657 | * | ||
| 658 | * Typically, `op` is something like self->containee, and `self` is done | ||
| 659 | * using its `containee` member. In the code sequence above, suppose | ||
| 660 | * `containee` is non-NULL with a refcount of 1. Its refcount falls to | ||
| 661 | * 0 on the first line, which can trigger an arbitrary amount of code, | ||
| 662 | * possibly including finalizers (like __del__ methods or weakref callbacks) | ||
| 663 | * coded in Python, which in turn can release the GIL and allow other threads | ||
| 664 | * to run, etc. Such code may even invoke methods of `self` again, or cause | ||
| 665 | * cyclic gc to trigger, but-- oops! --self->containee still points to the | ||
| 666 | * object being torn down, and it may be in an insane state while being torn | ||
| 667 | * down. This has in fact been a rich historic source of miserable (rare & | ||
| 668 | * hard-to-diagnose) segfaulting (and other) bugs. | ||
| 669 | * | ||
| 670 | * The safe way is: | ||
| 671 | * | ||
| 672 | * Py_CLEAR(op); | ||
| 673 | * | ||
| 674 | * That arranges to set `op` to NULL _before_ decref'ing, so that any code | ||
| 675 | * triggered as a side-effect of `op` getting torn down no longer believes | ||
| 676 | * `op` points to a valid object. | ||
| 677 | * | ||
| 678 | * There are cases where it's safe to use the naive code, but they're brittle. | ||
| 679 | * For example, if `op` points to a Python integer, you know that destroying | ||
| 680 | * one of those can't cause problems -- but in part that relies on that | ||
| 681 | * Python integers aren't currently weakly referencable. Best practice is | ||
| 682 | * to use Py_CLEAR() even if you can't think of a reason for why you need to. | ||
| 683 | */ | ||
| 684 | #define Py_CLEAR(op) \ | ||
| 685 | do { \ | ||
| 686 | if (op) { \ | ||
| 687 | PyObject *tmp = (PyObject *)(op); \ | ||
| 688 | (op) = NULL; \ | ||
| 689 | Py_DECREF(tmp); \ | ||
| 690 | } \ | ||
| 691 | } while (0) | ||
| 692 | |||
| 693 | /* Macros to use in case the object pointer may be NULL: */ | ||
| 694 | #define Py_XINCREF(op) if ((op) == NULL) ; else Py_INCREF(op) | ||
| 695 | #define Py_XDECREF(op) if ((op) == NULL) ; else Py_DECREF(op) | ||
| 696 | |||
| 697 | /* | ||
| 698 | These are provided as conveniences to Python runtime embedders, so that | ||
| 699 | they can have object code that is not dependent on Python compilation flags. | ||
| 700 | */ | ||
| 701 | PyAPI_FUNC(void) Py_IncRef(PyObject *); | ||
| 702 | PyAPI_FUNC(void) Py_DecRef(PyObject *); | ||
| 703 | |||
| 704 | /* | ||
| 705 | _Py_NoneStruct is an object of undefined type which can be used in contexts | ||
| 706 | where NULL (nil) is not suitable (since NULL often means 'error'). | ||
| 707 | |||
| 708 | Don't forget to apply Py_INCREF() when returning this value!!! | ||
| 709 | */ | ||
| 710 | PyAPI_DATA(PyObject) _Py_NoneStruct; /* Don't use this directly */ | ||
| 711 | #define Py_None (&_Py_NoneStruct) | ||
| 712 | |||
| 713 | /* Macro for returning Py_None from a function */ | ||
| 714 | #define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None | ||
| 715 | |||
| 716 | /* | ||
| 717 | Py_NotImplemented is a singleton used to signal that an operation is | ||
| 718 | not implemented for a given type combination. | ||
| 719 | */ | ||
| 720 | PyAPI_DATA(PyObject) _Py_NotImplementedStruct; /* Don't use this directly */ | ||
| 721 | #define Py_NotImplemented (&_Py_NotImplementedStruct) | ||
| 722 | |||
| 723 | /* Rich comparison opcodes */ | ||
| 724 | #define Py_LT 0 | ||
| 725 | #define Py_LE 1 | ||
| 726 | #define Py_EQ 2 | ||
| 727 | #define Py_NE 3 | ||
| 728 | #define Py_GT 4 | ||
| 729 | #define Py_GE 5 | ||
| 730 | |||
| 731 | /* Maps Py_LT to Py_GT, ..., Py_GE to Py_LE. | ||
| 732 | * Defined in object.c. | ||
| 733 | */ | ||
| 734 | PyAPI_DATA(int) _Py_SwappedOp[]; | ||
| 735 | |||
| 736 | /* | ||
| 737 | Define staticforward and statichere for source compatibility with old | ||
| 738 | C extensions. | ||
| 739 | |||
| 740 | The staticforward define was needed to support certain broken C | ||
| 741 | compilers (notably SCO ODT 3.0, perhaps early AIX as well) botched the | ||
| 742 | static keyword when it was used with a forward declaration of a static | ||
| 743 | initialized structure. Standard C allows the forward declaration with | ||
| 744 | static, and we've decided to stop catering to broken C compilers. | ||
| 745 | (In fact, we expect that the compilers are all fixed eight years later.) | ||
| 746 | */ | ||
| 747 | |||
| 748 | #define staticforward static | ||
| 749 | #define statichere static | ||
| 750 | |||
| 751 | |||
| 752 | /* | ||
| 753 | More conventions | ||
| 754 | ================ | ||
| 755 | |||
| 756 | Argument Checking | ||
| 757 | ----------------- | ||
| 758 | |||
| 759 | Functions that take objects as arguments normally don't check for nil | ||
| 760 | arguments, but they do check the type of the argument, and return an | ||
| 761 | error if the function doesn't apply to the type. | ||
| 762 | |||
| 763 | Failure Modes | ||
| 764 | ------------- | ||
| 765 | |||
| 766 | Functions may fail for a variety of reasons, including running out of | ||
| 767 | memory. This is communicated to the caller in two ways: an error string | ||
| 768 | is set (see errors.h), and the function result differs: functions that | ||
| 769 | normally return a pointer return NULL for failure, functions returning | ||
| 770 | an integer return -1 (which could be a legal return value too!), and | ||
| 771 | other functions return 0 for success and -1 for failure. | ||
| 772 | Callers should always check for errors before using the result. If | ||
| 773 | an error was set, the caller must either explicitly clear it, or pass | ||
| 774 | the error on to its caller. | ||
| 775 | |||
| 776 | Reference Counts | ||
| 777 | ---------------- | ||
| 778 | |||
| 779 | It takes a while to get used to the proper usage of reference counts. | ||
| 780 | |||
| 781 | Functions that create an object set the reference count to 1; such new | ||
| 782 | objects must be stored somewhere or destroyed again with Py_DECREF(). | ||
| 783 | Some functions that 'store' objects, such as PyTuple_SetItem() and | ||
| 784 | PyList_SetItem(), | ||
| 785 | don't increment the reference count of the object, since the most | ||
| 786 | frequent use is to store a fresh object. Functions that 'retrieve' | ||
| 787 | objects, such as PyTuple_GetItem() and PyDict_GetItemString(), also | ||
| 788 | don't increment | ||
| 789 | the reference count, since most frequently the object is only looked at | ||
| 790 | quickly. Thus, to retrieve an object and store it again, the caller | ||
| 791 | must call Py_INCREF() explicitly. | ||
| 792 | |||
| 793 | NOTE: functions that 'consume' a reference count, like | ||
| 794 | PyList_SetItem(), consume the reference even if the object wasn't | ||
| 795 | successfully stored, to simplify error handling. | ||
| 796 | |||
| 797 | It seems attractive to make other functions that take an object as | ||
| 798 | argument consume a reference count; however, this may quickly get | ||
| 799 | confusing (even the current practice is already confusing). Consider | ||
| 800 | it carefully, it may save lots of calls to Py_INCREF() and Py_DECREF() at | ||
| 801 | times. | ||
| 802 | */ | ||
| 803 | |||
| 804 | |||
| 805 | /* Trashcan mechanism, thanks to Christian Tismer. | ||
| 806 | |||
| 807 | When deallocating a container object, it's possible to trigger an unbounded | ||
| 808 | chain of deallocations, as each Py_DECREF in turn drops the refcount on "the | ||
| 809 | next" object in the chain to 0. This can easily lead to stack faults, and | ||
| 810 | especially in threads (which typically have less stack space to work with). | ||
| 811 | |||
| 812 | A container object that participates in cyclic gc can avoid this by | ||
| 813 | bracketing the body of its tp_dealloc function with a pair of macros: | ||
| 814 | |||
| 815 | static void | ||
| 816 | mytype_dealloc(mytype *p) | ||
| 817 | { | ||
| 818 | ... declarations go here ... | ||
| 819 | |||
| 820 | PyObject_GC_UnTrack(p); // must untrack first | ||
| 821 | Py_TRASHCAN_SAFE_BEGIN(p) | ||
| 822 | ... The body of the deallocator goes here, including all calls ... | ||
| 823 | ... to Py_DECREF on contained objects. ... | ||
| 824 | Py_TRASHCAN_SAFE_END(p) | ||
| 825 | } | ||
| 826 | |||
| 827 | CAUTION: Never return from the middle of the body! If the body needs to | ||
| 828 | "get out early", put a label immediately before the Py_TRASHCAN_SAFE_END | ||
| 829 | call, and goto it. Else the call-depth counter (see below) will stay | ||
| 830 | above 0 forever, and the trashcan will never get emptied. | ||
| 831 | |||
| 832 | How it works: The BEGIN macro increments a call-depth counter. So long | ||
| 833 | as this counter is small, the body of the deallocator is run directly without | ||
| 834 | further ado. But if the counter gets large, it instead adds p to a list of | ||
| 835 | objects to be deallocated later, skips the body of the deallocator, and | ||
| 836 | resumes execution after the END macro. The tp_dealloc routine then returns | ||
| 837 | without deallocating anything (and so unbounded call-stack depth is avoided). | ||
| 838 | |||
| 839 | When the call stack finishes unwinding again, code generated by the END macro | ||
| 840 | notices this, and calls another routine to deallocate all the objects that | ||
| 841 | may have been added to the list of deferred deallocations. In effect, a | ||
| 842 | chain of N deallocations is broken into N / PyTrash_UNWIND_LEVEL pieces, | ||
| 843 | with the call stack never exceeding a depth of PyTrash_UNWIND_LEVEL. | ||
| 844 | */ | ||
| 845 | |||
| 846 | PyAPI_FUNC(void) _PyTrash_deposit_object(PyObject*); | ||
| 847 | PyAPI_FUNC(void) _PyTrash_destroy_chain(void); | ||
| 848 | PyAPI_DATA(int) _PyTrash_delete_nesting; | ||
| 849 | PyAPI_DATA(PyObject *) _PyTrash_delete_later; | ||
| 850 | |||
| 851 | #define PyTrash_UNWIND_LEVEL 50 | ||
| 852 | |||
| 853 | #define Py_TRASHCAN_SAFE_BEGIN(op) \ | ||
| 854 | if (_PyTrash_delete_nesting < PyTrash_UNWIND_LEVEL) { \ | ||
| 855 | ++_PyTrash_delete_nesting; | ||
| 856 | /* The body of the deallocator is here. */ | ||
| 857 | #define Py_TRASHCAN_SAFE_END(op) \ | ||
| 858 | --_PyTrash_delete_nesting; \ | ||
| 859 | if (_PyTrash_delete_later && _PyTrash_delete_nesting <= 0) \ | ||
| 860 | _PyTrash_destroy_chain(); \ | ||
| 861 | } \ | ||
| 862 | else \ | ||
| 863 | _PyTrash_deposit_object((PyObject*)op); | ||
| 864 | |||
| 865 | #ifdef __cplusplus | ||
| 866 | } | ||
| 867 | #endif | ||
| 868 | #endif /* !Py_OBJECT_H */ | ||
| @@ -0,0 +1,336 @@ | |||
| 1 | /* The PyObject_ memory family: high-level object memory interfaces. | ||
| 2 | See pymem.h for the low-level PyMem_ family. | ||
| 3 | */ | ||
| 4 | |||
| 5 | #ifndef Py_OBJIMPL_H | ||
| 6 | #define Py_OBJIMPL_H | ||
| 7 | |||
| 8 | #include "pymem.h" | ||
| 9 | |||
| 10 | #ifdef __cplusplus | ||
| 11 | extern "C" { | ||
| 12 | #endif | ||
| 13 | |||
| 14 | /* BEWARE: | ||
| 15 | |||
| 16 | Each interface exports both functions and macros. Extension modules should | ||
| 17 | use the functions, to ensure binary compatibility across Python versions. | ||
| 18 | Because the Python implementation is free to change internal details, and | ||
| 19 | the macros may (or may not) expose details for speed, if you do use the | ||
| 20 | macros you must recompile your extensions with each Python release. | ||
| 21 | |||
| 22 | Never mix calls to PyObject_ memory functions with calls to the platform | ||
| 23 | malloc/realloc/ calloc/free, or with calls to PyMem_. | ||
| 24 | */ | ||
| 25 | |||
| 26 | /* | ||
| 27 | Functions and macros for modules that implement new object types. | ||
| 28 | |||
| 29 | - PyObject_New(type, typeobj) allocates memory for a new object of the given | ||
| 30 | type, and initializes part of it. 'type' must be the C structure type used | ||
| 31 | to represent the object, and 'typeobj' the address of the corresponding | ||
| 32 | type object. Reference count and type pointer are filled in; the rest of | ||
| 33 | the bytes of the object are *undefined*! The resulting expression type is | ||
| 34 | 'type *'. The size of the object is determined by the tp_basicsize field | ||
| 35 | of the type object. | ||
| 36 | |||
| 37 | - PyObject_NewVar(type, typeobj, n) is similar but allocates a variable-size | ||
| 38 | object with room for n items. In addition to the refcount and type pointer | ||
| 39 | fields, this also fills in the ob_size field. | ||
| 40 | |||
| 41 | - PyObject_Del(op) releases the memory allocated for an object. It does not | ||
| 42 | run a destructor -- it only frees the memory. PyObject_Free is identical. | ||
| 43 | |||
| 44 | - PyObject_Init(op, typeobj) and PyObject_InitVar(op, typeobj, n) don't | ||
| 45 | allocate memory. Instead of a 'type' parameter, they take a pointer to a | ||
| 46 | new object (allocated by an arbitrary allocator), and initialize its object | ||
| 47 | header fields. | ||
| 48 | |||
| 49 | Note that objects created with PyObject_{New, NewVar} are allocated using the | ||
| 50 | specialized Python allocator (implemented in obmalloc.c), if WITH_PYMALLOC is | ||
| 51 | enabled. In addition, a special debugging allocator is used if PYMALLOC_DEBUG | ||
| 52 | is also #defined. | ||
| 53 | |||
| 54 | In case a specific form of memory management is needed (for example, if you | ||
| 55 | must use the platform malloc heap(s), or shared memory, or C++ local storage or | ||
| 56 | operator new), you must first allocate the object with your custom allocator, | ||
| 57 | then pass its pointer to PyObject_{Init, InitVar} for filling in its Python- | ||
| 58 | specific fields: reference count, type pointer, possibly others. You should | ||
| 59 | be aware that Python no control over these objects because they don't | ||
| 60 | cooperate with the Python memory manager. Such objects may not be eligible | ||
| 61 | for automatic garbage collection and you have to make sure that they are | ||
| 62 | released accordingly whenever their destructor gets called (cf. the specific | ||
| 63 | form of memory management you're using). | ||
| 64 | |||
| 65 | Unless you have specific memory management requirements, use | ||
| 66 | PyObject_{New, NewVar, Del}. | ||
| 67 | */ | ||
| 68 | |||
| 69 | /* | ||
| 70 | * Raw object memory interface | ||
| 71 | * =========================== | ||
| 72 | */ | ||
| 73 | |||
| 74 | /* Functions to call the same malloc/realloc/free as used by Python's | ||
| 75 | object allocator. If WITH_PYMALLOC is enabled, these may differ from | ||
| 76 | the platform malloc/realloc/free. The Python object allocator is | ||
| 77 | designed for fast, cache-conscious allocation of many "small" objects, | ||
| 78 | and with low hidden memory overhead. | ||
| 79 | |||
| 80 | PyObject_Malloc(0) returns a unique non-NULL pointer if possible. | ||
| 81 | |||
| 82 | PyObject_Realloc(NULL, n) acts like PyObject_Malloc(n). | ||
| 83 | PyObject_Realloc(p != NULL, 0) does not return NULL, or free the memory | ||
| 84 | at p. | ||
| 85 | |||
| 86 | Returned pointers must be checked for NULL explicitly; no action is | ||
| 87 | performed on failure other than to return NULL (no warning it printed, no | ||
| 88 | exception is set, etc). | ||
| 89 | |||
| 90 | For allocating objects, use PyObject_{New, NewVar} instead whenever | ||
| 91 | possible. The PyObject_{Malloc, Realloc, Free} family is exposed | ||
| 92 | so that you can exploit Python's small-block allocator for non-object | ||
| 93 | uses. If you must use these routines to allocate object memory, make sure | ||
| 94 | the object gets initialized via PyObject_{Init, InitVar} after obtaining | ||
| 95 | the raw memory. | ||
| 96 | */ | ||
| 97 | PyAPI_FUNC(void *) PyObject_Malloc(size_t); | ||
| 98 | PyAPI_FUNC(void *) PyObject_Realloc(void *, size_t); | ||
| 99 | PyAPI_FUNC(void) PyObject_Free(void *); | ||
| 100 | |||
| 101 | |||
| 102 | /* Macros */ | ||
| 103 | #ifdef WITH_PYMALLOC | ||
| 104 | #ifdef PYMALLOC_DEBUG /* WITH_PYMALLOC && PYMALLOC_DEBUG */ | ||
| 105 | PyAPI_FUNC(void *) _PyObject_DebugMalloc(size_t nbytes); | ||
| 106 | PyAPI_FUNC(void *) _PyObject_DebugRealloc(void *p, size_t nbytes); | ||
| 107 | PyAPI_FUNC(void) _PyObject_DebugFree(void *p); | ||
| 108 | PyAPI_FUNC(void) _PyObject_DebugDumpAddress(const void *p); | ||
| 109 | PyAPI_FUNC(void) _PyObject_DebugCheckAddress(const void *p); | ||
| 110 | PyAPI_FUNC(void) _PyObject_DebugMallocStats(void); | ||
| 111 | #define PyObject_MALLOC _PyObject_DebugMalloc | ||
| 112 | #define PyObject_Malloc _PyObject_DebugMalloc | ||
| 113 | #define PyObject_REALLOC _PyObject_DebugRealloc | ||
| 114 | #define PyObject_Realloc _PyObject_DebugRealloc | ||
| 115 | #define PyObject_FREE _PyObject_DebugFree | ||
| 116 | #define PyObject_Free _PyObject_DebugFree | ||
| 117 | |||
| 118 | #else /* WITH_PYMALLOC && ! PYMALLOC_DEBUG */ | ||
| 119 | #define PyObject_MALLOC PyObject_Malloc | ||
| 120 | #define PyObject_REALLOC PyObject_Realloc | ||
| 121 | #define PyObject_FREE PyObject_Free | ||
| 122 | #endif | ||
| 123 | |||
| 124 | #else /* ! WITH_PYMALLOC */ | ||
| 125 | #define PyObject_MALLOC PyMem_MALLOC | ||
| 126 | #define PyObject_REALLOC PyMem_REALLOC | ||
| 127 | #define PyObject_FREE PyMem_FREE | ||
| 128 | |||
| 129 | #endif /* WITH_PYMALLOC */ | ||
| 130 | |||
| 131 | #define PyObject_Del PyObject_Free | ||
| 132 | #define PyObject_DEL PyObject_FREE | ||
| 133 | |||
| 134 | /* for source compatibility with 2.2 */ | ||
| 135 | #define _PyObject_Del PyObject_Free | ||
| 136 | |||
| 137 | /* | ||
| 138 | * Generic object allocator interface | ||
| 139 | * ================================== | ||
| 140 | */ | ||
| 141 | |||
| 142 | /* Functions */ | ||
| 143 | PyAPI_FUNC(PyObject *) PyObject_Init(PyObject *, PyTypeObject *); | ||
| 144 | PyAPI_FUNC(PyVarObject *) PyObject_InitVar(PyVarObject *, | ||
| 145 | PyTypeObject *, Py_ssize_t); | ||
| 146 | PyAPI_FUNC(PyObject *) _PyObject_New(PyTypeObject *); | ||
| 147 | PyAPI_FUNC(PyVarObject *) _PyObject_NewVar(PyTypeObject *, Py_ssize_t); | ||
| 148 | |||
| 149 | #define PyObject_New(type, typeobj) \ | ||
| 150 | ( (type *) _PyObject_New(typeobj) ) | ||
| 151 | #define PyObject_NewVar(type, typeobj, n) \ | ||
| 152 | ( (type *) _PyObject_NewVar((typeobj), (n)) ) | ||
| 153 | |||
| 154 | /* Macros trading binary compatibility for speed. See also pymem.h. | ||
| 155 | Note that these macros expect non-NULL object pointers.*/ | ||
| 156 | #define PyObject_INIT(op, typeobj) \ | ||
| 157 | ( (op)->ob_type = (typeobj), _Py_NewReference((PyObject *)(op)), (op) ) | ||
| 158 | #define PyObject_INIT_VAR(op, typeobj, size) \ | ||
| 159 | ( (op)->ob_size = (size), PyObject_INIT((op), (typeobj)) ) | ||
| 160 | |||
| 161 | #define _PyObject_SIZE(typeobj) ( (typeobj)->tp_basicsize ) | ||
| 162 | |||
| 163 | /* _PyObject_VAR_SIZE returns the number of bytes (as size_t) allocated for a | ||
| 164 | vrbl-size object with nitems items, exclusive of gc overhead (if any). The | ||
| 165 | value is rounded up to the closest multiple of sizeof(void *), in order to | ||
| 166 | ensure that pointer fields at the end of the object are correctly aligned | ||
| 167 | for the platform (this is of special importance for subclasses of, e.g., | ||
| 168 | str or long, so that pointers can be stored after the embedded data). | ||
| 169 | |||
| 170 | Note that there's no memory wastage in doing this, as malloc has to | ||
| 171 | return (at worst) pointer-aligned memory anyway. | ||
| 172 | */ | ||
| 173 | #if ((SIZEOF_VOID_P - 1) & SIZEOF_VOID_P) != 0 | ||
| 174 | # error "_PyObject_VAR_SIZE requires SIZEOF_VOID_P be a power of 2" | ||
| 175 | #endif | ||
| 176 | |||
| 177 | #define _PyObject_VAR_SIZE(typeobj, nitems) \ | ||
| 178 | (size_t) \ | ||
| 179 | ( ( (typeobj)->tp_basicsize + \ | ||
| 180 | (nitems)*(typeobj)->tp_itemsize + \ | ||
| 181 | (SIZEOF_VOID_P - 1) \ | ||
| 182 | ) & ~(SIZEOF_VOID_P - 1) \ | ||
| 183 | ) | ||
| 184 | |||
| 185 | #define PyObject_NEW(type, typeobj) \ | ||
| 186 | ( (type *) PyObject_Init( \ | ||
| 187 | (PyObject *) PyObject_MALLOC( _PyObject_SIZE(typeobj) ), (typeobj)) ) | ||
| 188 | |||
| 189 | #define PyObject_NEW_VAR(type, typeobj, n) \ | ||
| 190 | ( (type *) PyObject_InitVar( \ | ||
| 191 | (PyVarObject *) PyObject_MALLOC(_PyObject_VAR_SIZE((typeobj),(n)) ),\ | ||
| 192 | (typeobj), (n)) ) | ||
| 193 | |||
| 194 | /* This example code implements an object constructor with a custom | ||
| 195 | allocator, where PyObject_New is inlined, and shows the important | ||
| 196 | distinction between two steps (at least): | ||
| 197 | 1) the actual allocation of the object storage; | ||
| 198 | 2) the initialization of the Python specific fields | ||
| 199 | in this storage with PyObject_{Init, InitVar}. | ||
| 200 | |||
| 201 | PyObject * | ||
| 202 | YourObject_New(...) | ||
| 203 | { | ||
| 204 | PyObject *op; | ||
| 205 | |||
| 206 | op = (PyObject *) Your_Allocator(_PyObject_SIZE(YourTypeStruct)); | ||
| 207 | if (op == NULL) | ||
| 208 | return PyErr_NoMemory(); | ||
| 209 | |||
| 210 | PyObject_Init(op, &YourTypeStruct); | ||
| 211 | |||
| 212 | op->ob_field = value; | ||
| 213 | ... | ||
| 214 | return op; | ||
| 215 | } | ||
| 216 | |||
| 217 | Note that in C++, the use of the new operator usually implies that | ||
| 218 | the 1st step is performed automatically for you, so in a C++ class | ||
| 219 | constructor you would start directly with PyObject_Init/InitVar | ||
| 220 | */ | ||
| 221 | |||
| 222 | /* | ||
| 223 | * Garbage Collection Support | ||
| 224 | * ========================== | ||
| 225 | */ | ||
| 226 | |||
| 227 | /* C equivalent of gc.collect(). */ | ||
| 228 | PyAPI_FUNC(Py_ssize_t) PyGC_Collect(void); | ||
| 229 | |||
| 230 | /* Test if a type has a GC head */ | ||
| 231 | #define PyType_IS_GC(t) PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC) | ||
| 232 | |||
| 233 | /* Test if an object has a GC head */ | ||
| 234 | #define PyObject_IS_GC(o) (PyType_IS_GC((o)->ob_type) && \ | ||
| 235 | ((o)->ob_type->tp_is_gc == NULL || (o)->ob_type->tp_is_gc(o))) | ||
| 236 | |||
| 237 | PyAPI_FUNC(PyVarObject *) _PyObject_GC_Resize(PyVarObject *, Py_ssize_t); | ||
| 238 | #define PyObject_GC_Resize(type, op, n) \ | ||
| 239 | ( (type *) _PyObject_GC_Resize((PyVarObject *)(op), (n)) ) | ||
| 240 | |||
| 241 | /* for source compatibility with 2.2 */ | ||
| 242 | #define _PyObject_GC_Del PyObject_GC_Del | ||
| 243 | |||
| 244 | /* GC information is stored BEFORE the object structure. */ | ||
| 245 | typedef union _gc_head { | ||
| 246 | struct { | ||
| 247 | union _gc_head *gc_next; | ||
| 248 | union _gc_head *gc_prev; | ||
| 249 | Py_ssize_t gc_refs; | ||
| 250 | } gc; | ||
| 251 | long double dummy; /* force worst-case alignment */ | ||
| 252 | } PyGC_Head; | ||
| 253 | |||
| 254 | extern PyGC_Head *_PyGC_generation0; | ||
| 255 | |||
| 256 | #define _Py_AS_GC(o) ((PyGC_Head *)(o)-1) | ||
| 257 | |||
| 258 | #define _PyGC_REFS_UNTRACKED (-2) | ||
| 259 | #define _PyGC_REFS_REACHABLE (-3) | ||
| 260 | #define _PyGC_REFS_TENTATIVELY_UNREACHABLE (-4) | ||
| 261 | |||
| 262 | /* Tell the GC to track this object. NB: While the object is tracked the | ||
| 263 | * collector it must be safe to call the ob_traverse method. */ | ||
| 264 | #define _PyObject_GC_TRACK(o) do { \ | ||
| 265 | PyGC_Head *g = _Py_AS_GC(o); \ | ||
| 266 | if (g->gc.gc_refs != _PyGC_REFS_UNTRACKED) \ | ||
| 267 | Py_FatalError("GC object already tracked"); \ | ||
| 268 | g->gc.gc_refs = _PyGC_REFS_REACHABLE; \ | ||
| 269 | g->gc.gc_next = _PyGC_generation0; \ | ||
| 270 | g->gc.gc_prev = _PyGC_generation0->gc.gc_prev; \ | ||
| 271 | g->gc.gc_prev->gc.gc_next = g; \ | ||
| 272 | _PyGC_generation0->gc.gc_prev = g; \ | ||
| 273 | } while (0); | ||
| 274 | |||
| 275 | /* Tell the GC to stop tracking this object. | ||
| 276 | * gc_next doesn't need to be set to NULL, but doing so is a good | ||
| 277 | * way to provoke memory errors if calling code is confused. | ||
| 278 | */ | ||
| 279 | #define _PyObject_GC_UNTRACK(o) do { \ | ||
| 280 | PyGC_Head *g = _Py_AS_GC(o); \ | ||
| 281 | assert(g->gc.gc_refs != _PyGC_REFS_UNTRACKED); \ | ||
| 282 | g->gc.gc_refs = _PyGC_REFS_UNTRACKED; \ | ||
| 283 | g->gc.gc_prev->gc.gc_next = g->gc.gc_next; \ | ||
| 284 | g->gc.gc_next->gc.gc_prev = g->gc.gc_prev; \ | ||
| 285 | g->gc.gc_next = NULL; \ | ||
| 286 | } while (0); | ||
| 287 | |||
| 288 | PyAPI_FUNC(PyObject *) _PyObject_GC_Malloc(size_t); | ||
| 289 | PyAPI_FUNC(PyObject *) _PyObject_GC_New(PyTypeObject *); | ||
| 290 | PyAPI_FUNC(PyVarObject *) _PyObject_GC_NewVar(PyTypeObject *, Py_ssize_t); | ||
| 291 | PyAPI_FUNC(void) PyObject_GC_Track(void *); | ||
| 292 | PyAPI_FUNC(void) PyObject_GC_UnTrack(void *); | ||
| 293 | PyAPI_FUNC(void) PyObject_GC_Del(void *); | ||
| 294 | |||
| 295 | #define PyObject_GC_New(type, typeobj) \ | ||
| 296 | ( (type *) _PyObject_GC_New(typeobj) ) | ||
| 297 | #define PyObject_GC_NewVar(type, typeobj, n) \ | ||
| 298 | ( (type *) _PyObject_GC_NewVar((typeobj), (n)) ) | ||
| 299 | |||
| 300 | |||
| 301 | /* Utility macro to help write tp_traverse functions. | ||
| 302 | * To use this macro, the tp_traverse function must name its arguments | ||
| 303 | * "visit" and "arg". This is intended to keep tp_traverse functions | ||
| 304 | * looking as much alike as possible. | ||
| 305 | */ | ||
| 306 | #define Py_VISIT(op) \ | ||
| 307 | do { \ | ||
| 308 | if (op) { \ | ||
| 309 | int vret = visit((PyObject *)(op), arg); \ | ||
| 310 | if (vret) \ | ||
| 311 | return vret; \ | ||
| 312 | } \ | ||
| 313 | } while (0) | ||
| 314 | |||
| 315 | /* This is here for the sake of backwards compatibility. Extensions that | ||
| 316 | * use the old GC API will still compile but the objects will not be | ||
| 317 | * tracked by the GC. */ | ||
| 318 | #define PyGC_HEAD_SIZE 0 | ||
| 319 | #define PyObject_GC_Init(op) | ||
| 320 | #define PyObject_GC_Fini(op) | ||
| 321 | #define PyObject_AS_GC(op) (op) | ||
| 322 | #define PyObject_FROM_GC(op) (op) | ||
| 323 | |||
| 324 | |||
| 325 | /* Test if a type supports weak references */ | ||
| 326 | #define PyType_SUPPORTS_WEAKREFS(t) \ | ||
| 327 | (PyType_HasFeature((t), Py_TPFLAGS_HAVE_WEAKREFS) \ | ||
| 328 | && ((t)->tp_weaklistoffset > 0)) | ||
| 329 | |||
| 330 | #define PyObject_GET_WEAKREFS_LISTPTR(o) \ | ||
| 331 | ((PyObject **) (((char *) (o)) + (o)->ob_type->tp_weaklistoffset)) | ||
| 332 | |||
| 333 | #ifdef __cplusplus | ||
| 334 | } | ||
| 335 | #endif | ||
| 336 | #endif /* !Py_OBJIMPL_H */ | ||
| @@ -0,0 +1,152 @@ | |||
| 1 | #ifndef Py_OPCODE_H | ||
| 2 | #define Py_OPCODE_H | ||
| 3 | #ifdef __cplusplus | ||
| 4 | extern "C" { | ||
| 5 | #endif | ||
| 6 | |||
| 7 | |||
| 8 | /* Instruction opcodes for compiled code */ | ||
| 9 | |||
| 10 | #define STOP_CODE 0 | ||
| 11 | #define POP_TOP 1 | ||
| 12 | #define ROT_TWO 2 | ||
| 13 | #define ROT_THREE 3 | ||
| 14 | #define DUP_TOP 4 | ||
| 15 | #define ROT_FOUR 5 | ||
| 16 | #define NOP 9 | ||
| 17 | |||
| 18 | #define UNARY_POSITIVE 10 | ||
| 19 | #define UNARY_NEGATIVE 11 | ||
| 20 | #define UNARY_NOT 12 | ||
| 21 | #define UNARY_CONVERT 13 | ||
| 22 | |||
| 23 | #define UNARY_INVERT 15 | ||
| 24 | |||
| 25 | #define LIST_APPEND 18 | ||
| 26 | #define BINARY_POWER 19 | ||
| 27 | |||
| 28 | #define BINARY_MULTIPLY 20 | ||
| 29 | #define BINARY_DIVIDE 21 | ||
| 30 | #define BINARY_MODULO 22 | ||
| 31 | #define BINARY_ADD 23 | ||
| 32 | #define BINARY_SUBTRACT 24 | ||
| 33 | #define BINARY_SUBSCR 25 | ||
| 34 | #define BINARY_FLOOR_DIVIDE 26 | ||
| 35 | #define BINARY_TRUE_DIVIDE 27 | ||
| 36 | #define INPLACE_FLOOR_DIVIDE 28 | ||
| 37 | #define INPLACE_TRUE_DIVIDE 29 | ||
| 38 | |||
| 39 | #define SLICE 30 | ||
| 40 | /* Also uses 31-33 */ | ||
| 41 | |||
| 42 | #define STORE_SLICE 40 | ||
| 43 | /* Also uses 41-43 */ | ||
| 44 | |||
| 45 | #define DELETE_SLICE 50 | ||
| 46 | /* Also uses 51-53 */ | ||
| 47 | |||
| 48 | #define INPLACE_ADD 55 | ||
| 49 | #define INPLACE_SUBTRACT 56 | ||
| 50 | #define INPLACE_MULTIPLY 57 | ||
| 51 | #define INPLACE_DIVIDE 58 | ||
| 52 | #define INPLACE_MODULO 59 | ||
| 53 | #define STORE_SUBSCR 60 | ||
| 54 | #define DELETE_SUBSCR 61 | ||
| 55 | |||
| 56 | #define BINARY_LSHIFT 62 | ||
| 57 | #define BINARY_RSHIFT 63 | ||
| 58 | #define BINARY_AND 64 | ||
| 59 | #define BINARY_XOR 65 | ||
| 60 | #define BINARY_OR 66 | ||
| 61 | #define INPLACE_POWER 67 | ||
| 62 | #define GET_ITER 68 | ||
| 63 | |||
| 64 | #define PRINT_EXPR 70 | ||
| 65 | #define PRINT_ITEM 71 | ||
| 66 | #define PRINT_NEWLINE 72 | ||
| 67 | #define PRINT_ITEM_TO 73 | ||
| 68 | #define PRINT_NEWLINE_TO 74 | ||
| 69 | #define INPLACE_LSHIFT 75 | ||
| 70 | #define INPLACE_RSHIFT 76 | ||
| 71 | #define INPLACE_AND 77 | ||
| 72 | #define INPLACE_XOR 78 | ||
| 73 | #define INPLACE_OR 79 | ||
| 74 | #define BREAK_LOOP 80 | ||
| 75 | #define WITH_CLEANUP 81 | ||
| 76 | #define LOAD_LOCALS 82 | ||
| 77 | #define RETURN_VALUE 83 | ||
| 78 | #define IMPORT_STAR 84 | ||
| 79 | #define EXEC_STMT 85 | ||
| 80 | #define YIELD_VALUE 86 | ||
| 81 | #define POP_BLOCK 87 | ||
| 82 | #define END_FINALLY 88 | ||
| 83 | #define BUILD_CLASS 89 | ||
| 84 | |||
| 85 | #define HAVE_ARGUMENT 90 /* Opcodes from here have an argument: */ | ||
| 86 | |||
| 87 | #define STORE_NAME 90 /* Index in name list */ | ||
| 88 | #define DELETE_NAME 91 /* "" */ | ||
| 89 | #define UNPACK_SEQUENCE 92 /* Number of sequence items */ | ||
| 90 | #define FOR_ITER 93 | ||
| 91 | |||
| 92 | #define STORE_ATTR 95 /* Index in name list */ | ||
| 93 | #define DELETE_ATTR 96 /* "" */ | ||
| 94 | #define STORE_GLOBAL 97 /* "" */ | ||
| 95 | #define DELETE_GLOBAL 98 /* "" */ | ||
| 96 | #define DUP_TOPX 99 /* number of items to duplicate */ | ||
| 97 | #define LOAD_CONST 100 /* Index in const list */ | ||
| 98 | #define LOAD_NAME 101 /* Index in name list */ | ||
| 99 | #define BUILD_TUPLE 102 /* Number of tuple items */ | ||
| 100 | #define BUILD_LIST 103 /* Number of list items */ | ||
| 101 | #define BUILD_MAP 104 /* Always zero for now */ | ||
| 102 | #define LOAD_ATTR 105 /* Index in name list */ | ||
| 103 | #define COMPARE_OP 106 /* Comparison operator */ | ||
| 104 | #define IMPORT_NAME 107 /* Index in name list */ | ||
| 105 | #define IMPORT_FROM 108 /* Index in name list */ | ||
| 106 | |||
| 107 | #define JUMP_FORWARD 110 /* Number of bytes to skip */ | ||
| 108 | #define JUMP_IF_FALSE 111 /* "" */ | ||
| 109 | #define JUMP_IF_TRUE 112 /* "" */ | ||
| 110 | #define JUMP_ABSOLUTE 113 /* Target byte offset from beginning of code */ | ||
| 111 | |||
| 112 | #define LOAD_GLOBAL 116 /* Index in name list */ | ||
| 113 | |||
| 114 | #define CONTINUE_LOOP 119 /* Start of loop (absolute) */ | ||
| 115 | #define SETUP_LOOP 120 /* Target address (absolute) */ | ||
| 116 | #define SETUP_EXCEPT 121 /* "" */ | ||
| 117 | #define SETUP_FINALLY 122 /* "" */ | ||
| 118 | |||
| 119 | #define LOAD_FAST 124 /* Local variable number */ | ||
| 120 | #define STORE_FAST 125 /* Local variable number */ | ||
| 121 | #define DELETE_FAST 126 /* Local variable number */ | ||
| 122 | |||
| 123 | #define RAISE_VARARGS 130 /* Number of raise arguments (1, 2 or 3) */ | ||
| 124 | /* CALL_FUNCTION_XXX opcodes defined below depend on this definition */ | ||
| 125 | #define CALL_FUNCTION 131 /* #args + (#kwargs<<8) */ | ||
| 126 | #define MAKE_FUNCTION 132 /* #defaults */ | ||
| 127 | #define BUILD_SLICE 133 /* Number of items */ | ||
| 128 | |||
| 129 | #define MAKE_CLOSURE 134 /* #free vars */ | ||
| 130 | #define LOAD_CLOSURE 135 /* Load free variable from closure */ | ||
| 131 | #define LOAD_DEREF 136 /* Load and dereference from closure cell */ | ||
| 132 | #define STORE_DEREF 137 /* Store into cell */ | ||
| 133 | |||
| 134 | /* The next 3 opcodes must be contiguous and satisfy | ||
| 135 | (CALL_FUNCTION_VAR - CALL_FUNCTION) & 3 == 1 */ | ||
| 136 | #define CALL_FUNCTION_VAR 140 /* #args + (#kwargs<<8) */ | ||
| 137 | #define CALL_FUNCTION_KW 141 /* #args + (#kwargs<<8) */ | ||
| 138 | #define CALL_FUNCTION_VAR_KW 142 /* #args + (#kwargs<<8) */ | ||
| 139 | |||
| 140 | /* Support for opargs more than 16 bits long */ | ||
| 141 | #define EXTENDED_ARG 143 | ||
| 142 | |||
| 143 | |||
| 144 | 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, | ||
| 145 | PyCmp_IN, PyCmp_NOT_IN, PyCmp_IS, PyCmp_IS_NOT, PyCmp_EXC_MATCH, PyCmp_BAD}; | ||
| 146 | |||
| 147 | #define HAS_ARG(op) ((op) >= HAVE_ARGUMENT) | ||
| 148 | |||
| 149 | #ifdef __cplusplus | ||
| 150 | } | ||
| 151 | #endif | ||
| 152 | #endif /* !Py_OPCODE_H */ | ||
| @@ -0,0 +1,55 @@ | |||
| 1 | #ifndef Py_OSDEFS_H | ||
| 2 | #define Py_OSDEFS_H | ||
| 3 | #ifdef __cplusplus | ||
| 4 | extern "C" { | ||
| 5 | #endif | ||
| 6 | |||
| 7 | |||
| 8 | /* Operating system dependencies */ | ||
| 9 | |||
| 10 | /* Mod by chrish: QNX has WATCOM, but isn't DOS */ | ||
| 11 | #if !defined(__QNX__) | ||
| 12 | #if defined(MS_WINDOWS) || defined(__BORLANDC__) || defined(__WATCOMC__) || defined(__DJGPP__) || defined(PYOS_OS2) | ||
| 13 | #if defined(PYOS_OS2) && defined(PYCC_GCC) | ||
| 14 | #define MAXPATHLEN 260 | ||
| 15 | #define SEP '/' | ||
| 16 | #define ALTSEP '\\' | ||
| 17 | #else | ||
| 18 | #define SEP '\\' | ||
| 19 | #define ALTSEP '/' | ||
| 20 | #define MAXPATHLEN 256 | ||
| 21 | #endif | ||
| 22 | #define DELIM ';' | ||
| 23 | #endif | ||
| 24 | #endif | ||
| 25 | |||
| 26 | #ifdef RISCOS | ||
| 27 | #define SEP '.' | ||
| 28 | #define MAXPATHLEN 256 | ||
| 29 | #define DELIM ',' | ||
| 30 | #endif | ||
| 31 | |||
| 32 | |||
| 33 | /* Filename separator */ | ||
| 34 | #ifndef SEP | ||
| 35 | #define SEP '/' | ||
| 36 | #endif | ||
| 37 | |||
| 38 | /* Max pathname length */ | ||
| 39 | #ifndef MAXPATHLEN | ||
| 40 | #if defined(PATH_MAX) && PATH_MAX > 1024 | ||
| 41 | #define MAXPATHLEN PATH_MAX | ||
| 42 | #else | ||
| 43 | #define MAXPATHLEN 1024 | ||
| 44 | #endif | ||
| 45 | #endif | ||
| 46 | |||
| 47 | /* Search path entry delimiter */ | ||
| 48 | #ifndef DELIM | ||
| 49 | #define DELIM ':' | ||
| 50 | #endif | ||
| 51 | |||
| 52 | #ifdef __cplusplus | ||
| 53 | } | ||
| 54 | #endif | ||
| 55 | #endif /* !Py_OSDEFS_H */ | ||
| @@ -0,0 +1,50 @@ | |||
| 1 | |||
| 2 | /* Parser-tokenizer link interface */ | ||
| 3 | |||
| 4 | #ifndef Py_PARSETOK_H | ||
| 5 | #define Py_PARSETOK_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | typedef struct { | ||
| 11 | int error; | ||
| 12 | const char *filename; | ||
| 13 | int lineno; | ||
| 14 | int offset; | ||
| 15 | char *text; | ||
| 16 | int token; | ||
| 17 | int expected; | ||
| 18 | } perrdetail; | ||
| 19 | |||
| 20 | #if 0 | ||
| 21 | #define PyPARSE_YIELD_IS_KEYWORD 0x0001 | ||
| 22 | #endif | ||
| 23 | |||
| 24 | #define PyPARSE_DONT_IMPLY_DEDENT 0x0002 | ||
| 25 | |||
| 26 | #define PyPARSE_WITH_IS_KEYWORD 0x0003 | ||
| 27 | |||
| 28 | PyAPI_FUNC(node *) PyParser_ParseString(const char *, grammar *, int, | ||
| 29 | perrdetail *); | ||
| 30 | PyAPI_FUNC(node *) PyParser_ParseFile (FILE *, const char *, grammar *, int, | ||
| 31 | char *, char *, perrdetail *); | ||
| 32 | |||
| 33 | PyAPI_FUNC(node *) PyParser_ParseStringFlags(const char *, grammar *, int, | ||
| 34 | perrdetail *, int); | ||
| 35 | PyAPI_FUNC(node *) PyParser_ParseFileFlags(FILE *, const char *, grammar *, | ||
| 36 | int, char *, char *, | ||
| 37 | perrdetail *, int); | ||
| 38 | |||
| 39 | PyAPI_FUNC(node *) PyParser_ParseStringFlagsFilename(const char *, | ||
| 40 | const char *, | ||
| 41 | grammar *, int, | ||
| 42 | perrdetail *, int); | ||
| 43 | |||
| 44 | /* Note that he following function is defined in pythonrun.c not parsetok.c. */ | ||
| 45 | PyAPI_FUNC(void) PyParser_SetError(perrdetail *); | ||
| 46 | |||
| 47 | #ifdef __cplusplus | ||
| 48 | } | ||
| 49 | #endif | ||
| 50 | #endif /* !Py_PARSETOK_H */ | ||
| @@ -0,0 +1,40 @@ | |||
| 1 | |||
| 2 | /* Newfangled version identification scheme. | ||
| 3 | |||
| 4 | This scheme was added in Python 1.5.2b2; before that time, only PATCHLEVEL | ||
| 5 | was available. To test for presence of the scheme, test for | ||
| 6 | defined(PY_MAJOR_VERSION). | ||
| 7 | |||
| 8 | When the major or minor version changes, the VERSION variable in | ||
| 9 | configure.in must also be changed. | ||
| 10 | |||
| 11 | There is also (independent) API version information in modsupport.h. | ||
| 12 | */ | ||
| 13 | |||
| 14 | /* Values for PY_RELEASE_LEVEL */ | ||
| 15 | #define PY_RELEASE_LEVEL_ALPHA 0xA | ||
| 16 | #define PY_RELEASE_LEVEL_BETA 0xB | ||
| 17 | #define PY_RELEASE_LEVEL_GAMMA 0xC /* For release candidates */ | ||
| 18 | #define PY_RELEASE_LEVEL_FINAL 0xF /* Serial should be 0 here */ | ||
| 19 | /* Higher for patch releases */ | ||
| 20 | |||
| 21 | /* Version parsed out into numeric values */ | ||
| 22 | #define PY_MAJOR_VERSION 2 | ||
| 23 | #define PY_MINOR_VERSION 5 | ||
| 24 | #define PY_MICRO_VERSION 1 | ||
| 25 | #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL | ||
| 26 | #define PY_RELEASE_SERIAL 0 | ||
| 27 | |||
| 28 | /* Version as a string */ | ||
| 29 | #define PY_VERSION "2.5.1" | ||
| 30 | |||
| 31 | /* Subversion Revision number of this file (not of the repository) */ | ||
| 32 | #define PY_PATCHLEVEL_REVISION "$Revision: 54863 $" | ||
| 33 | |||
| 34 | /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. | ||
| 35 | Use this for numeric comparisons, e.g. #if PY_VERSION_HEX >= ... */ | ||
| 36 | #define PY_VERSION_HEX ((PY_MAJOR_VERSION << 24) | \ | ||
| 37 | (PY_MINOR_VERSION << 16) | \ | ||
| 38 | (PY_MICRO_VERSION << 8) | \ | ||
| 39 | (PY_RELEASE_LEVEL << 4) | \ | ||
| 40 | (PY_RELEASE_SERIAL << 0)) | ||
| @@ -0,0 +1,18 @@ | |||
| 1 | #ifndef Py_PGEN_H | ||
| 2 | #define Py_PGEN_H | ||
| 3 | #ifdef __cplusplus | ||
| 4 | extern "C" { | ||
| 5 | #endif | ||
| 6 | |||
| 7 | |||
| 8 | /* Parser generator interface */ | ||
| 9 | |||
| 10 | extern grammar *meta_grammar(void); | ||
| 11 | |||
| 12 | struct _node; | ||
| 13 | extern grammar *pgen(struct _node *); | ||
| 14 | |||
| 15 | #ifdef __cplusplus | ||
| 16 | } | ||
| 17 | #endif | ||
| 18 | #endif /* !Py_PGEN_H */ | ||
| @@ -0,0 +1,42 @@ | |||
| 1 | #ifndef Py_PGENHEADERS_H | ||
| 2 | #define Py_PGENHEADERS_H | ||
| 3 | #ifdef __cplusplus | ||
| 4 | extern "C" { | ||
| 5 | #endif | ||
| 6 | |||
| 7 | |||
| 8 | /* Include files and extern declarations used by most of the parser. */ | ||
| 9 | |||
| 10 | #include "Python.h" | ||
| 11 | |||
| 12 | PyAPI_FUNC(void) PySys_WriteStdout(const char *format, ...) | ||
| 13 | Py_GCC_ATTRIBUTE((format(printf, 1, 2))); | ||
| 14 | PyAPI_FUNC(void) PySys_WriteStderr(const char *format, ...) | ||
| 15 | Py_GCC_ATTRIBUTE((format(printf, 1, 2))); | ||
| 16 | |||
| 17 | #define addarc _Py_addarc | ||
| 18 | #define addbit _Py_addbit | ||
| 19 | #define adddfa _Py_adddfa | ||
| 20 | #define addfirstsets _Py_addfirstsets | ||
| 21 | #define addlabel _Py_addlabel | ||
| 22 | #define addstate _Py_addstate | ||
| 23 | #define delbitset _Py_delbitset | ||
| 24 | #define dumptree _Py_dumptree | ||
| 25 | #define findlabel _Py_findlabel | ||
| 26 | #define mergebitset _Py_mergebitset | ||
| 27 | #define meta_grammar _Py_meta_grammar | ||
| 28 | #define newbitset _Py_newbitset | ||
| 29 | #define newgrammar _Py_newgrammar | ||
| 30 | #define pgen _Py_pgen | ||
| 31 | #define printgrammar _Py_printgrammar | ||
| 32 | #define printnonterminals _Py_printnonterminals | ||
| 33 | #define printtree _Py_printtree | ||
| 34 | #define samebitset _Py_samebitset | ||
| 35 | #define showtree _Py_showtree | ||
| 36 | #define tok_dump _Py_tok_dump | ||
| 37 | #define translatelabels _Py_translatelabels | ||
| 38 | |||
| 39 | #ifdef __cplusplus | ||
| 40 | } | ||
| 41 | #endif | ||
| 42 | #endif /* !Py_PGENHEADERS_H */ | ||
| @@ -0,0 +1,176 @@ | |||
| 1 | |||
| 2 | #ifndef Py_CURSES_H | ||
| 3 | #define Py_CURSES_H | ||
| 4 | |||
| 5 | #ifdef __APPLE__ | ||
| 6 | /* | ||
| 7 | ** On Mac OS X 10.2 [n]curses.h and stdlib.h use different guards | ||
| 8 | ** against multiple definition of wchar_t. | ||
| 9 | */ | ||
| 10 | #ifdef _BSD_WCHAR_T_DEFINED_ | ||
| 11 | #define _WCHAR_T | ||
| 12 | #endif | ||
| 13 | #endif | ||
| 14 | |||
| 15 | #ifdef __FreeBSD__ | ||
| 16 | /* | ||
| 17 | ** On FreeBSD, [n]curses.h and stdlib.h/wchar.h use different guards | ||
| 18 | ** against multiple definition of wchar_t and wint_t. | ||
| 19 | */ | ||
| 20 | #ifdef _XOPEN_SOURCE_EXTENDED | ||
| 21 | #ifndef __FreeBSD_version | ||
| 22 | #include <osreldate.h> | ||
| 23 | #endif | ||
| 24 | #if __FreeBSD_version >= 500000 | ||
| 25 | #ifndef __wchar_t | ||
| 26 | #define __wchar_t | ||
| 27 | #endif | ||
| 28 | #ifndef __wint_t | ||
| 29 | #define __wint_t | ||
| 30 | #endif | ||
| 31 | #else | ||
| 32 | #ifndef _WCHAR_T | ||
| 33 | #define _WCHAR_T | ||
| 34 | #endif | ||
| 35 | #ifndef _WINT_T | ||
| 36 | #define _WINT_T | ||
| 37 | #endif | ||
| 38 | #endif | ||
| 39 | #endif | ||
| 40 | #endif | ||
| 41 | |||
| 42 | #ifdef HAVE_NCURSES_H | ||
| 43 | #include <ncurses.h> | ||
| 44 | #else | ||
| 45 | #include <curses.h> | ||
| 46 | #ifdef HAVE_TERM_H | ||
| 47 | /* for tigetstr, which is not declared in SysV curses */ | ||
| 48 | #include <term.h> | ||
| 49 | #endif | ||
| 50 | #endif | ||
| 51 | |||
| 52 | #ifdef HAVE_NCURSES_H | ||
| 53 | /* configure was checking <curses.h>, but we will | ||
| 54 | use <ncurses.h>, which has all these features. */ | ||
| 55 | #ifndef WINDOW_HAS_FLAGS | ||
| 56 | #define WINDOW_HAS_FLAGS 1 | ||
| 57 | #endif | ||
| 58 | #ifndef MVWDELCH_IS_EXPRESSION | ||
| 59 | #define MVWDELCH_IS_EXPRESSION 1 | ||
| 60 | #endif | ||
| 61 | #endif | ||
| 62 | |||
| 63 | #ifdef __cplusplus | ||
| 64 | extern "C" { | ||
| 65 | #endif | ||
| 66 | |||
| 67 | #define PyCurses_API_pointers 4 | ||
| 68 | |||
| 69 | /* Type declarations */ | ||
| 70 | |||
| 71 | typedef struct { | ||
| 72 | PyObject_HEAD | ||
| 73 | WINDOW *win; | ||
| 74 | } PyCursesWindowObject; | ||
| 75 | |||
| 76 | #define PyCursesWindow_Check(v) ((v)->ob_type == &PyCursesWindow_Type) | ||
| 77 | |||
| 78 | #ifdef CURSES_MODULE | ||
| 79 | /* This section is used when compiling _cursesmodule.c */ | ||
| 80 | |||
| 81 | #else | ||
| 82 | /* This section is used in modules that use the _cursesmodule API */ | ||
| 83 | |||
| 84 | static void **PyCurses_API; | ||
| 85 | |||
| 86 | #define PyCursesWindow_Type (*(PyTypeObject *) PyCurses_API[0]) | ||
| 87 | #define PyCursesSetupTermCalled {if (! ((int (*)(void))PyCurses_API[1]) () ) return NULL;} | ||
| 88 | #define PyCursesInitialised {if (! ((int (*)(void))PyCurses_API[2]) () ) return NULL;} | ||
| 89 | #define PyCursesInitialisedColor {if (! ((int (*)(void))PyCurses_API[3]) () ) return NULL;} | ||
| 90 | |||
| 91 | #define import_curses() \ | ||
| 92 | { \ | ||
| 93 | PyObject *module = PyImport_ImportModule("_curses"); \ | ||
| 94 | if (module != NULL) { \ | ||
| 95 | PyObject *module_dict = PyModule_GetDict(module); \ | ||
| 96 | PyObject *c_api_object = PyDict_GetItemString(module_dict, "_C_API"); \ | ||
| 97 | if (PyCObject_Check(c_api_object)) { \ | ||
| 98 | PyCurses_API = (void **)PyCObject_AsVoidPtr(c_api_object); \ | ||
| 99 | } \ | ||
| 100 | } \ | ||
| 101 | } | ||
| 102 | #endif | ||
| 103 | |||
| 104 | /* general error messages */ | ||
| 105 | static char *catchall_ERR = "curses function returned ERR"; | ||
| 106 | static char *catchall_NULL = "curses function returned NULL"; | ||
| 107 | |||
| 108 | /* Function Prototype Macros - They are ugly but very, very useful. ;-) | ||
| 109 | |||
| 110 | X - function name | ||
| 111 | TYPE - parameter Type | ||
| 112 | ERGSTR - format string for construction of the return value | ||
| 113 | PARSESTR - format string for argument parsing | ||
| 114 | */ | ||
| 115 | |||
| 116 | #define NoArgNoReturnFunction(X) \ | ||
| 117 | static PyObject *PyCurses_ ## X (PyObject *self) \ | ||
| 118 | { \ | ||
| 119 | PyCursesInitialised \ | ||
| 120 | return PyCursesCheckERR(X(), # X); } | ||
| 121 | |||
| 122 | #define NoArgOrFlagNoReturnFunction(X) \ | ||
| 123 | static PyObject *PyCurses_ ## X (PyObject *self, PyObject *args) \ | ||
| 124 | { \ | ||
| 125 | int flag = 0; \ | ||
| 126 | PyCursesInitialised \ | ||
| 127 | switch(PyTuple_Size(args)) { \ | ||
| 128 | case 0: \ | ||
| 129 | return PyCursesCheckERR(X(), # X); \ | ||
| 130 | case 1: \ | ||
| 131 | if (!PyArg_ParseTuple(args, "i;True(1) or False(0)", &flag)) return NULL; \ | ||
| 132 | if (flag) return PyCursesCheckERR(X(), # X); \ | ||
| 133 | else return PyCursesCheckERR(no ## X (), # X); \ | ||
| 134 | default: \ | ||
| 135 | PyErr_SetString(PyExc_TypeError, # X " requires 0 or 1 arguments"); \ | ||
| 136 | return NULL; } } | ||
| 137 | |||
| 138 | #define NoArgReturnIntFunction(X) \ | ||
| 139 | static PyObject *PyCurses_ ## X (PyObject *self) \ | ||
| 140 | { \ | ||
| 141 | PyCursesInitialised \ | ||
| 142 | return PyInt_FromLong((long) X()); } | ||
| 143 | |||
| 144 | |||
| 145 | #define NoArgReturnStringFunction(X) \ | ||
| 146 | static PyObject *PyCurses_ ## X (PyObject *self) \ | ||
| 147 | { \ | ||
| 148 | PyCursesInitialised \ | ||
| 149 | return PyString_FromString(X()); } | ||
| 150 | |||
| 151 | #define NoArgTrueFalseFunction(X) \ | ||
| 152 | static PyObject *PyCurses_ ## X (PyObject *self) \ | ||
| 153 | { \ | ||
| 154 | PyCursesInitialised \ | ||
| 155 | if (X () == FALSE) { \ | ||
| 156 | Py_INCREF(Py_False); \ | ||
| 157 | return Py_False; \ | ||
| 158 | } \ | ||
| 159 | Py_INCREF(Py_True); \ | ||
| 160 | return Py_True; } | ||
| 161 | |||
| 162 | #define NoArgNoReturnVoidFunction(X) \ | ||
| 163 | static PyObject *PyCurses_ ## X (PyObject *self) \ | ||
| 164 | { \ | ||
| 165 | PyCursesInitialised \ | ||
| 166 | X(); \ | ||
| 167 | Py_INCREF(Py_None); \ | ||
| 168 | return Py_None; } | ||
| 169 | |||
| 170 | #ifdef __cplusplus | ||
| 171 | } | ||
| 172 | #endif | ||
| 173 | |||
| 174 | #endif /* !defined(Py_CURSES_H) */ | ||
| 175 | |||
| 176 | |||
| @@ -0,0 +1,62 @@ | |||
| 1 | /* An arena-like memory interface for the compiler. | ||
| 2 | */ | ||
| 3 | |||
| 4 | #ifndef Py_PYARENA_H | ||
| 5 | #define Py_PYARENA_H | ||
| 6 | |||
| 7 | #ifdef __cplusplus | ||
| 8 | extern "C" { | ||
| 9 | #endif | ||
| 10 | |||
| 11 | typedef struct _arena PyArena; | ||
| 12 | |||
| 13 | /* PyArena_New() and PyArena_Free() create a new arena and free it, | ||
| 14 | respectively. Once an arena has been created, it can be used | ||
| 15 | to allocate memory via PyArena_Malloc(). Pointers to PyObject can | ||
| 16 | also be registered with the arena via PyArena_AddPyObject(), and the | ||
| 17 | arena will ensure that the PyObjects stay alive at least until | ||
| 18 | PyArena_Free() is called. When an arena is freed, all the memory it | ||
| 19 | allocated is freed, the arena releases internal references to registered | ||
| 20 | PyObject*, and none of its pointers are valid. | ||
| 21 | XXX (tim) What does "none of its pointers are valid" mean? Does it | ||
| 22 | XXX mean that pointers previously obtained via PyArena_Malloc() are | ||
| 23 | XXX no longer valid? (That's clearly true, but not sure that's what | ||
| 24 | XXX the text is trying to say.) | ||
| 25 | |||
| 26 | PyArena_New() returns an arena pointer. On error, it | ||
| 27 | returns a negative number and sets an exception. | ||
| 28 | XXX (tim): Not true. On error, PyArena_New() actually returns NULL, | ||
| 29 | XXX and looks like it may or may not set an exception (e.g., if the | ||
| 30 | XXX internal PyList_New(0) returns NULL, PyArena_New() passes that on | ||
| 31 | XXX and an exception is set; OTOH, if the internal | ||
| 32 | XXX block_new(DEFAULT_BLOCK_SIZE) returns NULL, that's passed on but | ||
| 33 | XXX an exception is not set in that case). | ||
| 34 | */ | ||
| 35 | PyAPI_FUNC(PyArena *) PyArena_New(void); | ||
| 36 | PyAPI_FUNC(void) PyArena_Free(PyArena *); | ||
| 37 | |||
| 38 | /* Mostly like malloc(), return the address of a block of memory spanning | ||
| 39 | * `size` bytes, or return NULL (without setting an exception) if enough | ||
| 40 | * new memory can't be obtained. Unlike malloc(0), PyArena_Malloc() with | ||
| 41 | * size=0 does not guarantee to return a unique pointer (the pointer | ||
| 42 | * returned may equal one or more other pointers obtained from | ||
| 43 | * PyArena_Malloc()). | ||
| 44 | * Note that pointers obtained via PyArena_Malloc() must never be passed to | ||
| 45 | * the system free() or realloc(), or to any of Python's similar memory- | ||
| 46 | * management functions. PyArena_Malloc()-obtained pointers remain valid | ||
| 47 | * until PyArena_Free(ar) is called, at which point all pointers obtained | ||
| 48 | * from the arena `ar` become invalid simultaneously. | ||
| 49 | */ | ||
| 50 | PyAPI_FUNC(void *) PyArena_Malloc(PyArena *, size_t size); | ||
| 51 | |||
| 52 | /* This routine isn't a proper arena allocation routine. It takes | ||
| 53 | * a PyObject* and records it so that it can be DECREFed when the | ||
| 54 | * arena is freed. | ||
| 55 | */ | ||
| 56 | PyAPI_FUNC(int) PyArena_AddPyObject(PyArena *, PyObject *); | ||
| 57 | |||
| 58 | #ifdef __cplusplus | ||
| 59 | } | ||
| 60 | #endif | ||
| 61 | |||
| 62 | #endif /* !Py_PYARENA_H */ | ||
| @@ -0,0 +1,34 @@ | |||
| 1 | |||
| 2 | #ifndef Py_PYDEBUG_H | ||
| 3 | #define Py_PYDEBUG_H | ||
| 4 | #ifdef __cplusplus | ||
| 5 | extern "C" { | ||
| 6 | #endif | ||
| 7 | |||
| 8 | PyAPI_DATA(int) Py_DebugFlag; | ||
| 9 | PyAPI_DATA(int) Py_VerboseFlag; | ||
| 10 | PyAPI_DATA(int) Py_InteractiveFlag; | ||
| 11 | PyAPI_DATA(int) Py_OptimizeFlag; | ||
| 12 | PyAPI_DATA(int) Py_NoSiteFlag; | ||
| 13 | PyAPI_DATA(int) Py_UseClassExceptionsFlag; | ||
| 14 | PyAPI_DATA(int) Py_FrozenFlag; | ||
| 15 | PyAPI_DATA(int) Py_TabcheckFlag; | ||
| 16 | PyAPI_DATA(int) Py_UnicodeFlag; | ||
| 17 | PyAPI_DATA(int) Py_IgnoreEnvironmentFlag; | ||
| 18 | PyAPI_DATA(int) Py_DivisionWarningFlag; | ||
| 19 | /* _XXX Py_QnewFlag should go away in 3.0. It's true iff -Qnew is passed, | ||
| 20 | on the command line, and is used in 2.2 by ceval.c to make all "/" divisions | ||
| 21 | true divisions (which they will be in 3.0). */ | ||
| 22 | PyAPI_DATA(int) _Py_QnewFlag; | ||
| 23 | |||
| 24 | /* this is a wrapper around getenv() that pays attention to | ||
| 25 | Py_IgnoreEnvironmentFlag. It should be used for getting variables like | ||
| 26 | PYTHONPATH and PYTHONHOME from the environment */ | ||
| 27 | #define Py_GETENV(s) (Py_IgnoreEnvironmentFlag ? NULL : getenv(s)) | ||
| 28 | |||
| 29 | PyAPI_FUNC(void) Py_FatalError(const char *message); | ||
| 30 | |||
| 31 | #ifdef __cplusplus | ||
| 32 | } | ||
| 33 | #endif | ||
| 34 | #endif /* !Py_PYDEBUG_H */ | ||
| @@ -0,0 +1,334 @@ | |||
| 1 | #ifndef Py_ERRORS_H | ||
| 2 | #define Py_ERRORS_H | ||
| 3 | #ifdef __cplusplus | ||
| 4 | extern "C" { | ||
| 5 | #endif | ||
| 6 | |||
| 7 | /* Error objects */ | ||
| 8 | |||
| 9 | typedef struct { | ||
| 10 | PyObject_HEAD | ||
| 11 | PyObject *dict; | ||
| 12 | PyObject *args; | ||
| 13 | PyObject *message; | ||
| 14 | } PyBaseExceptionObject; | ||
| 15 | |||
| 16 | typedef struct { | ||
| 17 | PyObject_HEAD | ||
| 18 | PyObject *dict; | ||
| 19 | PyObject *args; | ||
| 20 | PyObject *message; | ||
| 21 | PyObject *msg; | ||
| 22 | PyObject *filename; | ||
| 23 | PyObject *lineno; | ||
| 24 | PyObject *offset; | ||
| 25 | PyObject *text; | ||
| 26 | PyObject *print_file_and_line; | ||
| 27 | } PySyntaxErrorObject; | ||
| 28 | |||
| 29 | #ifdef Py_USING_UNICODE | ||
| 30 | typedef struct { | ||
| 31 | PyObject_HEAD | ||
| 32 | PyObject *dict; | ||
| 33 | PyObject *args; | ||
| 34 | PyObject *message; | ||
| 35 | PyObject *encoding; | ||
| 36 | PyObject *object; | ||
| 37 | PyObject *start; | ||
| 38 | PyObject *end; | ||
| 39 | PyObject *reason; | ||
| 40 | } PyUnicodeErrorObject; | ||
| 41 | #endif | ||
| 42 | |||
| 43 | typedef struct { | ||
| 44 | PyObject_HEAD | ||
| 45 | PyObject *dict; | ||
| 46 | PyObject *args; | ||
| 47 | PyObject *message; | ||
| 48 | PyObject *code; | ||
| 49 | } PySystemExitObject; | ||
| 50 | |||
| 51 | typedef struct { | ||
| 52 | PyObject_HEAD | ||
| 53 | PyObject *dict; | ||
| 54 | PyObject *args; | ||
| 55 | PyObject *message; | ||
| 56 | PyObject *myerrno; | ||
| 57 | PyObject *strerror; | ||
| 58 | PyObject *filename; | ||
| 59 | } PyEnvironmentErrorObject; | ||
| 60 | |||
| 61 | #ifdef MS_WINDOWS | ||
| 62 | typedef struct { | ||
| 63 | PyObject_HEAD | ||
| 64 | PyObject *dict; | ||
| 65 | PyObject *args; | ||
| 66 | PyObject *message; | ||
| 67 | PyObject *myerrno; | ||
| 68 | PyObject *strerror; | ||
| 69 | PyObject *filename; | ||
| 70 | PyObject *winerror; | ||
| 71 | } PyWindowsErrorObject; | ||
| 72 | #endif | ||
| 73 | |||
| 74 | /* Error handling definitions */ | ||
| 75 | |||
| 76 | PyAPI_FUNC(void) PyErr_SetNone(PyObject *); | ||
| 77 | PyAPI_FUNC(void) PyErr_SetObject(PyObject *, PyObject *); | ||
| 78 | PyAPI_FUNC(void) PyErr_SetString(PyObject *, const char *); | ||
| 79 | PyAPI_FUNC(PyObject *) PyErr_Occurred(void); | ||
| 80 | PyAPI_FUNC(void) PyErr_Clear(void); | ||
| 81 | PyAPI_FUNC(void) PyErr_Fetch(PyObject **, PyObject **, PyObject **); | ||
| 82 | PyAPI_FUNC(void) PyErr_Restore(PyObject *, PyObject *, PyObject *); | ||
| 83 | |||
| 84 | #ifdef Py_DEBUG | ||
| 85 | #define _PyErr_OCCURRED() PyErr_Occurred() | ||
| 86 | #else | ||
| 87 | #define _PyErr_OCCURRED() (_PyThreadState_Current->curexc_type) | ||
| 88 | #endif | ||
| 89 | |||
| 90 | /* Error testing and normalization */ | ||
| 91 | PyAPI_FUNC(int) PyErr_GivenExceptionMatches(PyObject *, PyObject *); | ||
| 92 | PyAPI_FUNC(int) PyErr_ExceptionMatches(PyObject *); | ||
| 93 | PyAPI_FUNC(void) PyErr_NormalizeException(PyObject**, PyObject**, PyObject**); | ||
| 94 | |||
| 95 | /* */ | ||
| 96 | |||
| 97 | #define PyExceptionClass_Check(x) \ | ||
| 98 | (PyClass_Check((x)) \ | ||
| 99 | || (PyType_Check((x)) && PyType_IsSubtype( \ | ||
| 100 | (PyTypeObject*)(x), (PyTypeObject*)PyExc_BaseException))) | ||
| 101 | |||
| 102 | |||
| 103 | #define PyExceptionInstance_Check(x) \ | ||
| 104 | (PyInstance_Check((x)) || \ | ||
| 105 | (PyType_IsSubtype((x)->ob_type, (PyTypeObject*)PyExc_BaseException))) | ||
| 106 | |||
| 107 | #define PyExceptionClass_Name(x) \ | ||
| 108 | (PyClass_Check((x)) \ | ||
| 109 | ? PyString_AS_STRING(((PyClassObject*)(x))->cl_name) \ | ||
| 110 | : (char *)(((PyTypeObject*)(x))->tp_name)) | ||
| 111 | |||
| 112 | #define PyExceptionInstance_Class(x) \ | ||
| 113 | ((PyInstance_Check((x)) \ | ||
| 114 | ? (PyObject*)((PyInstanceObject*)(x))->in_class \ | ||
| 115 | : (PyObject*)((x)->ob_type))) | ||
| 116 | |||
| 117 | |||
| 118 | /* Predefined exceptions */ | ||
| 119 | |||
| 120 | PyAPI_DATA(PyObject *) PyExc_BaseException; | ||
| 121 | PyAPI_DATA(PyObject *) PyExc_Exception; | ||
| 122 | PyAPI_DATA(PyObject *) PyExc_StopIteration; | ||
| 123 | PyAPI_DATA(PyObject *) PyExc_GeneratorExit; | ||
| 124 | PyAPI_DATA(PyObject *) PyExc_StandardError; | ||
| 125 | PyAPI_DATA(PyObject *) PyExc_ArithmeticError; | ||
| 126 | PyAPI_DATA(PyObject *) PyExc_LookupError; | ||
| 127 | |||
| 128 | PyAPI_DATA(PyObject *) PyExc_AssertionError; | ||
| 129 | PyAPI_DATA(PyObject *) PyExc_AttributeError; | ||
| 130 | PyAPI_DATA(PyObject *) PyExc_EOFError; | ||
| 131 | PyAPI_DATA(PyObject *) PyExc_FloatingPointError; | ||
| 132 | PyAPI_DATA(PyObject *) PyExc_EnvironmentError; | ||
| 133 | PyAPI_DATA(PyObject *) PyExc_IOError; | ||
| 134 | PyAPI_DATA(PyObject *) PyExc_OSError; | ||
| 135 | PyAPI_DATA(PyObject *) PyExc_ImportError; | ||
| 136 | PyAPI_DATA(PyObject *) PyExc_IndexError; | ||
| 137 | PyAPI_DATA(PyObject *) PyExc_KeyError; | ||
| 138 | PyAPI_DATA(PyObject *) PyExc_KeyboardInterrupt; | ||
| 139 | PyAPI_DATA(PyObject *) PyExc_MemoryError; | ||
| 140 | PyAPI_DATA(PyObject *) PyExc_NameError; | ||
| 141 | PyAPI_DATA(PyObject *) PyExc_OverflowError; | ||
| 142 | PyAPI_DATA(PyObject *) PyExc_RuntimeError; | ||
| 143 | PyAPI_DATA(PyObject *) PyExc_NotImplementedError; | ||
| 144 | PyAPI_DATA(PyObject *) PyExc_SyntaxError; | ||
| 145 | PyAPI_DATA(PyObject *) PyExc_IndentationError; | ||
| 146 | PyAPI_DATA(PyObject *) PyExc_TabError; | ||
| 147 | PyAPI_DATA(PyObject *) PyExc_ReferenceError; | ||
| 148 | PyAPI_DATA(PyObject *) PyExc_SystemError; | ||
| 149 | PyAPI_DATA(PyObject *) PyExc_SystemExit; | ||
| 150 | PyAPI_DATA(PyObject *) PyExc_TypeError; | ||
| 151 | PyAPI_DATA(PyObject *) PyExc_UnboundLocalError; | ||
| 152 | PyAPI_DATA(PyObject *) PyExc_UnicodeError; | ||
| 153 | PyAPI_DATA(PyObject *) PyExc_UnicodeEncodeError; | ||
| 154 | PyAPI_DATA(PyObject *) PyExc_UnicodeDecodeError; | ||
| 155 | PyAPI_DATA(PyObject *) PyExc_UnicodeTranslateError; | ||
| 156 | PyAPI_DATA(PyObject *) PyExc_ValueError; | ||
| 157 | PyAPI_DATA(PyObject *) PyExc_ZeroDivisionError; | ||
| 158 | #ifdef MS_WINDOWS | ||
| 159 | PyAPI_DATA(PyObject *) PyExc_WindowsError; | ||
| 160 | #endif | ||
| 161 | #ifdef __VMS | ||
| 162 | PyAPI_DATA(PyObject *) PyExc_VMSError; | ||
| 163 | #endif | ||
| 164 | |||
| 165 | PyAPI_DATA(PyObject *) PyExc_MemoryErrorInst; | ||
| 166 | |||
| 167 | /* Predefined warning categories */ | ||
| 168 | PyAPI_DATA(PyObject *) PyExc_Warning; | ||
| 169 | PyAPI_DATA(PyObject *) PyExc_UserWarning; | ||
| 170 | PyAPI_DATA(PyObject *) PyExc_DeprecationWarning; | ||
| 171 | PyAPI_DATA(PyObject *) PyExc_PendingDeprecationWarning; | ||
| 172 | PyAPI_DATA(PyObject *) PyExc_SyntaxWarning; | ||
| 173 | PyAPI_DATA(PyObject *) PyExc_RuntimeWarning; | ||
| 174 | PyAPI_DATA(PyObject *) PyExc_FutureWarning; | ||
| 175 | PyAPI_DATA(PyObject *) PyExc_ImportWarning; | ||
| 176 | PyAPI_DATA(PyObject *) PyExc_UnicodeWarning; | ||
| 177 | |||
| 178 | |||
| 179 | /* Convenience functions */ | ||
| 180 | |||
| 181 | PyAPI_FUNC(int) PyErr_BadArgument(void); | ||
| 182 | PyAPI_FUNC(PyObject *) PyErr_NoMemory(void); | ||
| 183 | PyAPI_FUNC(PyObject *) PyErr_SetFromErrno(PyObject *); | ||
| 184 | PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilenameObject( | ||
| 185 | PyObject *, PyObject *); | ||
| 186 | PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilename(PyObject *, char *); | ||
| 187 | #ifdef Py_WIN_WIDE_FILENAMES | ||
| 188 | PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithUnicodeFilename( | ||
| 189 | PyObject *, Py_UNICODE *); | ||
| 190 | #endif /* Py_WIN_WIDE_FILENAMES */ | ||
| 191 | |||
| 192 | PyAPI_FUNC(PyObject *) PyErr_Format(PyObject *, const char *, ...) | ||
| 193 | Py_GCC_ATTRIBUTE((format(printf, 2, 3))); | ||
| 194 | |||
| 195 | #ifdef MS_WINDOWS | ||
| 196 | PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilenameObject( | ||
| 197 | int, const char *); | ||
| 198 | PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilename( | ||
| 199 | int, const char *); | ||
| 200 | #ifdef Py_WIN_WIDE_FILENAMES | ||
| 201 | PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithUnicodeFilename( | ||
| 202 | int, const Py_UNICODE *); | ||
| 203 | #endif /* Py_WIN_WIDE_FILENAMES */ | ||
| 204 | PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErr(int); | ||
| 205 | PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObject( | ||
| 206 | PyObject *,int, PyObject *); | ||
| 207 | PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilename( | ||
| 208 | PyObject *,int, const char *); | ||
| 209 | #ifdef Py_WIN_WIDE_FILENAMES | ||
| 210 | PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithUnicodeFilename( | ||
| 211 | PyObject *,int, const Py_UNICODE *); | ||
| 212 | #endif /* Py_WIN_WIDE_FILENAMES */ | ||
| 213 | PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErr(PyObject *, int); | ||
| 214 | #endif /* MS_WINDOWS */ | ||
| 215 | |||
| 216 | /* Export the old function so that the existing API remains available: */ | ||
| 217 | PyAPI_FUNC(void) PyErr_BadInternalCall(void); | ||
| 218 | PyAPI_FUNC(void) _PyErr_BadInternalCall(char *filename, int lineno); | ||
| 219 | /* Mask the old API with a call to the new API for code compiled under | ||
| 220 | Python 2.0: */ | ||
| 221 | #define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__) | ||
| 222 | |||
| 223 | /* Function to create a new exception */ | ||
| 224 | PyAPI_FUNC(PyObject *) PyErr_NewException(char *name, PyObject *base, | ||
| 225 | PyObject *dict); | ||
| 226 | PyAPI_FUNC(void) PyErr_WriteUnraisable(PyObject *); | ||
| 227 | |||
| 228 | /* Issue a warning or exception */ | ||
| 229 | PyAPI_FUNC(int) PyErr_WarnEx(PyObject *category, const char *msg, | ||
| 230 | Py_ssize_t stack_level); | ||
| 231 | PyAPI_FUNC(int) PyErr_WarnExplicit(PyObject *, const char *, | ||
| 232 | const char *, int, | ||
| 233 | const char *, PyObject *); | ||
| 234 | /* PyErr_Warn is only for backwards compatability and will be removed. | ||
| 235 | Use PyErr_WarnEx instead. */ | ||
| 236 | #define PyErr_Warn(category, msg) PyErr_WarnEx(category, msg, 1) | ||
| 237 | |||
| 238 | /* In sigcheck.c or signalmodule.c */ | ||
| 239 | PyAPI_FUNC(int) PyErr_CheckSignals(void); | ||
| 240 | PyAPI_FUNC(void) PyErr_SetInterrupt(void); | ||
| 241 | |||
| 242 | /* Support for adding program text to SyntaxErrors */ | ||
| 243 | PyAPI_FUNC(void) PyErr_SyntaxLocation(const char *, int); | ||
| 244 | PyAPI_FUNC(PyObject *) PyErr_ProgramText(const char *, int); | ||
| 245 | |||
| 246 | #ifdef Py_USING_UNICODE | ||
| 247 | /* The following functions are used to create and modify unicode | ||
| 248 | exceptions from C */ | ||
| 249 | |||
| 250 | /* create a UnicodeDecodeError object */ | ||
| 251 | PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_Create( | ||
| 252 | const char *, const char *, Py_ssize_t, Py_ssize_t, Py_ssize_t, const char *); | ||
| 253 | |||
| 254 | /* create a UnicodeEncodeError object */ | ||
| 255 | PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_Create( | ||
| 256 | const char *, const Py_UNICODE *, Py_ssize_t, Py_ssize_t, Py_ssize_t, const char *); | ||
| 257 | |||
| 258 | /* create a UnicodeTranslateError object */ | ||
| 259 | PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_Create( | ||
| 260 | const Py_UNICODE *, Py_ssize_t, Py_ssize_t, Py_ssize_t, const char *); | ||
| 261 | |||
| 262 | /* get the encoding attribute */ | ||
| 263 | PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetEncoding(PyObject *); | ||
| 264 | PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetEncoding(PyObject *); | ||
| 265 | |||
| 266 | /* get the object attribute */ | ||
| 267 | PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetObject(PyObject *); | ||
| 268 | PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetObject(PyObject *); | ||
| 269 | PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_GetObject(PyObject *); | ||
| 270 | |||
| 271 | /* get the value of the start attribute (the int * may not be NULL) | ||
| 272 | return 0 on success, -1 on failure */ | ||
| 273 | PyAPI_FUNC(int) PyUnicodeEncodeError_GetStart(PyObject *, Py_ssize_t *); | ||
| 274 | PyAPI_FUNC(int) PyUnicodeDecodeError_GetStart(PyObject *, Py_ssize_t *); | ||
| 275 | PyAPI_FUNC(int) PyUnicodeTranslateError_GetStart(PyObject *, Py_ssize_t *); | ||
| 276 | |||
| 277 | /* assign a new value to the start attribute | ||
| 278 | return 0 on success, -1 on failure */ | ||
| 279 | PyAPI_FUNC(int) PyUnicodeEncodeError_SetStart(PyObject *, Py_ssize_t); | ||
| 280 | PyAPI_FUNC(int) PyUnicodeDecodeError_SetStart(PyObject *, Py_ssize_t); | ||
| 281 | PyAPI_FUNC(int) PyUnicodeTranslateError_SetStart(PyObject *, Py_ssize_t); | ||
| 282 | |||
| 283 | /* get the value of the end attribute (the int *may not be NULL) | ||
| 284 | return 0 on success, -1 on failure */ | ||
| 285 | PyAPI_FUNC(int) PyUnicodeEncodeError_GetEnd(PyObject *, Py_ssize_t *); | ||
| 286 | PyAPI_FUNC(int) PyUnicodeDecodeError_GetEnd(PyObject *, Py_ssize_t *); | ||
| 287 | PyAPI_FUNC(int) PyUnicodeTranslateError_GetEnd(PyObject *, Py_ssize_t *); | ||
| 288 | |||
| 289 | /* assign a new value to the end attribute | ||
| 290 | return 0 on success, -1 on failure */ | ||
| 291 | PyAPI_FUNC(int) PyUnicodeEncodeError_SetEnd(PyObject *, Py_ssize_t); | ||
| 292 | PyAPI_FUNC(int) PyUnicodeDecodeError_SetEnd(PyObject *, Py_ssize_t); | ||
| 293 | PyAPI_FUNC(int) PyUnicodeTranslateError_SetEnd(PyObject *, Py_ssize_t); | ||
| 294 | |||
| 295 | /* get the value of the reason attribute */ | ||
| 296 | PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetReason(PyObject *); | ||
| 297 | PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetReason(PyObject *); | ||
| 298 | PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_GetReason(PyObject *); | ||
| 299 | |||
| 300 | /* assign a new value to the reason attribute | ||
| 301 | return 0 on success, -1 on failure */ | ||
| 302 | PyAPI_FUNC(int) PyUnicodeEncodeError_SetReason( | ||
| 303 | PyObject *, const char *); | ||
| 304 | PyAPI_FUNC(int) PyUnicodeDecodeError_SetReason( | ||
| 305 | PyObject *, const char *); | ||
| 306 | PyAPI_FUNC(int) PyUnicodeTranslateError_SetReason( | ||
| 307 | PyObject *, const char *); | ||
| 308 | #endif | ||
| 309 | |||
| 310 | |||
| 311 | /* These APIs aren't really part of the error implementation, but | ||
| 312 | often needed to format error messages; the native C lib APIs are | ||
| 313 | not available on all platforms, which is why we provide emulations | ||
| 314 | for those platforms in Python/mysnprintf.c, | ||
| 315 | WARNING: The return value of snprintf varies across platforms; do | ||
| 316 | not rely on any particular behavior; eventually the C99 defn may | ||
| 317 | be reliable. | ||
| 318 | */ | ||
| 319 | #if defined(MS_WIN32) && !defined(HAVE_SNPRINTF) | ||
| 320 | # define HAVE_SNPRINTF | ||
| 321 | # define snprintf _snprintf | ||
| 322 | # define vsnprintf _vsnprintf | ||
| 323 | #endif | ||
| 324 | |||
| 325 | #include <stdarg.h> | ||
| 326 | PyAPI_FUNC(int) PyOS_snprintf(char *str, size_t size, const char *format, ...) | ||
| 327 | Py_GCC_ATTRIBUTE((format(printf, 3, 4))); | ||
| 328 | PyAPI_FUNC(int) PyOS_vsnprintf(char *str, size_t size, const char *format, va_list va) | ||
| 329 | Py_GCC_ATTRIBUTE((format(printf, 3, 0))); | ||
| 330 | |||
| 331 | #ifdef __cplusplus | ||
| 332 | } | ||
| 333 | #endif | ||
| 334 | #endif /* !Py_ERRORS_H */ | ||
| @@ -0,0 +1,47 @@ | |||
| 1 | /* Stuff to export relevant 'expat' entry points from pyexpat to other | ||
| 2 | * parser modules, such as cElementTree. */ | ||
| 3 | |||
| 4 | /* note: you must import expat.h before importing this module! */ | ||
| 5 | |||
| 6 | #define PyExpat_CAPI_MAGIC "pyexpat.expat_CAPI 1.0" | ||
| 7 | |||
| 8 | struct PyExpat_CAPI | ||
| 9 | { | ||
| 10 | char* magic; /* set to PyExpat_CAPI_MAGIC */ | ||
| 11 | int size; /* set to sizeof(struct PyExpat_CAPI) */ | ||
| 12 | int MAJOR_VERSION; | ||
| 13 | int MINOR_VERSION; | ||
| 14 | int MICRO_VERSION; | ||
| 15 | /* pointers to selected expat functions. add new functions at | ||
| 16 | the end, if needed */ | ||
| 17 | const XML_LChar * (*ErrorString)(enum XML_Error code); | ||
| 18 | enum XML_Error (*GetErrorCode)(XML_Parser parser); | ||
| 19 | XML_Size (*GetErrorColumnNumber)(XML_Parser parser); | ||
| 20 | XML_Size (*GetErrorLineNumber)(XML_Parser parser); | ||
| 21 | enum XML_Status (*Parse)( | ||
| 22 | XML_Parser parser, const char *s, int len, int isFinal); | ||
| 23 | XML_Parser (*ParserCreate_MM)( | ||
| 24 | const XML_Char *encoding, const XML_Memory_Handling_Suite *memsuite, | ||
| 25 | const XML_Char *namespaceSeparator); | ||
| 26 | void (*ParserFree)(XML_Parser parser); | ||
| 27 | void (*SetCharacterDataHandler)( | ||
| 28 | XML_Parser parser, XML_CharacterDataHandler handler); | ||
| 29 | void (*SetCommentHandler)( | ||
| 30 | XML_Parser parser, XML_CommentHandler handler); | ||
| 31 | void (*SetDefaultHandlerExpand)( | ||
| 32 | XML_Parser parser, XML_DefaultHandler handler); | ||
| 33 | void (*SetElementHandler)( | ||
| 34 | XML_Parser parser, XML_StartElementHandler start, | ||
| 35 | XML_EndElementHandler end); | ||
| 36 | void (*SetNamespaceDeclHandler)( | ||
| 37 | XML_Parser parser, XML_StartNamespaceDeclHandler start, | ||
| 38 | XML_EndNamespaceDeclHandler end); | ||
| 39 | void (*SetProcessingInstructionHandler)( | ||
| 40 | XML_Parser parser, XML_ProcessingInstructionHandler handler); | ||
| 41 | void (*SetUnknownEncodingHandler)( | ||
| 42 | XML_Parser parser, XML_UnknownEncodingHandler handler, | ||
| 43 | void *encodingHandlerData); | ||
| 44 | void (*SetUserData)(XML_Parser parser, void *userData); | ||
| 45 | /* always add new stuff to the end! */ | ||
| 46 | }; | ||
| 47 | |||
| @@ -0,0 +1,176 @@ | |||
| 1 | #ifndef Py_PYFPE_H | ||
| 2 | #define Py_PYFPE_H | ||
| 3 | #ifdef __cplusplus | ||
| 4 | extern "C" { | ||
| 5 | #endif | ||
| 6 | /* | ||
| 7 | --------------------------------------------------------------------- | ||
| 8 | / Copyright (c) 1996. \ | ||
| 9 | | The Regents of the University of California. | | ||
| 10 | | All rights reserved. | | ||
| 11 | | | | ||
| 12 | | Permission to use, copy, modify, and distribute this software for | | ||
| 13 | | any purpose without fee is hereby granted, provided that this en- | | ||
| 14 | | tire notice is included in all copies of any software which is or | | ||
| 15 | | includes a copy or modification of this software and in all | | ||
| 16 | | copies of the supporting documentation for such software. | | ||
| 17 | | | | ||
| 18 | | This work was produced at the University of California, Lawrence | | ||
| 19 | | Livermore National Laboratory under contract no. W-7405-ENG-48 | | ||
| 20 | | between the U.S. Department of Energy and The Regents of the | | ||
| 21 | | University of California for the operation of UC LLNL. | | ||
| 22 | | | | ||
| 23 | | DISCLAIMER | | ||
| 24 | | | | ||
| 25 | | This software was prepared as an account of work sponsored by an | | ||
| 26 | | agency of the United States Government. Neither the United States | | ||
| 27 | | Government nor the University of California nor any of their em- | | ||
| 28 | | ployees, makes any warranty, express or implied, or assumes any | | ||
| 29 | | liability or responsibility for the accuracy, completeness, or | | ||
| 30 | | usefulness of any information, apparatus, product, or process | | ||
| 31 | | disclosed, or represents that its use would not infringe | | ||
| 32 | | privately-owned rights. Reference herein to any specific commer- | | ||
| 33 | | cial products, process, or service by trade name, trademark, | | ||
| 34 | | manufacturer, or otherwise, does not necessarily constitute or | | ||
| 35 | | imply its endorsement, recommendation, or favoring by the United | | ||
| 36 | | States Government or the University of California. The views and | | ||
| 37 | | opinions of authors expressed herein do not necessarily state or | | ||
| 38 | | reflect those of the United States Government or the University | | ||
| 39 | | of California, and shall not be used for advertising or product | | ||
| 40 | \ endorsement purposes. / | ||
| 41 | --------------------------------------------------------------------- | ||
| 42 | */ | ||
| 43 | |||
| 44 | /* | ||
| 45 | * Define macros for handling SIGFPE. | ||
| 46 | * Lee Busby, LLNL, November, 1996 | ||
| 47 | * busby1@llnl.gov | ||
| 48 | * | ||
| 49 | ********************************************* | ||
| 50 | * Overview of the system for handling SIGFPE: | ||
| 51 | * | ||
| 52 | * This file (Include/pyfpe.h) defines a couple of "wrapper" macros for | ||
| 53 | * insertion into your Python C code of choice. Their proper use is | ||
| 54 | * discussed below. The file Python/pyfpe.c defines a pair of global | ||
| 55 | * variables PyFPE_jbuf and PyFPE_counter which are used by the signal | ||
| 56 | * handler for SIGFPE to decide if a particular exception was protected | ||
| 57 | * by the macros. The signal handler itself, and code for enabling the | ||
| 58 | * generation of SIGFPE in the first place, is in a (new) Python module | ||
| 59 | * named fpectl. This module is standard in every respect. It can be loaded | ||
| 60 | * either statically or dynamically as you choose, and like any other | ||
| 61 | * Python module, has no effect until you import it. | ||
| 62 | * | ||
| 63 | * In the general case, there are three steps toward handling SIGFPE in any | ||
| 64 | * Python code: | ||
| 65 | * | ||
| 66 | * 1) Add the *_PROTECT macros to your C code as required to protect | ||
| 67 | * dangerous floating point sections. | ||
| 68 | * | ||
| 69 | * 2) Turn on the inclusion of the code by adding the ``--with-fpectl'' | ||
| 70 | * flag at the time you run configure. If the fpectl or other modules | ||
| 71 | * which use the *_PROTECT macros are to be dynamically loaded, be | ||
| 72 | * sure they are compiled with WANT_SIGFPE_HANDLER defined. | ||
| 73 | * | ||
| 74 | * 3) When python is built and running, import fpectl, and execute | ||
| 75 | * fpectl.turnon_sigfpe(). This sets up the signal handler and enables | ||
| 76 | * generation of SIGFPE whenever an exception occurs. From this point | ||
| 77 | * on, any properly trapped SIGFPE should result in the Python | ||
| 78 | * FloatingPointError exception. | ||
| 79 | * | ||
| 80 | * Step 1 has been done already for the Python kernel code, and should be | ||
| 81 | * done soon for the NumPy array package. Step 2 is usually done once at | ||
| 82 | * python install time. Python's behavior with respect to SIGFPE is not | ||
| 83 | * changed unless you also do step 3. Thus you can control this new | ||
| 84 | * facility at compile time, or run time, or both. | ||
| 85 | * | ||
| 86 | ******************************** | ||
| 87 | * Using the macros in your code: | ||
| 88 | * | ||
| 89 | * static PyObject *foobar(PyObject *self,PyObject *args) | ||
| 90 | * { | ||
| 91 | * .... | ||
| 92 | * PyFPE_START_PROTECT("Error in foobar", return 0) | ||
| 93 | * result = dangerous_op(somearg1, somearg2, ...); | ||
| 94 | * PyFPE_END_PROTECT(result) | ||
| 95 | * .... | ||
| 96 | * } | ||
| 97 | * | ||
| 98 | * If a floating point error occurs in dangerous_op, foobar returns 0 (NULL), | ||
| 99 | * after setting the associated value of the FloatingPointError exception to | ||
| 100 | * "Error in foobar". ``Dangerous_op'' can be a single operation, or a block | ||
| 101 | * of code, function calls, or any combination, so long as no alternate | ||
| 102 | * return is possible before the PyFPE_END_PROTECT macro is reached. | ||
| 103 | * | ||
| 104 | * The macros can only be used in a function context where an error return | ||
| 105 | * can be recognized as signaling a Python exception. (Generally, most | ||
| 106 | * functions that return a PyObject * will qualify.) | ||
| 107 | * | ||
| 108 | * Guido's original design suggestion for PyFPE_START_PROTECT and | ||
| 109 | * PyFPE_END_PROTECT had them open and close a local block, with a locally | ||
| 110 | * defined jmp_buf and jmp_buf pointer. This would allow recursive nesting | ||
| 111 | * of the macros. The Ansi C standard makes it clear that such local | ||
| 112 | * variables need to be declared with the "volatile" type qualifier to keep | ||
| 113 | * setjmp from corrupting their values. Some current implementations seem | ||
| 114 | * to be more restrictive. For example, the HPUX man page for setjmp says | ||
| 115 | * | ||
| 116 | * Upon the return from a setjmp() call caused by a longjmp(), the | ||
| 117 | * values of any non-static local variables belonging to the routine | ||
| 118 | * from which setjmp() was called are undefined. Code which depends on | ||
| 119 | * such values is not guaranteed to be portable. | ||
| 120 | * | ||
| 121 | * I therefore decided on a more limited form of nesting, using a counter | ||
| 122 | * variable (PyFPE_counter) to keep track of any recursion. If an exception | ||
| 123 | * occurs in an ``inner'' pair of macros, the return will apparently | ||
| 124 | * come from the outermost level. | ||
| 125 | * | ||
| 126 | */ | ||
| 127 | |||
| 128 | #ifdef WANT_SIGFPE_HANDLER | ||
| 129 | #include <signal.h> | ||
| 130 | #include <setjmp.h> | ||
| 131 | #include <math.h> | ||
| 132 | extern jmp_buf PyFPE_jbuf; | ||
| 133 | extern int PyFPE_counter; | ||
| 134 | extern double PyFPE_dummy(void *); | ||
| 135 | |||
| 136 | #define PyFPE_START_PROTECT(err_string, leave_stmt) \ | ||
| 137 | if (!PyFPE_counter++ && setjmp(PyFPE_jbuf)) { \ | ||
| 138 | PyErr_SetString(PyExc_FloatingPointError, err_string); \ | ||
| 139 | PyFPE_counter = 0; \ | ||
| 140 | leave_stmt; \ | ||
| 141 | } | ||
| 142 | |||
| 143 | /* | ||
| 144 | * This (following) is a heck of a way to decrement a counter. However, | ||
| 145 | * unless the macro argument is provided, code optimizers will sometimes move | ||
| 146 | * this statement so that it gets executed *before* the unsafe expression | ||
| 147 | * which we're trying to protect. That pretty well messes things up, | ||
| 148 | * of course. | ||
| 149 | * | ||
| 150 | * If the expression(s) you're trying to protect don't happen to return a | ||
| 151 | * value, you will need to manufacture a dummy result just to preserve the | ||
| 152 | * correct ordering of statements. Note that the macro passes the address | ||
| 153 | * of its argument (so you need to give it something which is addressable). | ||
| 154 | * If your expression returns multiple results, pass the last such result | ||
| 155 | * to PyFPE_END_PROTECT. | ||
| 156 | * | ||
| 157 | * Note that PyFPE_dummy returns a double, which is cast to int. | ||
| 158 | * This seeming insanity is to tickle the Floating Point Unit (FPU). | ||
| 159 | * If an exception has occurred in a preceding floating point operation, | ||
| 160 | * some architectures (notably Intel 80x86) will not deliver the interrupt | ||
| 161 | * until the *next* floating point operation. This is painful if you've | ||
| 162 | * already decremented PyFPE_counter. | ||
| 163 | */ | ||
| 164 | #define PyFPE_END_PROTECT(v) PyFPE_counter -= (int)PyFPE_dummy(&(v)); | ||
| 165 | |||
| 166 | #else | ||
| 167 | |||
| 168 | #define PyFPE_START_PROTECT(err_string, leave_stmt) | ||
| 169 | #define PyFPE_END_PROTECT(v) | ||
| 170 | |||
| 171 | #endif | ||
| 172 | |||
| 173 | #ifdef __cplusplus | ||
| 174 | } | ||
| 175 | #endif | ||
| 176 | #endif /* !Py_PYFPE_H */ | ||
| @@ -0,0 +1,17 @@ | |||
| 1 | |||
| 2 | #ifndef Py_PYGETOPT_H | ||
| 3 | #define Py_PYGETOPT_H | ||
| 4 | #ifdef __cplusplus | ||
| 5 | extern "C" { | ||
| 6 | #endif | ||
| 7 | |||
| 8 | PyAPI_DATA(int) _PyOS_opterr; | ||
| 9 | PyAPI_DATA(int) _PyOS_optind; | ||
| 10 | PyAPI_DATA(char *) _PyOS_optarg; | ||
| 11 | |||
| 12 | PyAPI_FUNC(int) _PyOS_GetOpt(int argc, char **argv, char *optstring); | ||
| 13 | |||
| 14 | #ifdef __cplusplus | ||
| 15 | } | ||
| 16 | #endif | ||
| 17 | #endif /* !Py_PYGETOPT_H */ | ||
| @@ -0,0 +1,189 @@ | |||
| 1 | /* | ||
| 2 | ** pymactoolbox.h - globals defined in mactoolboxglue.c | ||
| 3 | */ | ||
| 4 | #ifndef Py_PYMACTOOLBOX_H | ||
| 5 | #define Py_PYMACTOOLBOX_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | #include <Carbon/Carbon.h> | ||
| 11 | #include <QuickTime/QuickTime.h> | ||
| 12 | |||
| 13 | /* | ||
| 14 | ** Helper routines for error codes and such. | ||
| 15 | */ | ||
| 16 | char *PyMac_StrError(int); /* strerror with mac errors */ | ||
| 17 | extern PyObject *PyMac_OSErrException; /* Exception for OSErr */ | ||
| 18 | PyObject *PyMac_GetOSErrException(void); /* Initialize & return it */ | ||
| 19 | PyObject *PyErr_Mac(PyObject *, int); /* Exception with a mac error */ | ||
| 20 | PyObject *PyMac_Error(OSErr); /* Uses PyMac_GetOSErrException */ | ||
| 21 | extern OSErr PyMac_GetFullPathname(FSSpec *, char *, int); /* convert | ||
| 22 | fsspec->path */ | ||
| 23 | /* | ||
| 24 | ** These conversion routines are defined in mactoolboxglue.c itself. | ||
| 25 | */ | ||
| 26 | int PyMac_GetOSType(PyObject *, OSType *); /* argument parser for OSType */ | ||
| 27 | PyObject *PyMac_BuildOSType(OSType); /* Convert OSType to PyObject */ | ||
| 28 | |||
| 29 | PyObject *PyMac_BuildNumVersion(NumVersion);/* Convert NumVersion to PyObject */ | ||
| 30 | |||
| 31 | int PyMac_GetStr255(PyObject *, Str255); /* argument parser for Str255 */ | ||
| 32 | PyObject *PyMac_BuildStr255(Str255); /* Convert Str255 to PyObject */ | ||
| 33 | PyObject *PyMac_BuildOptStr255(Str255); /* Convert Str255 to PyObject, | ||
| 34 | NULL to None */ | ||
| 35 | |||
| 36 | int PyMac_GetRect(PyObject *, Rect *); /* argument parser for Rect */ | ||
| 37 | PyObject *PyMac_BuildRect(Rect *); /* Convert Rect to PyObject */ | ||
| 38 | |||
| 39 | int PyMac_GetPoint(PyObject *, Point *); /* argument parser for Point */ | ||
| 40 | PyObject *PyMac_BuildPoint(Point); /* Convert Point to PyObject */ | ||
| 41 | |||
| 42 | int PyMac_GetEventRecord(PyObject *, EventRecord *); /* argument parser for | ||
| 43 | EventRecord */ | ||
| 44 | PyObject *PyMac_BuildEventRecord(EventRecord *); /* Convert EventRecord to | ||
| 45 | PyObject */ | ||
| 46 | |||
| 47 | int PyMac_GetFixed(PyObject *, Fixed *); /* argument parser for Fixed */ | ||
| 48 | PyObject *PyMac_BuildFixed(Fixed); /* Convert Fixed to PyObject */ | ||
| 49 | int PyMac_Getwide(PyObject *, wide *); /* argument parser for wide */ | ||
| 50 | PyObject *PyMac_Buildwide(wide *); /* Convert wide to PyObject */ | ||
| 51 | |||
| 52 | /* | ||
| 53 | ** The rest of the routines are implemented by extension modules. If they are | ||
| 54 | ** dynamically loaded mactoolboxglue will contain a stub implementation of the | ||
| 55 | ** routine, which imports the module, whereupon the module's init routine will | ||
| 56 | ** communicate the routine pointer back to the stub. | ||
| 57 | ** If USE_TOOLBOX_OBJECT_GLUE is not defined there is no glue code, and the | ||
| 58 | ** extension modules simply declare the routine. This is the case for static | ||
| 59 | ** builds (and could be the case for MacPython CFM builds, because CFM extension | ||
| 60 | ** modules can reference each other without problems). | ||
| 61 | */ | ||
| 62 | |||
| 63 | #ifdef USE_TOOLBOX_OBJECT_GLUE | ||
| 64 | /* | ||
| 65 | ** These macros are used in the module init code. If we use toolbox object glue | ||
| 66 | ** it sets the function pointer to point to the real function. | ||
| 67 | */ | ||
| 68 | #define PyMac_INIT_TOOLBOX_OBJECT_NEW(object, rtn) { \ | ||
| 69 | extern PyObject *(*PyMacGluePtr_##rtn)(object); \ | ||
| 70 | PyMacGluePtr_##rtn = _##rtn; \ | ||
| 71 | } | ||
| 72 | #define PyMac_INIT_TOOLBOX_OBJECT_CONVERT(object, rtn) { \ | ||
| 73 | extern int (*PyMacGluePtr_##rtn)(PyObject *, object *); \ | ||
| 74 | PyMacGluePtr_##rtn = _##rtn; \ | ||
| 75 | } | ||
| 76 | #else | ||
| 77 | /* | ||
| 78 | ** If we don't use toolbox object glue the init macros are empty. Moreover, we define | ||
| 79 | ** _xxx_New to be the same as xxx_New, and the code in mactoolboxglue isn't included. | ||
| 80 | */ | ||
| 81 | #define PyMac_INIT_TOOLBOX_OBJECT_NEW(object, rtn) | ||
| 82 | #define PyMac_INIT_TOOLBOX_OBJECT_CONVERT(object, rtn) | ||
| 83 | #endif /* USE_TOOLBOX_OBJECT_GLUE */ | ||
| 84 | |||
| 85 | /* macfs exports */ | ||
| 86 | int PyMac_GetFSSpec(PyObject *, FSSpec *); /* argument parser for FSSpec */ | ||
| 87 | PyObject *PyMac_BuildFSSpec(FSSpec *); /* Convert FSSpec to PyObject */ | ||
| 88 | |||
| 89 | int PyMac_GetFSRef(PyObject *, FSRef *); /* argument parser for FSRef */ | ||
| 90 | PyObject *PyMac_BuildFSRef(FSRef *); /* Convert FSRef to PyObject */ | ||
| 91 | |||
| 92 | /* AE exports */ | ||
| 93 | extern PyObject *AEDesc_New(AppleEvent *); /* XXXX Why passed by address?? */ | ||
| 94 | extern PyObject *AEDesc_NewBorrowed(AppleEvent *); | ||
| 95 | extern int AEDesc_Convert(PyObject *, AppleEvent *); | ||
| 96 | |||
| 97 | /* Cm exports */ | ||
| 98 | extern PyObject *CmpObj_New(Component); | ||
| 99 | extern int CmpObj_Convert(PyObject *, Component *); | ||
| 100 | extern PyObject *CmpInstObj_New(ComponentInstance); | ||
| 101 | extern int CmpInstObj_Convert(PyObject *, ComponentInstance *); | ||
| 102 | |||
| 103 | /* Ctl exports */ | ||
| 104 | extern PyObject *CtlObj_New(ControlHandle); | ||
| 105 | extern int CtlObj_Convert(PyObject *, ControlHandle *); | ||
| 106 | |||
| 107 | /* Dlg exports */ | ||
| 108 | extern PyObject *DlgObj_New(DialogPtr); | ||
| 109 | extern int DlgObj_Convert(PyObject *, DialogPtr *); | ||
| 110 | extern PyObject *DlgObj_WhichDialog(DialogPtr); | ||
| 111 | |||
| 112 | /* Drag exports */ | ||
| 113 | extern PyObject *DragObj_New(DragReference); | ||
| 114 | extern int DragObj_Convert(PyObject *, DragReference *); | ||
| 115 | |||
| 116 | /* List exports */ | ||
| 117 | extern PyObject *ListObj_New(ListHandle); | ||
| 118 | extern int ListObj_Convert(PyObject *, ListHandle *); | ||
| 119 | |||
| 120 | /* Menu exports */ | ||
| 121 | extern PyObject *MenuObj_New(MenuHandle); | ||
| 122 | extern int MenuObj_Convert(PyObject *, MenuHandle *); | ||
| 123 | |||
| 124 | /* Qd exports */ | ||
| 125 | extern PyObject *GrafObj_New(GrafPtr); | ||
| 126 | extern int GrafObj_Convert(PyObject *, GrafPtr *); | ||
| 127 | extern PyObject *BMObj_New(BitMapPtr); | ||
| 128 | extern int BMObj_Convert(PyObject *, BitMapPtr *); | ||
| 129 | extern PyObject *QdRGB_New(RGBColor *); | ||
| 130 | extern int QdRGB_Convert(PyObject *, RGBColor *); | ||
| 131 | |||
| 132 | /* Qdoffs exports */ | ||
| 133 | extern PyObject *GWorldObj_New(GWorldPtr); | ||
| 134 | extern int GWorldObj_Convert(PyObject *, GWorldPtr *); | ||
| 135 | |||
| 136 | /* Qt exports */ | ||
| 137 | extern PyObject *TrackObj_New(Track); | ||
| 138 | extern int TrackObj_Convert(PyObject *, Track *); | ||
| 139 | extern PyObject *MovieObj_New(Movie); | ||
| 140 | extern int MovieObj_Convert(PyObject *, Movie *); | ||
| 141 | extern PyObject *MovieCtlObj_New(MovieController); | ||
| 142 | extern int MovieCtlObj_Convert(PyObject *, MovieController *); | ||
| 143 | extern PyObject *TimeBaseObj_New(TimeBase); | ||
| 144 | extern int TimeBaseObj_Convert(PyObject *, TimeBase *); | ||
| 145 | extern PyObject *UserDataObj_New(UserData); | ||
| 146 | extern int UserDataObj_Convert(PyObject *, UserData *); | ||
| 147 | extern PyObject *MediaObj_New(Media); | ||
| 148 | extern int MediaObj_Convert(PyObject *, Media *); | ||
| 149 | |||
| 150 | /* Res exports */ | ||
| 151 | extern PyObject *ResObj_New(Handle); | ||
| 152 | extern int ResObj_Convert(PyObject *, Handle *); | ||
| 153 | extern PyObject *OptResObj_New(Handle); | ||
| 154 | extern int OptResObj_Convert(PyObject *, Handle *); | ||
| 155 | |||
| 156 | /* TE exports */ | ||
| 157 | extern PyObject *TEObj_New(TEHandle); | ||
| 158 | extern int TEObj_Convert(PyObject *, TEHandle *); | ||
| 159 | |||
| 160 | /* Win exports */ | ||
| 161 | extern PyObject *WinObj_New(WindowPtr); | ||
| 162 | extern int WinObj_Convert(PyObject *, WindowPtr *); | ||
| 163 | extern PyObject *WinObj_WhichWindow(WindowPtr); | ||
| 164 | |||
| 165 | /* CF exports */ | ||
| 166 | extern PyObject *CFObj_New(CFTypeRef); | ||
| 167 | extern int CFObj_Convert(PyObject *, CFTypeRef *); | ||
| 168 | extern PyObject *CFTypeRefObj_New(CFTypeRef); | ||
| 169 | extern int CFTypeRefObj_Convert(PyObject *, CFTypeRef *); | ||
| 170 | extern PyObject *CFStringRefObj_New(CFStringRef); | ||
| 171 | extern int CFStringRefObj_Convert(PyObject *, CFStringRef *); | ||
| 172 | extern PyObject *CFMutableStringRefObj_New(CFMutableStringRef); | ||
| 173 | extern int CFMutableStringRefObj_Convert(PyObject *, CFMutableStringRef *); | ||
| 174 | extern PyObject *CFArrayRefObj_New(CFArrayRef); | ||
| 175 | extern int CFArrayRefObj_Convert(PyObject *, CFArrayRef *); | ||
| 176 | extern PyObject *CFMutableArrayRefObj_New(CFMutableArrayRef); | ||
| 177 | extern int CFMutableArrayRefObj_Convert(PyObject *, CFMutableArrayRef *); | ||
| 178 | extern PyObject *CFDictionaryRefObj_New(CFDictionaryRef); | ||
| 179 | extern int CFDictionaryRefObj_Convert(PyObject *, CFDictionaryRef *); | ||
| 180 | extern PyObject *CFMutableDictionaryRefObj_New(CFMutableDictionaryRef); | ||
| 181 | extern int CFMutableDictionaryRefObj_Convert(PyObject *, CFMutableDictionaryRef *); | ||
| 182 | extern PyObject *CFURLRefObj_New(CFURLRef); | ||
| 183 | extern int CFURLRefObj_Convert(PyObject *, CFURLRef *); | ||
| 184 | extern int OptionalCFURLRefObj_Convert(PyObject *, CFURLRef *); | ||
| 185 | |||
| 186 | #ifdef __cplusplus | ||
| 187 | } | ||
| 188 | #endif | ||
| 189 | #endif | ||
| @@ -0,0 +1,105 @@ | |||
| 1 | /* The PyMem_ family: low-level memory allocation interfaces. | ||
| 2 | See objimpl.h for the PyObject_ memory family. | ||
| 3 | */ | ||
| 4 | |||
| 5 | #ifndef Py_PYMEM_H | ||
| 6 | #define Py_PYMEM_H | ||
| 7 | |||
| 8 | #include "pyport.h" | ||
| 9 | |||
| 10 | #ifdef __cplusplus | ||
| 11 | extern "C" { | ||
| 12 | #endif | ||
| 13 | |||
| 14 | /* BEWARE: | ||
| 15 | |||
| 16 | Each interface exports both functions and macros. Extension modules should | ||
| 17 | use the functions, to ensure binary compatibility across Python versions. | ||
| 18 | Because the Python implementation is free to change internal details, and | ||
| 19 | the macros may (or may not) expose details for speed, if you do use the | ||
| 20 | macros you must recompile your extensions with each Python release. | ||
| 21 | |||
| 22 | Never mix calls to PyMem_ with calls to the platform malloc/realloc/ | ||
| 23 | calloc/free. For example, on Windows different DLLs may end up using | ||
| 24 | different heaps, and if you use PyMem_Malloc you'll get the memory from the | ||
| 25 | heap used by the Python DLL; it could be a disaster if you free()'ed that | ||
| 26 | directly in your own extension. Using PyMem_Free instead ensures Python | ||
| 27 | can return the memory to the proper heap. As another example, in | ||
| 28 | PYMALLOC_DEBUG mode, Python wraps all calls to all PyMem_ and PyObject_ | ||
| 29 | memory functions in special debugging wrappers that add additional | ||
| 30 | debugging info to dynamic memory blocks. The system routines have no idea | ||
| 31 | what to do with that stuff, and the Python wrappers have no idea what to do | ||
| 32 | with raw blocks obtained directly by the system routines then. | ||
| 33 | */ | ||
| 34 | |||
| 35 | /* | ||
| 36 | * Raw memory interface | ||
| 37 | * ==================== | ||
| 38 | */ | ||
| 39 | |||
| 40 | /* Functions | ||
| 41 | |||
| 42 | Functions supplying platform-independent semantics for malloc/realloc/ | ||
| 43 | free. These functions make sure that allocating 0 bytes returns a distinct | ||
| 44 | non-NULL pointer (whenever possible -- if we're flat out of memory, NULL | ||
| 45 | may be returned), even if the platform malloc and realloc don't. | ||
| 46 | Returned pointers must be checked for NULL explicitly. No action is | ||
| 47 | performed on failure (no exception is set, no warning is printed, etc). | ||
| 48 | */ | ||
| 49 | |||
| 50 | PyAPI_FUNC(void *) PyMem_Malloc(size_t); | ||
| 51 | PyAPI_FUNC(void *) PyMem_Realloc(void *, size_t); | ||
| 52 | PyAPI_FUNC(void) PyMem_Free(void *); | ||
| 53 | |||
| 54 | /* Starting from Python 1.6, the wrappers Py_{Malloc,Realloc,Free} are | ||
| 55 | no longer supported. They used to call PyErr_NoMemory() on failure. */ | ||
| 56 | |||
| 57 | /* Macros. */ | ||
| 58 | #ifdef PYMALLOC_DEBUG | ||
| 59 | /* Redirect all memory operations to Python's debugging allocator. */ | ||
| 60 | #define PyMem_MALLOC PyObject_MALLOC | ||
| 61 | #define PyMem_REALLOC PyObject_REALLOC | ||
| 62 | #define PyMem_FREE PyObject_FREE | ||
| 63 | |||
| 64 | #else /* ! PYMALLOC_DEBUG */ | ||
| 65 | |||
| 66 | /* PyMem_MALLOC(0) means malloc(1). Some systems would return NULL | ||
| 67 | for malloc(0), which would be treated as an error. Some platforms | ||
| 68 | would return a pointer with no memory behind it, which would break | ||
| 69 | pymalloc. To solve these problems, allocate an extra byte. */ | ||
| 70 | #define PyMem_MALLOC(n) malloc((n) ? (n) : 1) | ||
| 71 | #define PyMem_REALLOC(p, n) realloc((p), (n) ? (n) : 1) | ||
| 72 | #define PyMem_FREE free | ||
| 73 | |||
| 74 | #endif /* PYMALLOC_DEBUG */ | ||
| 75 | |||
| 76 | /* | ||
| 77 | * Type-oriented memory interface | ||
| 78 | * ============================== | ||
| 79 | * | ||
| 80 | * These are carried along for historical reasons. There's rarely a good | ||
| 81 | * reason to use them anymore (you can just as easily do the multiply and | ||
| 82 | * cast yourself). | ||
| 83 | */ | ||
| 84 | |||
| 85 | #define PyMem_New(type, n) \ | ||
| 86 | ( (type *) PyMem_Malloc((n) * sizeof(type)) ) | ||
| 87 | #define PyMem_NEW(type, n) \ | ||
| 88 | ( (type *) PyMem_MALLOC((n) * sizeof(type)) ) | ||
| 89 | |||
| 90 | #define PyMem_Resize(p, type, n) \ | ||
| 91 | ( (p) = (type *) PyMem_Realloc((p), (n) * sizeof(type)) ) | ||
| 92 | #define PyMem_RESIZE(p, type, n) \ | ||
| 93 | ( (p) = (type *) PyMem_REALLOC((p), (n) * sizeof(type)) ) | ||
| 94 | |||
| 95 | /* PyMem{Del,DEL} are left over from ancient days, and shouldn't be used | ||
| 96 | * anymore. They're just confusing aliases for PyMem_{Free,FREE} now. | ||
| 97 | */ | ||
| 98 | #define PyMem_Del PyMem_Free | ||
| 99 | #define PyMem_DEL PyMem_FREE | ||
| 100 | |||
| 101 | #ifdef __cplusplus | ||
| 102 | } | ||
| 103 | #endif | ||
| 104 | |||
| 105 | #endif /* !Py_PYMEM_H */ | ||
| @@ -0,0 +1,771 @@ | |||
| 1 | #ifndef Py_PYPORT_H | ||
| 2 | #define Py_PYPORT_H | ||
| 3 | |||
| 4 | #include "pyconfig.h" /* include for defines */ | ||
| 5 | |||
| 6 | #ifdef HAVE_STDINT_H | ||
| 7 | #include <stdint.h> | ||
| 8 | #endif | ||
| 9 | |||
| 10 | /************************************************************************** | ||
| 11 | Symbols and macros to supply platform-independent interfaces to basic | ||
| 12 | C language & library operations whose spellings vary across platforms. | ||
| 13 | |||
| 14 | Please try to make documentation here as clear as possible: by definition, | ||
| 15 | the stuff here is trying to illuminate C's darkest corners. | ||
| 16 | |||
| 17 | Config #defines referenced here: | ||
| 18 | |||
| 19 | SIGNED_RIGHT_SHIFT_ZERO_FILLS | ||
| 20 | Meaning: To be defined iff i>>j does not extend the sign bit when i is a | ||
| 21 | signed integral type and i < 0. | ||
| 22 | Used in: Py_ARITHMETIC_RIGHT_SHIFT | ||
| 23 | |||
| 24 | Py_DEBUG | ||
| 25 | Meaning: Extra checks compiled in for debug mode. | ||
| 26 | Used in: Py_SAFE_DOWNCAST | ||
| 27 | |||
| 28 | HAVE_UINTPTR_T | ||
| 29 | Meaning: The C9X type uintptr_t is supported by the compiler | ||
| 30 | Used in: Py_uintptr_t | ||
| 31 | |||
| 32 | HAVE_LONG_LONG | ||
| 33 | Meaning: The compiler supports the C type "long long" | ||
| 34 | Used in: PY_LONG_LONG | ||
| 35 | |||
| 36 | **************************************************************************/ | ||
| 37 | |||
| 38 | |||
| 39 | /* For backward compatibility only. Obsolete, do not use. */ | ||
| 40 | #ifdef HAVE_PROTOTYPES | ||
| 41 | #define Py_PROTO(x) x | ||
| 42 | #else | ||
| 43 | #define Py_PROTO(x) () | ||
| 44 | #endif | ||
| 45 | #ifndef Py_FPROTO | ||
| 46 | #define Py_FPROTO(x) Py_PROTO(x) | ||
| 47 | #endif | ||
| 48 | |||
| 49 | /* typedefs for some C9X-defined synonyms for integral types. | ||
| 50 | * | ||
| 51 | * The names in Python are exactly the same as the C9X names, except with a | ||
| 52 | * Py_ prefix. Until C9X is universally implemented, this is the only way | ||
| 53 | * to ensure that Python gets reliable names that don't conflict with names | ||
| 54 | * in non-Python code that are playing their own tricks to define the C9X | ||
| 55 | * names. | ||
| 56 | * | ||
| 57 | * NOTE: don't go nuts here! Python has no use for *most* of the C9X | ||
| 58 | * integral synonyms. Only define the ones we actually need. | ||
| 59 | */ | ||
| 60 | |||
| 61 | #ifdef HAVE_LONG_LONG | ||
| 62 | #ifndef PY_LONG_LONG | ||
| 63 | #define PY_LONG_LONG long long | ||
| 64 | #endif | ||
| 65 | #endif /* HAVE_LONG_LONG */ | ||
| 66 | |||
| 67 | /* uintptr_t is the C9X name for an unsigned integral type such that a | ||
| 68 | * legitimate void* can be cast to uintptr_t and then back to void* again | ||
| 69 | * without loss of information. Similarly for intptr_t, wrt a signed | ||
| 70 | * integral type. | ||
| 71 | */ | ||
| 72 | #ifdef HAVE_UINTPTR_T | ||
| 73 | typedef uintptr_t Py_uintptr_t; | ||
| 74 | typedef intptr_t Py_intptr_t; | ||
| 75 | |||
| 76 | #elif SIZEOF_VOID_P <= SIZEOF_INT | ||
| 77 | typedef unsigned int Py_uintptr_t; | ||
| 78 | typedef int Py_intptr_t; | ||
| 79 | |||
| 80 | #elif SIZEOF_VOID_P <= SIZEOF_LONG | ||
| 81 | typedef unsigned long Py_uintptr_t; | ||
| 82 | typedef long Py_intptr_t; | ||
| 83 | |||
| 84 | #elif defined(HAVE_LONG_LONG) && (SIZEOF_VOID_P <= SIZEOF_LONG_LONG) | ||
| 85 | typedef unsigned PY_LONG_LONG Py_uintptr_t; | ||
| 86 | typedef PY_LONG_LONG Py_intptr_t; | ||
| 87 | |||
| 88 | #else | ||
| 89 | # error "Python needs a typedef for Py_uintptr_t in pyport.h." | ||
| 90 | #endif /* HAVE_UINTPTR_T */ | ||
| 91 | |||
| 92 | /* Py_ssize_t is a signed integral type such that sizeof(Py_ssize_t) == | ||
| 93 | * sizeof(size_t). C99 doesn't define such a thing directly (size_t is an | ||
| 94 | * unsigned integral type). See PEP 353 for details. | ||
| 95 | */ | ||
| 96 | #ifdef HAVE_SSIZE_T | ||
| 97 | typedef ssize_t Py_ssize_t; | ||
| 98 | #elif SIZEOF_VOID_P == SIZEOF_SIZE_T | ||
| 99 | typedef Py_intptr_t Py_ssize_t; | ||
| 100 | #else | ||
| 101 | # error "Python needs a typedef for Py_ssize_t in pyport.h." | ||
| 102 | #endif | ||
| 103 | |||
| 104 | /* Largest positive value of type Py_ssize_t. */ | ||
| 105 | #define PY_SSIZE_T_MAX ((Py_ssize_t)(((size_t)-1)>>1)) | ||
| 106 | /* Smallest negative value of type Py_ssize_t. */ | ||
| 107 | #define PY_SSIZE_T_MIN (-PY_SSIZE_T_MAX-1) | ||
| 108 | |||
| 109 | /* PY_FORMAT_SIZE_T is a platform-specific modifier for use in a printf | ||
| 110 | * format to convert an argument with the width of a size_t or Py_ssize_t. | ||
| 111 | * C99 introduced "z" for this purpose, but not all platforms support that; | ||
| 112 | * e.g., MS compilers use "I" instead. | ||
| 113 | * | ||
| 114 | * These "high level" Python format functions interpret "z" correctly on | ||
| 115 | * all platforms (Python interprets the format string itself, and does whatever | ||
| 116 | * the platform C requires to convert a size_t/Py_ssize_t argument): | ||
| 117 | * | ||
| 118 | * PyString_FromFormat | ||
| 119 | * PyErr_Format | ||
| 120 | * PyString_FromFormatV | ||
| 121 | * | ||
| 122 | * Lower-level uses require that you interpolate the correct format modifier | ||
| 123 | * yourself (e.g., calling printf, fprintf, sprintf, PyOS_snprintf); for | ||
| 124 | * example, | ||
| 125 | * | ||
| 126 | * Py_ssize_t index; | ||
| 127 | * fprintf(stderr, "index %" PY_FORMAT_SIZE_T "d sucks\n", index); | ||
| 128 | * | ||
| 129 | * That will expand to %ld, or %Id, or to something else correct for a | ||
| 130 | * Py_ssize_t on the platform. | ||
| 131 | */ | ||
| 132 | #ifndef PY_FORMAT_SIZE_T | ||
| 133 | # if SIZEOF_SIZE_T == SIZEOF_INT && !defined(__APPLE__) | ||
| 134 | # define PY_FORMAT_SIZE_T "" | ||
| 135 | # elif SIZEOF_SIZE_T == SIZEOF_LONG | ||
| 136 | # define PY_FORMAT_SIZE_T "l" | ||
| 137 | # elif defined(MS_WINDOWS) | ||
| 138 | # define PY_FORMAT_SIZE_T "I" | ||
| 139 | # else | ||
| 140 | # error "This platform's pyconfig.h needs to define PY_FORMAT_SIZE_T" | ||
| 141 | # endif | ||
| 142 | #endif | ||
| 143 | |||
| 144 | /* Py_LOCAL can be used instead of static to get the fastest possible calling | ||
| 145 | * convention for functions that are local to a given module. | ||
| 146 | * | ||
| 147 | * Py_LOCAL_INLINE does the same thing, and also explicitly requests inlining, | ||
| 148 | * for platforms that support that. | ||
| 149 | * | ||
| 150 | * If PY_LOCAL_AGGRESSIVE is defined before python.h is included, more | ||
| 151 | * "aggressive" inlining/optimizaion is enabled for the entire module. This | ||
| 152 | * may lead to code bloat, and may slow things down for those reasons. It may | ||
| 153 | * also lead to errors, if the code relies on pointer aliasing. Use with | ||
| 154 | * care. | ||
| 155 | * | ||
| 156 | * NOTE: You can only use this for functions that are entirely local to a | ||
| 157 | * module; functions that are exported via method tables, callbacks, etc, | ||
| 158 | * should keep using static. | ||
| 159 | */ | ||
| 160 | |||
| 161 | #undef USE_INLINE /* XXX - set via configure? */ | ||
| 162 | |||
| 163 | #if defined(_MSC_VER) | ||
| 164 | #if defined(PY_LOCAL_AGGRESSIVE) | ||
| 165 | /* enable more aggressive optimization for visual studio */ | ||
| 166 | #pragma optimize("agtw", on) | ||
| 167 | #endif | ||
| 168 | /* ignore warnings if the compiler decides not to inline a function */ | ||
| 169 | #pragma warning(disable: 4710) | ||
| 170 | /* fastest possible local call under MSVC */ | ||
| 171 | #define Py_LOCAL(type) static type __fastcall | ||
| 172 | #define Py_LOCAL_INLINE(type) static __inline type __fastcall | ||
| 173 | #elif defined(USE_INLINE) | ||
| 174 | #define Py_LOCAL(type) static type | ||
| 175 | #define Py_LOCAL_INLINE(type) static inline type | ||
| 176 | #else | ||
| 177 | #define Py_LOCAL(type) static type | ||
| 178 | #define Py_LOCAL_INLINE(type) static type | ||
| 179 | #endif | ||
| 180 | |||
| 181 | /* Py_MEMCPY can be used instead of memcpy in cases where the copied blocks | ||
| 182 | * are often very short. While most platforms have highly optimized code for | ||
| 183 | * large transfers, the setup costs for memcpy are often quite high. MEMCPY | ||
| 184 | * solves this by doing short copies "in line". | ||
| 185 | */ | ||
| 186 | |||
| 187 | #if defined(_MSC_VER) | ||
| 188 | #define Py_MEMCPY(target, source, length) do { \ | ||
| 189 | size_t i_, n_ = (length); \ | ||
| 190 | char *t_ = (void*) (target); \ | ||
| 191 | const char *s_ = (void*) (source); \ | ||
| 192 | if (n_ >= 16) \ | ||
| 193 | memcpy(t_, s_, n_); \ | ||
| 194 | else \ | ||
| 195 | for (i_ = 0; i_ < n_; i_++) \ | ||
| 196 | t_[i_] = s_[i_]; \ | ||
| 197 | } while (0) | ||
| 198 | #else | ||
| 199 | #define Py_MEMCPY memcpy | ||
| 200 | #endif | ||
| 201 | |||
| 202 | #include <stdlib.h> | ||
| 203 | |||
| 204 | #include <math.h> /* Moved here from the math section, before extern "C" */ | ||
| 205 | |||
| 206 | /******************************************** | ||
| 207 | * WRAPPER FOR <time.h> and/or <sys/time.h> * | ||
| 208 | ********************************************/ | ||
| 209 | |||
| 210 | #ifdef TIME_WITH_SYS_TIME | ||
| 211 | #include <sys/time.h> | ||
| 212 | #include <time.h> | ||
| 213 | #else /* !TIME_WITH_SYS_TIME */ | ||
| 214 | #ifdef HAVE_SYS_TIME_H | ||
| 215 | #include <sys/time.h> | ||
| 216 | #else /* !HAVE_SYS_TIME_H */ | ||
| 217 | #include <time.h> | ||
| 218 | #endif /* !HAVE_SYS_TIME_H */ | ||
| 219 | #endif /* !TIME_WITH_SYS_TIME */ | ||
| 220 | |||
| 221 | |||
| 222 | /****************************** | ||
| 223 | * WRAPPER FOR <sys/select.h> * | ||
| 224 | ******************************/ | ||
| 225 | |||
| 226 | /* NB caller must include <sys/types.h> */ | ||
| 227 | |||
| 228 | #ifdef HAVE_SYS_SELECT_H | ||
| 229 | |||
| 230 | #include <sys/select.h> | ||
| 231 | |||
| 232 | #endif /* !HAVE_SYS_SELECT_H */ | ||
| 233 | |||
| 234 | /******************************* | ||
| 235 | * stat() and fstat() fiddling * | ||
| 236 | *******************************/ | ||
| 237 | |||
| 238 | /* We expect that stat and fstat exist on most systems. | ||
| 239 | * It's confirmed on Unix, Mac and Windows. | ||
| 240 | * If you don't have them, add | ||
| 241 | * #define DONT_HAVE_STAT | ||
| 242 | * and/or | ||
| 243 | * #define DONT_HAVE_FSTAT | ||
| 244 | * to your pyconfig.h. Python code beyond this should check HAVE_STAT and | ||
| 245 | * HAVE_FSTAT instead. | ||
| 246 | * Also | ||
| 247 | * #define HAVE_SYS_STAT_H | ||
| 248 | * if <sys/stat.h> exists on your platform, and | ||
| 249 | * #define HAVE_STAT_H | ||
| 250 | * if <stat.h> does. | ||
| 251 | */ | ||
| 252 | #ifndef DONT_HAVE_STAT | ||
| 253 | #define HAVE_STAT | ||
| 254 | #endif | ||
| 255 | |||
| 256 | #ifndef DONT_HAVE_FSTAT | ||
| 257 | #define HAVE_FSTAT | ||
| 258 | #endif | ||
| 259 | |||
| 260 | #ifdef RISCOS | ||
| 261 | #include <sys/types.h> | ||
| 262 | #include "unixstuff.h" | ||
| 263 | #endif | ||
| 264 | |||
| 265 | #ifdef HAVE_SYS_STAT_H | ||
| 266 | #if defined(PYOS_OS2) && defined(PYCC_GCC) | ||
| 267 | #include <sys/types.h> | ||
| 268 | #endif | ||
| 269 | #include <sys/stat.h> | ||
| 270 | #elif defined(HAVE_STAT_H) | ||
| 271 | #include <stat.h> | ||
| 272 | #endif | ||
| 273 | |||
| 274 | #if defined(PYCC_VACPP) | ||
| 275 | /* VisualAge C/C++ Failed to Define MountType Field in sys/stat.h */ | ||
| 276 | #define S_IFMT (S_IFDIR|S_IFCHR|S_IFREG) | ||
| 277 | #endif | ||
| 278 | |||
| 279 | #ifndef S_ISREG | ||
| 280 | #define S_ISREG(x) (((x) & S_IFMT) == S_IFREG) | ||
| 281 | #endif | ||
| 282 | |||
| 283 | #ifndef S_ISDIR | ||
| 284 | #define S_ISDIR(x) (((x) & S_IFMT) == S_IFDIR) | ||
| 285 | #endif | ||
| 286 | |||
| 287 | |||
| 288 | #ifdef __cplusplus | ||
| 289 | /* Move this down here since some C++ #include's don't like to be included | ||
| 290 | inside an extern "C" */ | ||
| 291 | extern "C" { | ||
| 292 | #endif | ||
| 293 | |||
| 294 | |||
| 295 | /* Py_ARITHMETIC_RIGHT_SHIFT | ||
| 296 | * C doesn't define whether a right-shift of a signed integer sign-extends | ||
| 297 | * or zero-fills. Here a macro to force sign extension: | ||
| 298 | * Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) | ||
| 299 | * Return I >> J, forcing sign extension. | ||
| 300 | * Requirements: | ||
| 301 | * I is of basic signed type TYPE (char, short, int, long, or long long). | ||
| 302 | * TYPE is one of char, short, int, long, or long long, although long long | ||
| 303 | * must not be used except on platforms that support it. | ||
| 304 | * J is an integer >= 0 and strictly less than the number of bits in TYPE | ||
| 305 | * (because C doesn't define what happens for J outside that range either). | ||
| 306 | * Caution: | ||
| 307 | * I may be evaluated more than once. | ||
| 308 | */ | ||
| 309 | #ifdef SIGNED_RIGHT_SHIFT_ZERO_FILLS | ||
| 310 | #define Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) \ | ||
| 311 | ((I) < 0 ? ~((~(unsigned TYPE)(I)) >> (J)) : (I) >> (J)) | ||
| 312 | #else | ||
| 313 | #define Py_ARITHMETIC_RIGHT_SHIFT(TYPE, I, J) ((I) >> (J)) | ||
| 314 | #endif | ||
| 315 | |||
| 316 | /* Py_FORCE_EXPANSION(X) | ||
| 317 | * "Simply" returns its argument. However, macro expansions within the | ||
| 318 | * argument are evaluated. This unfortunate trickery is needed to get | ||
| 319 | * token-pasting to work as desired in some cases. | ||
| 320 | */ | ||
| 321 | #define Py_FORCE_EXPANSION(X) X | ||
| 322 | |||
| 323 | /* Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) | ||
| 324 | * Cast VALUE to type NARROW from type WIDE. In Py_DEBUG mode, this | ||
| 325 | * assert-fails if any information is lost. | ||
| 326 | * Caution: | ||
| 327 | * VALUE may be evaluated more than once. | ||
| 328 | */ | ||
| 329 | #ifdef Py_DEBUG | ||
| 330 | #define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) \ | ||
| 331 | (assert((WIDE)(NARROW)(VALUE) == (VALUE)), (NARROW)(VALUE)) | ||
| 332 | #else | ||
| 333 | #define Py_SAFE_DOWNCAST(VALUE, WIDE, NARROW) (NARROW)(VALUE) | ||
| 334 | #endif | ||
| 335 | |||
| 336 | /* Py_IS_NAN(X) | ||
| 337 | * Return 1 if float or double arg is a NaN, else 0. | ||
| 338 | * Caution: | ||
| 339 | * X is evaluated more than once. | ||
| 340 | * This may not work on all platforms. Each platform has *some* | ||
| 341 | * way to spell this, though -- override in pyconfig.h if you have | ||
| 342 | * a platform where it doesn't work. | ||
| 343 | */ | ||
| 344 | #ifndef Py_IS_NAN | ||
| 345 | #define Py_IS_NAN(X) ((X) != (X)) | ||
| 346 | #endif | ||
| 347 | |||
| 348 | /* Py_IS_INFINITY(X) | ||
| 349 | * Return 1 if float or double arg is an infinity, else 0. | ||
| 350 | * Caution: | ||
| 351 | * X is evaluated more than once. | ||
| 352 | * This implementation may set the underflow flag if |X| is very small; | ||
| 353 | * it really can't be implemented correctly (& easily) before C99. | ||
| 354 | * Override in pyconfig.h if you have a better spelling on your platform. | ||
| 355 | */ | ||
| 356 | #ifndef Py_IS_INFINITY | ||
| 357 | #define Py_IS_INFINITY(X) ((X) && (X)*0.5 == (X)) | ||
| 358 | #endif | ||
| 359 | |||
| 360 | /* Py_IS_FINITE(X) | ||
| 361 | * Return 1 if float or double arg is neither infinite nor NAN, else 0. | ||
| 362 | * Some compilers (e.g. VisualStudio) have intrisics for this, so a special | ||
| 363 | * macro for this particular test is useful | ||
| 364 | */ | ||
| 365 | #ifndef Py_IS_FINITE | ||
| 366 | #define Py_IS_FINITE(X) (!Py_IS_INFINITY(X) && !Py_IS_NAN(X)) | ||
| 367 | #endif | ||
| 368 | |||
| 369 | /* HUGE_VAL is supposed to expand to a positive double infinity. Python | ||
| 370 | * uses Py_HUGE_VAL instead because some platforms are broken in this | ||
| 371 | * respect. We used to embed code in pyport.h to try to worm around that, | ||
| 372 | * but different platforms are broken in conflicting ways. If you're on | ||
| 373 | * a platform where HUGE_VAL is defined incorrectly, fiddle your Python | ||
| 374 | * config to #define Py_HUGE_VAL to something that works on your platform. | ||
| 375 | */ | ||
| 376 | #ifndef Py_HUGE_VAL | ||
| 377 | #define Py_HUGE_VAL HUGE_VAL | ||
| 378 | #endif | ||
| 379 | |||
| 380 | /* Py_OVERFLOWED(X) | ||
| 381 | * Return 1 iff a libm function overflowed. Set errno to 0 before calling | ||
| 382 | * a libm function, and invoke this macro after, passing the function | ||
| 383 | * result. | ||
| 384 | * Caution: | ||
| 385 | * This isn't reliable. C99 no longer requires libm to set errno under | ||
| 386 | * any exceptional condition, but does require +- HUGE_VAL return | ||
| 387 | * values on overflow. A 754 box *probably* maps HUGE_VAL to a | ||
| 388 | * double infinity, and we're cool if that's so, unless the input | ||
| 389 | * was an infinity and an infinity is the expected result. A C89 | ||
| 390 | * system sets errno to ERANGE, so we check for that too. We're | ||
| 391 | * out of luck if a C99 754 box doesn't map HUGE_VAL to +Inf, or | ||
| 392 | * if the returned result is a NaN, or if a C89 box returns HUGE_VAL | ||
| 393 | * in non-overflow cases. | ||
| 394 | * X is evaluated more than once. | ||
| 395 | * Some platforms have better way to spell this, so expect some #ifdef'ery. | ||
| 396 | * | ||
| 397 | * OpenBSD uses 'isinf()' because a compiler bug on that platform causes | ||
| 398 | * the longer macro version to be mis-compiled. This isn't optimal, and | ||
| 399 | * should be removed once a newer compiler is available on that platform. | ||
| 400 | * The system that had the failure was running OpenBSD 3.2 on Intel, with | ||
| 401 | * gcc 2.95.3. | ||
| 402 | * | ||
| 403 | * According to Tim's checkin, the FreeBSD systems use isinf() to work | ||
| 404 | * around a FPE bug on that platform. | ||
| 405 | */ | ||
| 406 | #if defined(__FreeBSD__) || defined(__OpenBSD__) | ||
| 407 | #define Py_OVERFLOWED(X) isinf(X) | ||
| 408 | #else | ||
| 409 | #define Py_OVERFLOWED(X) ((X) != 0.0 && (errno == ERANGE || \ | ||
| 410 | (X) == Py_HUGE_VAL || \ | ||
| 411 | (X) == -Py_HUGE_VAL)) | ||
| 412 | #endif | ||
| 413 | |||
| 414 | /* Py_SET_ERRNO_ON_MATH_ERROR(x) | ||
| 415 | * If a libm function did not set errno, but it looks like the result | ||
| 416 | * overflowed or not-a-number, set errno to ERANGE or EDOM. Set errno | ||
| 417 | * to 0 before calling a libm function, and invoke this macro after, | ||
| 418 | * passing the function result. | ||
| 419 | * Caution: | ||
| 420 | * This isn't reliable. See Py_OVERFLOWED comments. | ||
| 421 | * X is evaluated more than once. | ||
| 422 | */ | ||
| 423 | #if defined(__FreeBSD__) || defined(__OpenBSD__) || (defined(__hpux) && defined(__ia64)) | ||
| 424 | #define _Py_SET_EDOM_FOR_NAN(X) if (isnan(X)) errno = EDOM; | ||
| 425 | #else | ||
| 426 | #define _Py_SET_EDOM_FOR_NAN(X) ; | ||
| 427 | #endif | ||
| 428 | #define Py_SET_ERRNO_ON_MATH_ERROR(X) \ | ||
| 429 | do { \ | ||
| 430 | if (errno == 0) { \ | ||
| 431 | if ((X) == Py_HUGE_VAL || (X) == -Py_HUGE_VAL) \ | ||
| 432 | errno = ERANGE; \ | ||
| 433 | else _Py_SET_EDOM_FOR_NAN(X) \ | ||
| 434 | } \ | ||
| 435 | } while(0) | ||
| 436 | |||
| 437 | /* Py_SET_ERANGE_ON_OVERFLOW(x) | ||
| 438 | * An alias of Py_SET_ERRNO_ON_MATH_ERROR for backward-compatibility. | ||
| 439 | */ | ||
| 440 | #define Py_SET_ERANGE_IF_OVERFLOW(X) Py_SET_ERRNO_ON_MATH_ERROR(X) | ||
| 441 | |||
| 442 | /* Py_ADJUST_ERANGE1(x) | ||
| 443 | * Py_ADJUST_ERANGE2(x, y) | ||
| 444 | * Set errno to 0 before calling a libm function, and invoke one of these | ||
| 445 | * macros after, passing the function result(s) (Py_ADJUST_ERANGE2 is useful | ||
| 446 | * for functions returning complex results). This makes two kinds of | ||
| 447 | * adjustments to errno: (A) If it looks like the platform libm set | ||
| 448 | * errno=ERANGE due to underflow, clear errno. (B) If it looks like the | ||
| 449 | * platform libm overflowed but didn't set errno, force errno to ERANGE. In | ||
| 450 | * effect, we're trying to force a useful implementation of C89 errno | ||
| 451 | * behavior. | ||
| 452 | * Caution: | ||
| 453 | * This isn't reliable. See Py_OVERFLOWED comments. | ||
| 454 | * X and Y may be evaluated more than once. | ||
| 455 | */ | ||
| 456 | #define Py_ADJUST_ERANGE1(X) \ | ||
| 457 | do { \ | ||
| 458 | if (errno == 0) { \ | ||
| 459 | if ((X) == Py_HUGE_VAL || (X) == -Py_HUGE_VAL) \ | ||
| 460 | errno = ERANGE; \ | ||
| 461 | } \ | ||
| 462 | else if (errno == ERANGE && (X) == 0.0) \ | ||
| 463 | errno = 0; \ | ||
| 464 | } while(0) | ||
| 465 | |||
| 466 | #define Py_ADJUST_ERANGE2(X, Y) \ | ||
| 467 | do { \ | ||
| 468 | if ((X) == Py_HUGE_VAL || (X) == -Py_HUGE_VAL || \ | ||
| 469 | (Y) == Py_HUGE_VAL || (Y) == -Py_HUGE_VAL) { \ | ||
| 470 | if (errno == 0) \ | ||
| 471 | errno = ERANGE; \ | ||
| 472 | } \ | ||
| 473 | else if (errno == ERANGE) \ | ||
| 474 | errno = 0; \ | ||
| 475 | } while(0) | ||
| 476 | |||
| 477 | /* Py_DEPRECATED(version) | ||
| 478 | * Declare a variable, type, or function deprecated. | ||
| 479 | * Usage: | ||
| 480 | * extern int old_var Py_DEPRECATED(2.3); | ||
| 481 | * typedef int T1 Py_DEPRECATED(2.4); | ||
| 482 | * extern int x() Py_DEPRECATED(2.5); | ||
| 483 | */ | ||
| 484 | #if defined(__GNUC__) && ((__GNUC__ >= 4) || \ | ||
| 485 | (__GNUC__ == 3) && (__GNUC_MINOR__ >= 1)) | ||
| 486 | #define Py_DEPRECATED(VERSION_UNUSED) __attribute__((__deprecated__)) | ||
| 487 | #else | ||
| 488 | #define Py_DEPRECATED(VERSION_UNUSED) | ||
| 489 | #endif | ||
| 490 | |||
| 491 | /************************************************************************** | ||
| 492 | Prototypes that are missing from the standard include files on some systems | ||
| 493 | (and possibly only some versions of such systems.) | ||
| 494 | |||
| 495 | Please be conservative with adding new ones, document them and enclose them | ||
| 496 | in platform-specific #ifdefs. | ||
| 497 | **************************************************************************/ | ||
| 498 | |||
| 499 | #ifdef SOLARIS | ||
| 500 | /* Unchecked */ | ||
| 501 | extern int gethostname(char *, int); | ||
| 502 | #endif | ||
| 503 | |||
| 504 | #ifdef __BEOS__ | ||
| 505 | /* Unchecked */ | ||
| 506 | /* It's in the libs, but not the headers... - [cjh] */ | ||
| 507 | int shutdown( int, int ); | ||
| 508 | #endif | ||
| 509 | |||
| 510 | #ifdef HAVE__GETPTY | ||
| 511 | #include <sys/types.h> /* we need to import mode_t */ | ||
| 512 | extern char * _getpty(int *, int, mode_t, int); | ||
| 513 | #endif | ||
| 514 | |||
| 515 | #if defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY) | ||
| 516 | #if !defined(HAVE_PTY_H) && !defined(HAVE_LIBUTIL_H) | ||
| 517 | /* BSDI does not supply a prototype for the 'openpty' and 'forkpty' | ||
| 518 | functions, even though they are included in libutil. */ | ||
| 519 | #include <termios.h> | ||
| 520 | extern int openpty(int *, int *, char *, struct termios *, struct winsize *); | ||
| 521 | extern int forkpty(int *, char *, struct termios *, struct winsize *); | ||
| 522 | #endif /* !defined(HAVE_PTY_H) && !defined(HAVE_LIBUTIL_H) */ | ||
| 523 | #endif /* defined(HAVE_OPENPTY) || defined(HAVE_FORKPTY) */ | ||
| 524 | |||
| 525 | |||
| 526 | /* These are pulled from various places. It isn't obvious on what platforms | ||
| 527 | they are necessary, nor what the exact prototype should look like (which | ||
| 528 | is likely to vary between platforms!) If you find you need one of these | ||
| 529 | declarations, please move them to a platform-specific block and include | ||
| 530 | proper prototypes. */ | ||
| 531 | #if 0 | ||
| 532 | |||
| 533 | /* From Modules/resource.c */ | ||
| 534 | extern int getrusage(); | ||
| 535 | extern int getpagesize(); | ||
| 536 | |||
| 537 | /* From Python/sysmodule.c and Modules/posixmodule.c */ | ||
| 538 | extern int fclose(FILE *); | ||
| 539 | |||
| 540 | /* From Modules/posixmodule.c */ | ||
| 541 | extern int fdatasync(int); | ||
| 542 | #endif /* 0 */ | ||
| 543 | |||
| 544 | |||
| 545 | /************************ | ||
| 546 | * WRAPPER FOR <math.h> * | ||
| 547 | ************************/ | ||
| 548 | |||
| 549 | #ifndef HAVE_HYPOT | ||
| 550 | extern double hypot(double, double); | ||
| 551 | #endif | ||
| 552 | |||
| 553 | |||
| 554 | /* On 4.4BSD-descendants, ctype functions serves the whole range of | ||
| 555 | * wchar_t character set rather than single byte code points only. | ||
| 556 | * This characteristic can break some operations of string object | ||
| 557 | * including str.upper() and str.split() on UTF-8 locales. This | ||
| 558 | * workaround was provided by Tim Robbins of FreeBSD project. | ||
| 559 | */ | ||
| 560 | |||
| 561 | #ifdef __FreeBSD__ | ||
| 562 | #include <osreldate.h> | ||
| 563 | #if __FreeBSD_version > 500039 | ||
| 564 | #include <ctype.h> | ||
| 565 | #include <wctype.h> | ||
| 566 | #undef isalnum | ||
| 567 | #define isalnum(c) iswalnum(btowc(c)) | ||
| 568 | #undef isalpha | ||
| 569 | #define isalpha(c) iswalpha(btowc(c)) | ||
| 570 | #undef islower | ||
| 571 | #define islower(c) iswlower(btowc(c)) | ||
| 572 | #undef isspace | ||
| 573 | #define isspace(c) iswspace(btowc(c)) | ||
| 574 | #undef isupper | ||
| 575 | #define isupper(c) iswupper(btowc(c)) | ||
| 576 | #undef tolower | ||
| 577 | #define tolower(c) towlower(btowc(c)) | ||
| 578 | #undef toupper | ||
| 579 | #define toupper(c) towupper(btowc(c)) | ||
| 580 | #endif | ||
| 581 | #endif | ||
| 582 | |||
| 583 | |||
| 584 | /* Declarations for symbol visibility. | ||
| 585 | |||
| 586 | PyAPI_FUNC(type): Declares a public Python API function and return type | ||
| 587 | PyAPI_DATA(type): Declares public Python data and its type | ||
| 588 | PyMODINIT_FUNC: A Python module init function. If these functions are | ||
| 589 | inside the Python core, they are private to the core. | ||
| 590 | If in an extension module, it may be declared with | ||
| 591 | external linkage depending on the platform. | ||
| 592 | |||
| 593 | As a number of platforms support/require "__declspec(dllimport/dllexport)", | ||
| 594 | we support a HAVE_DECLSPEC_DLL macro to save duplication. | ||
| 595 | */ | ||
| 596 | |||
| 597 | /* | ||
| 598 | All windows ports, except cygwin, are handled in PC/pyconfig.h. | ||
| 599 | |||
| 600 | BeOS and cygwin are the only other autoconf platform requiring special | ||
| 601 | linkage handling and both of these use __declspec(). | ||
| 602 | */ | ||
| 603 | #if defined(__CYGWIN__) || defined(__BEOS__) | ||
| 604 | # define HAVE_DECLSPEC_DLL | ||
| 605 | #endif | ||
| 606 | |||
| 607 | /* only get special linkage if built as shared or platform is Cygwin */ | ||
| 608 | #if defined(Py_ENABLE_SHARED) || defined(__CYGWIN__) | ||
| 609 | # if defined(HAVE_DECLSPEC_DLL) | ||
| 610 | # ifdef Py_BUILD_CORE | ||
| 611 | # define PyAPI_FUNC(RTYPE) __declspec(dllexport) RTYPE | ||
| 612 | # define PyAPI_DATA(RTYPE) extern __declspec(dllexport) RTYPE | ||
| 613 | /* module init functions inside the core need no external linkage */ | ||
| 614 | /* except for Cygwin to handle embedding (FIXME: BeOS too?) */ | ||
| 615 | # if defined(__CYGWIN__) | ||
| 616 | # define PyMODINIT_FUNC __declspec(dllexport) void | ||
| 617 | # else /* __CYGWIN__ */ | ||
| 618 | # define PyMODINIT_FUNC void | ||
| 619 | # endif /* __CYGWIN__ */ | ||
| 620 | # else /* Py_BUILD_CORE */ | ||
| 621 | /* Building an extension module, or an embedded situation */ | ||
| 622 | /* public Python functions and data are imported */ | ||
| 623 | /* Under Cygwin, auto-import functions to prevent compilation */ | ||
| 624 | /* failures similar to http://python.org/doc/FAQ.html#3.24 */ | ||
| 625 | # if !defined(__CYGWIN__) | ||
| 626 | # define PyAPI_FUNC(RTYPE) __declspec(dllimport) RTYPE | ||
| 627 | # endif /* !__CYGWIN__ */ | ||
| 628 | # define PyAPI_DATA(RTYPE) extern __declspec(dllimport) RTYPE | ||
| 629 | /* module init functions outside the core must be exported */ | ||
| 630 | # if defined(__cplusplus) | ||
| 631 | # define PyMODINIT_FUNC extern "C" __declspec(dllexport) void | ||
| 632 | # else /* __cplusplus */ | ||
| 633 | # define PyMODINIT_FUNC __declspec(dllexport) void | ||
| 634 | # endif /* __cplusplus */ | ||
| 635 | # endif /* Py_BUILD_CORE */ | ||
| 636 | # endif /* HAVE_DECLSPEC */ | ||
| 637 | #endif /* Py_ENABLE_SHARED */ | ||
| 638 | |||
| 639 | /* If no external linkage macros defined by now, create defaults */ | ||
| 640 | #ifndef PyAPI_FUNC | ||
| 641 | # define PyAPI_FUNC(RTYPE) RTYPE | ||
| 642 | #endif | ||
| 643 | #ifndef PyAPI_DATA | ||
| 644 | # define PyAPI_DATA(RTYPE) extern RTYPE | ||
| 645 | #endif | ||
| 646 | #ifndef PyMODINIT_FUNC | ||
| 647 | # if defined(__cplusplus) | ||
| 648 | # define PyMODINIT_FUNC extern "C" void | ||
| 649 | # else /* __cplusplus */ | ||
| 650 | # define PyMODINIT_FUNC void | ||
| 651 | # endif /* __cplusplus */ | ||
| 652 | #endif | ||
| 653 | |||
| 654 | /* Deprecated DL_IMPORT and DL_EXPORT macros */ | ||
| 655 | #if defined(Py_ENABLE_SHARED) && defined (HAVE_DECLSPEC_DLL) | ||
| 656 | # if defined(Py_BUILD_CORE) | ||
| 657 | # define DL_IMPORT(RTYPE) __declspec(dllexport) RTYPE | ||
| 658 | # define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE | ||
| 659 | # else | ||
| 660 | # define DL_IMPORT(RTYPE) __declspec(dllimport) RTYPE | ||
| 661 | # define DL_EXPORT(RTYPE) __declspec(dllexport) RTYPE | ||
| 662 | # endif | ||
| 663 | #endif | ||
| 664 | #ifndef DL_EXPORT | ||
| 665 | # define DL_EXPORT(RTYPE) RTYPE | ||
| 666 | #endif | ||
| 667 | #ifndef DL_IMPORT | ||
| 668 | # define DL_IMPORT(RTYPE) RTYPE | ||
| 669 | #endif | ||
| 670 | /* End of deprecated DL_* macros */ | ||
| 671 | |||
| 672 | /* If the fd manipulation macros aren't defined, | ||
| 673 | here is a set that should do the job */ | ||
| 674 | |||
| 675 | #if 0 /* disabled and probably obsolete */ | ||
| 676 | |||
| 677 | #ifndef FD_SETSIZE | ||
| 678 | #define FD_SETSIZE 256 | ||
| 679 | #endif | ||
| 680 | |||
| 681 | #ifndef FD_SET | ||
| 682 | |||
| 683 | typedef long fd_mask; | ||
| 684 | |||
| 685 | #define NFDBITS (sizeof(fd_mask) * NBBY) /* bits per mask */ | ||
| 686 | #ifndef howmany | ||
| 687 | #define howmany(x, y) (((x)+((y)-1))/(y)) | ||
| 688 | #endif /* howmany */ | ||
| 689 | |||
| 690 | typedef struct fd_set { | ||
| 691 | fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)]; | ||
| 692 | } fd_set; | ||
| 693 | |||
| 694 | #define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS))) | ||
| 695 | #define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS))) | ||
| 696 | #define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS))) | ||
| 697 | #define FD_ZERO(p) memset((char *)(p), '\0', sizeof(*(p))) | ||
| 698 | |||
| 699 | #endif /* FD_SET */ | ||
| 700 | |||
| 701 | #endif /* fd manipulation macros */ | ||
| 702 | |||
| 703 | |||
| 704 | /* limits.h constants that may be missing */ | ||
| 705 | |||
| 706 | #ifndef INT_MAX | ||
| 707 | #define INT_MAX 2147483647 | ||
| 708 | #endif | ||
| 709 | |||
| 710 | #ifndef LONG_MAX | ||
| 711 | #if SIZEOF_LONG == 4 | ||
| 712 | #define LONG_MAX 0X7FFFFFFFL | ||
| 713 | #elif SIZEOF_LONG == 8 | ||
| 714 | #define LONG_MAX 0X7FFFFFFFFFFFFFFFL | ||
| 715 | #else | ||
| 716 | #error "could not set LONG_MAX in pyport.h" | ||
| 717 | #endif | ||
| 718 | #endif | ||
| 719 | |||
| 720 | #ifndef LONG_MIN | ||
| 721 | #define LONG_MIN (-LONG_MAX-1) | ||
| 722 | #endif | ||
| 723 | |||
| 724 | #ifndef LONG_BIT | ||
| 725 | #define LONG_BIT (8 * SIZEOF_LONG) | ||
| 726 | #endif | ||
| 727 | |||
| 728 | #if LONG_BIT != 8 * SIZEOF_LONG | ||
| 729 | /* 04-Oct-2000 LONG_BIT is apparently (mis)defined as 64 on some recent | ||
| 730 | * 32-bit platforms using gcc. We try to catch that here at compile-time | ||
| 731 | * rather than waiting for integer multiplication to trigger bogus | ||
| 732 | * overflows. | ||
| 733 | */ | ||
| 734 | #error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)." | ||
| 735 | #endif | ||
| 736 | |||
| 737 | #ifdef __cplusplus | ||
| 738 | } | ||
| 739 | #endif | ||
| 740 | |||
| 741 | /* | ||
| 742 | * Hide GCC attributes from compilers that don't support them. | ||
| 743 | */ | ||
| 744 | #if (!defined(__GNUC__) || __GNUC__ < 2 || \ | ||
| 745 | (__GNUC__ == 2 && __GNUC_MINOR__ < 7) ) && \ | ||
| 746 | !defined(RISCOS) | ||
| 747 | #define Py_GCC_ATTRIBUTE(x) | ||
| 748 | #else | ||
| 749 | #define Py_GCC_ATTRIBUTE(x) __attribute__(x) | ||
| 750 | #endif | ||
| 751 | |||
| 752 | /* Eliminate end-of-loop code not reached warnings from SunPro C | ||
| 753 | * when using do{...}while(0) macros | ||
| 754 | */ | ||
| 755 | #ifdef __SUNPRO_C | ||
| 756 | #pragma error_messages (off,E_END_OF_LOOP_CODE_NOT_REACHED) | ||
| 757 | #endif | ||
| 758 | |||
| 759 | /* | ||
| 760 | * Older Microsoft compilers don't support the C99 long long literal suffixes, | ||
| 761 | * so these will be defined in PC/pyconfig.h for those compilers. | ||
| 762 | */ | ||
| 763 | #ifndef Py_LL | ||
| 764 | #define Py_LL(x) x##LL | ||
| 765 | #endif | ||
| 766 | |||
| 767 | #ifndef Py_ULL | ||
| 768 | #define Py_ULL(x) Py_LL(x##U) | ||
| 769 | #endif | ||
| 770 | |||
| 771 | #endif /* Py_PYPORT_H */ | ||
| @@ -0,0 +1,195 @@ | |||
| 1 | |||
| 2 | /* Thread and interpreter state structures and their interfaces */ | ||
| 3 | |||
| 4 | |||
| 5 | #ifndef Py_PYSTATE_H | ||
| 6 | #define Py_PYSTATE_H | ||
| 7 | #ifdef __cplusplus | ||
| 8 | extern "C" { | ||
| 9 | #endif | ||
| 10 | |||
| 11 | /* State shared between threads */ | ||
| 12 | |||
| 13 | struct _ts; /* Forward */ | ||
| 14 | struct _is; /* Forward */ | ||
| 15 | |||
| 16 | typedef struct _is { | ||
| 17 | |||
| 18 | struct _is *next; | ||
| 19 | struct _ts *tstate_head; | ||
| 20 | |||
| 21 | PyObject *modules; | ||
| 22 | PyObject *sysdict; | ||
| 23 | PyObject *builtins; | ||
| 24 | PyObject *modules_reloading; | ||
| 25 | |||
| 26 | PyObject *codec_search_path; | ||
| 27 | PyObject *codec_search_cache; | ||
| 28 | PyObject *codec_error_registry; | ||
| 29 | |||
| 30 | #ifdef HAVE_DLOPEN | ||
| 31 | int dlopenflags; | ||
| 32 | #endif | ||
| 33 | #ifdef WITH_TSC | ||
| 34 | int tscdump; | ||
| 35 | #endif | ||
| 36 | |||
| 37 | } PyInterpreterState; | ||
| 38 | |||
| 39 | |||
| 40 | /* State unique per thread */ | ||
| 41 | |||
| 42 | struct _frame; /* Avoid including frameobject.h */ | ||
| 43 | |||
| 44 | /* Py_tracefunc return -1 when raising an exception, or 0 for success. */ | ||
| 45 | typedef int (*Py_tracefunc)(PyObject *, struct _frame *, int, PyObject *); | ||
| 46 | |||
| 47 | /* The following values are used for 'what' for tracefunc functions: */ | ||
| 48 | #define PyTrace_CALL 0 | ||
| 49 | #define PyTrace_EXCEPTION 1 | ||
| 50 | #define PyTrace_LINE 2 | ||
| 51 | #define PyTrace_RETURN 3 | ||
| 52 | #define PyTrace_C_CALL 4 | ||
| 53 | #define PyTrace_C_EXCEPTION 5 | ||
| 54 | #define PyTrace_C_RETURN 6 | ||
| 55 | |||
| 56 | typedef struct _ts { | ||
| 57 | /* See Python/ceval.c for comments explaining most fields */ | ||
| 58 | |||
| 59 | struct _ts *next; | ||
| 60 | PyInterpreterState *interp; | ||
| 61 | |||
| 62 | struct _frame *frame; | ||
| 63 | int recursion_depth; | ||
| 64 | /* 'tracing' keeps track of the execution depth when tracing/profiling. | ||
| 65 | This is to prevent the actual trace/profile code from being recorded in | ||
| 66 | the trace/profile. */ | ||
| 67 | int tracing; | ||
| 68 | int use_tracing; | ||
| 69 | |||
| 70 | Py_tracefunc c_profilefunc; | ||
| 71 | Py_tracefunc c_tracefunc; | ||
| 72 | PyObject *c_profileobj; | ||
| 73 | PyObject *c_traceobj; | ||
| 74 | |||
| 75 | PyObject *curexc_type; | ||
| 76 | PyObject *curexc_value; | ||
| 77 | PyObject *curexc_traceback; | ||
| 78 | |||
| 79 | PyObject *exc_type; | ||
| 80 | PyObject *exc_value; | ||
| 81 | PyObject *exc_traceback; | ||
| 82 | |||
| 83 | PyObject *dict; /* Stores per-thread state */ | ||
| 84 | |||
| 85 | /* tick_counter is incremented whenever the check_interval ticker | ||
| 86 | * reaches zero. The purpose is to give a useful measure of the number | ||
| 87 | * of interpreted bytecode instructions in a given thread. This | ||
| 88 | * extremely lightweight statistic collector may be of interest to | ||
| 89 | * profilers (like psyco.jit()), although nothing in the core uses it. | ||
| 90 | */ | ||
| 91 | int tick_counter; | ||
| 92 | |||
| 93 | int gilstate_counter; | ||
| 94 | |||
| 95 | PyObject *async_exc; /* Asynchronous exception to raise */ | ||
| 96 | long thread_id; /* Thread id where this tstate was created */ | ||
| 97 | |||
| 98 | /* XXX signal handlers should also be here */ | ||
| 99 | |||
| 100 | } PyThreadState; | ||
| 101 | |||
| 102 | |||
| 103 | PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_New(void); | ||
| 104 | PyAPI_FUNC(void) PyInterpreterState_Clear(PyInterpreterState *); | ||
| 105 | PyAPI_FUNC(void) PyInterpreterState_Delete(PyInterpreterState *); | ||
| 106 | |||
| 107 | PyAPI_FUNC(PyThreadState *) PyThreadState_New(PyInterpreterState *); | ||
| 108 | PyAPI_FUNC(void) PyThreadState_Clear(PyThreadState *); | ||
| 109 | PyAPI_FUNC(void) PyThreadState_Delete(PyThreadState *); | ||
| 110 | #ifdef WITH_THREAD | ||
| 111 | PyAPI_FUNC(void) PyThreadState_DeleteCurrent(void); | ||
| 112 | #endif | ||
| 113 | |||
| 114 | PyAPI_FUNC(PyThreadState *) PyThreadState_Get(void); | ||
| 115 | PyAPI_FUNC(PyThreadState *) PyThreadState_Swap(PyThreadState *); | ||
| 116 | PyAPI_FUNC(PyObject *) PyThreadState_GetDict(void); | ||
| 117 | PyAPI_FUNC(int) PyThreadState_SetAsyncExc(long, PyObject *); | ||
| 118 | |||
| 119 | |||
| 120 | /* Variable and macro for in-line access to current thread state */ | ||
| 121 | |||
| 122 | PyAPI_DATA(PyThreadState *) _PyThreadState_Current; | ||
| 123 | |||
| 124 | #ifdef Py_DEBUG | ||
| 125 | #define PyThreadState_GET() PyThreadState_Get() | ||
| 126 | #else | ||
| 127 | #define PyThreadState_GET() (_PyThreadState_Current) | ||
| 128 | #endif | ||
| 129 | |||
| 130 | typedef | ||
| 131 | enum {PyGILState_LOCKED, PyGILState_UNLOCKED} | ||
| 132 | PyGILState_STATE; | ||
| 133 | |||
| 134 | /* Ensure that the current thread is ready to call the Python | ||
| 135 | C API, regardless of the current state of Python, or of its | ||
| 136 | thread lock. This may be called as many times as desired | ||
| 137 | by a thread so long as each call is matched with a call to | ||
| 138 | PyGILState_Release(). In general, other thread-state APIs may | ||
| 139 | be used between _Ensure() and _Release() calls, so long as the | ||
| 140 | thread-state is restored to its previous state before the Release(). | ||
| 141 | For example, normal use of the Py_BEGIN_ALLOW_THREADS/ | ||
| 142 | Py_END_ALLOW_THREADS macros are acceptable. | ||
| 143 | |||
| 144 | The return value is an opaque "handle" to the thread state when | ||
| 145 | PyGILState_Ensure() was called, and must be passed to | ||
| 146 | PyGILState_Release() to ensure Python is left in the same state. Even | ||
| 147 | though recursive calls are allowed, these handles can *not* be shared - | ||
| 148 | each unique call to PyGILState_Ensure must save the handle for its | ||
| 149 | call to PyGILState_Release. | ||
| 150 | |||
| 151 | When the function returns, the current thread will hold the GIL. | ||
| 152 | |||
| 153 | Failure is a fatal error. | ||
| 154 | */ | ||
| 155 | PyAPI_FUNC(PyGILState_STATE) PyGILState_Ensure(void); | ||
| 156 | |||
| 157 | /* Release any resources previously acquired. After this call, Python's | ||
| 158 | state will be the same as it was prior to the corresponding | ||
| 159 | PyGILState_Ensure() call (but generally this state will be unknown to | ||
| 160 | the caller, hence the use of the GILState API.) | ||
| 161 | |||
| 162 | Every call to PyGILState_Ensure must be matched by a call to | ||
| 163 | PyGILState_Release on the same thread. | ||
| 164 | */ | ||
| 165 | PyAPI_FUNC(void) PyGILState_Release(PyGILState_STATE); | ||
| 166 | |||
| 167 | /* Helper/diagnostic function - get the current thread state for | ||
| 168 | this thread. May return NULL if no GILState API has been used | ||
| 169 | on the current thread. Note the main thread always has such a | ||
| 170 | thread-state, even if no auto-thread-state call has been made | ||
| 171 | on the main thread. | ||
| 172 | */ | ||
| 173 | PyAPI_FUNC(PyThreadState *) PyGILState_GetThisThreadState(void); | ||
| 174 | |||
| 175 | /* The implementation of sys._current_frames() Returns a dict mapping | ||
| 176 | thread id to that thread's current frame. | ||
| 177 | */ | ||
| 178 | PyAPI_FUNC(PyObject *) _PyThread_CurrentFrames(void); | ||
| 179 | |||
| 180 | /* Routines for advanced debuggers, requested by David Beazley. | ||
| 181 | Don't use unless you know what you are doing! */ | ||
| 182 | PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Head(void); | ||
| 183 | PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Next(PyInterpreterState *); | ||
| 184 | PyAPI_FUNC(PyThreadState *) PyInterpreterState_ThreadHead(PyInterpreterState *); | ||
| 185 | PyAPI_FUNC(PyThreadState *) PyThreadState_Next(PyThreadState *); | ||
| 186 | |||
| 187 | typedef struct _frame *(*PyThreadFrameGetter)(PyThreadState *self_); | ||
| 188 | |||
| 189 | /* hook for PyEval_GetFrame(), requested for Psyco */ | ||
| 190 | PyAPI_DATA(PyThreadFrameGetter) _PyThreadState_GetFrame; | ||
| 191 | |||
| 192 | #ifdef __cplusplus | ||
| 193 | } | ||
| 194 | #endif | ||
| 195 | #endif /* !Py_PYSTATE_H */ | ||
| @@ -0,0 +1,18 @@ | |||
| 1 | #ifndef Py_STRTOD_H | ||
| 2 | #define Py_STRTOD_H | ||
| 3 | |||
| 4 | #ifdef __cplusplus | ||
| 5 | extern "C" { | ||
| 6 | #endif | ||
| 7 | |||
| 8 | |||
| 9 | PyAPI_FUNC(double) PyOS_ascii_strtod(const char *str, char **ptr); | ||
| 10 | PyAPI_FUNC(double) PyOS_ascii_atof(const char *str); | ||
| 11 | PyAPI_FUNC(char *) PyOS_ascii_formatd(char *buffer, size_t buf_len, const char *format, double d); | ||
| 12 | |||
| 13 | |||
| 14 | #ifdef __cplusplus | ||
| 15 | } | ||
| 16 | #endif | ||
| 17 | |||
| 18 | #endif /* !Py_STRTOD_H */ | ||
| @@ -0,0 +1,171 @@ | |||
| 1 | |||
| 2 | /* Interfaces to parse and execute pieces of python code */ | ||
| 3 | |||
| 4 | #ifndef Py_PYTHONRUN_H | ||
| 5 | #define Py_PYTHONRUN_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | #define PyCF_MASK (CO_FUTURE_DIVISION | CO_FUTURE_ABSOLUTE_IMPORT | \ | ||
| 11 | CO_FUTURE_WITH_STATEMENT) | ||
| 12 | #define PyCF_MASK_OBSOLETE (CO_NESTED) | ||
| 13 | #define PyCF_SOURCE_IS_UTF8 0x0100 | ||
| 14 | #define PyCF_DONT_IMPLY_DEDENT 0x0200 | ||
| 15 | #define PyCF_ONLY_AST 0x0400 | ||
| 16 | |||
| 17 | typedef struct { | ||
| 18 | int cf_flags; /* bitmask of CO_xxx flags relevant to future */ | ||
| 19 | } PyCompilerFlags; | ||
| 20 | |||
| 21 | PyAPI_FUNC(void) Py_SetProgramName(char *); | ||
| 22 | PyAPI_FUNC(char *) Py_GetProgramName(void); | ||
| 23 | |||
| 24 | PyAPI_FUNC(void) Py_SetPythonHome(char *); | ||
| 25 | PyAPI_FUNC(char *) Py_GetPythonHome(void); | ||
| 26 | |||
| 27 | PyAPI_FUNC(void) Py_Initialize(void); | ||
| 28 | PyAPI_FUNC(void) Py_InitializeEx(int); | ||
| 29 | PyAPI_FUNC(void) Py_Finalize(void); | ||
| 30 | PyAPI_FUNC(int) Py_IsInitialized(void); | ||
| 31 | PyAPI_FUNC(PyThreadState *) Py_NewInterpreter(void); | ||
| 32 | PyAPI_FUNC(void) Py_EndInterpreter(PyThreadState *); | ||
| 33 | |||
| 34 | PyAPI_FUNC(int) PyRun_AnyFileFlags(FILE *, const char *, PyCompilerFlags *); | ||
| 35 | PyAPI_FUNC(int) PyRun_AnyFileExFlags(FILE *, const char *, int, PyCompilerFlags *); | ||
| 36 | PyAPI_FUNC(int) PyRun_SimpleStringFlags(const char *, PyCompilerFlags *); | ||
| 37 | PyAPI_FUNC(int) PyRun_SimpleFileExFlags(FILE *, const char *, int, PyCompilerFlags *); | ||
| 38 | PyAPI_FUNC(int) PyRun_InteractiveOneFlags(FILE *, const char *, PyCompilerFlags *); | ||
| 39 | PyAPI_FUNC(int) PyRun_InteractiveLoopFlags(FILE *, const char *, PyCompilerFlags *); | ||
| 40 | |||
| 41 | PyAPI_FUNC(struct _mod *) PyParser_ASTFromString(const char *, const char *, | ||
| 42 | int, PyCompilerFlags *flags, | ||
| 43 | PyArena *); | ||
| 44 | PyAPI_FUNC(struct _mod *) PyParser_ASTFromFile(FILE *, const char *, int, | ||
| 45 | char *, char *, | ||
| 46 | PyCompilerFlags *, int *, | ||
| 47 | PyArena *); | ||
| 48 | #define PyParser_SimpleParseString(S, B) \ | ||
| 49 | PyParser_SimpleParseStringFlags(S, B, 0) | ||
| 50 | #define PyParser_SimpleParseFile(FP, S, B) \ | ||
| 51 | PyParser_SimpleParseFileFlags(FP, S, B, 0) | ||
| 52 | PyAPI_FUNC(struct _node *) PyParser_SimpleParseStringFlags(const char *, int, | ||
| 53 | int); | ||
| 54 | PyAPI_FUNC(struct _node *) PyParser_SimpleParseFileFlags(FILE *, const char *, | ||
| 55 | int, int); | ||
| 56 | |||
| 57 | PyAPI_FUNC(PyObject *) PyRun_StringFlags(const char *, int, PyObject *, | ||
| 58 | PyObject *, PyCompilerFlags *); | ||
| 59 | |||
| 60 | PyAPI_FUNC(PyObject *) PyRun_FileExFlags(FILE *, const char *, int, | ||
| 61 | PyObject *, PyObject *, int, | ||
| 62 | PyCompilerFlags *); | ||
| 63 | |||
| 64 | #define Py_CompileString(str, p, s) Py_CompileStringFlags(str, p, s, NULL) | ||
| 65 | PyAPI_FUNC(PyObject *) Py_CompileStringFlags(const char *, const char *, int, | ||
| 66 | PyCompilerFlags *); | ||
| 67 | PyAPI_FUNC(struct symtable *) Py_SymtableString(const char *, const char *, int); | ||
| 68 | |||
| 69 | PyAPI_FUNC(void) PyErr_Print(void); | ||
| 70 | PyAPI_FUNC(void) PyErr_PrintEx(int); | ||
| 71 | PyAPI_FUNC(void) PyErr_Display(PyObject *, PyObject *, PyObject *); | ||
| 72 | |||
| 73 | PyAPI_FUNC(int) Py_AtExit(void (*func)(void)); | ||
| 74 | |||
| 75 | PyAPI_FUNC(void) Py_Exit(int); | ||
| 76 | |||
| 77 | PyAPI_FUNC(int) Py_FdIsInteractive(FILE *, const char *); | ||
| 78 | |||
| 79 | /* Bootstrap */ | ||
| 80 | PyAPI_FUNC(int) Py_Main(int argc, char **argv); | ||
| 81 | |||
| 82 | /* Use macros for a bunch of old variants */ | ||
| 83 | #define PyRun_String(str, s, g, l) PyRun_StringFlags(str, s, g, l, NULL) | ||
| 84 | #define PyRun_AnyFile(fp, name) PyRun_AnyFileExFlags(fp, name, 0, NULL) | ||
| 85 | #define PyRun_AnyFileEx(fp, name, closeit) \ | ||
| 86 | PyRun_AnyFileExFlags(fp, name, closeit, NULL) | ||
| 87 | #define PyRun_AnyFileFlags(fp, name, flags) \ | ||
| 88 | PyRun_AnyFileExFlags(fp, name, 0, flags) | ||
| 89 | #define PyRun_SimpleString(s) PyRun_SimpleStringFlags(s, NULL) | ||
| 90 | #define PyRun_SimpleFile(f, p) PyRun_SimpleFileExFlags(f, p, 0, NULL) | ||
| 91 | #define PyRun_SimpleFileEx(f, p, c) PyRun_SimpleFileExFlags(f, p, c, NULL) | ||
| 92 | #define PyRun_InteractiveOne(f, p) PyRun_InteractiveOneFlags(f, p, NULL) | ||
| 93 | #define PyRun_InteractiveLoop(f, p) PyRun_InteractiveLoopFlags(f, p, NULL) | ||
| 94 | #define PyRun_File(fp, p, s, g, l) \ | ||
| 95 | PyRun_FileExFlags(fp, p, s, g, l, 0, NULL) | ||
| 96 | #define PyRun_FileEx(fp, p, s, g, l, c) \ | ||
| 97 | PyRun_FileExFlags(fp, p, s, g, l, c, NULL) | ||
| 98 | #define PyRun_FileFlags(fp, p, s, g, l, flags) \ | ||
| 99 | PyRun_FileExFlags(fp, p, s, g, l, 0, flags) | ||
| 100 | |||
| 101 | /* In getpath.c */ | ||
| 102 | PyAPI_FUNC(char *) Py_GetProgramFullPath(void); | ||
| 103 | PyAPI_FUNC(char *) Py_GetPrefix(void); | ||
| 104 | PyAPI_FUNC(char *) Py_GetExecPrefix(void); | ||
| 105 | PyAPI_FUNC(char *) Py_GetPath(void); | ||
| 106 | |||
| 107 | /* In their own files */ | ||
| 108 | PyAPI_FUNC(const char *) Py_GetVersion(void); | ||
| 109 | PyAPI_FUNC(const char *) Py_GetPlatform(void); | ||
| 110 | PyAPI_FUNC(const char *) Py_GetCopyright(void); | ||
| 111 | PyAPI_FUNC(const char *) Py_GetCompiler(void); | ||
| 112 | PyAPI_FUNC(const char *) Py_GetBuildInfo(void); | ||
| 113 | PyAPI_FUNC(const char *) _Py_svnversion(void); | ||
| 114 | PyAPI_FUNC(const char *) Py_SubversionRevision(void); | ||
| 115 | PyAPI_FUNC(const char *) Py_SubversionShortBranch(void); | ||
| 116 | |||
| 117 | /* Internal -- various one-time initializations */ | ||
| 118 | PyAPI_FUNC(PyObject *) _PyBuiltin_Init(void); | ||
| 119 | PyAPI_FUNC(PyObject *) _PySys_Init(void); | ||
| 120 | PyAPI_FUNC(void) _PyImport_Init(void); | ||
| 121 | PyAPI_FUNC(void) _PyExc_Init(void); | ||
| 122 | PyAPI_FUNC(void) _PyImportHooks_Init(void); | ||
| 123 | PyAPI_FUNC(int) _PyFrame_Init(void); | ||
| 124 | PyAPI_FUNC(int) _PyInt_Init(void); | ||
| 125 | PyAPI_FUNC(void) _PyFloat_Init(void); | ||
| 126 | |||
| 127 | /* Various internal finalizers */ | ||
| 128 | PyAPI_FUNC(void) _PyExc_Fini(void); | ||
| 129 | PyAPI_FUNC(void) _PyImport_Fini(void); | ||
| 130 | PyAPI_FUNC(void) PyMethod_Fini(void); | ||
| 131 | PyAPI_FUNC(void) PyFrame_Fini(void); | ||
| 132 | PyAPI_FUNC(void) PyCFunction_Fini(void); | ||
| 133 | PyAPI_FUNC(void) PyTuple_Fini(void); | ||
| 134 | PyAPI_FUNC(void) PyList_Fini(void); | ||
| 135 | PyAPI_FUNC(void) PySet_Fini(void); | ||
| 136 | PyAPI_FUNC(void) PyString_Fini(void); | ||
| 137 | PyAPI_FUNC(void) PyInt_Fini(void); | ||
| 138 | PyAPI_FUNC(void) PyFloat_Fini(void); | ||
| 139 | PyAPI_FUNC(void) PyOS_FiniInterrupts(void); | ||
| 140 | |||
| 141 | /* Stuff with no proper home (yet) */ | ||
| 142 | PyAPI_FUNC(char *) PyOS_Readline(FILE *, FILE *, char *); | ||
| 143 | PyAPI_DATA(int) (*PyOS_InputHook)(void); | ||
| 144 | PyAPI_DATA(char) *(*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, char *); | ||
| 145 | PyAPI_DATA(PyThreadState*) _PyOS_ReadlineTState; | ||
| 146 | |||
| 147 | /* Stack size, in "pointers" (so we get extra safety margins | ||
| 148 | on 64-bit platforms). On a 32-bit platform, this translates | ||
| 149 | to a 8k margin. */ | ||
| 150 | #define PYOS_STACK_MARGIN 2048 | ||
| 151 | |||
| 152 | #if defined(WIN32) && !defined(MS_WIN64) && defined(_MSC_VER) | ||
| 153 | /* Enable stack checking under Microsoft C */ | ||
| 154 | #define USE_STACKCHECK | ||
| 155 | #endif | ||
| 156 | |||
| 157 | #ifdef USE_STACKCHECK | ||
| 158 | /* Check that we aren't overflowing our stack */ | ||
| 159 | PyAPI_FUNC(int) PyOS_CheckStack(void); | ||
| 160 | #endif | ||
| 161 | |||
| 162 | /* Signals */ | ||
| 163 | typedef void (*PyOS_sighandler_t)(int); | ||
| 164 | PyAPI_FUNC(PyOS_sighandler_t) PyOS_getsig(int); | ||
| 165 | PyAPI_FUNC(PyOS_sighandler_t) PyOS_setsig(int, PyOS_sighandler_t); | ||
| 166 | |||
| 167 | |||
| 168 | #ifdef __cplusplus | ||
| 169 | } | ||
| 170 | #endif | ||
| 171 | #endif /* !Py_PYTHONRUN_H */ | ||
| @@ -0,0 +1,47 @@ | |||
| 1 | |||
| 2 | #ifndef Py_PYTHREAD_H | ||
| 3 | #define Py_PYTHREAD_H | ||
| 4 | |||
| 5 | #define NO_EXIT_PROG /* don't define PyThread_exit_prog() */ | ||
| 6 | /* (the result is no use of signals on SGI) */ | ||
| 7 | |||
| 8 | typedef void *PyThread_type_lock; | ||
| 9 | typedef void *PyThread_type_sema; | ||
| 10 | |||
| 11 | #ifdef __cplusplus | ||
| 12 | extern "C" { | ||
| 13 | #endif | ||
| 14 | |||
| 15 | PyAPI_FUNC(void) PyThread_init_thread(void); | ||
| 16 | PyAPI_FUNC(long) PyThread_start_new_thread(void (*)(void *), void *); | ||
| 17 | PyAPI_FUNC(void) PyThread_exit_thread(void); | ||
| 18 | PyAPI_FUNC(void) PyThread__PyThread_exit_thread(void); | ||
| 19 | PyAPI_FUNC(long) PyThread_get_thread_ident(void); | ||
| 20 | |||
| 21 | PyAPI_FUNC(PyThread_type_lock) PyThread_allocate_lock(void); | ||
| 22 | PyAPI_FUNC(void) PyThread_free_lock(PyThread_type_lock); | ||
| 23 | PyAPI_FUNC(int) PyThread_acquire_lock(PyThread_type_lock, int); | ||
| 24 | #define WAIT_LOCK 1 | ||
| 25 | #define NOWAIT_LOCK 0 | ||
| 26 | PyAPI_FUNC(void) PyThread_release_lock(PyThread_type_lock); | ||
| 27 | |||
| 28 | PyAPI_FUNC(size_t) PyThread_get_stacksize(void); | ||
| 29 | PyAPI_FUNC(int) PyThread_set_stacksize(size_t); | ||
| 30 | |||
| 31 | #ifndef NO_EXIT_PROG | ||
| 32 | PyAPI_FUNC(void) PyThread_exit_prog(int); | ||
| 33 | PyAPI_FUNC(void) PyThread__PyThread_exit_prog(int); | ||
| 34 | #endif | ||
| 35 | |||
| 36 | /* Thread Local Storage (TLS) API */ | ||
| 37 | PyAPI_FUNC(int) PyThread_create_key(void); | ||
| 38 | PyAPI_FUNC(void) PyThread_delete_key(int); | ||
| 39 | PyAPI_FUNC(int) PyThread_set_key_value(int, void *); | ||
| 40 | PyAPI_FUNC(void *) PyThread_get_key_value(int); | ||
| 41 | PyAPI_FUNC(void) PyThread_delete_key_value(int key); | ||
| 42 | |||
| 43 | #ifdef __cplusplus | ||
| 44 | } | ||
| 45 | #endif | ||
| 46 | |||
| 47 | #endif /* !Py_PYTHREAD_H */ | ||
| @@ -0,0 +1,28 @@ | |||
| 1 | |||
| 2 | /* Range object interface */ | ||
| 3 | |||
| 4 | #ifndef Py_RANGEOBJECT_H | ||
| 5 | #define Py_RANGEOBJECT_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | /* This is about the type 'xrange', not the built-in function range(), which | ||
| 11 | returns regular lists. */ | ||
| 12 | |||
| 13 | /* | ||
| 14 | A range object represents an integer range. This is an immutable object; | ||
| 15 | a range cannot change its value after creation. | ||
| 16 | |||
| 17 | Range objects behave like the corresponding tuple objects except that | ||
| 18 | they are represented by a start, stop, and step datamembers. | ||
| 19 | */ | ||
| 20 | |||
| 21 | PyAPI_DATA(PyTypeObject) PyRange_Type; | ||
| 22 | |||
| 23 | #define PyRange_Check(op) ((op)->ob_type == &PyRange_Type) | ||
| 24 | |||
| 25 | #ifdef __cplusplus | ||
| 26 | } | ||
| 27 | #endif | ||
| 28 | #endif /* !Py_RANGEOBJECT_H */ | ||
| @@ -0,0 +1,93 @@ | |||
| 1 | /* Set object interface */ | ||
| 2 | |||
| 3 | #ifndef Py_SETOBJECT_H | ||
| 4 | #define Py_SETOBJECT_H | ||
| 5 | #ifdef __cplusplus | ||
| 6 | extern "C" { | ||
| 7 | #endif | ||
| 8 | |||
| 9 | |||
| 10 | /* | ||
| 11 | There are three kinds of slots in the table: | ||
| 12 | |||
| 13 | 1. Unused: key == NULL | ||
| 14 | 2. Active: key != NULL and key != dummy | ||
| 15 | 3. Dummy: key == dummy | ||
| 16 | |||
| 17 | Note: .pop() abuses the hash field of an Unused or Dummy slot to | ||
| 18 | hold a search finger. The hash field of Unused or Dummy slots has | ||
| 19 | no meaning otherwise. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #define PySet_MINSIZE 8 | ||
| 23 | |||
| 24 | typedef struct { | ||
| 25 | long hash; /* cached hash code for the entry key */ | ||
| 26 | PyObject *key; | ||
| 27 | } setentry; | ||
| 28 | |||
| 29 | |||
| 30 | /* | ||
| 31 | This data structure is shared by set and frozenset objects. | ||
| 32 | */ | ||
| 33 | |||
| 34 | typedef struct _setobject PySetObject; | ||
| 35 | struct _setobject { | ||
| 36 | PyObject_HEAD | ||
| 37 | |||
| 38 | Py_ssize_t fill; /* # Active + # Dummy */ | ||
| 39 | Py_ssize_t used; /* # Active */ | ||
| 40 | |||
| 41 | /* The table contains mask + 1 slots, and that's a power of 2. | ||
| 42 | * We store the mask instead of the size because the mask is more | ||
| 43 | * frequently needed. | ||
| 44 | */ | ||
| 45 | Py_ssize_t mask; | ||
| 46 | |||
| 47 | /* table points to smalltable for small tables, else to | ||
| 48 | * additional malloc'ed memory. table is never NULL! This rule | ||
| 49 | * saves repeated runtime null-tests. | ||
| 50 | */ | ||
| 51 | setentry *table; | ||
| 52 | setentry *(*lookup)(PySetObject *so, PyObject *key, long hash); | ||
| 53 | setentry smalltable[PySet_MINSIZE]; | ||
| 54 | |||
| 55 | long hash; /* only used by frozenset objects */ | ||
| 56 | PyObject *weakreflist; /* List of weak references */ | ||
| 57 | }; | ||
| 58 | |||
| 59 | PyAPI_DATA(PyTypeObject) PySet_Type; | ||
| 60 | PyAPI_DATA(PyTypeObject) PyFrozenSet_Type; | ||
| 61 | |||
| 62 | /* Invariants for frozensets: | ||
| 63 | * data is immutable. | ||
| 64 | * hash is the hash of the frozenset or -1 if not computed yet. | ||
| 65 | * Invariants for sets: | ||
| 66 | * hash is -1 | ||
| 67 | */ | ||
| 68 | |||
| 69 | #define PyFrozenSet_CheckExact(ob) ((ob)->ob_type == &PyFrozenSet_Type) | ||
| 70 | #define PyAnySet_CheckExact(ob) \ | ||
| 71 | ((ob)->ob_type == &PySet_Type || (ob)->ob_type == &PyFrozenSet_Type) | ||
| 72 | #define PyAnySet_Check(ob) \ | ||
| 73 | ((ob)->ob_type == &PySet_Type || (ob)->ob_type == &PyFrozenSet_Type || \ | ||
| 74 | PyType_IsSubtype((ob)->ob_type, &PySet_Type) || \ | ||
| 75 | PyType_IsSubtype((ob)->ob_type, &PyFrozenSet_Type)) | ||
| 76 | |||
| 77 | PyAPI_FUNC(PyObject *) PySet_New(PyObject *); | ||
| 78 | PyAPI_FUNC(PyObject *) PyFrozenSet_New(PyObject *); | ||
| 79 | PyAPI_FUNC(Py_ssize_t) PySet_Size(PyObject *anyset); | ||
| 80 | #define PySet_GET_SIZE(so) (((PySetObject *)(so))->used) | ||
| 81 | PyAPI_FUNC(int) PySet_Clear(PyObject *set); | ||
| 82 | PyAPI_FUNC(int) PySet_Contains(PyObject *anyset, PyObject *key); | ||
| 83 | PyAPI_FUNC(int) PySet_Discard(PyObject *set, PyObject *key); | ||
| 84 | PyAPI_FUNC(int) PySet_Add(PyObject *set, PyObject *key); | ||
| 85 | PyAPI_FUNC(int) _PySet_Next(PyObject *set, Py_ssize_t *pos, PyObject **key); | ||
| 86 | PyAPI_FUNC(int) _PySet_NextEntry(PyObject *set, Py_ssize_t *pos, PyObject **key, long *hash); | ||
| 87 | PyAPI_FUNC(PyObject *) PySet_Pop(PyObject *set); | ||
| 88 | PyAPI_FUNC(int) _PySet_Update(PyObject *set, PyObject *iterable); | ||
| 89 | |||
| 90 | #ifdef __cplusplus | ||
| 91 | } | ||
| 92 | #endif | ||
| 93 | #endif /* !Py_SETOBJECT_H */ | ||
| @@ -0,0 +1,43 @@ | |||
| 1 | #ifndef Py_SLICEOBJECT_H | ||
| 2 | #define Py_SLICEOBJECT_H | ||
| 3 | #ifdef __cplusplus | ||
| 4 | extern "C" { | ||
| 5 | #endif | ||
| 6 | |||
| 7 | /* The unique ellipsis object "..." */ | ||
| 8 | |||
| 9 | PyAPI_DATA(PyObject) _Py_EllipsisObject; /* Don't use this directly */ | ||
| 10 | |||
| 11 | #define Py_Ellipsis (&_Py_EllipsisObject) | ||
| 12 | |||
| 13 | /* Slice object interface */ | ||
| 14 | |||
| 15 | /* | ||
| 16 | |||
| 17 | A slice object containing start, stop, and step data members (the | ||
| 18 | names are from range). After much talk with Guido, it was decided to | ||
| 19 | let these be any arbitrary python type. Py_None stands for omitted values. | ||
| 20 | */ | ||
| 21 | |||
| 22 | typedef struct { | ||
| 23 | PyObject_HEAD | ||
| 24 | PyObject *start, *stop, *step; /* not NULL */ | ||
| 25 | } PySliceObject; | ||
| 26 | |||
| 27 | PyAPI_DATA(PyTypeObject) PySlice_Type; | ||
| 28 | |||
| 29 | #define PySlice_Check(op) ((op)->ob_type == &PySlice_Type) | ||
| 30 | |||
| 31 | PyAPI_FUNC(PyObject *) PySlice_New(PyObject* start, PyObject* stop, | ||
| 32 | PyObject* step); | ||
| 33 | PyAPI_FUNC(PyObject *) _PySlice_FromIndices(Py_ssize_t start, Py_ssize_t stop); | ||
| 34 | PyAPI_FUNC(int) PySlice_GetIndices(PySliceObject *r, Py_ssize_t length, | ||
| 35 | Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step); | ||
| 36 | PyAPI_FUNC(int) PySlice_GetIndicesEx(PySliceObject *r, Py_ssize_t length, | ||
| 37 | Py_ssize_t *start, Py_ssize_t *stop, | ||
| 38 | Py_ssize_t *step, Py_ssize_t *slicelength); | ||
| 39 | |||
| 40 | #ifdef __cplusplus | ||
| 41 | } | ||
| 42 | #endif | ||
| 43 | #endif /* !Py_SLICEOBJECT_H */ | ||
| @@ -0,0 +1,183 @@ | |||
| 1 | |||
| 2 | /* String object interface */ | ||
| 3 | |||
| 4 | #ifndef Py_STRINGOBJECT_H | ||
| 5 | #define Py_STRINGOBJECT_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | #include <stdarg.h> | ||
| 11 | |||
| 12 | /* | ||
| 13 | Type PyStringObject represents a character string. An extra zero byte is | ||
| 14 | reserved at the end to ensure it is zero-terminated, but a size is | ||
| 15 | present so strings with null bytes in them can be represented. This | ||
| 16 | is an immutable object type. | ||
| 17 | |||
| 18 | There are functions to create new string objects, to test | ||
| 19 | an object for string-ness, and to get the | ||
| 20 | string value. The latter function returns a null pointer | ||
| 21 | if the object is not of the proper type. | ||
| 22 | There is a variant that takes an explicit size as well as a | ||
| 23 | variant that assumes a zero-terminated string. Note that none of the | ||
| 24 | functions should be applied to nil objects. | ||
| 25 | */ | ||
| 26 | |||
| 27 | /* Caching the hash (ob_shash) saves recalculation of a string's hash value. | ||
| 28 | Interning strings (ob_sstate) tries to ensure that only one string | ||
| 29 | object with a given value exists, so equality tests can be one pointer | ||
| 30 | comparison. This is generally restricted to strings that "look like" | ||
| 31 | Python identifiers, although the intern() builtin can be used to force | ||
| 32 | interning of any string. | ||
| 33 | Together, these sped the interpreter by up to 20%. */ | ||
| 34 | |||
| 35 | typedef struct { | ||
| 36 | PyObject_VAR_HEAD | ||
| 37 | long ob_shash; | ||
| 38 | int ob_sstate; | ||
| 39 | char ob_sval[1]; | ||
| 40 | |||
| 41 | /* Invariants: | ||
| 42 | * ob_sval contains space for 'ob_size+1' elements. | ||
| 43 | * ob_sval[ob_size] == 0. | ||
| 44 | * ob_shash is the hash of the string or -1 if not computed yet. | ||
| 45 | * ob_sstate != 0 iff the string object is in stringobject.c's | ||
| 46 | * 'interned' dictionary; in this case the two references | ||
| 47 | * from 'interned' to this object are *not counted* in ob_refcnt. | ||
| 48 | */ | ||
| 49 | } PyStringObject; | ||
| 50 | |||
| 51 | #define SSTATE_NOT_INTERNED 0 | ||
| 52 | #define SSTATE_INTERNED_MORTAL 1 | ||
| 53 | #define SSTATE_INTERNED_IMMORTAL 2 | ||
| 54 | |||
| 55 | PyAPI_DATA(PyTypeObject) PyBaseString_Type; | ||
| 56 | PyAPI_DATA(PyTypeObject) PyString_Type; | ||
| 57 | |||
| 58 | #define PyString_Check(op) PyObject_TypeCheck(op, &PyString_Type) | ||
| 59 | #define PyString_CheckExact(op) ((op)->ob_type == &PyString_Type) | ||
| 60 | |||
| 61 | PyAPI_FUNC(PyObject *) PyString_FromStringAndSize(const char *, Py_ssize_t); | ||
| 62 | PyAPI_FUNC(PyObject *) PyString_FromString(const char *); | ||
| 63 | PyAPI_FUNC(PyObject *) PyString_FromFormatV(const char*, va_list) | ||
| 64 | Py_GCC_ATTRIBUTE((format(printf, 1, 0))); | ||
| 65 | PyAPI_FUNC(PyObject *) PyString_FromFormat(const char*, ...) | ||
| 66 | Py_GCC_ATTRIBUTE((format(printf, 1, 2))); | ||
| 67 | PyAPI_FUNC(Py_ssize_t) PyString_Size(PyObject *); | ||
| 68 | PyAPI_FUNC(char *) PyString_AsString(PyObject *); | ||
| 69 | PyAPI_FUNC(PyObject *) PyString_Repr(PyObject *, int); | ||
| 70 | PyAPI_FUNC(void) PyString_Concat(PyObject **, PyObject *); | ||
| 71 | PyAPI_FUNC(void) PyString_ConcatAndDel(PyObject **, PyObject *); | ||
| 72 | PyAPI_FUNC(int) _PyString_Resize(PyObject **, Py_ssize_t); | ||
| 73 | PyAPI_FUNC(int) _PyString_Eq(PyObject *, PyObject*); | ||
| 74 | PyAPI_FUNC(PyObject *) PyString_Format(PyObject *, PyObject *); | ||
| 75 | PyAPI_FUNC(PyObject *) _PyString_FormatLong(PyObject*, int, int, | ||
| 76 | int, char**, int*); | ||
| 77 | PyAPI_FUNC(PyObject *) PyString_DecodeEscape(const char *, Py_ssize_t, | ||
| 78 | const char *, Py_ssize_t, | ||
| 79 | const char *); | ||
| 80 | |||
| 81 | PyAPI_FUNC(void) PyString_InternInPlace(PyObject **); | ||
| 82 | PyAPI_FUNC(void) PyString_InternImmortal(PyObject **); | ||
| 83 | PyAPI_FUNC(PyObject *) PyString_InternFromString(const char *); | ||
| 84 | PyAPI_FUNC(void) _Py_ReleaseInternedStrings(void); | ||
| 85 | |||
| 86 | /* Use only if you know it's a string */ | ||
| 87 | #define PyString_CHECK_INTERNED(op) (((PyStringObject *)(op))->ob_sstate) | ||
| 88 | |||
| 89 | /* Macro, trading safety for speed */ | ||
| 90 | #define PyString_AS_STRING(op) (((PyStringObject *)(op))->ob_sval) | ||
| 91 | #define PyString_GET_SIZE(op) (((PyStringObject *)(op))->ob_size) | ||
| 92 | |||
| 93 | /* _PyString_Join(sep, x) is like sep.join(x). sep must be PyStringObject*, | ||
| 94 | x must be an iterable object. */ | ||
| 95 | PyAPI_FUNC(PyObject *) _PyString_Join(PyObject *sep, PyObject *x); | ||
| 96 | |||
| 97 | /* --- Generic Codecs ----------------------------------------------------- */ | ||
| 98 | |||
| 99 | /* Create an object by decoding the encoded string s of the | ||
| 100 | given size. */ | ||
| 101 | |||
| 102 | PyAPI_FUNC(PyObject*) PyString_Decode( | ||
| 103 | const char *s, /* encoded string */ | ||
| 104 | Py_ssize_t size, /* size of buffer */ | ||
| 105 | const char *encoding, /* encoding */ | ||
| 106 | const char *errors /* error handling */ | ||
| 107 | ); | ||
| 108 | |||
| 109 | /* Encodes a char buffer of the given size and returns a | ||
| 110 | Python object. */ | ||
| 111 | |||
| 112 | PyAPI_FUNC(PyObject*) PyString_Encode( | ||
| 113 | const char *s, /* string char buffer */ | ||
| 114 | Py_ssize_t size, /* number of chars to encode */ | ||
| 115 | const char *encoding, /* encoding */ | ||
| 116 | const char *errors /* error handling */ | ||
| 117 | ); | ||
| 118 | |||
| 119 | /* Encodes a string object and returns the result as Python | ||
| 120 | object. */ | ||
| 121 | |||
| 122 | PyAPI_FUNC(PyObject*) PyString_AsEncodedObject( | ||
| 123 | PyObject *str, /* string object */ | ||
| 124 | const char *encoding, /* encoding */ | ||
| 125 | const char *errors /* error handling */ | ||
| 126 | ); | ||
| 127 | |||
| 128 | /* Encodes a string object and returns the result as Python string | ||
| 129 | object. | ||
| 130 | |||
| 131 | If the codec returns an Unicode object, the object is converted | ||
| 132 | back to a string using the default encoding. | ||
| 133 | |||
| 134 | DEPRECATED - use PyString_AsEncodedObject() instead. */ | ||
| 135 | |||
| 136 | PyAPI_FUNC(PyObject*) PyString_AsEncodedString( | ||
| 137 | PyObject *str, /* string object */ | ||
| 138 | const char *encoding, /* encoding */ | ||
| 139 | const char *errors /* error handling */ | ||
| 140 | ); | ||
| 141 | |||
| 142 | /* Decodes a string object and returns the result as Python | ||
| 143 | object. */ | ||
| 144 | |||
| 145 | PyAPI_FUNC(PyObject*) PyString_AsDecodedObject( | ||
| 146 | PyObject *str, /* string object */ | ||
| 147 | const char *encoding, /* encoding */ | ||
| 148 | const char *errors /* error handling */ | ||
| 149 | ); | ||
| 150 | |||
| 151 | /* Decodes a string object and returns the result as Python string | ||
| 152 | object. | ||
| 153 | |||
| 154 | If the codec returns an Unicode object, the object is converted | ||
| 155 | back to a string using the default encoding. | ||
| 156 | |||
| 157 | DEPRECATED - use PyString_AsDecodedObject() instead. */ | ||
| 158 | |||
| 159 | PyAPI_FUNC(PyObject*) PyString_AsDecodedString( | ||
| 160 | PyObject *str, /* string object */ | ||
| 161 | const char *encoding, /* encoding */ | ||
| 162 | const char *errors /* error handling */ | ||
| 163 | ); | ||
| 164 | |||
| 165 | /* Provides access to the internal data buffer and size of a string | ||
| 166 | object or the default encoded version of an Unicode object. Passing | ||
| 167 | NULL as *len parameter will force the string buffer to be | ||
| 168 | 0-terminated (passing a string with embedded NULL characters will | ||
| 169 | cause an exception). */ | ||
| 170 | |||
| 171 | PyAPI_FUNC(int) PyString_AsStringAndSize( | ||
| 172 | register PyObject *obj, /* string or Unicode object */ | ||
| 173 | register char **s, /* pointer to buffer variable */ | ||
| 174 | register Py_ssize_t *len /* pointer to length variable or NULL | ||
| 175 | (only possible for 0-terminated | ||
| 176 | strings) */ | ||
| 177 | ); | ||
| 178 | |||
| 179 | |||
| 180 | #ifdef __cplusplus | ||
| 181 | } | ||
| 182 | #endif | ||
| 183 | #endif /* !Py_STRINGOBJECT_H */ | ||
| @@ -0,0 +1,93 @@ | |||
| 1 | #ifndef Py_STRUCTMEMBER_H | ||
| 2 | #define Py_STRUCTMEMBER_H | ||
| 3 | #ifdef __cplusplus | ||
| 4 | extern "C" { | ||
| 5 | #endif | ||
| 6 | |||
| 7 | |||
| 8 | /* Interface to map C struct members to Python object attributes */ | ||
| 9 | |||
| 10 | #include <stddef.h> /* For offsetof */ | ||
| 11 | |||
| 12 | /* The offsetof() macro calculates the offset of a structure member | ||
| 13 | in its structure. Unfortunately this cannot be written down | ||
| 14 | portably, hence it is provided by a Standard C header file. | ||
| 15 | For pre-Standard C compilers, here is a version that usually works | ||
| 16 | (but watch out!): */ | ||
| 17 | |||
| 18 | #ifndef offsetof | ||
| 19 | #define offsetof(type, member) ( (int) & ((type*)0) -> member ) | ||
| 20 | #endif | ||
| 21 | |||
| 22 | /* An array of memberlist structures defines the name, type and offset | ||
| 23 | of selected members of a C structure. These can be read by | ||
| 24 | PyMember_Get() and set by PyMember_Set() (except if their READONLY flag | ||
| 25 | is set). The array must be terminated with an entry whose name | ||
| 26 | pointer is NULL. */ | ||
| 27 | |||
| 28 | struct memberlist { | ||
| 29 | /* Obsolete version, for binary backwards compatibility */ | ||
| 30 | char *name; | ||
| 31 | int type; | ||
| 32 | int offset; | ||
| 33 | int flags; | ||
| 34 | }; | ||
| 35 | |||
| 36 | typedef struct PyMemberDef { | ||
| 37 | /* Current version, use this */ | ||
| 38 | char *name; | ||
| 39 | int type; | ||
| 40 | Py_ssize_t offset; | ||
| 41 | int flags; | ||
| 42 | char *doc; | ||
| 43 | } PyMemberDef; | ||
| 44 | |||
| 45 | /* Types */ | ||
| 46 | #define T_SHORT 0 | ||
| 47 | #define T_INT 1 | ||
| 48 | #define T_LONG 2 | ||
| 49 | #define T_FLOAT 3 | ||
| 50 | #define T_DOUBLE 4 | ||
| 51 | #define T_STRING 5 | ||
| 52 | #define T_OBJECT 6 | ||
| 53 | /* XXX the ordering here is weird for binary compatibility */ | ||
| 54 | #define T_CHAR 7 /* 1-character string */ | ||
| 55 | #define T_BYTE 8 /* 8-bit signed int */ | ||
| 56 | /* unsigned variants: */ | ||
| 57 | #define T_UBYTE 9 | ||
| 58 | #define T_USHORT 10 | ||
| 59 | #define T_UINT 11 | ||
| 60 | #define T_ULONG 12 | ||
| 61 | |||
| 62 | /* Added by Jack: strings contained in the structure */ | ||
| 63 | #define T_STRING_INPLACE 13 | ||
| 64 | |||
| 65 | #define T_OBJECT_EX 16 /* Like T_OBJECT, but raises AttributeError | ||
| 66 | when the value is NULL, instead of | ||
| 67 | converting to None. */ | ||
| 68 | #ifdef HAVE_LONG_LONG | ||
| 69 | #define T_LONGLONG 17 | ||
| 70 | #define T_ULONGLONG 18 | ||
| 71 | #endif /* HAVE_LONG_LONG */ | ||
| 72 | |||
| 73 | /* Flags */ | ||
| 74 | #define READONLY 1 | ||
| 75 | #define RO READONLY /* Shorthand */ | ||
| 76 | #define READ_RESTRICTED 2 | ||
| 77 | #define WRITE_RESTRICTED 4 | ||
| 78 | #define RESTRICTED (READ_RESTRICTED | WRITE_RESTRICTED) | ||
| 79 | |||
| 80 | |||
| 81 | /* Obsolete API, for binary backwards compatibility */ | ||
| 82 | PyAPI_FUNC(PyObject *) PyMember_Get(const char *, struct memberlist *, const char *); | ||
| 83 | PyAPI_FUNC(int) PyMember_Set(char *, struct memberlist *, const char *, PyObject *); | ||
| 84 | |||
| 85 | /* Current API, use this */ | ||
| 86 | PyAPI_FUNC(PyObject *) PyMember_GetOne(const char *, struct PyMemberDef *); | ||
| 87 | PyAPI_FUNC(int) PyMember_SetOne(char *, struct PyMemberDef *, PyObject *); | ||
| 88 | |||
| 89 | |||
| 90 | #ifdef __cplusplus | ||
| 91 | } | ||
| 92 | #endif | ||
| 93 | #endif /* !Py_STRUCTMEMBER_H */ | ||
| @@ -0,0 +1,41 @@ | |||
| 1 | |||
| 2 | /* Tuple object interface */ | ||
| 3 | |||
| 4 | #ifndef Py_STRUCTSEQ_H | ||
| 5 | #define Py_STRUCTSEQ_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | typedef struct PyStructSequence_Field { | ||
| 11 | char *name; | ||
| 12 | char *doc; | ||
| 13 | } PyStructSequence_Field; | ||
| 14 | |||
| 15 | typedef struct PyStructSequence_Desc { | ||
| 16 | char *name; | ||
| 17 | char *doc; | ||
| 18 | struct PyStructSequence_Field *fields; | ||
| 19 | int n_in_sequence; | ||
| 20 | } PyStructSequence_Desc; | ||
| 21 | |||
| 22 | extern char* PyStructSequence_UnnamedField; | ||
| 23 | |||
| 24 | PyAPI_FUNC(void) PyStructSequence_InitType(PyTypeObject *type, | ||
| 25 | PyStructSequence_Desc *desc); | ||
| 26 | |||
| 27 | PyAPI_FUNC(PyObject *) PyStructSequence_New(PyTypeObject* type); | ||
| 28 | |||
| 29 | typedef struct { | ||
| 30 | PyObject_VAR_HEAD | ||
| 31 | PyObject *ob_item[1]; | ||
| 32 | } PyStructSequence; | ||
| 33 | |||
| 34 | /* Macro, *only* to be used to fill in brand new objects */ | ||
| 35 | #define PyStructSequence_SET_ITEM(op, i, v) \ | ||
| 36 | (((PyStructSequence *)(op))->ob_item[i] = v) | ||
| 37 | |||
| 38 | #ifdef __cplusplus | ||
| 39 | } | ||
| 40 | #endif | ||
| 41 | #endif /* !Py_STRUCTSEQ_H */ | ||
| @@ -0,0 +1,103 @@ | |||
| 1 | #ifndef Py_SYMTABLE_H | ||
| 2 | #define Py_SYMTABLE_H | ||
| 3 | |||
| 4 | #ifdef __cplusplus | ||
| 5 | extern "C" { | ||
| 6 | #endif | ||
| 7 | |||
| 8 | typedef enum _block_type { FunctionBlock, ClassBlock, ModuleBlock } | ||
| 9 | _Py_block_ty; | ||
| 10 | |||
| 11 | struct _symtable_entry; | ||
| 12 | |||
| 13 | struct symtable { | ||
| 14 | const char *st_filename; /* name of file being compiled */ | ||
| 15 | struct _symtable_entry *st_cur; /* current symbol table entry */ | ||
| 16 | struct _symtable_entry *st_top; /* module entry */ | ||
| 17 | PyObject *st_symbols; /* dictionary of symbol table entries */ | ||
| 18 | PyObject *st_stack; /* stack of namespace info */ | ||
| 19 | PyObject *st_global; /* borrowed ref to MODULE in st_symbols */ | ||
| 20 | int st_nblocks; /* number of blocks */ | ||
| 21 | PyObject *st_private; /* name of current class or NULL */ | ||
| 22 | int st_tmpname; /* temporary name counter */ | ||
| 23 | PyFutureFeatures *st_future; /* module's future features */ | ||
| 24 | }; | ||
| 25 | |||
| 26 | typedef struct _symtable_entry { | ||
| 27 | PyObject_HEAD | ||
| 28 | PyObject *ste_id; /* int: key in st_symbols */ | ||
| 29 | PyObject *ste_symbols; /* dict: name to flags */ | ||
| 30 | PyObject *ste_name; /* string: name of block */ | ||
| 31 | PyObject *ste_varnames; /* list of variable names */ | ||
| 32 | PyObject *ste_children; /* list of child ids */ | ||
| 33 | _Py_block_ty ste_type; /* module, class, or function */ | ||
| 34 | int ste_unoptimized; /* false if namespace is optimized */ | ||
| 35 | unsigned ste_nested : 1; /* true if block is nested */ | ||
| 36 | unsigned ste_free : 1; /* true if block has free variables */ | ||
| 37 | unsigned ste_child_free : 1; /* true if a child block has free vars, | ||
| 38 | including free refs to globals */ | ||
| 39 | unsigned ste_generator : 1; /* true if namespace is a generator */ | ||
| 40 | unsigned ste_varargs : 1; /* true if block has varargs */ | ||
| 41 | unsigned ste_varkeywords : 1; /* true if block has varkeywords */ | ||
| 42 | unsigned ste_returns_value : 1; /* true if namespace uses return with | ||
| 43 | an argument */ | ||
| 44 | int ste_lineno; /* first line of block */ | ||
| 45 | int ste_opt_lineno; /* lineno of last exec or import * */ | ||
| 46 | int ste_tmpname; /* counter for listcomp temp vars */ | ||
| 47 | struct symtable *ste_table; | ||
| 48 | } PySTEntryObject; | ||
| 49 | |||
| 50 | PyAPI_DATA(PyTypeObject) PySTEntry_Type; | ||
| 51 | |||
| 52 | #define PySTEntry_Check(op) ((op)->ob_type == &PySTEntry_Type) | ||
| 53 | |||
| 54 | PyAPI_FUNC(int) PyST_GetScope(PySTEntryObject *, PyObject *); | ||
| 55 | |||
| 56 | PyAPI_FUNC(struct symtable *) PySymtable_Build(mod_ty, const char *, | ||
| 57 | PyFutureFeatures *); | ||
| 58 | PyAPI_FUNC(PySTEntryObject *) PySymtable_Lookup(struct symtable *, void *); | ||
| 59 | |||
| 60 | PyAPI_FUNC(void) PySymtable_Free(struct symtable *); | ||
| 61 | |||
| 62 | /* Flags for def-use information */ | ||
| 63 | |||
| 64 | #define DEF_GLOBAL 1 /* global stmt */ | ||
| 65 | #define DEF_LOCAL 2 /* assignment in code block */ | ||
| 66 | #define DEF_PARAM 2<<1 /* formal parameter */ | ||
| 67 | #define USE 2<<2 /* name is used */ | ||
| 68 | #define DEF_STAR 2<<3 /* parameter is star arg */ | ||
| 69 | #define DEF_DOUBLESTAR 2<<4 /* parameter is star-star arg */ | ||
| 70 | #define DEF_INTUPLE 2<<5 /* name defined in tuple in parameters */ | ||
| 71 | #define DEF_FREE 2<<6 /* name used but not defined in nested block */ | ||
| 72 | #define DEF_FREE_GLOBAL 2<<7 /* free variable is actually implicit global */ | ||
| 73 | #define DEF_FREE_CLASS 2<<8 /* free variable from class's method */ | ||
| 74 | #define DEF_IMPORT 2<<9 /* assignment occurred via import */ | ||
| 75 | |||
| 76 | #define DEF_BOUND (DEF_LOCAL | DEF_PARAM | DEF_IMPORT) | ||
| 77 | |||
| 78 | /* GLOBAL_EXPLICIT and GLOBAL_IMPLICIT are used internally by the symbol | ||
| 79 | table. GLOBAL is returned from PyST_GetScope() for either of them. | ||
| 80 | It is stored in ste_symbols at bits 12-14. | ||
| 81 | */ | ||
| 82 | #define SCOPE_OFF 11 | ||
| 83 | #define SCOPE_MASK 7 | ||
| 84 | |||
| 85 | #define LOCAL 1 | ||
| 86 | #define GLOBAL_EXPLICIT 2 | ||
| 87 | #define GLOBAL_IMPLICIT 3 | ||
| 88 | #define FREE 4 | ||
| 89 | #define CELL 5 | ||
| 90 | |||
| 91 | /* The following three names are used for the ste_unoptimized bit field */ | ||
| 92 | #define OPT_IMPORT_STAR 1 | ||
| 93 | #define OPT_EXEC 2 | ||
| 94 | #define OPT_BARE_EXEC 4 | ||
| 95 | #define OPT_TOPLEVEL 8 /* top-level names, including eval and exec */ | ||
| 96 | |||
| 97 | #define GENERATOR 1 | ||
| 98 | #define GENERATOR_EXPRESSION 2 | ||
| 99 | |||
| 100 | #ifdef __cplusplus | ||
| 101 | } | ||
| 102 | #endif | ||
| 103 | #endif /* !Py_SYMTABLE_H */ | ||
| @@ -0,0 +1,30 @@ | |||
| 1 | |||
| 2 | /* System module interface */ | ||
| 3 | |||
| 4 | #ifndef Py_SYSMODULE_H | ||
| 5 | #define Py_SYSMODULE_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | PyAPI_FUNC(PyObject *) PySys_GetObject(char *); | ||
| 11 | PyAPI_FUNC(int) PySys_SetObject(char *, PyObject *); | ||
| 12 | PyAPI_FUNC(FILE *) PySys_GetFile(char *, FILE *); | ||
| 13 | PyAPI_FUNC(void) PySys_SetArgv(int, char **); | ||
| 14 | PyAPI_FUNC(void) PySys_SetPath(char *); | ||
| 15 | |||
| 16 | PyAPI_FUNC(void) PySys_WriteStdout(const char *format, ...) | ||
| 17 | Py_GCC_ATTRIBUTE((format(printf, 1, 2))); | ||
| 18 | PyAPI_FUNC(void) PySys_WriteStderr(const char *format, ...) | ||
| 19 | Py_GCC_ATTRIBUTE((format(printf, 1, 2))); | ||
| 20 | |||
| 21 | PyAPI_DATA(PyObject *) _PySys_TraceFunc, *_PySys_ProfileFunc; | ||
| 22 | PyAPI_DATA(int) _PySys_CheckInterval; | ||
| 23 | |||
| 24 | PyAPI_FUNC(void) PySys_ResetWarnOptions(void); | ||
| 25 | PyAPI_FUNC(void) PySys_AddWarnOption(char *); | ||
| 26 | |||
| 27 | #ifdef __cplusplus | ||
| 28 | } | ||
| 29 | #endif | ||
| 30 | #endif /* !Py_SYSMODULE_H */ | ||
| @@ -0,0 +1,23 @@ | |||
| 1 | /* timefuncs.h | ||
| 2 | */ | ||
| 3 | |||
| 4 | /* Utility function related to timemodule.c. */ | ||
| 5 | |||
| 6 | #ifndef TIMEFUNCS_H | ||
| 7 | #define TIMEFUNCS_H | ||
| 8 | #ifdef __cplusplus | ||
| 9 | extern "C" { | ||
| 10 | #endif | ||
| 11 | |||
| 12 | |||
| 13 | /* Cast double x to time_t, but raise ValueError if x is too large | ||
| 14 | * to fit in a time_t. ValueError is set on return iff the return | ||
| 15 | * value is (time_t)-1 and PyErr_Occurred(). | ||
| 16 | */ | ||
| 17 | PyAPI_FUNC(time_t) _PyTime_DoubleToTimet(double x); | ||
| 18 | |||
| 19 | |||
| 20 | #ifdef __cplusplus | ||
| 21 | } | ||
| 22 | #endif | ||
| 23 | #endif /* TIMEFUNCS_H */ | ||
| @@ -0,0 +1,83 @@ | |||
| 1 | |||
| 2 | /* Token types */ | ||
| 3 | |||
| 4 | #ifndef Py_TOKEN_H | ||
| 5 | #define Py_TOKEN_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | #define ENDMARKER 0 | ||
| 11 | #define NAME 1 | ||
| 12 | #define NUMBER 2 | ||
| 13 | #define STRING 3 | ||
| 14 | #define NEWLINE 4 | ||
| 15 | #define INDENT 5 | ||
| 16 | #define DEDENT 6 | ||
| 17 | #define LPAR 7 | ||
| 18 | #define RPAR 8 | ||
| 19 | #define LSQB 9 | ||
| 20 | #define RSQB 10 | ||
| 21 | #define COLON 11 | ||
| 22 | #define COMMA 12 | ||
| 23 | #define SEMI 13 | ||
| 24 | #define PLUS 14 | ||
| 25 | #define MINUS 15 | ||
| 26 | #define STAR 16 | ||
| 27 | #define SLASH 17 | ||
| 28 | #define VBAR 18 | ||
| 29 | #define AMPER 19 | ||
| 30 | #define LESS 20 | ||
| 31 | #define GREATER 21 | ||
| 32 | #define EQUAL 22 | ||
| 33 | #define DOT 23 | ||
| 34 | #define PERCENT 24 | ||
| 35 | #define BACKQUOTE 25 | ||
| 36 | #define LBRACE 26 | ||
| 37 | #define RBRACE 27 | ||
| 38 | #define EQEQUAL 28 | ||
| 39 | #define NOTEQUAL 29 | ||
| 40 | #define LESSEQUAL 30 | ||
| 41 | #define GREATEREQUAL 31 | ||
| 42 | #define TILDE 32 | ||
| 43 | #define CIRCUMFLEX 33 | ||
| 44 | #define LEFTSHIFT 34 | ||
| 45 | #define RIGHTSHIFT 35 | ||
| 46 | #define DOUBLESTAR 36 | ||
| 47 | #define PLUSEQUAL 37 | ||
| 48 | #define MINEQUAL 38 | ||
| 49 | #define STAREQUAL 39 | ||
| 50 | #define SLASHEQUAL 40 | ||
| 51 | #define PERCENTEQUAL 41 | ||
| 52 | #define AMPEREQUAL 42 | ||
| 53 | #define VBAREQUAL 43 | ||
| 54 | #define CIRCUMFLEXEQUAL 44 | ||
| 55 | #define LEFTSHIFTEQUAL 45 | ||
| 56 | #define RIGHTSHIFTEQUAL 46 | ||
| 57 | #define DOUBLESTAREQUAL 47 | ||
| 58 | #define DOUBLESLASH 48 | ||
| 59 | #define DOUBLESLASHEQUAL 49 | ||
| 60 | #define AT 50 | ||
| 61 | /* Don't forget to update the table _PyParser_TokenNames in tokenizer.c! */ | ||
| 62 | #define OP 51 | ||
| 63 | #define ERRORTOKEN 52 | ||
| 64 | #define N_TOKENS 53 | ||
| 65 | |||
| 66 | /* Special definitions for cooperation with parser */ | ||
| 67 | |||
| 68 | #define NT_OFFSET 256 | ||
| 69 | |||
| 70 | #define ISTERMINAL(x) ((x) < NT_OFFSET) | ||
| 71 | #define ISNONTERMINAL(x) ((x) >= NT_OFFSET) | ||
| 72 | #define ISEOF(x) ((x) == ENDMARKER) | ||
| 73 | |||
| 74 | |||
| 75 | PyAPI_DATA(char *) _PyParser_TokenNames[]; /* Token names */ | ||
| 76 | PyAPI_FUNC(int) PyToken_OneChar(int); | ||
| 77 | PyAPI_FUNC(int) PyToken_TwoChars(int, int); | ||
| 78 | PyAPI_FUNC(int) PyToken_ThreeChars(int, int, int); | ||
| 79 | |||
| 80 | #ifdef __cplusplus | ||
| 81 | } | ||
| 82 | #endif | ||
| 83 | #endif /* !Py_TOKEN_H */ | ||
| @@ -0,0 +1,30 @@ | |||
| 1 | |||
| 2 | #ifndef Py_TRACEBACK_H | ||
| 3 | #define Py_TRACEBACK_H | ||
| 4 | #ifdef __cplusplus | ||
| 5 | extern "C" { | ||
| 6 | #endif | ||
| 7 | |||
| 8 | struct _frame; | ||
| 9 | |||
| 10 | /* Traceback interface */ | ||
| 11 | |||
| 12 | typedef struct _traceback { | ||
| 13 | PyObject_HEAD | ||
| 14 | struct _traceback *tb_next; | ||
| 15 | struct _frame *tb_frame; | ||
| 16 | int tb_lasti; | ||
| 17 | int tb_lineno; | ||
| 18 | } PyTracebackObject; | ||
| 19 | |||
| 20 | PyAPI_FUNC(int) PyTraceBack_Here(struct _frame *); | ||
| 21 | PyAPI_FUNC(int) PyTraceBack_Print(PyObject *, PyObject *); | ||
| 22 | |||
| 23 | /* Reveal traceback type so we can typecheck traceback objects */ | ||
| 24 | PyAPI_DATA(PyTypeObject) PyTraceBack_Type; | ||
| 25 | #define PyTraceBack_Check(v) ((v)->ob_type == &PyTraceBack_Type) | ||
| 26 | |||
| 27 | #ifdef __cplusplus | ||
| 28 | } | ||
| 29 | #endif | ||
| 30 | #endif /* !Py_TRACEBACK_H */ | ||
| @@ -0,0 +1,57 @@ | |||
| 1 | |||
| 2 | /* Tuple object interface */ | ||
| 3 | |||
| 4 | #ifndef Py_TUPLEOBJECT_H | ||
| 5 | #define Py_TUPLEOBJECT_H | ||
| 6 | #ifdef __cplusplus | ||
| 7 | extern "C" { | ||
| 8 | #endif | ||
| 9 | |||
| 10 | /* | ||
| 11 | Another generally useful object type is a tuple of object pointers. | ||
| 12 | For Python, this is an immutable type. C code can change the tuple items | ||
| 13 | (but not their number), and even use tuples are general-purpose arrays of | ||
| 14 | object references, but in general only brand new tuples should be mutated, | ||
| 15 | not ones that might already have been exposed to Python code. | ||
| 16 | |||
| 17 | *** WARNING *** PyTuple_SetItem does not increment the new item's reference | ||
| 18 | count, but does decrement the reference count of the item it replaces, | ||
| 19 | if not nil. It does *decrement* the reference count if it is *not* | ||
| 20 | inserted in the tuple. Similarly, PyTuple_GetItem does not increment the | ||
| 21 | returned item's reference count. | ||
| 22 | */ | ||
| 23 | |||
| 24 | typedef struct { | ||
| 25 | PyObject_VAR_HEAD | ||
| 26 | PyObject *ob_item[1]; | ||
| 27 | |||
| 28 | /* ob_item contains space for 'ob_size' elements. | ||
| 29 | * Items must normally not be NULL, except during construction when | ||
| 30 | * the tuple is not yet visible outside the function that builds it. | ||
| 31 | */ | ||
| 32 | } PyTupleObject; | ||
| 33 | |||
| 34 | PyAPI_DATA(PyTypeObject) PyTuple_Type; | ||
| 35 | |||
| 36 | #define PyTuple_Check(op) PyObject_TypeCheck(op, &PyTuple_Type) | ||
| 37 | #define PyTuple_CheckExact(op) ((op)->ob_type == &PyTuple_Type) | ||
| 38 | |||
| 39 | PyAPI_FUNC(PyObject *) PyTuple_New(Py_ssize_t size); | ||
| 40 | PyAPI_FUNC(Py_ssize_t) PyTuple_Size(PyObject *); | ||
| 41 | PyAPI_FUNC(PyObject *) PyTuple_GetItem(PyObject *, Py_ssize_t); | ||
| 42 | PyAPI_FUNC(int) PyTuple_SetItem(PyObject *, Py_ssize_t, PyObject *); | ||
| 43 | PyAPI_FUNC(PyObject *) PyTuple_GetSlice(PyObject *, Py_ssize_t, Py_ssize_t); | ||
| 44 | PyAPI_FUNC(int) _PyTuple_Resize(PyObject **, Py_ssize_t); | ||
| 45 | PyAPI_FUNC(PyObject *) PyTuple_Pack(Py_ssize_t, ...); | ||
| 46 | |||
| 47 | /* Macro, trading safety for speed */ | ||
| 48 | #define PyTuple_GET_ITEM(op, i) (((PyTupleObject *)(op))->ob_item[i]) | ||
| 49 | #define PyTuple_GET_SIZE(op) (((PyTupleObject *)(op))->ob_size) | ||
| 50 | |||
| 51 | /* Macro, *only* to be used to fill in brand new tuples */ | ||
| 52 | #define PyTuple_SET_ITEM(op, i, v) (((PyTupleObject *)(op))->ob_item[i] = v) | ||
| 53 | |||
| 54 | #ifdef __cplusplus | ||
| 55 | } | ||
| 56 | #endif | ||
| 57 | #endif /* !Py_TUPLEOBJECT_H */ | ||
| @@ -0,0 +1,31 @@ | |||
| 1 | /* Unicode name database interface */ | ||
| 2 | |||
| 3 | #ifndef Py_UCNHASH_H | ||
| 4 | #define Py_UCNHASH_H | ||
| 5 | #ifdef __cplusplus | ||
| 6 | extern "C" { | ||
| 7 | #endif | ||
| 8 | |||
| 9 | /* revised ucnhash CAPI interface (exported through a PyCObject) */ | ||
| 10 | |||
| 11 | typedef struct { | ||
| 12 | |||
| 13 | /* Size of this struct */ | ||
| 14 | int size; | ||
| 15 | |||
| 16 | /* Get name for a given character code. Returns non-zero if | ||
| 17 | success, zero if not. Does not set Python exceptions. | ||
| 18 | If self is NULL, data come from the default version of the database. | ||
| 19 | If it is not NULL, it should be a unicodedata.ucd_X_Y_Z object */ | ||
| 20 | int (*getname)(PyObject *self, Py_UCS4 code, char* buffer, int buflen); | ||
| 21 | |||
| 22 | /* Get character code for a given name. Same error handling | ||
| 23 | as for getname. */ | ||
| 24 | int (*getcode)(PyObject *self, const char* name, int namelen, Py_UCS4* code); | ||
| 25 | |||
| 26 | } _PyUnicode_Name_CAPI; | ||
| 27 | |||
| 28 | #ifdef __cplusplus | ||
| 29 | } | ||
| 30 | #endif | ||
| 31 | #endif /* !Py_UCNHASH_H */ | ||
| @@ -0,0 +1,1265 @@ | |||
| 1 | #ifndef Py_UNICODEOBJECT_H | ||
| 2 | #define Py_UNICODEOBJECT_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | |||
| 6 | Unicode implementation based on original code by Fredrik Lundh, | ||
| 7 | modified by Marc-Andre Lemburg (mal@lemburg.com) according to the | ||
| 8 | Unicode Integration Proposal (see file Misc/unicode.txt). | ||
| 9 | |||
| 10 | Copyright (c) Corporation for National Research Initiatives. | ||
| 11 | |||
| 12 | |||
| 13 | Original header: | ||
| 14 | -------------------------------------------------------------------- | ||
| 15 | |||
| 16 | * Yet another Unicode string type for Python. This type supports the | ||
| 17 | * 16-bit Basic Multilingual Plane (BMP) only. | ||
| 18 | * | ||
| 19 | * Written by Fredrik Lundh, January 1999. | ||
| 20 | * | ||
| 21 | * Copyright (c) 1999 by Secret Labs AB. | ||
| 22 | * Copyright (c) 1999 by Fredrik Lundh. | ||
| 23 | * | ||
| 24 | * fredrik@pythonware.com | ||
| 25 | * http://www.pythonware.com | ||
| 26 | * | ||
| 27 | * -------------------------------------------------------------------- | ||
| 28 | * This Unicode String Type is | ||
| 29 | * | ||
| 30 | * Copyright (c) 1999 by Secret Labs AB | ||
| 31 | * Copyright (c) 1999 by Fredrik Lundh | ||
| 32 | * | ||
| 33 | * By obtaining, using, and/or copying this software and/or its | ||
| 34 | * associated documentation, you agree that you have read, understood, | ||
| 35 | * and will comply with the following terms and conditions: | ||
| 36 | * | ||
| 37 | * Permission to use, copy, modify, and distribute this software and its | ||
| 38 | * associated documentation for any purpose and without fee is hereby | ||
| 39 | * granted, provided that the above copyright notice appears in all | ||
| 40 | * copies, and that both that copyright notice and this permission notice | ||
| 41 | * appear in supporting documentation, and that the name of Secret Labs | ||
| 42 | * AB or the author not be used in advertising or publicity pertaining to | ||
| 43 | * distribution of the software without specific, written prior | ||
| 44 | * permission. | ||
| 45 | * | ||
| 46 | * SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO | ||
| 47 | * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND | ||
| 48 | * FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR BE LIABLE FOR | ||
| 49 | * ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 50 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 51 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT | ||
| 52 | * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 53 | * -------------------------------------------------------------------- */ | ||
| 54 | |||
| 55 | #include <ctype.h> | ||
| 56 | |||
| 57 | /* === Internal API ======================================================= */ | ||
| 58 | |||
| 59 | /* --- Internal Unicode Format -------------------------------------------- */ | ||
| 60 | |||
| 61 | #ifndef Py_USING_UNICODE | ||
| 62 | |||
| 63 | #define PyUnicode_Check(op) 0 | ||
| 64 | #define PyUnicode_CheckExact(op) 0 | ||
| 65 | |||
| 66 | #else | ||
| 67 | |||
| 68 | /* FIXME: MvL's new implementation assumes that Py_UNICODE_SIZE is | ||
| 69 | properly set, but the default rules below doesn't set it. I'll | ||
| 70 | sort this out some other day -- fredrik@pythonware.com */ | ||
| 71 | |||
| 72 | #ifndef Py_UNICODE_SIZE | ||
| 73 | #error Must define Py_UNICODE_SIZE | ||
| 74 | #endif | ||
| 75 | |||
| 76 | /* Setting Py_UNICODE_WIDE enables UCS-4 storage. Otherwise, Unicode | ||
| 77 | strings are stored as UCS-2 (with limited support for UTF-16) */ | ||
| 78 | |||
| 79 | #if Py_UNICODE_SIZE >= 4 | ||
| 80 | #define Py_UNICODE_WIDE | ||
| 81 | #endif | ||
| 82 | |||
| 83 | /* Set these flags if the platform has "wchar.h", "wctype.h" and the | ||
| 84 | wchar_t type is a 16-bit unsigned type */ | ||
| 85 | /* #define HAVE_WCHAR_H */ | ||
| 86 | /* #define HAVE_USABLE_WCHAR_T */ | ||
| 87 | |||
| 88 | /* Defaults for various platforms */ | ||
| 89 | #ifndef PY_UNICODE_TYPE | ||
| 90 | |||
| 91 | /* Windows has a usable wchar_t type (unless we're using UCS-4) */ | ||
| 92 | # if defined(MS_WIN32) && Py_UNICODE_SIZE == 2 | ||
| 93 | # define HAVE_USABLE_WCHAR_T | ||
| 94 | # define PY_UNICODE_TYPE wchar_t | ||
| 95 | # endif | ||
| 96 | |||
| 97 | # if defined(Py_UNICODE_WIDE) | ||
| 98 | # define PY_UNICODE_TYPE Py_UCS4 | ||
| 99 | # endif | ||
| 100 | |||
| 101 | #endif | ||
| 102 | |||
| 103 | /* If the compiler provides a wchar_t type we try to support it | ||
| 104 | through the interface functions PyUnicode_FromWideChar() and | ||
| 105 | PyUnicode_AsWideChar(). */ | ||
| 106 | |||
| 107 | #ifdef HAVE_USABLE_WCHAR_T | ||
| 108 | # ifndef HAVE_WCHAR_H | ||
| 109 | # define HAVE_WCHAR_H | ||
| 110 | # endif | ||
| 111 | #endif | ||
| 112 | |||
| 113 | #ifdef HAVE_WCHAR_H | ||
| 114 | /* Work around a cosmetic bug in BSDI 4.x wchar.h; thanks to Thomas Wouters */ | ||
| 115 | # ifdef _HAVE_BSDI | ||
| 116 | # include <time.h> | ||
| 117 | # endif | ||
| 118 | # include <wchar.h> | ||
| 119 | #endif | ||
| 120 | |||
| 121 | /* | ||
| 122 | * Use this typedef when you need to represent a UTF-16 surrogate pair | ||
| 123 | * as single unsigned integer. | ||
| 124 | */ | ||
| 125 | #if SIZEOF_INT >= 4 | ||
| 126 | typedef unsigned int Py_UCS4; | ||
| 127 | #elif SIZEOF_LONG >= 4 | ||
| 128 | typedef unsigned long Py_UCS4; | ||
| 129 | #endif | ||
| 130 | |||
| 131 | typedef PY_UNICODE_TYPE Py_UNICODE; | ||
| 132 | |||
| 133 | /* --- UCS-2/UCS-4 Name Mangling ------------------------------------------ */ | ||
| 134 | |||
| 135 | /* Unicode API names are mangled to assure that UCS-2 and UCS-4 builds | ||
| 136 | produce different external names and thus cause import errors in | ||
| 137 | case Python interpreters and extensions with mixed compiled in | ||
| 138 | Unicode width assumptions are combined. */ | ||
| 139 | |||
| 140 | #ifndef Py_UNICODE_WIDE | ||
| 141 | |||
| 142 | # define PyUnicode_AsASCIIString PyUnicodeUCS2_AsASCIIString | ||
| 143 | # define PyUnicode_AsCharmapString PyUnicodeUCS2_AsCharmapString | ||
| 144 | # define PyUnicode_AsEncodedObject PyUnicodeUCS2_AsEncodedObject | ||
| 145 | # define PyUnicode_AsEncodedString PyUnicodeUCS2_AsEncodedString | ||
| 146 | # define PyUnicode_AsLatin1String PyUnicodeUCS2_AsLatin1String | ||
| 147 | # define PyUnicode_AsRawUnicodeEscapeString PyUnicodeUCS2_AsRawUnicodeEscapeString | ||
| 148 | # define PyUnicode_AsUTF16String PyUnicodeUCS2_AsUTF16String | ||
| 149 | # define PyUnicode_AsUTF8String PyUnicodeUCS2_AsUTF8String | ||
| 150 | # define PyUnicode_AsUnicode PyUnicodeUCS2_AsUnicode | ||
| 151 | # define PyUnicode_AsUnicodeEscapeString PyUnicodeUCS2_AsUnicodeEscapeString | ||
| 152 | # define PyUnicode_AsWideChar PyUnicodeUCS2_AsWideChar | ||
| 153 | # define PyUnicode_Compare PyUnicodeUCS2_Compare | ||
| 154 | # define PyUnicode_Concat PyUnicodeUCS2_Concat | ||
| 155 | # define PyUnicode_Contains PyUnicodeUCS2_Contains | ||
| 156 | # define PyUnicode_Count PyUnicodeUCS2_Count | ||
| 157 | # define PyUnicode_Decode PyUnicodeUCS2_Decode | ||
| 158 | # define PyUnicode_DecodeASCII PyUnicodeUCS2_DecodeASCII | ||
| 159 | # define PyUnicode_DecodeCharmap PyUnicodeUCS2_DecodeCharmap | ||
| 160 | # define PyUnicode_DecodeLatin1 PyUnicodeUCS2_DecodeLatin1 | ||
| 161 | # define PyUnicode_DecodeRawUnicodeEscape PyUnicodeUCS2_DecodeRawUnicodeEscape | ||
| 162 | # define PyUnicode_DecodeUTF16 PyUnicodeUCS2_DecodeUTF16 | ||
| 163 | # define PyUnicode_DecodeUTF16Stateful PyUnicodeUCS2_DecodeUTF16Stateful | ||
| 164 | # define PyUnicode_DecodeUTF8 PyUnicodeUCS2_DecodeUTF8 | ||
| 165 | # define PyUnicode_DecodeUTF8Stateful PyUnicodeUCS2_DecodeUTF8Stateful | ||
| 166 | # define PyUnicode_DecodeUnicodeEscape PyUnicodeUCS2_DecodeUnicodeEscape | ||
| 167 | # define PyUnicode_Encode PyUnicodeUCS2_Encode | ||
| 168 | # define PyUnicode_EncodeASCII PyUnicodeUCS2_EncodeASCII | ||
| 169 | # define PyUnicode_EncodeCharmap PyUnicodeUCS2_EncodeCharmap | ||
| 170 | # define PyUnicode_EncodeDecimal PyUnicodeUCS2_EncodeDecimal | ||
| 171 | # define PyUnicode_EncodeLatin1 PyUnicodeUCS2_EncodeLatin1 | ||
| 172 | # define PyUnicode_EncodeRawUnicodeEscape PyUnicodeUCS2_EncodeRawUnicodeEscape | ||
| 173 | # define PyUnicode_EncodeUTF16 PyUnicodeUCS2_EncodeUTF16 | ||
| 174 | # define PyUnicode_EncodeUTF8 PyUnicodeUCS2_EncodeUTF8 | ||
| 175 | # define PyUnicode_EncodeUnicodeEscape PyUnicodeUCS2_EncodeUnicodeEscape | ||
| 176 | # define PyUnicode_Find PyUnicodeUCS2_Find | ||
| 177 | # define PyUnicode_Format PyUnicodeUCS2_Format | ||
| 178 | # define PyUnicode_FromEncodedObject PyUnicodeUCS2_FromEncodedObject | ||
| 179 | # define PyUnicode_FromObject PyUnicodeUCS2_FromObject | ||
| 180 | # define PyUnicode_FromOrdinal PyUnicodeUCS2_FromOrdinal | ||
| 181 | # define PyUnicode_FromUnicode PyUnicodeUCS2_FromUnicode | ||
| 182 | # define PyUnicode_FromWideChar PyUnicodeUCS2_FromWideChar | ||
| 183 | # define PyUnicode_GetDefaultEncoding PyUnicodeUCS2_GetDefaultEncoding | ||
| 184 | # define PyUnicode_GetMax PyUnicodeUCS2_GetMax | ||
| 185 | # define PyUnicode_GetSize PyUnicodeUCS2_GetSize | ||
| 186 | # define PyUnicode_Join PyUnicodeUCS2_Join | ||
| 187 | # define PyUnicode_Partition PyUnicodeUCS2_Partition | ||
| 188 | # define PyUnicode_RPartition PyUnicodeUCS2_RPartition | ||
| 189 | # define PyUnicode_RSplit PyUnicodeUCS2_RSplit | ||
| 190 | # define PyUnicode_Replace PyUnicodeUCS2_Replace | ||
| 191 | # define PyUnicode_Resize PyUnicodeUCS2_Resize | ||
| 192 | # define PyUnicode_RichCompare PyUnicodeUCS2_RichCompare | ||
| 193 | # define PyUnicode_SetDefaultEncoding PyUnicodeUCS2_SetDefaultEncoding | ||
| 194 | # define PyUnicode_Split PyUnicodeUCS2_Split | ||
| 195 | # define PyUnicode_Splitlines PyUnicodeUCS2_Splitlines | ||
| 196 | # define PyUnicode_Tailmatch PyUnicodeUCS2_Tailmatch | ||
| 197 | # define PyUnicode_Translate PyUnicodeUCS2_Translate | ||
| 198 | # define PyUnicode_TranslateCharmap PyUnicodeUCS2_TranslateCharmap | ||
| 199 | # define _PyUnicode_AsDefaultEncodedString _PyUnicodeUCS2_AsDefaultEncodedString | ||
| 200 | # define _PyUnicode_Fini _PyUnicodeUCS2_Fini | ||
| 201 | # define _PyUnicode_Init _PyUnicodeUCS2_Init | ||
| 202 | # define _PyUnicode_IsAlpha _PyUnicodeUCS2_IsAlpha | ||
| 203 | # define _PyUnicode_IsDecimalDigit _PyUnicodeUCS2_IsDecimalDigit | ||
| 204 | # define _PyUnicode_IsDigit _PyUnicodeUCS2_IsDigit | ||
| 205 | # define _PyUnicode_IsLinebreak _PyUnicodeUCS2_IsLinebreak | ||
| 206 | # define _PyUnicode_IsLowercase _PyUnicodeUCS2_IsLowercase | ||
| 207 | # define _PyUnicode_IsNumeric _PyUnicodeUCS2_IsNumeric | ||
| 208 | # define _PyUnicode_IsTitlecase _PyUnicodeUCS2_IsTitlecase | ||
| 209 | # define _PyUnicode_IsUppercase _PyUnicodeUCS2_IsUppercase | ||
| 210 | # define _PyUnicode_IsWhitespace _PyUnicodeUCS2_IsWhitespace | ||
| 211 | # define _PyUnicode_ToDecimalDigit _PyUnicodeUCS2_ToDecimalDigit | ||
| 212 | # define _PyUnicode_ToDigit _PyUnicodeUCS2_ToDigit | ||
| 213 | # define _PyUnicode_ToLowercase _PyUnicodeUCS2_ToLowercase | ||
| 214 | # define _PyUnicode_ToNumeric _PyUnicodeUCS2_ToNumeric | ||
| 215 | # define _PyUnicode_ToTitlecase _PyUnicodeUCS2_ToTitlecase | ||
| 216 | # define _PyUnicode_ToUppercase _PyUnicodeUCS2_ToUppercase | ||
| 217 | |||
| 218 | #else | ||
| 219 | |||
| 220 | # define PyUnicode_AsASCIIString PyUnicodeUCS4_AsASCIIString | ||
| 221 | # define PyUnicode_AsCharmapString PyUnicodeUCS4_AsCharmapString | ||
| 222 | # define PyUnicode_AsEncodedObject PyUnicodeUCS4_AsEncodedObject | ||
| 223 | # define PyUnicode_AsEncodedString PyUnicodeUCS4_AsEncodedString | ||
| 224 | # define PyUnicode_AsLatin1String PyUnicodeUCS4_AsLatin1String | ||
| 225 | # define PyUnicode_AsRawUnicodeEscapeString PyUnicodeUCS4_AsRawUnicodeEscapeString | ||
| 226 | # define PyUnicode_AsUTF16String PyUnicodeUCS4_AsUTF16String | ||
| 227 | # define PyUnicode_AsUTF8String PyUnicodeUCS4_AsUTF8String | ||
| 228 | # define PyUnicode_AsUnicode PyUnicodeUCS4_AsUnicode | ||
| 229 | # define PyUnicode_AsUnicodeEscapeString PyUnicodeUCS4_AsUnicodeEscapeString | ||
| 230 | # define PyUnicode_AsWideChar PyUnicodeUCS4_AsWideChar | ||
| 231 | # define PyUnicode_Compare PyUnicodeUCS4_Compare | ||
| 232 | # define PyUnicode_Concat PyUnicodeUCS4_Concat | ||
| 233 | # define PyUnicode_Contains PyUnicodeUCS4_Contains | ||
| 234 | # define PyUnicode_Count PyUnicodeUCS4_Count | ||
| 235 | # define PyUnicode_Decode PyUnicodeUCS4_Decode | ||
| 236 | # define PyUnicode_DecodeASCII PyUnicodeUCS4_DecodeASCII | ||
| 237 | # define PyUnicode_DecodeCharmap PyUnicodeUCS4_DecodeCharmap | ||
| 238 | # define PyUnicode_DecodeLatin1 PyUnicodeUCS4_DecodeLatin1 | ||
| 239 | # define PyUnicode_DecodeRawUnicodeEscape PyUnicodeUCS4_DecodeRawUnicodeEscape | ||
| 240 | # define PyUnicode_DecodeUTF16 PyUnicodeUCS4_DecodeUTF16 | ||
| 241 | # define PyUnicode_DecodeUTF16Stateful PyUnicodeUCS4_DecodeUTF16Stateful | ||
| 242 | # define PyUnicode_DecodeUTF8 PyUnicodeUCS4_DecodeUTF8 | ||
| 243 | # define PyUnicode_DecodeUTF8Stateful PyUnicodeUCS4_DecodeUTF8Stateful | ||
| 244 | # define PyUnicode_DecodeUnicodeEscape PyUnicodeUCS4_DecodeUnicodeEscape | ||
| 245 | # define PyUnicode_Encode PyUnicodeUCS4_Encode | ||
| 246 | # define PyUnicode_EncodeASCII PyUnicodeUCS4_EncodeASCII | ||
| 247 | # define PyUnicode_EncodeCharmap PyUnicodeUCS4_EncodeCharmap | ||
| 248 | # define PyUnicode_EncodeDecimal PyUnicodeUCS4_EncodeDecimal | ||
| 249 | # define PyUnicode_EncodeLatin1 PyUnicodeUCS4_EncodeLatin1 | ||
| 250 | # define PyUnicode_EncodeRawUnicodeEscape PyUnicodeUCS4_EncodeRawUnicodeEscape | ||
| 251 | # define PyUnicode_EncodeUTF16 PyUnicodeUCS4_EncodeUTF16 | ||
| 252 | # define PyUnicode_EncodeUTF8 PyUnicodeUCS4_EncodeUTF8 | ||
| 253 | # define PyUnicode_EncodeUnicodeEscape PyUnicodeUCS4_EncodeUnicodeEscape | ||
| 254 | # define PyUnicode_Find PyUnicodeUCS4_Find | ||
| 255 | # define PyUnicode_Format PyUnicodeUCS4_Format | ||
| 256 | # define PyUnicode_FromEncodedObject PyUnicodeUCS4_FromEncodedObject | ||
| 257 | # define PyUnicode_FromObject PyUnicodeUCS4_FromObject | ||
| 258 | # define PyUnicode_FromOrdinal PyUnicodeUCS4_FromOrdinal | ||
| 259 | # define PyUnicode_FromUnicode PyUnicodeUCS4_FromUnicode | ||
| 260 | # define PyUnicode_FromWideChar PyUnicodeUCS4_FromWideChar | ||
| 261 | # define PyUnicode_GetDefaultEncoding PyUnicodeUCS4_GetDefaultEncoding | ||
| 262 | # define PyUnicode_GetMax PyUnicodeUCS4_GetMax | ||
| 263 | # define PyUnicode_GetSize PyUnicodeUCS4_GetSize | ||
| 264 | # define PyUnicode_Join PyUnicodeUCS4_Join | ||
| 265 | # define PyUnicode_Partition PyUnicodeUCS4_Partition | ||
| 266 | # define PyUnicode_RPartition PyUnicodeUCS4_RPartition | ||
| 267 | # define PyUnicode_RSplit PyUnicodeUCS4_RSplit | ||
| 268 | # define PyUnicode_Replace PyUnicodeUCS4_Replace | ||
| 269 | # define PyUnicode_Resize PyUnicodeUCS4_Resize | ||
| 270 | # define PyUnicode_RichCompare PyUnicodeUCS4_RichCompare | ||
| 271 | # define PyUnicode_SetDefaultEncoding PyUnicodeUCS4_SetDefaultEncoding | ||
| 272 | # define PyUnicode_Split PyUnicodeUCS4_Split | ||
| 273 | # define PyUnicode_Splitlines PyUnicodeUCS4_Splitlines | ||
| 274 | # define PyUnicode_Tailmatch PyUnicodeUCS4_Tailmatch | ||
| 275 | # define PyUnicode_Translate PyUnicodeUCS4_Translate | ||
| 276 | # define PyUnicode_TranslateCharmap PyUnicodeUCS4_TranslateCharmap | ||
| 277 | # define _PyUnicode_AsDefaultEncodedString _PyUnicodeUCS4_AsDefaultEncodedString | ||
| 278 | # define _PyUnicode_Fini _PyUnicodeUCS4_Fini | ||
| 279 | # define _PyUnicode_Init _PyUnicodeUCS4_Init | ||
| 280 | # define _PyUnicode_IsAlpha _PyUnicodeUCS4_IsAlpha | ||
| 281 | # define _PyUnicode_IsDecimalDigit _PyUnicodeUCS4_IsDecimalDigit | ||
| 282 | # define _PyUnicode_IsDigit _PyUnicodeUCS4_IsDigit | ||
| 283 | # define _PyUnicode_IsLinebreak _PyUnicodeUCS4_IsLinebreak | ||
| 284 | # define _PyUnicode_IsLowercase _PyUnicodeUCS4_IsLowercase | ||
| 285 | # define _PyUnicode_IsNumeric _PyUnicodeUCS4_IsNumeric | ||
| 286 | # define _PyUnicode_IsTitlecase _PyUnicodeUCS4_IsTitlecase | ||
| 287 | # define _PyUnicode_IsUppercase _PyUnicodeUCS4_IsUppercase | ||
| 288 | # define _PyUnicode_IsWhitespace _PyUnicodeUCS4_IsWhitespace | ||
| 289 | # define _PyUnicode_ToDecimalDigit _PyUnicodeUCS4_ToDecimalDigit | ||
| 290 | # define _PyUnicode_ToDigit _PyUnicodeUCS4_ToDigit | ||
| 291 | # define _PyUnicode_ToLowercase _PyUnicodeUCS4_ToLowercase | ||
| 292 | # define _PyUnicode_ToNumeric _PyUnicodeUCS4_ToNumeric | ||
| 293 | # define _PyUnicode_ToTitlecase _PyUnicodeUCS4_ToTitlecase | ||
| 294 | # define _PyUnicode_ToUppercase _PyUnicodeUCS4_ToUppercase | ||
| 295 | |||
| 296 | |||
| 297 | #endif | ||
| 298 | |||
| 299 | /* --- Internal Unicode Operations ---------------------------------------- */ | ||
| 300 | |||
| 301 | /* If you want Python to use the compiler's wctype.h functions instead | ||
| 302 | of the ones supplied with Python, define WANT_WCTYPE_FUNCTIONS or | ||
| 303 | configure Python using --with-wctype-functions. This reduces the | ||
| 304 | interpreter's code size. */ | ||
| 305 | |||
| 306 | #if defined(HAVE_USABLE_WCHAR_T) && defined(WANT_WCTYPE_FUNCTIONS) | ||
| 307 | |||
| 308 | #include <wctype.h> | ||
| 309 | |||
| 310 | #define Py_UNICODE_ISSPACE(ch) iswspace(ch) | ||
| 311 | |||
| 312 | #define Py_UNICODE_ISLOWER(ch) iswlower(ch) | ||
| 313 | #define Py_UNICODE_ISUPPER(ch) iswupper(ch) | ||
| 314 | #define Py_UNICODE_ISTITLE(ch) _PyUnicode_IsTitlecase(ch) | ||
| 315 | #define Py_UNICODE_ISLINEBREAK(ch) _PyUnicode_IsLinebreak(ch) | ||
| 316 | |||
| 317 | #define Py_UNICODE_TOLOWER(ch) towlower(ch) | ||
| 318 | #define Py_UNICODE_TOUPPER(ch) towupper(ch) | ||
| 319 | #define Py_UNICODE_TOTITLE(ch) _PyUnicode_ToTitlecase(ch) | ||
| 320 | |||
| 321 | #define Py_UNICODE_ISDECIMAL(ch) _PyUnicode_IsDecimalDigit(ch) | ||
| 322 | #define Py_UNICODE_ISDIGIT(ch) _PyUnicode_IsDigit(ch) | ||
| 323 | #define Py_UNICODE_ISNUMERIC(ch) _PyUnicode_IsNumeric(ch) | ||
| 324 | |||
| 325 | #define Py_UNICODE_TODECIMAL(ch) _PyUnicode_ToDecimalDigit(ch) | ||
| 326 | #define Py_UNICODE_TODIGIT(ch) _PyUnicode_ToDigit(ch) | ||
| 327 | #define Py_UNICODE_TONUMERIC(ch) _PyUnicode_ToNumeric(ch) | ||
| 328 | |||
| 329 | #define Py_UNICODE_ISALPHA(ch) iswalpha(ch) | ||
| 330 | |||
| 331 | #else | ||
| 332 | |||
| 333 | #define Py_UNICODE_ISSPACE(ch) _PyUnicode_IsWhitespace(ch) | ||
| 334 | |||
| 335 | #define Py_UNICODE_ISLOWER(ch) _PyUnicode_IsLowercase(ch) | ||
| 336 | #define Py_UNICODE_ISUPPER(ch) _PyUnicode_IsUppercase(ch) | ||
| 337 | #define Py_UNICODE_ISTITLE(ch) _PyUnicode_IsTitlecase(ch) | ||
| 338 | #define Py_UNICODE_ISLINEBREAK(ch) _PyUnicode_IsLinebreak(ch) | ||
| 339 | |||
| 340 | #define Py_UNICODE_TOLOWER(ch) _PyUnicode_ToLowercase(ch) | ||
| 341 | #define Py_UNICODE_TOUPPER(ch) _PyUnicode_ToUppercase(ch) | ||
| 342 | #define Py_UNICODE_TOTITLE(ch) _PyUnicode_ToTitlecase(ch) | ||
| 343 | |||
| 344 | #define Py_UNICODE_ISDECIMAL(ch) _PyUnicode_IsDecimalDigit(ch) | ||
| 345 | #define Py_UNICODE_ISDIGIT(ch) _PyUnicode_IsDigit(ch) | ||
| 346 | #define Py_UNICODE_ISNUMERIC(ch) _PyUnicode_IsNumeric(ch) | ||
| 347 | |||
| 348 | #define Py_UNICODE_TODECIMAL(ch) _PyUnicode_ToDecimalDigit(ch) | ||
| 349 | #define Py_UNICODE_TODIGIT(ch) _PyUnicode_ToDigit(ch) | ||
| 350 | #define Py_UNICODE_TONUMERIC(ch) _PyUnicode_ToNumeric(ch) | ||
| 351 | |||
| 352 | #define Py_UNICODE_ISALPHA(ch) _PyUnicode_IsAlpha(ch) | ||
| 353 | |||
| 354 | #endif | ||
| 355 | |||
| 356 | #define Py_UNICODE_ISALNUM(ch) \ | ||
| 357 | (Py_UNICODE_ISALPHA(ch) || \ | ||
| 358 | Py_UNICODE_ISDECIMAL(ch) || \ | ||
| 359 | Py_UNICODE_ISDIGIT(ch) || \ | ||
| 360 | Py_UNICODE_ISNUMERIC(ch)) | ||
| 361 | |||
| 362 | #define Py_UNICODE_COPY(target, source, length) \ | ||
| 363 | Py_MEMCPY((target), (source), (length)*sizeof(Py_UNICODE)) | ||
| 364 | |||
| 365 | #define Py_UNICODE_FILL(target, value, length) do\ | ||
| 366 | {Py_ssize_t i_; Py_UNICODE *t_ = (target); Py_UNICODE v_ = (value);\ | ||
| 367 | for (i_ = 0; i_ < (length); i_++) t_[i_] = v_;\ | ||
| 368 | } while (0) | ||
| 369 | |||
| 370 | /* check if substring matches at given offset. the offset must be | ||
| 371 | valid, and the substring must not be empty */ | ||
| 372 | #define Py_UNICODE_MATCH(string, offset, substring) \ | ||
| 373 | ((*((string)->str + (offset)) == *((substring)->str)) && \ | ||
| 374 | ((*((string)->str + (offset) + (substring)->length-1) == *((substring)->str + (substring)->length-1))) && \ | ||
| 375 | !memcmp((string)->str + (offset), (substring)->str, (substring)->length*sizeof(Py_UNICODE))) | ||
| 376 | |||
| 377 | #ifdef __cplusplus | ||
| 378 | extern "C" { | ||
| 379 | #endif | ||
| 380 | |||
| 381 | /* --- Unicode Type ------------------------------------------------------- */ | ||
| 382 | |||
| 383 | typedef struct { | ||
| 384 | PyObject_HEAD | ||
| 385 | Py_ssize_t length; /* Length of raw Unicode data in buffer */ | ||
| 386 | Py_UNICODE *str; /* Raw Unicode buffer */ | ||
| 387 | long hash; /* Hash value; -1 if not set */ | ||
| 388 | PyObject *defenc; /* (Default) Encoded version as Python | ||
| 389 | string, or NULL; this is used for | ||
| 390 | implementing the buffer protocol */ | ||
| 391 | } PyUnicodeObject; | ||
| 392 | |||
| 393 | PyAPI_DATA(PyTypeObject) PyUnicode_Type; | ||
| 394 | |||
| 395 | #define PyUnicode_Check(op) PyObject_TypeCheck(op, &PyUnicode_Type) | ||
| 396 | #define PyUnicode_CheckExact(op) ((op)->ob_type == &PyUnicode_Type) | ||
| 397 | |||
| 398 | /* Fast access macros */ | ||
| 399 | #define PyUnicode_GET_SIZE(op) \ | ||
| 400 | (((PyUnicodeObject *)(op))->length) | ||
| 401 | #define PyUnicode_GET_DATA_SIZE(op) \ | ||
| 402 | (((PyUnicodeObject *)(op))->length * sizeof(Py_UNICODE)) | ||
| 403 | #define PyUnicode_AS_UNICODE(op) \ | ||
| 404 | (((PyUnicodeObject *)(op))->str) | ||
| 405 | #define PyUnicode_AS_DATA(op) \ | ||
| 406 | ((const char *)((PyUnicodeObject *)(op))->str) | ||
| 407 | |||
| 408 | /* --- Constants ---------------------------------------------------------- */ | ||
| 409 | |||
| 410 | /* This Unicode character will be used as replacement character during | ||
| 411 | decoding if the errors argument is set to "replace". Note: the | ||
| 412 | Unicode character U+FFFD is the official REPLACEMENT CHARACTER in | ||
| 413 | Unicode 3.0. */ | ||
| 414 | |||
| 415 | #define Py_UNICODE_REPLACEMENT_CHARACTER ((Py_UNICODE) 0xFFFD) | ||
| 416 | |||
| 417 | /* === Public API ========================================================= */ | ||
| 418 | |||
| 419 | /* --- Plain Py_UNICODE --------------------------------------------------- */ | ||
| 420 | |||
| 421 | /* Create a Unicode Object from the Py_UNICODE buffer u of the given | ||
| 422 | size. | ||
| 423 | |||
| 424 | u may be NULL which causes the contents to be undefined. It is the | ||
| 425 | user's responsibility to fill in the needed data afterwards. Note | ||
| 426 | that modifying the Unicode object contents after construction is | ||
| 427 | only allowed if u was set to NULL. | ||
| 428 | |||
| 429 | The buffer is copied into the new object. */ | ||
| 430 | |||
| 431 | PyAPI_FUNC(PyObject*) PyUnicode_FromUnicode( | ||
| 432 | const Py_UNICODE *u, /* Unicode buffer */ | ||
| 433 | Py_ssize_t size /* size of buffer */ | ||
| 434 | ); | ||
| 435 | |||
| 436 | /* Return a read-only pointer to the Unicode object's internal | ||
| 437 | Py_UNICODE buffer. */ | ||
| 438 | |||
| 439 | PyAPI_FUNC(Py_UNICODE *) PyUnicode_AsUnicode( | ||
| 440 | PyObject *unicode /* Unicode object */ | ||
| 441 | ); | ||
| 442 | |||
| 443 | /* Get the length of the Unicode object. */ | ||
| 444 | |||
| 445 | PyAPI_FUNC(Py_ssize_t) PyUnicode_GetSize( | ||
| 446 | PyObject *unicode /* Unicode object */ | ||
| 447 | ); | ||
| 448 | |||
| 449 | /* Get the maximum ordinal for a Unicode character. */ | ||
| 450 | PyAPI_FUNC(Py_UNICODE) PyUnicode_GetMax(void); | ||
| 451 | |||
| 452 | /* Resize an already allocated Unicode object to the new size length. | ||
| 453 | |||
| 454 | *unicode is modified to point to the new (resized) object and 0 | ||
| 455 | returned on success. | ||
| 456 | |||
| 457 | This API may only be called by the function which also called the | ||
| 458 | Unicode constructor. The refcount on the object must be 1. Otherwise, | ||
| 459 | an error is returned. | ||
| 460 | |||
| 461 | Error handling is implemented as follows: an exception is set, -1 | ||
| 462 | is returned and *unicode left untouched. | ||
| 463 | |||
| 464 | */ | ||
| 465 | |||
| 466 | PyAPI_FUNC(int) PyUnicode_Resize( | ||
| 467 | PyObject **unicode, /* Pointer to the Unicode object */ | ||
| 468 | Py_ssize_t length /* New length */ | ||
| 469 | ); | ||
| 470 | |||
| 471 | /* Coerce obj to an Unicode object and return a reference with | ||
| 472 | *incremented* refcount. | ||
| 473 | |||
| 474 | Coercion is done in the following way: | ||
| 475 | |||
| 476 | 1. String and other char buffer compatible objects are decoded | ||
| 477 | under the assumptions that they contain data using the current | ||
| 478 | default encoding. Decoding is done in "strict" mode. | ||
| 479 | |||
| 480 | 2. All other objects (including Unicode objects) raise an | ||
| 481 | exception. | ||
| 482 | |||
| 483 | The API returns NULL in case of an error. The caller is responsible | ||
| 484 | for decref'ing the returned objects. | ||
| 485 | |||
| 486 | */ | ||
| 487 | |||
| 488 | PyAPI_FUNC(PyObject*) PyUnicode_FromEncodedObject( | ||
| 489 | register PyObject *obj, /* Object */ | ||
| 490 | const char *encoding, /* encoding */ | ||
| 491 | const char *errors /* error handling */ | ||
| 492 | ); | ||
| 493 | |||
| 494 | /* Coerce obj to an Unicode object and return a reference with | ||
| 495 | *incremented* refcount. | ||
| 496 | |||
| 497 | Unicode objects are passed back as-is (subclasses are converted to | ||
| 498 | true Unicode objects), all other objects are delegated to | ||
| 499 | PyUnicode_FromEncodedObject(obj, NULL, "strict") which results in | ||
| 500 | using the default encoding as basis for decoding the object. | ||
| 501 | |||
| 502 | The API returns NULL in case of an error. The caller is responsible | ||
| 503 | for decref'ing the returned objects. | ||
| 504 | |||
| 505 | */ | ||
| 506 | |||
| 507 | PyAPI_FUNC(PyObject*) PyUnicode_FromObject( | ||
| 508 | register PyObject *obj /* Object */ | ||
| 509 | ); | ||
| 510 | |||
| 511 | /* --- wchar_t support for platforms which support it --------------------- */ | ||
| 512 | |||
| 513 | #ifdef HAVE_WCHAR_H | ||
| 514 | |||
| 515 | /* Create a Unicode Object from the whcar_t buffer w of the given | ||
| 516 | size. | ||
| 517 | |||
| 518 | The buffer is copied into the new object. */ | ||
| 519 | |||
| 520 | PyAPI_FUNC(PyObject*) PyUnicode_FromWideChar( | ||
| 521 | register const wchar_t *w, /* wchar_t buffer */ | ||
| 522 | Py_ssize_t size /* size of buffer */ | ||
| 523 | ); | ||
| 524 | |||
| 525 | /* Copies the Unicode Object contents into the wchar_t buffer w. At | ||
| 526 | most size wchar_t characters are copied. | ||
| 527 | |||
| 528 | Note that the resulting wchar_t string may or may not be | ||
| 529 | 0-terminated. It is the responsibility of the caller to make sure | ||
| 530 | that the wchar_t string is 0-terminated in case this is required by | ||
| 531 | the application. | ||
| 532 | |||
| 533 | Returns the number of wchar_t characters copied (excluding a | ||
| 534 | possibly trailing 0-termination character) or -1 in case of an | ||
| 535 | error. */ | ||
| 536 | |||
| 537 | PyAPI_FUNC(Py_ssize_t) PyUnicode_AsWideChar( | ||
| 538 | PyUnicodeObject *unicode, /* Unicode object */ | ||
| 539 | register wchar_t *w, /* wchar_t buffer */ | ||
| 540 | Py_ssize_t size /* size of buffer */ | ||
| 541 | ); | ||
| 542 | |||
| 543 | #endif | ||
| 544 | |||
| 545 | /* --- Unicode ordinals --------------------------------------------------- */ | ||
| 546 | |||
| 547 | /* Create a Unicode Object from the given Unicode code point ordinal. | ||
| 548 | |||
| 549 | The ordinal must be in range(0x10000) on narrow Python builds | ||
| 550 | (UCS2), and range(0x110000) on wide builds (UCS4). A ValueError is | ||
| 551 | raised in case it is not. | ||
| 552 | |||
| 553 | */ | ||
| 554 | |||
| 555 | PyAPI_FUNC(PyObject*) PyUnicode_FromOrdinal(int ordinal); | ||
| 556 | |||
| 557 | /* === Builtin Codecs ===================================================== | ||
| 558 | |||
| 559 | Many of these APIs take two arguments encoding and errors. These | ||
| 560 | parameters encoding and errors have the same semantics as the ones | ||
| 561 | of the builtin unicode() API. | ||
| 562 | |||
| 563 | Setting encoding to NULL causes the default encoding to be used. | ||
| 564 | |||
| 565 | Error handling is set by errors which may also be set to NULL | ||
| 566 | meaning to use the default handling defined for the codec. Default | ||
| 567 | error handling for all builtin codecs is "strict" (ValueErrors are | ||
| 568 | raised). | ||
| 569 | |||
| 570 | The codecs all use a similar interface. Only deviation from the | ||
| 571 | generic ones are documented. | ||
| 572 | |||
| 573 | */ | ||
| 574 | |||
| 575 | /* --- Manage the default encoding ---------------------------------------- */ | ||
| 576 | |||
| 577 | /* Return a Python string holding the default encoded value of the | ||
| 578 | Unicode object. | ||
| 579 | |||
| 580 | The resulting string is cached in the Unicode object for subsequent | ||
| 581 | usage by this function. The cached version is needed to implement | ||
| 582 | the character buffer interface and will live (at least) as long as | ||
| 583 | the Unicode object itself. | ||
| 584 | |||
| 585 | The refcount of the string is *not* incremented. | ||
| 586 | |||
| 587 | *** Exported for internal use by the interpreter only !!! *** | ||
| 588 | |||
| 589 | */ | ||
| 590 | |||
| 591 | PyAPI_FUNC(PyObject *) _PyUnicode_AsDefaultEncodedString( | ||
| 592 | PyObject *, const char *); | ||
| 593 | |||
| 594 | /* Returns the currently active default encoding. | ||
| 595 | |||
| 596 | The default encoding is currently implemented as run-time settable | ||
| 597 | process global. This may change in future versions of the | ||
| 598 | interpreter to become a parameter which is managed on a per-thread | ||
| 599 | basis. | ||
| 600 | |||
| 601 | */ | ||
| 602 | |||
| 603 | PyAPI_FUNC(const char*) PyUnicode_GetDefaultEncoding(void); | ||
| 604 | |||
| 605 | /* Sets the currently active default encoding. | ||
| 606 | |||
| 607 | Returns 0 on success, -1 in case of an error. | ||
| 608 | |||
| 609 | */ | ||
| 610 | |||
| 611 | PyAPI_FUNC(int) PyUnicode_SetDefaultEncoding( | ||
| 612 | const char *encoding /* Encoding name in standard form */ | ||
| 613 | ); | ||
| 614 | |||
| 615 | /* --- Generic Codecs ----------------------------------------------------- */ | ||
| 616 | |||
| 617 | /* Create a Unicode object by decoding the encoded string s of the | ||
| 618 | given size. */ | ||
| 619 | |||
| 620 | PyAPI_FUNC(PyObject*) PyUnicode_Decode( | ||
| 621 | const char *s, /* encoded string */ | ||
| 622 | Py_ssize_t size, /* size of buffer */ | ||
| 623 | const char *encoding, /* encoding */ | ||
| 624 | const char *errors /* error handling */ | ||
| 625 | ); | ||
| 626 | |||
| 627 | /* Encodes a Py_UNICODE buffer of the given size and returns a | ||
| 628 | Python string object. */ | ||
| 629 | |||
| 630 | PyAPI_FUNC(PyObject*) PyUnicode_Encode( | ||
| 631 | const Py_UNICODE *s, /* Unicode char buffer */ | ||
| 632 | Py_ssize_t size, /* number of Py_UNICODE chars to encode */ | ||
| 633 | const char *encoding, /* encoding */ | ||
| 634 | const char *errors /* error handling */ | ||
| 635 | ); | ||
| 636 | |||
| 637 | /* Encodes a Unicode object and returns the result as Python | ||
| 638 | object. */ | ||
| 639 | |||
| 640 | PyAPI_FUNC(PyObject*) PyUnicode_AsEncodedObject( | ||
| 641 | PyObject *unicode, /* Unicode object */ | ||
| 642 | const char *encoding, /* encoding */ | ||
| 643 | const char *errors /* error handling */ | ||
| 644 | ); | ||
| 645 | |||
| 646 | /* Encodes a Unicode object and returns the result as Python string | ||
| 647 | object. */ | ||
| 648 | |||
| 649 | PyAPI_FUNC(PyObject*) PyUnicode_AsEncodedString( | ||
| 650 | PyObject *unicode, /* Unicode object */ | ||
| 651 | const char *encoding, /* encoding */ | ||
| 652 | const char *errors /* error handling */ | ||
| 653 | ); | ||
| 654 | |||
| 655 | PyAPI_FUNC(PyObject*) PyUnicode_BuildEncodingMap( | ||
| 656 | PyObject* string /* 256 character map */ | ||
| 657 | ); | ||
| 658 | |||
| 659 | |||
| 660 | /* --- UTF-7 Codecs ------------------------------------------------------- */ | ||
| 661 | |||
| 662 | PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF7( | ||
| 663 | const char *string, /* UTF-7 encoded string */ | ||
| 664 | Py_ssize_t length, /* size of string */ | ||
| 665 | const char *errors /* error handling */ | ||
| 666 | ); | ||
| 667 | |||
| 668 | PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF7( | ||
| 669 | const Py_UNICODE *data, /* Unicode char buffer */ | ||
| 670 | Py_ssize_t length, /* number of Py_UNICODE chars to encode */ | ||
| 671 | int encodeSetO, /* force the encoder to encode characters in | ||
| 672 | Set O, as described in RFC2152 */ | ||
| 673 | int encodeWhiteSpace, /* force the encoder to encode space, tab, | ||
| 674 | carriage return and linefeed characters */ | ||
| 675 | const char *errors /* error handling */ | ||
| 676 | ); | ||
| 677 | |||
| 678 | /* --- UTF-8 Codecs ------------------------------------------------------- */ | ||
| 679 | |||
| 680 | PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF8( | ||
| 681 | const char *string, /* UTF-8 encoded string */ | ||
| 682 | Py_ssize_t length, /* size of string */ | ||
| 683 | const char *errors /* error handling */ | ||
| 684 | ); | ||
| 685 | |||
| 686 | PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF8Stateful( | ||
| 687 | const char *string, /* UTF-8 encoded string */ | ||
| 688 | Py_ssize_t length, /* size of string */ | ||
| 689 | const char *errors, /* error handling */ | ||
| 690 | Py_ssize_t *consumed /* bytes consumed */ | ||
| 691 | ); | ||
| 692 | |||
| 693 | PyAPI_FUNC(PyObject*) PyUnicode_AsUTF8String( | ||
| 694 | PyObject *unicode /* Unicode object */ | ||
| 695 | ); | ||
| 696 | |||
| 697 | PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF8( | ||
| 698 | const Py_UNICODE *data, /* Unicode char buffer */ | ||
| 699 | Py_ssize_t length, /* number of Py_UNICODE chars to encode */ | ||
| 700 | const char *errors /* error handling */ | ||
| 701 | ); | ||
| 702 | |||
| 703 | /* --- UTF-16 Codecs ------------------------------------------------------ */ | ||
| 704 | |||
| 705 | /* Decodes length bytes from a UTF-16 encoded buffer string and returns | ||
| 706 | the corresponding Unicode object. | ||
| 707 | |||
| 708 | errors (if non-NULL) defines the error handling. It defaults | ||
| 709 | to "strict". | ||
| 710 | |||
| 711 | If byteorder is non-NULL, the decoder starts decoding using the | ||
| 712 | given byte order: | ||
| 713 | |||
| 714 | *byteorder == -1: little endian | ||
| 715 | *byteorder == 0: native order | ||
| 716 | *byteorder == 1: big endian | ||
| 717 | |||
| 718 | In native mode, the first two bytes of the stream are checked for a | ||
| 719 | BOM mark. If found, the BOM mark is analysed, the byte order | ||
| 720 | adjusted and the BOM skipped. In the other modes, no BOM mark | ||
| 721 | interpretation is done. After completion, *byteorder is set to the | ||
| 722 | current byte order at the end of input data. | ||
| 723 | |||
| 724 | If byteorder is NULL, the codec starts in native order mode. | ||
| 725 | |||
| 726 | */ | ||
| 727 | |||
| 728 | PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF16( | ||
| 729 | const char *string, /* UTF-16 encoded string */ | ||
| 730 | Py_ssize_t length, /* size of string */ | ||
| 731 | const char *errors, /* error handling */ | ||
| 732 | int *byteorder /* pointer to byteorder to use | ||
| 733 | 0=native;-1=LE,1=BE; updated on | ||
| 734 | exit */ | ||
| 735 | ); | ||
| 736 | |||
| 737 | PyAPI_FUNC(PyObject*) PyUnicode_DecodeUTF16Stateful( | ||
| 738 | const char *string, /* UTF-16 encoded string */ | ||
| 739 | Py_ssize_t length, /* size of string */ | ||
| 740 | const char *errors, /* error handling */ | ||
| 741 | int *byteorder, /* pointer to byteorder to use | ||
| 742 | 0=native;-1=LE,1=BE; updated on | ||
| 743 | exit */ | ||
| 744 | Py_ssize_t *consumed /* bytes consumed */ | ||
| 745 | ); | ||
| 746 | |||
| 747 | /* Returns a Python string using the UTF-16 encoding in native byte | ||
| 748 | order. The string always starts with a BOM mark. */ | ||
| 749 | |||
| 750 | PyAPI_FUNC(PyObject*) PyUnicode_AsUTF16String( | ||
| 751 | PyObject *unicode /* Unicode object */ | ||
| 752 | ); | ||
| 753 | |||
| 754 | /* Returns a Python string object holding the UTF-16 encoded value of | ||
| 755 | the Unicode data. | ||
| 756 | |||
| 757 | If byteorder is not 0, output is written according to the following | ||
| 758 | byte order: | ||
| 759 | |||
| 760 | byteorder == -1: little endian | ||
| 761 | byteorder == 0: native byte order (writes a BOM mark) | ||
| 762 | byteorder == 1: big endian | ||
| 763 | |||
| 764 | If byteorder is 0, the output string will always start with the | ||
| 765 | Unicode BOM mark (U+FEFF). In the other two modes, no BOM mark is | ||
| 766 | prepended. | ||
| 767 | |||
| 768 | Note that Py_UNICODE data is being interpreted as UTF-16 reduced to | ||
| 769 | UCS-2. This trick makes it possible to add full UTF-16 capabilities | ||
| 770 | at a later point without compromising the APIs. | ||
| 771 | |||
| 772 | */ | ||
| 773 | |||
| 774 | PyAPI_FUNC(PyObject*) PyUnicode_EncodeUTF16( | ||
| 775 | const Py_UNICODE *data, /* Unicode char buffer */ | ||
| 776 | Py_ssize_t length, /* number of Py_UNICODE chars to encode */ | ||
| 777 | const char *errors, /* error handling */ | ||
| 778 | int byteorder /* byteorder to use 0=BOM+native;-1=LE,1=BE */ | ||
| 779 | ); | ||
| 780 | |||
| 781 | /* --- Unicode-Escape Codecs ---------------------------------------------- */ | ||
| 782 | |||
| 783 | PyAPI_FUNC(PyObject*) PyUnicode_DecodeUnicodeEscape( | ||
| 784 | const char *string, /* Unicode-Escape encoded string */ | ||
| 785 | Py_ssize_t length, /* size of string */ | ||
| 786 | const char *errors /* error handling */ | ||
| 787 | ); | ||
| 788 | |||
| 789 | PyAPI_FUNC(PyObject*) PyUnicode_AsUnicodeEscapeString( | ||
| 790 | PyObject *unicode /* Unicode object */ | ||
| 791 | ); | ||
| 792 | |||
| 793 | PyAPI_FUNC(PyObject*) PyUnicode_EncodeUnicodeEscape( | ||
| 794 | const Py_UNICODE *data, /* Unicode char buffer */ | ||
| 795 | Py_ssize_t length /* Number of Py_UNICODE chars to encode */ | ||
| 796 | ); | ||
| 797 | |||
| 798 | /* --- Raw-Unicode-Escape Codecs ------------------------------------------ */ | ||
| 799 | |||
| 800 | PyAPI_FUNC(PyObject*) PyUnicode_DecodeRawUnicodeEscape( | ||
| 801 | const char *string, /* Raw-Unicode-Escape encoded string */ | ||
| 802 | Py_ssize_t length, /* size of string */ | ||
| 803 | const char *errors /* error handling */ | ||
| 804 | ); | ||
| 805 | |||
| 806 | PyAPI_FUNC(PyObject*) PyUnicode_AsRawUnicodeEscapeString( | ||
| 807 | PyObject *unicode /* Unicode object */ | ||
| 808 | ); | ||
| 809 | |||
| 810 | PyAPI_FUNC(PyObject*) PyUnicode_EncodeRawUnicodeEscape( | ||
| 811 | const Py_UNICODE *data, /* Unicode char buffer */ | ||
| 812 | Py_ssize_t length /* Number of Py_UNICODE chars to encode */ | ||
| 813 | ); | ||
| 814 | |||
| 815 | /* --- Unicode Internal Codec --------------------------------------------- | ||
| 816 | |||
| 817 | Only for internal use in _codecsmodule.c */ | ||
| 818 | |||
| 819 | PyObject *_PyUnicode_DecodeUnicodeInternal( | ||
| 820 | const char *string, | ||
| 821 | Py_ssize_t length, | ||
| 822 | const char *errors | ||
| 823 | ); | ||
| 824 | |||
| 825 | /* --- Latin-1 Codecs ----------------------------------------------------- | ||
| 826 | |||
| 827 | Note: Latin-1 corresponds to the first 256 Unicode ordinals. | ||
| 828 | |||
| 829 | */ | ||
| 830 | |||
| 831 | PyAPI_FUNC(PyObject*) PyUnicode_DecodeLatin1( | ||
| 832 | const char *string, /* Latin-1 encoded string */ | ||
| 833 | Py_ssize_t length, /* size of string */ | ||
| 834 | const char *errors /* error handling */ | ||
| 835 | ); | ||
| 836 | |||
| 837 | PyAPI_FUNC(PyObject*) PyUnicode_AsLatin1String( | ||
| 838 | PyObject *unicode /* Unicode object */ | ||
| 839 | ); | ||
| 840 | |||
| 841 | PyAPI_FUNC(PyObject*) PyUnicode_EncodeLatin1( | ||
| 842 | const Py_UNICODE *data, /* Unicode char buffer */ | ||
| 843 | Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ | ||
| 844 | const char *errors /* error handling */ | ||
| 845 | ); | ||
| 846 | |||
| 847 | /* --- ASCII Codecs ------------------------------------------------------- | ||
| 848 | |||
| 849 | Only 7-bit ASCII data is excepted. All other codes generate errors. | ||
| 850 | |||
| 851 | */ | ||
| 852 | |||
| 853 | PyAPI_FUNC(PyObject*) PyUnicode_DecodeASCII( | ||
| 854 | const char *string, /* ASCII encoded string */ | ||
| 855 | Py_ssize_t length, /* size of string */ | ||
| 856 | const char *errors /* error handling */ | ||
| 857 | ); | ||
| 858 | |||
| 859 | PyAPI_FUNC(PyObject*) PyUnicode_AsASCIIString( | ||
| 860 | PyObject *unicode /* Unicode object */ | ||
| 861 | ); | ||
| 862 | |||
| 863 | PyAPI_FUNC(PyObject*) PyUnicode_EncodeASCII( | ||
| 864 | const Py_UNICODE *data, /* Unicode char buffer */ | ||
| 865 | Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ | ||
| 866 | const char *errors /* error handling */ | ||
| 867 | ); | ||
| 868 | |||
| 869 | /* --- Character Map Codecs ----------------------------------------------- | ||
| 870 | |||
| 871 | This codec uses mappings to encode and decode characters. | ||
| 872 | |||
| 873 | Decoding mappings must map single string characters to single | ||
| 874 | Unicode characters, integers (which are then interpreted as Unicode | ||
| 875 | ordinals) or None (meaning "undefined mapping" and causing an | ||
| 876 | error). | ||
| 877 | |||
| 878 | Encoding mappings must map single Unicode characters to single | ||
| 879 | string characters, integers (which are then interpreted as Latin-1 | ||
| 880 | ordinals) or None (meaning "undefined mapping" and causing an | ||
| 881 | error). | ||
| 882 | |||
| 883 | If a character lookup fails with a LookupError, the character is | ||
| 884 | copied as-is meaning that its ordinal value will be interpreted as | ||
| 885 | Unicode or Latin-1 ordinal resp. Because of this mappings only need | ||
| 886 | to contain those mappings which map characters to different code | ||
| 887 | points. | ||
| 888 | |||
| 889 | */ | ||
| 890 | |||
| 891 | PyAPI_FUNC(PyObject*) PyUnicode_DecodeCharmap( | ||
| 892 | const char *string, /* Encoded string */ | ||
| 893 | Py_ssize_t length, /* size of string */ | ||
| 894 | PyObject *mapping, /* character mapping | ||
| 895 | (char ordinal -> unicode ordinal) */ | ||
| 896 | const char *errors /* error handling */ | ||
| 897 | ); | ||
| 898 | |||
| 899 | PyAPI_FUNC(PyObject*) PyUnicode_AsCharmapString( | ||
| 900 | PyObject *unicode, /* Unicode object */ | ||
| 901 | PyObject *mapping /* character mapping | ||
| 902 | (unicode ordinal -> char ordinal) */ | ||
| 903 | ); | ||
| 904 | |||
| 905 | PyAPI_FUNC(PyObject*) PyUnicode_EncodeCharmap( | ||
| 906 | const Py_UNICODE *data, /* Unicode char buffer */ | ||
| 907 | Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ | ||
| 908 | PyObject *mapping, /* character mapping | ||
| 909 | (unicode ordinal -> char ordinal) */ | ||
| 910 | const char *errors /* error handling */ | ||
| 911 | ); | ||
| 912 | |||
| 913 | /* Translate a Py_UNICODE buffer of the given length by applying a | ||
| 914 | character mapping table to it and return the resulting Unicode | ||
| 915 | object. | ||
| 916 | |||
| 917 | The mapping table must map Unicode ordinal integers to Unicode | ||
| 918 | ordinal integers or None (causing deletion of the character). | ||
| 919 | |||
| 920 | Mapping tables may be dictionaries or sequences. Unmapped character | ||
| 921 | ordinals (ones which cause a LookupError) are left untouched and | ||
| 922 | are copied as-is. | ||
| 923 | |||
| 924 | */ | ||
| 925 | |||
| 926 | PyAPI_FUNC(PyObject *) PyUnicode_TranslateCharmap( | ||
| 927 | const Py_UNICODE *data, /* Unicode char buffer */ | ||
| 928 | Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ | ||
| 929 | PyObject *table, /* Translate table */ | ||
| 930 | const char *errors /* error handling */ | ||
| 931 | ); | ||
| 932 | |||
| 933 | #ifdef MS_WIN32 | ||
| 934 | |||
| 935 | /* --- MBCS codecs for Windows -------------------------------------------- */ | ||
| 936 | |||
| 937 | PyAPI_FUNC(PyObject*) PyUnicode_DecodeMBCS( | ||
| 938 | const char *string, /* MBCS encoded string */ | ||
| 939 | Py_ssize_t length, /* size of string */ | ||
| 940 | const char *errors /* error handling */ | ||
| 941 | ); | ||
| 942 | |||
| 943 | PyAPI_FUNC(PyObject*) PyUnicode_DecodeMBCSStateful( | ||
| 944 | const char *string, /* MBCS encoded string */ | ||
| 945 | Py_ssize_t length, /* size of string */ | ||
| 946 | const char *errors, /* error handling */ | ||
| 947 | Py_ssize_t *consumed /* bytes consumed */ | ||
| 948 | ); | ||
| 949 | |||
| 950 | PyAPI_FUNC(PyObject*) PyUnicode_AsMBCSString( | ||
| 951 | PyObject *unicode /* Unicode object */ | ||
| 952 | ); | ||
| 953 | |||
| 954 | PyAPI_FUNC(PyObject*) PyUnicode_EncodeMBCS( | ||
| 955 | const Py_UNICODE *data, /* Unicode char buffer */ | ||
| 956 | Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ | ||
| 957 | const char *errors /* error handling */ | ||
| 958 | ); | ||
| 959 | |||
| 960 | #endif /* MS_WIN32 */ | ||
| 961 | |||
| 962 | /* --- Decimal Encoder ---------------------------------------------------- */ | ||
| 963 | |||
| 964 | /* Takes a Unicode string holding a decimal value and writes it into | ||
| 965 | an output buffer using standard ASCII digit codes. | ||
| 966 | |||
| 967 | The output buffer has to provide at least length+1 bytes of storage | ||
| 968 | area. The output string is 0-terminated. | ||
| 969 | |||
| 970 | The encoder converts whitespace to ' ', decimal characters to their | ||
| 971 | corresponding ASCII digit and all other Latin-1 characters except | ||
| 972 | \0 as-is. Characters outside this range (Unicode ordinals 1-256) | ||
| 973 | are treated as errors. This includes embedded NULL bytes. | ||
| 974 | |||
| 975 | Error handling is defined by the errors argument: | ||
| 976 | |||
| 977 | NULL or "strict": raise a ValueError | ||
| 978 | "ignore": ignore the wrong characters (these are not copied to the | ||
| 979 | output buffer) | ||
| 980 | "replace": replaces illegal characters with '?' | ||
| 981 | |||
| 982 | Returns 0 on success, -1 on failure. | ||
| 983 | |||
| 984 | */ | ||
| 985 | |||
| 986 | PyAPI_FUNC(int) PyUnicode_EncodeDecimal( | ||
| 987 | Py_UNICODE *s, /* Unicode buffer */ | ||
| 988 | Py_ssize_t length, /* Number of Py_UNICODE chars to encode */ | ||
| 989 | char *output, /* Output buffer; must have size >= length */ | ||
| 990 | const char *errors /* error handling */ | ||
| 991 | ); | ||
| 992 | |||
| 993 | /* --- Methods & Slots ---------------------------------------------------- | ||
| 994 | |||
| 995 | These are capable of handling Unicode objects and strings on input | ||
| 996 | (we refer to them as strings in the descriptions) and return | ||
| 997 | Unicode objects or integers as apporpriate. */ | ||
| 998 | |||
| 999 | /* Concat two strings giving a new Unicode string. */ | ||
| 1000 | |||
| 1001 | PyAPI_FUNC(PyObject*) PyUnicode_Concat( | ||
| 1002 | PyObject *left, /* Left string */ | ||
| 1003 | PyObject *right /* Right string */ | ||
| 1004 | ); | ||
| 1005 | |||
| 1006 | /* Split a string giving a list of Unicode strings. | ||
| 1007 | |||
| 1008 | If sep is NULL, splitting will be done at all whitespace | ||
| 1009 | substrings. Otherwise, splits occur at the given separator. | ||
| 1010 | |||
| 1011 | At most maxsplit splits will be done. If negative, no limit is set. | ||
| 1012 | |||
| 1013 | Separators are not included in the resulting list. | ||
| 1014 | |||
| 1015 | */ | ||
| 1016 | |||
| 1017 | PyAPI_FUNC(PyObject*) PyUnicode_Split( | ||
| 1018 | PyObject *s, /* String to split */ | ||
| 1019 | PyObject *sep, /* String separator */ | ||
| 1020 | Py_ssize_t maxsplit /* Maxsplit count */ | ||
| 1021 | ); | ||
| 1022 | |||
| 1023 | /* Dito, but split at line breaks. | ||
| 1024 | |||
| 1025 | CRLF is considered to be one line break. Line breaks are not | ||
| 1026 | included in the resulting list. */ | ||
| 1027 | |||
| 1028 | PyAPI_FUNC(PyObject*) PyUnicode_Splitlines( | ||
| 1029 | PyObject *s, /* String to split */ | ||
| 1030 | int keepends /* If true, line end markers are included */ | ||
| 1031 | ); | ||
| 1032 | |||
| 1033 | /* Partition a string using a given separator. */ | ||
| 1034 | |||
| 1035 | PyAPI_FUNC(PyObject*) PyUnicode_Partition( | ||
| 1036 | PyObject *s, /* String to partition */ | ||
| 1037 | PyObject *sep /* String separator */ | ||
| 1038 | ); | ||
| 1039 | |||
| 1040 | /* Partition a string using a given separator, searching from the end of the | ||
| 1041 | string. */ | ||
| 1042 | |||
| 1043 | PyAPI_FUNC(PyObject*) PyUnicode_RPartition( | ||
| 1044 | PyObject *s, /* String to partition */ | ||
| 1045 | PyObject *sep /* String separator */ | ||
| 1046 | ); | ||
| 1047 | |||
| 1048 | /* Split a string giving a list of Unicode strings. | ||
| 1049 | |||
| 1050 | If sep is NULL, splitting will be done at all whitespace | ||
| 1051 | substrings. Otherwise, splits occur at the given separator. | ||
| 1052 | |||
| 1053 | At most maxsplit splits will be done. But unlike PyUnicode_Split | ||
| 1054 | PyUnicode_RSplit splits from the end of the string. If negative, | ||
| 1055 | no limit is set. | ||
| 1056 | |||
| 1057 | Separators are not included in the resulting list. | ||
| 1058 | |||
| 1059 | */ | ||
| 1060 | |||
| 1061 | PyAPI_FUNC(PyObject*) PyUnicode_RSplit( | ||
| 1062 | PyObject *s, /* String to split */ | ||
| 1063 | PyObject *sep, /* String separator */ | ||
| 1064 | Py_ssize_t maxsplit /* Maxsplit count */ | ||
| 1065 | ); | ||
| 1066 | |||
| 1067 | /* Translate a string by applying a character mapping table to it and | ||
| 1068 | return the resulting Unicode object. | ||
| 1069 | |||
| 1070 | The mapping table must map Unicode ordinal integers to Unicode | ||
| 1071 | ordinal integers or None (causing deletion of the character). | ||
| 1072 | |||
| 1073 | Mapping tables may be dictionaries or sequences. Unmapped character | ||
| 1074 | ordinals (ones which cause a LookupError) are left untouched and | ||
| 1075 | are copied as-is. | ||
| 1076 | |||
| 1077 | */ | ||
| 1078 | |||
| 1079 | PyAPI_FUNC(PyObject *) PyUnicode_Translate( | ||
| 1080 | PyObject *str, /* String */ | ||
| 1081 | PyObject *table, /* Translate table */ | ||
| 1082 | const char *errors /* error handling */ | ||
| 1083 | ); | ||
| 1084 | |||
| 1085 | /* Join a sequence of strings using the given separator and return | ||
| 1086 | the resulting Unicode string. */ | ||
| 1087 | |||
| 1088 | PyAPI_FUNC(PyObject*) PyUnicode_Join( | ||
| 1089 | PyObject *separator, /* Separator string */ | ||
| 1090 | PyObject *seq /* Sequence object */ | ||
| 1091 | ); | ||
| 1092 | |||
| 1093 | /* Return 1 if substr matches str[start:end] at the given tail end, 0 | ||
| 1094 | otherwise. */ | ||
| 1095 | |||
| 1096 | PyAPI_FUNC(Py_ssize_t) PyUnicode_Tailmatch( | ||
| 1097 | PyObject *str, /* String */ | ||
| 1098 | PyObject *substr, /* Prefix or Suffix string */ | ||
| 1099 | Py_ssize_t start, /* Start index */ | ||
| 1100 | Py_ssize_t end, /* Stop index */ | ||
| 1101 | int direction /* Tail end: -1 prefix, +1 suffix */ | ||
| 1102 | ); | ||
| 1103 | |||
| 1104 | /* Return the first position of substr in str[start:end] using the | ||
| 1105 | given search direction or -1 if not found. -2 is returned in case | ||
| 1106 | an error occurred and an exception is set. */ | ||
| 1107 | |||
| 1108 | PyAPI_FUNC(Py_ssize_t) PyUnicode_Find( | ||
| 1109 | PyObject *str, /* String */ | ||
| 1110 | PyObject *substr, /* Substring to find */ | ||
| 1111 | Py_ssize_t start, /* Start index */ | ||
| 1112 | Py_ssize_t end, /* Stop index */ | ||
| 1113 | int direction /* Find direction: +1 forward, -1 backward */ | ||
| 1114 | ); | ||
| 1115 | |||
| 1116 | /* Count the number of occurrences of substr in str[start:end]. */ | ||
| 1117 | |||
| 1118 | PyAPI_FUNC(Py_ssize_t) PyUnicode_Count( | ||
| 1119 | PyObject *str, /* String */ | ||
| 1120 | PyObject *substr, /* Substring to count */ | ||
| 1121 | Py_ssize_t start, /* Start index */ | ||
| 1122 | Py_ssize_t end /* Stop index */ | ||
| 1123 | ); | ||
| 1124 | |||
| 1125 | /* Replace at most maxcount occurrences of substr in str with replstr | ||
| 1126 | and return the resulting Unicode object. */ | ||
| 1127 | |||
| 1128 | PyAPI_FUNC(PyObject *) PyUnicode_Replace( | ||
| 1129 | PyObject *str, /* String */ | ||
| 1130 | PyObject *substr, /* Substring to find */ | ||
| 1131 | PyObject *replstr, /* Substring to replace */ | ||
| 1132 | Py_ssize_t maxcount /* Max. number of replacements to apply; | ||
| 1133 | -1 = all */ | ||
| 1134 | ); | ||
| 1135 | |||
| 1136 | /* Compare two strings and return -1, 0, 1 for less than, equal, | ||
| 1137 | greater than resp. */ | ||
| 1138 | |||
| 1139 | PyAPI_FUNC(int) PyUnicode_Compare( | ||
| 1140 | PyObject *left, /* Left string */ | ||
| 1141 | PyObject *right /* Right string */ | ||
| 1142 | ); | ||
| 1143 | |||
| 1144 | /* Rich compare two strings and return one of the following: | ||
| 1145 | |||
| 1146 | - NULL in case an exception was raised | ||
| 1147 | - Py_True or Py_False for successfuly comparisons | ||
| 1148 | - Py_NotImplemented in case the type combination is unknown | ||
| 1149 | |||
| 1150 | Note that Py_EQ and Py_NE comparisons can cause a UnicodeWarning in | ||
| 1151 | case the conversion of the arguments to Unicode fails with a | ||
| 1152 | UnicodeDecodeError. | ||
| 1153 | |||
| 1154 | Possible values for op: | ||
| 1155 | |||
| 1156 | Py_GT, Py_GE, Py_EQ, Py_NE, Py_LT, Py_LE | ||
| 1157 | |||
| 1158 | */ | ||
| 1159 | |||
| 1160 | PyAPI_FUNC(PyObject *) PyUnicode_RichCompare( | ||
| 1161 | PyObject *left, /* Left string */ | ||
| 1162 | PyObject *right, /* Right string */ | ||
| 1163 | int op /* Operation: Py_EQ, Py_NE, Py_GT, etc. */ | ||
| 1164 | ); | ||
| 1165 | |||
| 1166 | /* Apply a argument tuple or dictionary to a format string and return | ||
| 1167 | the resulting Unicode string. */ | ||
| 1168 | |||
| 1169 | PyAPI_FUNC(PyObject *) PyUnicode_Format( | ||
| 1170 | PyObject *format, /* Format string */ | ||
| 1171 | PyObject *args /* Argument tuple or dictionary */ | ||
| 1172 | ); | ||
| 1173 | |||
| 1174 | /* Checks whether element is contained in container and return 1/0 | ||
| 1175 | accordingly. | ||
| 1176 | |||
| 1177 | element has to coerce to an one element Unicode string. -1 is | ||
| 1178 | returned in case of an error. */ | ||
| 1179 | |||
| 1180 | PyAPI_FUNC(int) PyUnicode_Contains( | ||
| 1181 | PyObject *container, /* Container string */ | ||
| 1182 | PyObject *element /* Element string */ | ||
| 1183 | ); | ||
| 1184 | |||
| 1185 | /* Externally visible for str.strip(unicode) */ | ||
| 1186 | PyAPI_FUNC(PyObject *) _PyUnicode_XStrip( | ||
| 1187 | PyUnicodeObject *self, | ||
| 1188 | int striptype, | ||
| 1189 | PyObject *sepobj | ||
| 1190 | ); | ||
| 1191 | |||
| 1192 | /* === Characters Type APIs =============================================== */ | ||
| 1193 | |||
| 1194 | /* These should not be used directly. Use the Py_UNICODE_IS* and | ||
| 1195 | Py_UNICODE_TO* macros instead. | ||
| 1196 | |||
| 1197 | These APIs are implemented in Objects/unicodectype.c. | ||
| 1198 | |||
| 1199 | */ | ||
| 1200 | |||
| 1201 | PyAPI_FUNC(int) _PyUnicode_IsLowercase( | ||
| 1202 | Py_UNICODE ch /* Unicode character */ | ||
| 1203 | ); | ||
| 1204 | |||
| 1205 | PyAPI_FUNC(int) _PyUnicode_IsUppercase( | ||
| 1206 | Py_UNICODE ch /* Unicode character */ | ||
| 1207 | ); | ||
| 1208 | |||
| 1209 | PyAPI_FUNC(int) _PyUnicode_IsTitlecase( | ||
| 1210 | Py_UNICODE ch /* Unicode character */ | ||
| 1211 | ); | ||
| 1212 | |||
| 1213 | PyAPI_FUNC(int) _PyUnicode_IsWhitespace( | ||
| 1214 | const Py_UNICODE ch /* Unicode character */ | ||
| 1215 | ); | ||
| 1216 | |||
| 1217 | PyAPI_FUNC(int) _PyUnicode_IsLinebreak( | ||
| 1218 | const Py_UNICODE ch /* Unicode character */ | ||
| 1219 | ); | ||
| 1220 | |||
| 1221 | PyAPI_FUNC(Py_UNICODE) _PyUnicode_ToLowercase( | ||
| 1222 | Py_UNICODE ch /* Unicode character */ | ||
| 1223 | ); | ||
| 1224 | |||
| 1225 | PyAPI_FUNC(Py_UNICODE) _PyUnicode_ToUppercase( | ||
| 1226 | Py_UNICODE ch /* Unicode character */ | ||
| 1227 | ); | ||
| 1228 | |||
| 1229 | PyAPI_FUNC(Py_UNICODE) _PyUnicode_ToTitlecase( | ||
| 1230 | Py_UNICODE ch /* Unicode character */ | ||
| 1231 | ); | ||
| 1232 | |||
| 1233 | PyAPI_FUNC(int) _PyUnicode_ToDecimalDigit( | ||
| 1234 | Py_UNICODE ch /* Unicode character */ | ||
| 1235 | ); | ||
| 1236 | |||
| 1237 | PyAPI_FUNC(int) _PyUnicode_ToDigit( | ||
| 1238 | Py_UNICODE ch /* Unicode character */ | ||
| 1239 | ); | ||
| 1240 | |||
| 1241 | PyAPI_FUNC(double) _PyUnicode_ToNumeric( | ||
| 1242 | Py_UNICODE ch /* Unicode character */ | ||
| 1243 | ); | ||
| 1244 | |||
| 1245 | PyAPI_FUNC(int) _PyUnicode_IsDecimalDigit( | ||
| 1246 | Py_UNICODE ch /* Unicode character */ | ||
| 1247 | ); | ||
| 1248 | |||
| 1249 | PyAPI_FUNC(int) _PyUnicode_IsDigit( | ||
| 1250 | Py_UNICODE ch /* Unicode character */ | ||
| 1251 | ); | ||
| 1252 | |||
| 1253 | PyAPI_FUNC(int) _PyUnicode_IsNumeric( | ||
| 1254 | Py_UNICODE ch /* Unicode character */ | ||
| 1255 | ); | ||
| 1256 | |||
| 1257 | PyAPI_FUNC(int) _PyUnicode_IsAlpha( | ||
| 1258 | Py_UNICODE ch /* Unicode character */ | ||
| 1259 | ); | ||
| 1260 | |||
| 1261 | #ifdef __cplusplus | ||
| 1262 | } | ||
| 1263 | #endif | ||
| 1264 | #endif /* Py_USING_UNICODE */ | ||
| 1265 | #endif /* !Py_UNICODEOBJECT_H */ | ||
| @@ -0,0 +1,75 @@ | |||
| 1 | /* Weak references objects for Python. */ | ||
| 2 | |||
| 3 | #ifndef Py_WEAKREFOBJECT_H | ||
| 4 | #define Py_WEAKREFOBJECT_H | ||
| 5 | #ifdef __cplusplus | ||
| 6 | extern "C" { | ||
| 7 | #endif | ||
| 8 | |||
| 9 | |||
| 10 | typedef struct _PyWeakReference PyWeakReference; | ||
| 11 | |||
| 12 | /* PyWeakReference is the base struct for the Python ReferenceType, ProxyType, | ||
| 13 | * and CallableProxyType. | ||
| 14 | */ | ||
| 15 | struct _PyWeakReference { | ||
| 16 | PyObject_HEAD | ||
| 17 | |||
| 18 | /* The object to which this is a weak reference, or Py_None if none. | ||
| 19 | * Note that this is a stealth reference: wr_object's refcount is | ||
| 20 | * not incremented to reflect this pointer. | ||
| 21 | */ | ||
| 22 | PyObject *wr_object; | ||
| 23 | |||
| 24 | /* A callable to invoke when wr_object dies, or NULL if none. */ | ||
| 25 | PyObject *wr_callback; | ||
| 26 | |||
| 27 | /* A cache for wr_object's hash code. As usual for hashes, this is -1 | ||
| 28 | * if the hash code isn't known yet. | ||
| 29 | */ | ||
| 30 | long hash; | ||
| 31 | |||
| 32 | /* If wr_object is weakly referenced, wr_object has a doubly-linked NULL- | ||
| 33 | * terminated list of weak references to it. These are the list pointers. | ||
| 34 | * If wr_object goes away, wr_object is set to Py_None, and these pointers | ||
| 35 | * have no meaning then. | ||
| 36 | */ | ||
| 37 | PyWeakReference *wr_prev; | ||
| 38 | PyWeakReference *wr_next; | ||
| 39 | }; | ||
| 40 | |||
| 41 | PyAPI_DATA(PyTypeObject) _PyWeakref_RefType; | ||
| 42 | PyAPI_DATA(PyTypeObject) _PyWeakref_ProxyType; | ||
| 43 | PyAPI_DATA(PyTypeObject) _PyWeakref_CallableProxyType; | ||
| 44 | |||
| 45 | #define PyWeakref_CheckRef(op) PyObject_TypeCheck(op, &_PyWeakref_RefType) | ||
| 46 | #define PyWeakref_CheckRefExact(op) \ | ||
| 47 | ((op)->ob_type == &_PyWeakref_RefType) | ||
| 48 | #define PyWeakref_CheckProxy(op) \ | ||
| 49 | (((op)->ob_type == &_PyWeakref_ProxyType) || \ | ||
| 50 | ((op)->ob_type == &_PyWeakref_CallableProxyType)) | ||
| 51 | |||
| 52 | /* This macro calls PyWeakref_CheckRef() last since that can involve a | ||
| 53 | function call; this makes it more likely that the function call | ||
| 54 | will be avoided. */ | ||
| 55 | #define PyWeakref_Check(op) \ | ||
| 56 | (PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op)) | ||
| 57 | |||
| 58 | |||
| 59 | PyAPI_FUNC(PyObject *) PyWeakref_NewRef(PyObject *ob, | ||
| 60 | PyObject *callback); | ||
| 61 | PyAPI_FUNC(PyObject *) PyWeakref_NewProxy(PyObject *ob, | ||
| 62 | PyObject *callback); | ||
| 63 | PyAPI_FUNC(PyObject *) PyWeakref_GetObject(PyObject *ref); | ||
| 64 | |||
| 65 | PyAPI_FUNC(Py_ssize_t) _PyWeakref_GetWeakrefCount(PyWeakReference *head); | ||
| 66 | |||
| 67 | PyAPI_FUNC(void) _PyWeakref_ClearRef(PyWeakReference *self); | ||
| 68 | |||
| 69 | #define PyWeakref_GET_OBJECT(ref) (((PyWeakReference *)(ref))->wr_object) | ||
| 70 | |||
| 71 | |||
| 72 | #ifdef __cplusplus | ||
| 73 | } | ||
| 74 | #endif | ||
| 75 | #endif /* !Py_WEAKREFOBJECT_H */ | ||