From 7837e34e567e174e21c7971439e6a4a093addb06 Mon Sep 17 00:00:00 2001
From: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date: Tue, 3 Mar 2009 15:52:36 -0300
Subject: new states have a reasonable panic function + testC may run code on
 different threads + rename of some testC operations ('rawcall'->'call',
 'call'->'pcall')

---
 ltests.c | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

(limited to 'ltests.c')

diff --git a/ltests.c b/ltests.c
index 5c1bc876..f2814a23 100644
--- a/ltests.c
+++ b/ltests.c
@@ -1,5 +1,5 @@
 /*
-** $Id: ltests.c,v 2.57 2009/02/18 14:52:51 roberto Exp roberto $
+** $Id: ltests.c,v 2.58 2009/02/19 17:18:25 roberto Exp roberto $
 ** Internal Module for Debugging of the Lua Implementation
 ** See Copyright Notice in lua.h
 */
@@ -59,6 +59,13 @@ static void pushobject (lua_State *L, const TValue *o) {
 }
 
 
+static int tpanic (lua_State *L) {
+  fprintf(stderr, "PANIC: unprotected error in call to Lua API (%s)\n",
+                   lua_tostring(L, -1));
+  return (exit(EXIT_FAILURE), 0);  /* do not return to Lua */
+}
+
+
 /*
 ** {======================================================================
 ** Controlled version for realloc.
@@ -727,8 +734,10 @@ static int newstate (lua_State *L) {
   void *ud;
   lua_Alloc f = lua_getallocf(L, &ud);
   lua_State *L1 = lua_newstate(f, ud);
-  if (L1)
+  if (L1) {
+    lua_atpanic(L1, tpanic);
     lua_pushlightuserdata(L, L1);
+  }
   else
     lua_pushnil(L);
   return 1;
@@ -866,6 +875,10 @@ static int testC (lua_State *L) {
     L1 = getstate(L);
     pc = luaL_checkstring(L, 2);
   }
+  else if (lua_isthread(L, 1)) {
+    L1 = lua_tothread(L, 1);
+    pc = luaL_checkstring(L, 2);
+  }
   else {
     L1 = L;
     pc = luaL_checkstring(L, 1);
@@ -982,12 +995,12 @@ static int testC (lua_State *L) {
       int a = getindex;
       lua_pushboolean(L1, lua_equal(L1, a, getindex));
     }
-    else if EQ("rawcall") {
+    else if EQ("call") {
       int narg = getnum;
       int nres = getnum;
       lua_call(L1, narg, nres);
     }
-    else if EQ("call") {
+    else if EQ("pcall") {
       int narg = getnum;
       int nres = getnum;
       lua_pcall(L1, narg, nres, 0);
@@ -1139,6 +1152,7 @@ static void checkfinalmem (void) {
 
 int luaB_opentests (lua_State *L) {
   void *ud;
+  lua_atpanic(L, &tpanic);
   atexit(checkfinalmem);
   lua_assert(lua_getallocf(L, &ud) == debug_realloc);
   lua_assert(ud == cast(void *, &l_memcontrol));
-- 
cgit v1.2.3-55-g6feb