[Scummvm-cvs-logs] scummvm master -> 12fadf713d867653cd871fa1788358b63a29aee2

sev- sev at scummvm.org
Fri Feb 19 22:46:46 CET 2016


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
12fadf713d SWORD25: Fixing bug #7041: SWORD25: Crash in final scene


Commit: 12fadf713d867653cd871fa1788358b63a29aee2
    https://github.com/scummvm/scummvm/commit/12fadf713d867653cd871fa1788358b63a29aee2
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-02-19T22:42:01+01:00

Commit Message:
SWORD25: Fixing bug #7041: SWORD25: Crash in final scene

The original was ignoring Lua errors in that scene and was
restoring the state with longjmp.

We are yet to see the platform compatibility, but Lua's code
is too tangled to make simple replacement with error() work.

Another possible alternative would be to rework the original
game scripts. We will do it if this commit is problematic.

Changed paths:
    engines/sword25/util/lua/ldo.cpp
    engines/sword25/util/lua/luaconf.h



diff --git a/engines/sword25/util/lua/ldo.cpp b/engines/sword25/util/lua/ldo.cpp
index d53f95a..f4139cb 100644
--- a/engines/sword25/util/lua/ldo.cpp
+++ b/engines/sword25/util/lua/ldo.cpp
@@ -111,9 +111,8 @@ static const char* luaErrorDescription[] = {
 void luaD_throw (lua_State *L, int errcode) {
   if (L->errorJmp) {
     L->errorJmp->status = errcode;
-    // LUAI_THROW has been replaced with an error message in ScummVM, together
-    // with the LUA error code and description
-    //LUAI_THROW(L, L->errorJmp);
+    // LUAI_THROW is sometimes used to ignore the error and restore LUA state
+    LUAI_THROW(L, L->errorJmp);
     error("LUA error occurred, error code is %d (%s)", errcode, luaErrorDescription[errcode]);
   }
   else {
diff --git a/engines/sword25/util/lua/luaconf.h b/engines/sword25/util/lua/luaconf.h
index fb85983..53d0f55 100644
--- a/engines/sword25/util/lua/luaconf.h
+++ b/engines/sword25/util/lua/luaconf.h
@@ -621,7 +621,7 @@ union luai_Cast { double l_d; long l_l; };
 
 #else
 /* default handling with long jumps */
-//#define LUAI_THROW(L,c)	longjmp((c)->b, 1)	// replaced with error() in ScummVM
+#define LUAI_THROW(L,c)	longjmp((c)->b, 1)
 #define LUAI_TRY(L,c,a)	if (setjmp((c)->b) == 0) { a }
 #define luai_jmpbuf	jmp_buf
 






More information about the Scummvm-git-logs mailing list