@@ -291,17 +291,39 @@ func TestPCall(t *testing.T) {
291291}))
292292errorIfFalse (t , strings .Contains (err .Error (), "by handler" ), "" )
293293
294+ L .Push (L .GetGlobal ("f1" ))
294295err = L .PCall (0 , 0 , L .NewFunction (func (L * LState ) int {
295296L .RaiseError ("error!" )
296297return 1
297298}))
298299errorIfFalse (t , strings .Contains (err .Error (), "error!" ), "" )
299300
301+ L .Push (L .GetGlobal ("f1" ))
300302err = L .PCall (0 , 0 , L .NewFunction (func (L * LState ) int {
301303panic ("panicc!" )
302304return 1
303305}))
304306errorIfFalse (t , strings .Contains (err .Error (), "panicc!" ), "" )
307+
308+ // Issue #452, expected to be revert back to previous call stack after any error.
309+ currentFrame , currentTop , currentSp := L .currentFrame , L .GetTop (), L .stack .Sp ()
310+ L .Push (L .GetGlobal ("f1" ))
311+ err = L .PCall (0 , 0 , nil )
312+ errorIfFalse (t , err != nil , "" )
313+ errorIfFalse (t , L .currentFrame == currentFrame , "" )
314+ errorIfFalse (t , L .GetTop () == currentTop , "" )
315+ errorIfFalse (t , L .stack .Sp () == currentSp , "" )
316+
317+ currentFrame , currentTop , currentSp = L .currentFrame , L .GetTop (), L .stack .Sp ()
318+ L .Push (L .GetGlobal ("f1" ))
319+ err = L .PCall (0 , 0 , L .NewFunction (func (L * LState ) int {
320+ L .RaiseError ("error!" )
321+ return 1
322+ }))
323+ errorIfFalse (t , err != nil , "" )
324+ errorIfFalse (t , L .currentFrame == currentFrame , "" )
325+ errorIfFalse (t , L .GetTop () == currentTop , "" )
326+ errorIfFalse (t , L .stack .Sp () == currentSp , "" )
305327}
306328
307329func TestCoroutineApi1 (t * testing.T ) {
0 commit comments