home *** CD-ROM | disk | FTP | other *** search
/ Freelog 125 / Freelog_MarsAvril2015_No125.iso / Bureautique / OpenOffice / Apache_OpenOffice_4.1.1_Win_x86_install_fr.exe / openoffice1.cab / ceval.h < prev    next >
C/C++ Source or Header  |  2014-07-29  |  5KB  |  154 lines

  1. #ifndef Py_CEVAL_H
  2. #define Py_CEVAL_H
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6.  
  7.  
  8. /* Interface to random parts in ceval.c */
  9.  
  10. PyAPI_FUNC(PyObject *) PyEval_CallObjectWithKeywords(
  11.     PyObject *, PyObject *, PyObject *);
  12.  
  13. /* Inline this */
  14. #define PyEval_CallObject(func,arg) \
  15.     PyEval_CallObjectWithKeywords(func, arg, (PyObject *)NULL)
  16.  
  17. PyAPI_FUNC(PyObject *) PyEval_CallFunction(PyObject *obj,
  18.                                            const char *format, ...);
  19. PyAPI_FUNC(PyObject *) PyEval_CallMethod(PyObject *obj,
  20.                                          const char *methodname,
  21.                                          const char *format, ...);
  22.  
  23. PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *);
  24. PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *);
  25.  
  26. struct _frame; /* Avoid including frameobject.h */
  27.  
  28. PyAPI_FUNC(PyObject *) PyEval_GetBuiltins(void);
  29. PyAPI_FUNC(PyObject *) PyEval_GetGlobals(void);
  30. PyAPI_FUNC(PyObject *) PyEval_GetLocals(void);
  31. PyAPI_FUNC(struct _frame *) PyEval_GetFrame(void);
  32. PyAPI_FUNC(int) PyEval_GetRestricted(void);
  33.  
  34. /* Look at the current frame's (if any) code's co_flags, and turn on
  35.    the corresponding compiler flags in cf->cf_flags.  Return 1 if any
  36.    flag was set, else return 0. */
  37. PyAPI_FUNC(int) PyEval_MergeCompilerFlags(PyCompilerFlags *cf);
  38.  
  39. PyAPI_FUNC(int) Py_FlushLine(void);
  40.  
  41. PyAPI_FUNC(int) Py_AddPendingCall(int (*func)(void *), void *arg);
  42. PyAPI_FUNC(int) Py_MakePendingCalls(void);
  43.  
  44. /* Protection against deeply nested recursive calls */
  45. PyAPI_FUNC(void) Py_SetRecursionLimit(int);
  46. PyAPI_FUNC(int) Py_GetRecursionLimit(void);
  47.  
  48. #define Py_EnterRecursiveCall(where)                                    \
  49.             (_Py_MakeRecCheck(PyThreadState_GET()->recursion_depth) &&  \
  50.              _Py_CheckRecursiveCall(where))
  51. #define Py_LeaveRecursiveCall()                         \
  52.             (--PyThreadState_GET()->recursion_depth)
  53. PyAPI_FUNC(int) _Py_CheckRecursiveCall(char *where);
  54. PyAPI_DATA(int) _Py_CheckRecursionLimit;
  55. #ifdef USE_STACKCHECK
  56. #  define _Py_MakeRecCheck(x)  (++(x) > --_Py_CheckRecursionLimit)
  57. #else
  58. #  define _Py_MakeRecCheck(x)  (++(x) > _Py_CheckRecursionLimit)
  59. #endif
  60.  
  61. PyAPI_FUNC(const char *) PyEval_GetFuncName(PyObject *);
  62. PyAPI_FUNC(const char *) PyEval_GetFuncDesc(PyObject *);
  63.  
  64. PyAPI_FUNC(PyObject *) PyEval_GetCallStats(PyObject *);
  65. PyAPI_FUNC(PyObject *) PyEval_EvalFrame(struct _frame *);
  66. PyAPI_FUNC(PyObject *) PyEval_EvalFrameEx(struct _frame *f, int exc);
  67.  
  68. /* this used to be handled on a per-thread basis - now just two globals */
  69. PyAPI_DATA(volatile int) _Py_Ticker;
  70. PyAPI_DATA(int) _Py_CheckInterval;
  71.  
  72. /* Interface for threads.
  73.  
  74.    A module that plans to do a blocking system call (or something else
  75.    that lasts a long time and doesn't touch Python data) can allow other
  76.    threads to run as follows:
  77.  
  78.     ...preparations here...
  79.     Py_BEGIN_ALLOW_THREADS
  80.     ...blocking system call here...
  81.     Py_END_ALLOW_THREADS
  82.     ...interpret result here...
  83.  
  84.    The Py_BEGIN_ALLOW_THREADS/Py_END_ALLOW_THREADS pair expands to a
  85.    {}-surrounded block.
  86.    To leave the block in the middle (e.g., with return), you must insert
  87.    a line containing Py_BLOCK_THREADS before the return, e.g.
  88.  
  89.     if (...premature_exit...) {
  90.         Py_BLOCK_THREADS
  91.         PyErr_SetFromErrno(PyExc_IOError);
  92.         return NULL;
  93.     }
  94.  
  95.    An alternative is:
  96.  
  97.     Py_BLOCK_THREADS
  98.     if (...premature_exit...) {
  99.         PyErr_SetFromErrno(PyExc_IOError);
  100.         return NULL;
  101.     }
  102.     Py_UNBLOCK_THREADS
  103.  
  104.    For convenience, that the value of 'errno' is restored across
  105.    Py_END_ALLOW_THREADS and Py_BLOCK_THREADS.
  106.  
  107.    WARNING: NEVER NEST CALLS TO Py_BEGIN_ALLOW_THREADS AND
  108.    Py_END_ALLOW_THREADS!!!
  109.  
  110.    The function PyEval_InitThreads() should be called only from
  111.    initthread() in "threadmodule.c".
  112.  
  113.    Note that not yet all candidates have been converted to use this
  114.    mechanism!
  115. */
  116.  
  117. PyAPI_FUNC(PyThreadState *) PyEval_SaveThread(void);
  118. PyAPI_FUNC(void) PyEval_RestoreThread(PyThreadState *);
  119.  
  120. #ifdef WITH_THREAD
  121.  
  122. PyAPI_FUNC(int)  PyEval_ThreadsInitialized(void);
  123. PyAPI_FUNC(void) PyEval_InitThreads(void);
  124. PyAPI_FUNC(void) PyEval_AcquireLock(void);
  125. PyAPI_FUNC(void) PyEval_ReleaseLock(void);
  126. PyAPI_FUNC(void) PyEval_AcquireThread(PyThreadState *tstate);
  127. PyAPI_FUNC(void) PyEval_ReleaseThread(PyThreadState *tstate);
  128. PyAPI_FUNC(void) PyEval_ReInitThreads(void);
  129.  
  130. #define Py_BEGIN_ALLOW_THREADS { \
  131.                         PyThreadState *_save; \
  132.                         _save = PyEval_SaveThread();
  133. #define Py_BLOCK_THREADS        PyEval_RestoreThread(_save);
  134. #define Py_UNBLOCK_THREADS      _save = PyEval_SaveThread();
  135. #define Py_END_ALLOW_THREADS    PyEval_RestoreThread(_save); \
  136.                  }
  137.  
  138. #else /* !WITH_THREAD */
  139.  
  140. #define Py_BEGIN_ALLOW_THREADS {
  141. #define Py_BLOCK_THREADS
  142. #define Py_UNBLOCK_THREADS
  143. #define Py_END_ALLOW_THREADS }
  144.  
  145. #endif /* !WITH_THREAD */
  146.  
  147. PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *);
  148.  
  149.  
  150. #ifdef __cplusplus
  151. }
  152. #endif
  153. #endif /* !Py_CEVAL_H */
  154.