@@ -94,10 +94,6 @@ void luaD_seterrorobj (lua_State *L, int errcode, StkId oldtop) {
9494 setsvalue2s (L , oldtop , G (L )-> memerrmsg ); /* reuse preregistered msg. */
9595 break ;
9696 }
97- case LUA_ERRERR : {
98- setsvalue2s (L , oldtop , luaS_newliteral (L , "error in error handling" ));
99- break ;
100- }
10197 case LUA_OK : { /* special case only for closing upvalues */
10298 setnilvalue (s2v (oldtop )); /* no error message */
10399 break ;
@@ -202,6 +198,16 @@ static void correctstack (lua_State *L) {
202198/* some space for error handling */
203199#define ERRORSTACKSIZE (LUAI_MAXSTACK + 200)
204200
201+
202+ /* raise an error while running the message handler */
203+ l_noret luaD_errerr (lua_State * L ) {
204+ TString * msg = luaS_newliteral (L , "error in error handling" );
205+ setsvalue2s (L , L -> top .p , msg );
206+ L -> top .p ++ ; /* assume EXTRA_STACK */
207+ luaD_throw (L , LUA_ERRERR );
208+ }
209+
210+
205211/*
206212** Reallocate the stack to a new size, correcting all pointers into it.
207213** In ISO C, any pointer use after the pointer has been deallocated is
@@ -251,7 +257,7 @@ int luaD_growstack (lua_State *L, int n, int raiseerror) {
251257 a stack error; cannot grow further than that. */
252258 lua_assert (stacksize (L ) == ERRORSTACKSIZE );
253259 if (raiseerror )
254- luaD_throw ( L , LUA_ERRERR ); /* error inside message handler */
260+ luaD_errerr ( L ); /* error inside message handler */
255261 return 0 ; /* if not 'raiseerror', just signal it */
256262 }
257263 else if (n < LUAI_MAXSTACK ) { /* avoids arithmetic overflows */
0 commit comments