1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| [marshal.c] typedef struct { FILE *p; int depth; PyObject* strings; } WFILE;
#define w_byte(c,p) putc((c),(p)->fp)
static void w_long(long x, WFILE* p){ w_byte((char)(x & 0xff),p); w_byte((char)((x>>8) & 0xff), p); w_byte((char)((x>>16) & 0xff), p); w_byte((char)((x>>24) & 0xff),p); }
static void w_string(char* s,int n, WFILE* p){ fwrite(s,1,n,p->fp); }
static void w_object(PyObject* v, WFILE* p){ ... else if(PyCode_Check(v)){ PyCodeObject* co = (PyCodeObject *)v; w_byte(TYPE_CODE,p); w_long(co->co_argcount,p); ..... w_object(co->co_code,p); w_object(co->co_consts,p); w_object(co->co_names,p); ..... w_object(co->co_lnotab,p); } .... else if(PyList_Check(v)){ w_byte(TYPE_LIST,p); n = PyList_GET_SIZE(v); w_long((long)n,p); for(i = 0;i < n; i++){ w_object(PyList_GET_ITEM(v,i),p); } } .... else if(PyInt_Check(v)){ w_byte(TYPE_INT,p); w_long(x,p); } }
|