?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1. /*
  2. ** $Id: ldo.h $
  3. ** Stack and Call structure of Lua
  4. ** See Copyright Notice in lua.h
  5. */
  6.  
  7. #ifndef ldo_h
  8. #define ldo_h
  9.  
  10.  
  11. #include "lobject.h"
  12. #include "lstate.h"
  13. #include "lzio.h"
  14.  
  15.  
  16. /*
  17. ** Macro to check stack size and grow stack if needed.  Parameters
  18. ** 'pre'/'pos' allow the macro to preserve a pointer into the
  19. ** stack across reallocations, doing the work only when needed.
  20. ** It also allows the running of one GC step when the stack is
  21. ** reallocated.
  22. ** 'condmovestack' is used in heavy tests to force a stack reallocation
  23. ** at every check.
  24. */
  25. #define luaD_checkstackaux(L,n,pre,pos)  \
  26.         if (l_unlikely(L->stack_last - L->top <= (n))) \
  27.           { pre; luaD_growstack(L, n, 1); pos; } \
  28.         else { condmovestack(L,pre,pos); }
  29.  
  30. /* In general, 'pre'/'pos' are empty (nothing to save) */
  31. #define luaD_checkstack(L,n)    luaD_checkstackaux(L,n,(void)0,(void)0)
  32.  
  33.  
  34.  
  35. #define savestack(L,p)          ((char *)(p) - (char *)L->stack)
  36. #define restorestack(L,n)       ((StkId)((char *)L->stack + (n)))
  37.  
  38.  
  39. /* macro to check stack size, preserving 'p' */
  40. #define checkstackGCp(L,n,p)  \
  41.   luaD_checkstackaux(L, n, \
  42.     ptrdiff_t t__ = savestack(L, p);  /* save 'p' */ \
  43.     luaC_checkGC(L),  /* stack grow uses memory */ \
  44.     p = restorestack(L, t__))  /* 'pos' part: restore 'p' */
  45.  
  46.  
  47. /* macro to check stack size and GC */
  48. #define checkstackGC(L,fsize)  \
  49.         luaD_checkstackaux(L, (fsize), luaC_checkGC(L), (void)0)
  50.  
  51.  
  52. /* type of protected functions, to be ran by 'runprotected' */
  53. typedef void (*Pfunc) (lua_State *L, void *ud);
  54.  
  55. LUAI_FUNC void luaD_seterrorobj (lua_State *L, int errcode, StkId oldtop);
  56. LUAI_FUNC int luaD_protectedparser (lua_State *L, ZIO *z, const char *name,
  57.                                                   const char *mode);
  58. LUAI_FUNC void luaD_hook (lua_State *L, int event, int line,
  59.                                         int fTransfer, int nTransfer);
  60. LUAI_FUNC void luaD_hookcall (lua_State *L, CallInfo *ci);
  61. LUAI_FUNC int luaD_pretailcall (lua_State *L, CallInfo *ci, StkId func,                                                    int narg1, int delta);
  62. LUAI_FUNC CallInfo *luaD_precall (lua_State *L, StkId func, int nResults);
  63. LUAI_FUNC void luaD_call (lua_State *L, StkId func, int nResults);
  64. LUAI_FUNC void luaD_callnoyield (lua_State *L, StkId func, int nResults);
  65. LUAI_FUNC StkId luaD_tryfuncTM (lua_State *L, StkId func);
  66. LUAI_FUNC int luaD_closeprotected (lua_State *L, ptrdiff_t level, int status);
  67. LUAI_FUNC int luaD_pcall (lua_State *L, Pfunc func, void *u,
  68.                                         ptrdiff_t oldtop, ptrdiff_t ef);
  69. LUAI_FUNC void luaD_poscall (lua_State *L, CallInfo *ci, int nres);
  70. LUAI_FUNC int luaD_reallocstack (lua_State *L, int newsize, int raiseerror);
  71. LUAI_FUNC int luaD_growstack (lua_State *L, int n, int raiseerror);
  72. LUAI_FUNC void luaD_shrinkstack (lua_State *L);
  73. LUAI_FUNC void luaD_inctop (lua_State *L);
  74.  
  75. LUAI_FUNC l_noret luaD_throw (lua_State *L, int errcode);
  76. LUAI_FUNC int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud);
  77.  
  78. #endif
  79.  
  80.