Home | History | Annotate | Download | only in python2.7
      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) See
     27 				   Objects/lnotab_notes.txt for details. */
     28     void *co_zombieframe;     /* for optimization only (see frameobject.c) */
     29     PyObject *co_weakreflist;   /* to support weakrefs to code objects */
     30 } PyCodeObject;
     31 
     32 /* Masks for co_flags above */
     33 #define CO_OPTIMIZED	0x0001
     34 #define CO_NEWLOCALS	0x0002
     35 #define CO_VARARGS	0x0004
     36 #define CO_VARKEYWORDS	0x0008
     37 #define CO_NESTED       0x0010
     38 #define CO_GENERATOR    0x0020
     39 /* The CO_NOFREE flag is set if there are no free or cell variables.
     40    This information is redundant, but it allows a single flag test
     41    to determine whether there is any extra work to be done when the
     42    call frame it setup.
     43 */
     44 #define CO_NOFREE       0x0040
     45 
     46 #if 0
     47 /* This is no longer used.  Stopped defining in 2.5, do not re-use. */
     48 #define CO_GENERATOR_ALLOWED    0x1000
     49 #endif
     50 #define CO_FUTURE_DIVISION    	0x2000
     51 #define CO_FUTURE_ABSOLUTE_IMPORT 0x4000 /* do absolute imports by default */
     52 #define CO_FUTURE_WITH_STATEMENT  0x8000
     53 #define CO_FUTURE_PRINT_FUNCTION  0x10000
     54 #define CO_FUTURE_UNICODE_LITERALS 0x20000
     55 
     56 /* This should be defined if a future statement modifies the syntax.
     57    For example, when a keyword is added.
     58 */
     59 #if 1
     60 #define PY_PARSER_REQUIRES_FUTURE_KEYWORD
     61 #endif
     62 
     63 #define CO_MAXBLOCKS 20 /* Max static block nesting within a function */
     64 
     65 PyAPI_DATA(PyTypeObject) PyCode_Type;
     66 
     67 #define PyCode_Check(op) (Py_TYPE(op) == &PyCode_Type)
     68 #define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars))
     69 
     70 /* Public interface */
     71 PyAPI_FUNC(PyCodeObject *) PyCode_New(
     72 	int, int, int, int, PyObject *, PyObject *, PyObject *, PyObject *,
     73 	PyObject *, PyObject *, PyObject *, PyObject *, int, PyObject *);
     74         /* same as struct above */
     75 
     76 /* Creates a new empty code object with the specified source location. */
     77 PyAPI_FUNC(PyCodeObject *)
     78 PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno);
     79 
     80 /* Return the line number associated with the specified bytecode index
     81    in this code object.  If you just need the line number of a frame,
     82    use PyFrame_GetLineNumber() instead. */
     83 PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int);
     84 
     85 /* for internal use only */
     86 #define _PyCode_GETCODEPTR(co, pp) \
     87 	((*Py_TYPE((co)->co_code)->tp_as_buffer->bf_getreadbuffer) \
     88 	 ((co)->co_code, 0, (void **)(pp)))
     89 
     90 typedef struct _addr_pair {
     91         int ap_lower;
     92         int ap_upper;
     93 } PyAddrPair;
     94 
     95 /* Update *bounds to describe the first and one-past-the-last instructions in the
     96    same line as lasti.  Return the number of that line.
     97 */
     98 PyAPI_FUNC(int) _PyCode_CheckLineNumber(PyCodeObject* co,
     99                                         int lasti, PyAddrPair *bounds);
    100 
    101 PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts,
    102                                       PyObject *names, PyObject *lineno_obj);
    103 
    104 #ifdef __cplusplus
    105 }
    106 #endif
    107 #endif /* !Py_CODE_H */
    108