home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 April / PCWorld_2001-04_cd.bin / Software / TemaCD / webclean / !!!python!!! / BeOpen-Python-2.0.exe / FRAMEOBJECT.H < prev    next >
Encoding:
C/C++ Source or Header  |  2000-09-01  |  2.8 KB  |  89 lines

  1.  
  2. /* Frame object interface */
  3.  
  4. #ifndef Py_FRAMEOBJECT_H
  5. #define Py_FRAMEOBJECT_H
  6. #ifdef __cplusplus
  7. extern "C" {
  8. #endif
  9.  
  10. typedef struct {
  11.     int b_type;            /* what kind of block this is */
  12.     int b_handler;        /* where to jump to find handler */
  13.     int b_level;        /* value stack level to pop to */
  14. } PyTryBlock;
  15.  
  16. typedef struct _frame {
  17.     PyObject_HEAD
  18.     struct _frame *f_back;    /* previous frame, or NULL */
  19.     PyCodeObject *f_code;    /* code segment */
  20.     PyObject *f_builtins;    /* builtin symbol table (PyDictObject) */
  21.     PyObject *f_globals;    /* global symbol table (PyDictObject) */
  22.     PyObject *f_locals;        /* local symbol table (PyDictObject) */
  23.     PyObject **f_valuestack;    /* points after the last local */
  24.     PyObject *f_trace;        /* Trace function */
  25.     PyObject *f_exc_type, *f_exc_value, *f_exc_traceback;
  26.     PyThreadState *f_tstate;
  27.     int f_lasti;        /* Last instruction if called */
  28.     int f_lineno;        /* Current line number */
  29.     int f_restricted;        /* Flag set if restricted operations
  30.                    in this scope */
  31.     int f_iblock;        /* index in f_blockstack */
  32.     PyTryBlock f_blockstack[CO_MAXBLOCKS]; /* for try and loop blocks */
  33.     int f_nlocals;        /* number of locals */
  34.     int f_stacksize;        /* size of value stack */
  35.     PyObject *f_localsplus[1];    /* locals+stack, dynamically sized */
  36. } PyFrameObject;
  37.  
  38.  
  39. /* Standard object interface */
  40.  
  41. extern DL_IMPORT(PyTypeObject) PyFrame_Type;
  42.  
  43. #define PyFrame_Check(op) ((op)->ob_type == &PyFrame_Type)
  44.  
  45. DL_IMPORT(PyFrameObject *) PyFrame_New(PyThreadState *, PyCodeObject *,
  46.                                        PyObject *, PyObject *);
  47.  
  48.  
  49. /* The rest of the interface is specific for frame objects */
  50.  
  51. /* Tuple access macros */
  52.  
  53. #ifndef Py_DEBUG
  54. #define GETITEM(v, i) PyTuple_GET_ITEM((PyTupleObject *)(v), (i))
  55. #define GETITEMNAME(v, i) \
  56.     PyString_AS_STRING((PyStringObject *)GETITEM((v), (i)))
  57. #else
  58. #define GETITEM(v, i) PyTuple_GetItem((v), (i))
  59. #define GETITEMNAME(v, i) PyString_AsString(GETITEM(v, i))
  60. #endif
  61.  
  62. #define GETUSTRINGVALUE(s) ((unsigned char *)PyString_AS_STRING(s))
  63.  
  64. /* Code access macros */
  65.  
  66. #define Getconst(f, i)    (GETITEM((f)->f_code->co_consts, (i)))
  67. #define Getname(f, i)    (GETITEMNAME((f)->f_code->co_names, (i)))
  68. #define Getnamev(f, i)    (GETITEM((f)->f_code->co_names, (i)))
  69.  
  70.  
  71. /* Block management functions */
  72.  
  73. DL_IMPORT(void) PyFrame_BlockSetup(PyFrameObject *, int, int, int);
  74. DL_IMPORT(PyTryBlock *) PyFrame_BlockPop(PyFrameObject *);
  75.  
  76. /* Extend the value stack */
  77.  
  78. DL_IMPORT(PyObject **) PyFrame_ExtendStack(PyFrameObject *, int, int);
  79.  
  80. /* Conversions between "fast locals" and locals in dictionary */
  81.  
  82. DL_IMPORT(void) PyFrame_LocalsToFast(PyFrameObject *, int);
  83. DL_IMPORT(void) PyFrame_FastToLocals(PyFrameObject *);
  84.  
  85. #ifdef __cplusplus
  86. }
  87. #endif
  88. #endif /* !Py_FRAMEOBJECT_H */
  89.