home *** CD-ROM | disk | FTP | other *** search
/ PC World 2002 May / PCWorld_2002-05_cd.bin / Software / TemaCD / activepython / ActivePython-2.1.1.msi / Python21_include_compile.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-07-26  |  2.5 KB  |  76 lines

  1.  
  2. /* Definitions for bytecode */
  3.  
  4. #ifndef Py_COMPILE_H
  5. #define Py_COMPILE_H
  6. #ifdef __cplusplus
  7. extern "C" {
  8. #endif
  9.  
  10. /* Bytecode object */
  11. typedef struct {
  12.     PyObject_HEAD
  13.     int co_argcount;        /* #arguments, except *args */
  14.     int co_nlocals;        /* #local variables */
  15.     int co_stacksize;        /* #entries needed for evaluation stack */
  16.     int co_flags;        /* CO_..., see below */
  17.     PyObject *co_code;        /* instruction opcodes */
  18.     PyObject *co_consts;    /* list (constants used) */
  19.     PyObject *co_names;        /* list of strings (names used) */
  20.     PyObject *co_varnames;    /* tuple of strings (local variable names) */
  21.     PyObject *co_freevars;    /* tuple of strings (free variable names) */
  22.     PyObject *co_cellvars;      /* tuple of strings (cell variable names) */
  23.     /* The rest doesn't count for hash/cmp */
  24.     PyObject *co_filename;    /* string (where it was loaded from) */
  25.     PyObject *co_name;        /* string (name, for reference) */
  26.     int co_firstlineno;        /* first source line number */
  27.     PyObject *co_lnotab;    /* string (encoding addr<->lineno mapping) */
  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.  
  37. extern DL_IMPORT(PyTypeObject) PyCode_Type;
  38.  
  39. #define PyCode_Check(op) ((op)->ob_type == &PyCode_Type)
  40.  
  41. #define CO_MAXBLOCKS 20 /* Max static block nesting within a function */
  42.  
  43. /* Public interface */
  44. struct _node; /* Declare the existence of this type */
  45. DL_IMPORT(PyCodeObject *) PyNode_Compile(struct _node *, char *);
  46. DL_IMPORT(PyCodeObject *) PyCode_New(
  47.     int, int, int, int, PyObject *, PyObject *, PyObject *, PyObject *,
  48.     PyObject *, PyObject *, PyObject *, PyObject *, int, PyObject *); 
  49.         /* same as struct above */
  50. DL_IMPORT(int) PyCode_Addr2Line(PyCodeObject *, int);
  51.  
  52. /* Future feature support */
  53.  
  54. typedef struct {
  55.     int ff_found_docstring;
  56.     int ff_last_lineno;
  57.     int ff_nested_scopes;
  58. } PyFutureFeatures;
  59.  
  60. DL_IMPORT(PyFutureFeatures *) PyNode_Future(struct _node *, char *);
  61. DL_IMPORT(PyCodeObject *) PyNode_CompileFlags(struct _node *, char *,
  62.                           PyCompilerFlags *);
  63.  
  64. #define NESTED_SCOPES_DEFAULT 0
  65. #define FUTURE_NESTED_SCOPES "nested_scopes"
  66.  
  67. /* for internal use only */
  68. #define _PyCode_GETCODEPTR(co, pp) \
  69.     ((*(co)->co_code->ob_type->tp_as_buffer->bf_getreadbuffer) \
  70.      ((co)->co_code, 0, (void **)(pp)))
  71.  
  72. #ifdef __cplusplus
  73. }
  74. #endif
  75. #endif /* !Py_COMPILE_H */
  76.