From 8da1d76453861f316e9532e02d25de07167257ff Mon Sep 17 00:00:00 2001 From: Sandu Liviu Catalin Date: Fri, 20 Mar 2020 20:50:17 +0200 Subject: [PATCH] Backport Squirrel changes. --- external/Squirrel/Lib/sqstdstring.cpp | 2 +- external/Squirrel/Lib/sqstdsystem.cpp | 10 ++++++++++ external/Squirrel/sqcompiler.cpp | 2 +- external/Squirrel/sqvm.cpp | 8 ++++++-- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/external/Squirrel/Lib/sqstdstring.cpp b/external/Squirrel/Lib/sqstdstring.cpp index 7f7599bb..919bd9e9 100644 --- a/external/Squirrel/Lib/sqstdstring.cpp +++ b/external/Squirrel/Lib/sqstdstring.cpp @@ -181,7 +181,7 @@ static SQInteger _string_printf(HSQUIRRELVM v) return -1; SQPRINTFUNCTION printfunc = sq_getprintfunc(v); - if(printfunc) printfunc(v,dest); + if(printfunc) printfunc(v,_SC("%s"),dest); return 0; } diff --git a/external/Squirrel/Lib/sqstdsystem.cpp b/external/Squirrel/Lib/sqstdsystem.cpp index b008a44d..da0f97f5 100644 --- a/external/Squirrel/Lib/sqstdsystem.cpp +++ b/external/Squirrel/Lib/sqstdsystem.cpp @@ -19,6 +19,10 @@ #define scremove remove #define screname rename #endif +#ifdef IOS + #include + extern char **environ; +#endif static SQInteger _system_getenv(HSQUIRRELVM v) { @@ -35,7 +39,13 @@ static SQInteger _system_system(HSQUIRRELVM v) { const SQChar *s; if(SQ_SUCCEEDED(sq_getstring(v,2,&s))){ + #ifdef IOS + pid_t pid; + posix_spawn(&pid, s, NULL, NULL, NULL, environ); + sq_pushinteger(v, 0); + #else sq_pushinteger(v,scsystem(s)); + #endif return 1; } return sq_throwerror(v,_SC("wrong param")); diff --git a/external/Squirrel/sqcompiler.cpp b/external/Squirrel/sqcompiler.cpp index 99ff1c95..095edd71 100644 --- a/external/Squirrel/sqcompiler.cpp +++ b/external/Squirrel/sqcompiler.cpp @@ -635,7 +635,7 @@ public: } break; case _SC('['): - if(_lex._prevtoken == _SC('\n')) Error(_SC("cannot brake deref/or comma needed after [exp]=exp slot declaration")); + if(_lex._prevtoken == _SC('\n')) Error(_SC("cannot break deref/or comma needed after [exp]=exp slot declaration")); Lex(); Expression(); Expect(_SC(']')); pos = -1; if(_es.etype==BASE) { diff --git a/external/Squirrel/sqvm.cpp b/external/Squirrel/sqvm.cpp index c0c7c98b..dcf823d7 100644 --- a/external/Squirrel/sqvm.cpp +++ b/external/Squirrel/sqvm.cpp @@ -296,6 +296,9 @@ bool SQVM::ToString(const SQObjectPtr &o,SQObjectPtr &res) case OT_BOOL: scsprintf(_sp(sq_rsl(6)),sq_rsl(6),_integer(o)?_SC("true"):_SC("false")); break; + case OT_NULL: + scsprintf(_sp(sq_rsl(5)),sq_rsl(5),_SC("null")); + break; case OT_TABLE: case OT_USERDATA: case OT_INSTANCE: @@ -668,7 +671,7 @@ bool SQVM::IsFalse(SQObjectPtr &o) #if !defined(SQUSEDOUBLE) || (defined(SQUSEDOUBLE) && defined(_SQ64)) || (_integer(o) == 0) ) //OT_NULL|OT_INTEGER|OT_BOOL #else - || (((type(o) != OT_FLOAT) && (_integer(o) == 0))) ) //OT_NULL|OT_INTEGER|OT_BOOL + || (((sq_type(o) != OT_FLOAT) && (_integer(o) == 0))) ) //OT_NULL|OT_INTEGER|OT_BOOL #endif { return true; @@ -1602,6 +1605,7 @@ SQInteger prevstackbase = _stackbase; } break; default: + Raise_Error(_SC("attempt to call '%s'"), GetTypeName(closure)); return false; } #ifdef _DEBUG @@ -1772,7 +1776,7 @@ void SQVM::dumpstack(SQInteger stackbase,bool dumpall) case OT_USERPOINTER: scprintf(_SC("USERPOINTER %p"),_userpointer(obj));break; case OT_CLASS: scprintf(_SC("CLASS %p"),_class(obj));break; case OT_INSTANCE: scprintf(_SC("INSTANCE %p"),_instance(obj));break; - case OT_WEAKREF: scprintf(_SC("WEAKERF %p"),_weakref(obj));break; + case OT_WEAKREF: scprintf(_SC("WEAKREF %p"),_weakref(obj));break; default: assert(0); break;