symbian-qemu-0.9.1-12/python-win32-2.6.1/include/code.h
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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 #define CO_FUTURE_PRINT_FUNCTION  0x10000
       
    52 #define CO_FUTURE_UNICODE_LITERALS 0x20000
       
    53 
       
    54 /* This should be defined if a future statement modifies the syntax.
       
    55    For example, when a keyword is added.
       
    56 */
       
    57 #if 1
       
    58 #define PY_PARSER_REQUIRES_FUTURE_KEYWORD
       
    59 #endif
       
    60 
       
    61 #define CO_MAXBLOCKS 20 /* Max static block nesting within a function */
       
    62 
       
    63 PyAPI_DATA(PyTypeObject) PyCode_Type;
       
    64 
       
    65 #define PyCode_Check(op) (Py_TYPE(op) == &PyCode_Type)
       
    66 #define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars))
       
    67 
       
    68 /* Public interface */
       
    69 PyAPI_FUNC(PyCodeObject *) PyCode_New(
       
    70 	int, int, int, int, PyObject *, PyObject *, PyObject *, PyObject *,
       
    71 	PyObject *, PyObject *, PyObject *, PyObject *, int, PyObject *); 
       
    72         /* same as struct above */
       
    73 PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int);
       
    74 
       
    75 /* for internal use only */
       
    76 #define _PyCode_GETCODEPTR(co, pp) \
       
    77 	((*Py_TYPE((co)->co_code)->tp_as_buffer->bf_getreadbuffer) \
       
    78 	 ((co)->co_code, 0, (void **)(pp)))
       
    79 
       
    80 typedef struct _addr_pair {
       
    81         int ap_lower;
       
    82         int ap_upper;
       
    83 } PyAddrPair;
       
    84 
       
    85 /* Check whether lasti (an instruction offset) falls outside bounds
       
    86    and whether it is a line number that should be traced.  Returns
       
    87    a line number if it should be traced or -1 if the line should not.
       
    88 
       
    89    If lasti is not within bounds, updates bounds.
       
    90 */
       
    91 
       
    92 PyAPI_FUNC(int) PyCode_CheckLineNumber(PyCodeObject* co,
       
    93                                        int lasti, PyAddrPair *bounds);
       
    94 
       
    95 PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts,
       
    96                                       PyObject *names, PyObject *lineno_obj);
       
    97 
       
    98 #ifdef __cplusplus
       
    99 }
       
   100 #endif
       
   101 #endif /* !Py_CODE_H */