home *** CD-ROM | disk | FTP | other *** search
/ Freelog 33 / Freelog033.iso / Progr / Python-2.2.1.exe / COMPILE.H < prev    next >
Encoding:
C/C++ Source or Header  |  2001-12-13  |  3.1 KB  |  87 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. #define CO_GENERATOR    0x0020
  37. /* XXX Temporary hack.  Until generators are a permanent part of the
  38.    language, we need a way for a code object to record that generators
  39.    were *possible* when it was compiled.  This is so code dynamically
  40.    compiled *by* a code object knows whether to allow yield stmts.  In
  41.    effect, this passes on the "from __future__ import generators" state
  42.    in effect when the code block was compiled. */
  43. #define CO_GENERATOR_ALLOWED    0x1000
  44. #define CO_FUTURE_DIVISION        0x2000
  45.  
  46. extern DL_IMPORT(PyTypeObject) PyCode_Type;
  47.  
  48. #define PyCode_Check(op) ((op)->ob_type == &PyCode_Type)
  49. #define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars))
  50.  
  51. #define CO_MAXBLOCKS 20 /* Max static block nesting within a function */
  52.  
  53. /* Public interface */
  54. struct _node; /* Declare the existence of this type */
  55. DL_IMPORT(PyCodeObject *) PyNode_Compile(struct _node *, char *);
  56. DL_IMPORT(PyCodeObject *) PyCode_New(
  57.     int, int, int, int, PyObject *, PyObject *, PyObject *, PyObject *,
  58.     PyObject *, PyObject *, PyObject *, PyObject *, int, PyObject *); 
  59.         /* same as struct above */
  60. DL_IMPORT(int) PyCode_Addr2Line(PyCodeObject *, int);
  61.  
  62. /* Future feature support */
  63.  
  64. typedef struct {
  65.     int ff_found_docstring;
  66.     int ff_last_lineno;
  67.     int ff_features;
  68. } PyFutureFeatures;
  69.  
  70. DL_IMPORT(PyFutureFeatures *) PyNode_Future(struct _node *, char *);
  71. DL_IMPORT(PyCodeObject *) PyNode_CompileFlags(struct _node *, char *,
  72.                           PyCompilerFlags *);
  73.  
  74. #define FUTURE_NESTED_SCOPES "nested_scopes"
  75. #define FUTURE_GENERATORS "generators"
  76. #define FUTURE_DIVISION "division"
  77.  
  78. /* for internal use only */
  79. #define _PyCode_GETCODEPTR(co, pp) \
  80.     ((*(co)->co_code->ob_type->tp_as_buffer->bf_getreadbuffer) \
  81.      ((co)->co_code, 0, (void **)(pp)))
  82.  
  83. #ifdef __cplusplus
  84. }
  85. #endif
  86. #endif /* !Py_COMPILE_H */
  87.