home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 June / PCWorld_2005-06_cd.bin / software / vyzkuste / firewally / firewally.exe / framework-2.3.exe / compile.h < prev    next >
C/C++ Source or Header  |  2003-12-30  |  3KB  |  93 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. /* 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. /* XXX Temporary hack.  Until generators are a permanent part of the
  44.    language, we need a way for a code object to record that generators
  45.    were *possible* when it was compiled.  This is so code dynamically
  46.    compiled *by* a code object knows whether to allow yield stmts.  In
  47.    effect, this passes on the "from __future__ import generators" state
  48.    in effect when the code block was compiled. */
  49. #define CO_GENERATOR_ALLOWED    0x1000 /* no longer used in an essential way */
  50. #define CO_FUTURE_DIVISION        0x2000
  51.  
  52. PyAPI_DATA(PyTypeObject) PyCode_Type;
  53.  
  54. #define PyCode_Check(op) ((op)->ob_type == &PyCode_Type)
  55. #define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars))
  56.  
  57. #define CO_MAXBLOCKS 20 /* Max static block nesting within a function */
  58.  
  59. /* Public interface */
  60. struct _node; /* Declare the existence of this type */
  61. PyAPI_FUNC(PyCodeObject *) PyNode_Compile(struct _node *, const char *);
  62. PyAPI_FUNC(PyCodeObject *) PyCode_New(
  63.     int, int, int, int, PyObject *, PyObject *, PyObject *, PyObject *,
  64.     PyObject *, PyObject *, PyObject *, PyObject *, int, PyObject *); 
  65.         /* same as struct above */
  66. PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int);
  67.  
  68. /* Future feature support */
  69.  
  70. typedef struct {
  71.     int ff_found_docstring;
  72.     int ff_last_lineno;
  73.     int ff_features;
  74. } PyFutureFeatures;
  75.  
  76. PyAPI_FUNC(PyFutureFeatures *) PyNode_Future(struct _node *, const char *);
  77. PyAPI_FUNC(PyCodeObject *) PyNode_CompileFlags(struct _node *, const char *,
  78.                           PyCompilerFlags *);
  79.  
  80. #define FUTURE_NESTED_SCOPES "nested_scopes"
  81. #define FUTURE_GENERATORS "generators"
  82. #define FUTURE_DIVISION "division"
  83.  
  84. /* for internal use only */
  85. #define _PyCode_GETCODEPTR(co, pp) \
  86.     ((*(co)->co_code->ob_type->tp_as_buffer->bf_getreadbuffer) \
  87.      ((co)->co_code, 0, (void **)(pp)))
  88.  
  89. #ifdef __cplusplus
  90. }
  91. #endif
  92. #endif /* !Py_COMPILE_H */
  93.