Sfoglia il codice sorgente

When trying to compile on 32bits with SQInteger as int64_t several problems arised and on the way to fix it several compiler warnings was eliminated.

mingodad 7 anni fa
parent
commit
82d0b3cce3

+ 20 - 0
SquiLu/Makefile

@@ -13,6 +13,16 @@ sq32:
 	cd sqstdlib; $(MAKE) 
 	cd sq; $(MAKE) 
 
+sq32i64:
+	cd squirrel; $(MAKE) sq32i64
+	cd sqstdlib; $(MAKE) sq32i64
+	cd sq; $(MAKE) sq32i64
+
+sq32dbg:
+	cd squirrel; $(MAKEDBG) $@ 
+	cd sqstdlib; $(MAKEDBG) $@
+	cd sq; $(MAKE) $@
+
 sqprof:
 	cd squirrel; $(MAKE) sqprof
 	cd sqstdlib; $(MAKE) sqprof
@@ -23,6 +33,16 @@ sq64:
 	cd sqstdlib; $(MAKE) sq64
 	cd sq; $(MAKE) sq64
 	
+sq64p:
+	cd squirrel; $(MAKE) sq64p
+	cd sqstdlib; $(MAKE) sq64p
+	cd sq; $(MAKE) sq64p
+	
+sq64dbg:
+	cd squirrel; $(MAKEDBG) $@ 
+	cd sqstdlib; $(MAKEDBG) $@
+	cd sq; $(MAKEDBG) $@
+
 clean:
 	rm lib/*
 	rm bin/*

+ 1 - 1
SquiLu/Makefile-SquiLu-ios-through-linux

@@ -19,7 +19,6 @@ CFLAGS = $(INC) -O3 -Wall -fno-strict-aliasing  \
     -DPDF_USING_ZLIB=1 \
     -DPROFILE_SQVM0=1 \
     -DRS232_STATIC=1 \
-    -D_SQ64x=1 \
     -DSQ_JIT_LLVM44=1 \
     -DSQLITE_DEFAULT_AUTOVACUUM=1 \
     -DSQLITE_DEFAULT_FILE_FORMAT=4 \
@@ -40,6 +39,7 @@ CFLAGS = $(INC) -O3 -Wall -fno-strict-aliasing  \
     -DSQ_SUBLATIN=1 \
     -DSQUSEDECIMAL64x=1 \
     -DSQUSEDOUBLE=1 \
+    -D_SQ64=1 \
     -DSSL_STATIC_LIBRARY=1 \
     -DTHREADSAFE=1 \
     -DUSE_AXTLS=1 \

+ 1 - 1
SquiLu/include/sqapi.h

@@ -23,7 +23,7 @@ SQUIRREL_API_FUNC(SQPRINTFUNCTION, geterrorfunc, (HSQUIRRELVM v))
 SQUIRREL_API_FUNC(SQRESULT, suspendvm, (HSQUIRRELVM v))
 SQUIRREL_API_FUNC(SQRESULT, wakeupvm, (HSQUIRRELVM v,SQBool resumedret,SQBool retval,SQBool raiseerror,SQBool throwerror))
 SQUIRREL_API_FUNC(SQInteger, getvmstate, (HSQUIRRELVM v))
-SQUIRREL_API_FUNC(SQInteger, getversion, ())
+SQUIRREL_API_FUNC(SQInteger, getversion, (void))
 SQUIRREL_API_FUNC(void, set_include_path, (HSQUIRRELVM v, const SQChar *include_path))
 SQUIRREL_API_FUNC(const SQChar*, get_include_path, (HSQUIRRELVM v))
 SQUIRREL_API_FUNC(SQBool, set_define_name, (HSQUIRRELVM v, const SQChar*))

+ 5 - 2
SquiLu/include/sqconfig.h

@@ -29,7 +29,6 @@ typedef char SQInt8;
 #define SQ_INT_MIN _I64_MIN
 typedef __int64 SQInteger;
 typedef unsigned __int64 SQUnsignedInteger;
-typedef unsigned __int64 SQHash; /*should be the same size of a pointer*/
 #else
 #define SQ_INT_MAX LLONG_MAX
 #define SQ_INT_MIN LLONG_MIN
@@ -52,7 +51,7 @@ typedef double SQFloat;
 typedef float SQFloat;
 #endif
 
-#if defined(SQUSEDOUBLE) && !defined(_SQ64) || !defined(SQUSEDOUBLE) && defined(_SQ64)
+#if defined(SQUSEDOUBLE) || defined(_SQ64)
 #ifdef _MSC_VER
 typedef __int64 SQRawObjectVal; //must be 64bits
 #else
@@ -154,6 +153,8 @@ typedef unsigned wchar_t SQUChar;
 #define scisalpha   iswalpha
 #define sciscntrl   iswcntrl
 #define scisalnum   iswalnum
+#define scisupper   iswupper
+#define scislower   iswlower
 
 
 #define sq_rsl(l) ((l)<<WCHAR_SHIFT_MUL)
@@ -203,6 +204,8 @@ typedef unsigned char SQUChar;
 #define sciscntrl   iscntrl
 #define scisalpha   isalpha
 #define scisalnum   isalnum
+#define scisupper   isupper
+#define scislower   islower
 #define scprintf    printf
 #define MAX_CHAR 0xFF
 

+ 1 - 1
SquiLu/include/squirrel.h

@@ -195,7 +195,7 @@ typedef SQRESULT (*SQRELEASEHOOK)(SQUserPointer ptr, SQInteger size, HSQUIRRELVM
 typedef SQRESULT (*SQRELEASEHOOK)(SQUserPointer ptr, SQInteger size, void *ep);
 #endif // SQ_WITH_DELAYED_RELEASE_HOOKS
 typedef void (*SQCOMPILERERROR)(HSQUIRRELVM,const SQChar * /*desc*/,const SQChar * /*source*/,SQInteger /*line*/,SQInteger /*column*/);
-typedef void (*SQPRINTFUNCTION)(HSQUIRRELVM,const SQChar * ,...);
+typedef void (*SQPRINTFUNCTION)(HSQUIRRELVM,const SQChar * ,...)  __attribute__ ((__format__ (__printf__, 2, 3)));
 typedef void (*SQDEBUGHOOK)(HSQUIRRELVM /*v*/, SQInteger /*type*/, const SQChar * /*sourcename*/, SQInteger /*line*/, const SQChar * /*funcname*/);
 typedef SQInteger (*SQWRITEFUNC)(SQUserPointer,SQUserPointer,SQInteger);
 typedef SQInteger (*SQREADFUNC)(SQUserPointer,SQUserPointer,SQInteger);

+ 17 - 2
SquiLu/sq/Makefile

@@ -15,9 +15,24 @@ SRCS= sq.c
 sq32:
 	g++ -O2 -s -o $(OUT) $(SRCS) $(INCZ) $(LIBZ) $(LIB) $(DEFS)
 
+sq32i64:
+	g++ -g -D_SQ64 -O2 -o $(OUT)32i64 $(SRCS) $(INCZ) $(LIBZ) $(LIB) $(DEFS)
+
+sq32dbg:
+	g++ -g -m32 -s -o $(OUT)dbg $(SRCS) $(INCZ) $(LIBZ) $(LIB) $(DEFS)
+
 sqprof:
-	g++ -O2 -pg  -pie -gstabs -g3 -o $(OUT) $(SRCS) $(INCZ) $(LIBZ) $(LIB) $(DEFS)
+	#g++ -O2 -pg  -pie -gstabs -g3 -o $(OUT)-profile $(SRCS) $(INCZ) $(LIBZ) $(LIB) $(DEFS)
+	g++ -O2 -pg -g -fno-exceptions -fno-rtti -gstabs -g3 -o $(OUT)-profile $(SRCS) $(INCZ) $(LIBZ) $(LIB) $(DEFS)
 	
 sq64:
-	g++ -O2 -s -m64 -D_SQ64 -o $(OUT) $(SRCS) $(INCZ) $(LIBZ) $(LIB) $(DEFS)
+	g++ -O3 -s -m64 -D_SQ64 -o $(OUT) $(SRCS) $(INCZ) $(LIBZ) $(LIB) $(DEFS)
+#	g++ -g -m64 -D_SQ64 -o $(OUT) $(SRCS) $(INCZ) $(LIBZ) $(LIB) $(DEFS)
+
+sq64p:
+	g++ -fpack-struct -march=native -O3 -s -m64 -D_SQ64 -o $(OUT)-packed $(SRCS) $(INCZ) $(LIBZ) $(LIB) $(DEFS)
 #	g++ -g -m64 -D_SQ64 -o $(OUT) $(SRCS) $(INCZ) $(LIBZ) $(LIB) $(DEFS)
+
+sq64dbg:
+	g++ -g -o $(OUT)dbg $(SRCS) $(INCZ) $(LIBZ) $(LIB) $(DEFS)
+

+ 18 - 9
SquiLu/sq/sq.c

@@ -23,7 +23,7 @@
 int sq_main_argc = 0;
 char** sq_main_argv = 0;
 
-void PrintVersionInfos();
+void PrintVersionInfos(void);
 
 #if defined(_MSC_VER) && defined(_DEBUG)
 int MemAllocHook( int allocType, void *userData, size_t size, int blockType,
@@ -35,7 +35,7 @@ int MemAllocHook( int allocType, void *userData, size_t size, int blockType,
 #endif
 
 
-SQInteger quit(HSQUIRRELVM v)
+static SQInteger quit(HSQUIRRELVM v)
 {
 	int *done;
 	sq_getuserpointer(v,-1,(SQUserPointer*)&done);
@@ -43,7 +43,8 @@ SQInteger quit(HSQUIRRELVM v)
 	return 0;
 }
 
-void printfunc(HSQUIRRELVM v,const SQChar *s,...)
+//static void printfunc(HSQUIRRELVM v,const SQChar *s,...) __attribute__ ((__format__ (__printf__, 2, 3)));
+static void printfunc(HSQUIRRELVM v,const SQChar *s,...)
 {
 	va_list vl;
 	va_start(vl, s);
@@ -52,7 +53,8 @@ void printfunc(HSQUIRRELVM v,const SQChar *s,...)
 	(void)v; /* UNUSED */
 }
 
-void errorfunc(HSQUIRRELVM v,const SQChar *s,...)
+//static void errorfunc(HSQUIRRELVM v,const SQChar *s,...) __attribute__ ((__format__ (__printf__, 2, 3)));
+static void errorfunc(HSQUIRRELVM v,const SQChar *s,...)
 {
 	va_list vl;
 	va_start(vl, s);
@@ -66,7 +68,7 @@ void PrintVersionInfos()
 	scfprintf(stdout,_SC("%s %s (%d bits)\n"),SQUIRREL_VERSION,SQUIRREL_COPYRIGHT,((int)(sizeof(SQInteger)*8)));
 }
 
-SQInteger push_program_args(HSQUIRRELVM v,SQInteger arg, SQInteger argc, char* argv[], int asArray){
+static SQInteger push_program_args(HSQUIRRELVM v,SQInteger arg, SQInteger argc, char* argv[], int asArray){
     SQInteger i, callargs = 0;
     if(asArray)
     {
@@ -91,7 +93,7 @@ SQInteger push_program_args(HSQUIRRELVM v,SQInteger arg, SQInteger argc, char* a
     return callargs;
 }
 
-void PrintUsage()
+static void PrintUsage()
 {
 	scfprintf(stderr,_SC("usage: sq <options> <scriptpath [args]>.\n")
 		_SC("Available options are:\n")
@@ -106,7 +108,7 @@ void PrintUsage()
 		_SC("   -h              prints help\n"));
 }
 
-void loadDefaultScript(HSQUIRRELVM v, const char *script)
+static void loadDefaultScript(HSQUIRRELVM v, const char *script)
 {
     FILE *fb = scfopen(script, "rb");
     if (!fb) return;
@@ -128,7 +130,7 @@ void loadDefaultScript(HSQUIRRELVM v, const char *script)
 #define _DONE 2
 #define _ERROR 3
 //<<FIXME>> this func is a mess
-int getargs(HSQUIRRELVM v,int argc, char* argv[],SQInteger *retval)
+static int getargs(HSQUIRRELVM v,int argc, char* argv[],SQInteger *retval)
 {
 	int compiles_only = 0;
 	int compiles_as_source_only = 0;
@@ -317,7 +319,7 @@ int getargs(HSQUIRRELVM v,int argc, char* argv[],SQInteger *retval)
 	return _INTERACTIVE;
 }
 
-void Interactive(HSQUIRRELVM v)
+static void Interactive(HSQUIRRELVM v)
 {
 
 	SQChar buffer[MAXINPUT];
@@ -497,12 +499,14 @@ static SQInteger LoadFrozenScript0(HSQUIRRELVM v, const SQChar* filename, int on
 }
 #endif
 
+#ifndef SQUILU_ALONE
 static char *chngChar (char *str, char oldChar, char newChar) {
     char *strPtr = str;
     while ((strPtr = strchr (strPtr, oldChar)) != NULL)
         *strPtr++ = newChar;
     return str;
 }
+#endif
 
 static SQInteger LoadFrozenScript(HSQUIRRELVM v, const SQChar* filename, int only_check)
 {
@@ -628,6 +632,8 @@ SQRESULT sqext_register_nn (HSQUIRRELVM v);
 SQRESULT sqext_register_lapack (HSQUIRRELVM v);
 SQRESULT sqext_register_numarray (HSQUIRRELVM v);
 SQRESULT sqext_register_fann (HSQUIRRELVM v);
+SQRESULT sqext_register_numarray (HSQUIRRELVM v);
+SQRESULT sqext_register_Snowball (HSQUIRRELVM v);
 
 static sq_modules_preload_st modules_preload[] = {
     {"blob", sqstd_register_bloblib},
@@ -729,6 +735,9 @@ static sq_modules_preload_st modules_preload[] = {
 #ifdef WITH_MYSQL
     {"mysql", sqext_register_MySQL},
 #endif
+#ifdef USE_SNOWBALL
+    {"snowball", sqext_register_Snowball},
+#endif
 #if !defined(ANDROID_BUILD) && !defined(NO_RS232)
     {"rs232", sqext_register_rs232},
 #endif

+ 25 - 2
SquiLu/sqstdlib/Makefile

@@ -31,13 +31,36 @@ sq32:
 	ar rc $(OUT) *.o
 	rm *.o
 
+sq32i64:
+	$(CC) -g -D_SQ64 -O2 -fno-exceptions -fno-rtti -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
+	ar rc $(OUT) *.o
+	rm *.o
+
+sq32dbg:
+	$(CC) -g -m32 -fno-exceptions -fno-rtti -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
+	ar rc $(OUT) *.o
+	rm *.o
+
 sqprof:
-	$(CC) -O2 -pg -fno-exceptions -fno-rtti -pie -gstabs -g3 -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
+	#$(CC) -O2 -pg -fno-exceptions -fno-rtti -pie -gstabs -g3 -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
+	$(CC) -O2 -pg -g -fno-exceptions -fno-rtti -gstabs -g3 -Wall -c $(SRCS) $(INCZ) $(DEFS)
 	ar rc $(OUT) *.o
 	rm *.o
 	
 sq64:
-	$(CC) -O2 -m64 -fno-exceptions -D_SQ64 -fno-rtti -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
+	$(CC) -O3 -m64 -fno-exceptions -D_SQ64 -fno-rtti -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
+#	$(CC) -g -m64 -fno-exceptions -D_SQ64 -fno-rtti -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
+	ar rc $(OUT) *.o
+	rm *.o
+
+sq64p:
+	$(CC) -fpack-struct -march=native -O3 -m64 -fno-exceptions -D_SQ64 -fno-rtti -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
 #	$(CC) -g -m64 -fno-exceptions -D_SQ64 -fno-rtti -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
 	ar rc $(OUT) *.o
 	rm *.o
+
+sq64dbg:
+	$(CC) -g -fno-exceptions -fno-rtti -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
+	ar rc $(OUT) *.o
+	rm *.o
+

+ 130 - 130
SquiLu/sqstdlib/sqstdaux.cpp

@@ -1,18 +1,18 @@
-/* see copyright notice in squirrel.h */
-#include <squirrel.h>
-#include <sqstdaux.h>
-#include <assert.h>
-
-void sqstd_printcallstack(HSQUIRRELVM v)
-{
-	SQPRINTFUNCTION pf = sq_geterrorfunc(v);
-	if(pf) {
-		SQStackInfos si;
-		SQInteger i;
-		SQFloat f;
-		const SQChar *s;
-		SQInteger level=1; //1 is to skip this function that is level 0
-		const SQChar *name=0;
+/* see copyright notice in squirrel.h */
+#include <squirrel.h>
+#include <sqstdaux.h>
+#include <assert.h>
+
+void sqstd_printcallstack(HSQUIRRELVM v)
+{
+	SQPRINTFUNCTION pf = sq_geterrorfunc(v);
+	if(pf) {
+		SQStackInfos si;
+		SQInteger i;
+		SQFloat f;
+		const SQChar *s;
+		SQInteger level=1; //1 is to skip this function that is level 0
+		const SQChar *name=0;
 		SQInteger seq=0;
 		SQInteger max_str_size = 10 * 1024; //to not print long strings in stack trace
 		sq_pushliteral(v, _SC("__max_print_stack_str_size")); //can be overwritten at runtime
@@ -20,126 +20,126 @@ void sqstd_printcallstack(HSQUIRRELVM v)
 		{
 		    sq_getinteger(v, -1, &max_str_size);
 		    sq_poptop(v); //remove the result
-		}
-		pf(v,_SC("\nCALLSTACK\n"));
-		while(SQ_SUCCEEDED(sq_stackinfos(v,level,&si)))
-		{
-			const SQChar *fn=_SC("unknown");
-			const SQChar *src=_SC("unknown");
-			if(si.funcname)fn=si.funcname;
-			if(si.source)src=si.source;
-			pf(v,_SC("%s:%d:0 *FUNCTION [%s()]\n"),src,si.line,fn);
-			level++;
-		}
-		//level=0;
-		pf(v,_SC("\nLOCALS\n"));
-
-		for(level=0;level<10;level++){
-			seq=0;
-			while((name = sq_getlocal(v,level,seq)))
-			{
-				seq++;
-				switch(sq_gettype(v,-1))
-				{
-				case OT_NULL:
-					pf(v,_SC("[%s] NULL\n"),name);
-					break;
-				case OT_INTEGER:
-					sq_getinteger(v,-1,&i);
-					pf(v,_SC("[%s] %d\n"),name,i);
-					break;
-				case OT_FLOAT:
-					sq_getfloat(v,-1,&f);
-					pf(v,_SC("[%s] %.14g\n"),name,f);
-					break;
-				case OT_USERPOINTER:
-					pf(v,_SC("[%s] USERPOINTER\n"),name);
-					break;
-				case OT_STRING:
+		}
+		pf(v,_SC("\nCALLSTACK\n"));
+		while(SQ_SUCCEEDED(sq_stackinfos(v,level,&si)))
+		{
+			const SQChar *fn=_SC("unknown");
+			const SQChar *src=_SC("unknown");
+			if(si.funcname)fn=si.funcname;
+			if(si.source)src=si.source;
+			pf(v,_SC("%s:%d:0 *FUNCTION [%s()]\n"),src,(int)si.line,fn);
+			level++;
+		}
+		//level=0;
+		pf(v,_SC("\nLOCALS\n"));
+
+		for(level=0;level<10;level++){
+			seq=0;
+			while((name = sq_getlocal(v,level,seq)))
+			{
+				seq++;
+				switch(sq_gettype(v,-1))
+				{
+				case OT_NULL:
+					pf(v,_SC("[%s] NULL\n"),name);
+					break;
+				case OT_INTEGER:
+					sq_getinteger(v,-1,&i);
+					pf(v,_SC("[%s] %d\n"),name, (int)i);
+					break;
+				case OT_FLOAT:
+					sq_getfloat(v,-1,&f);
+					pf(v,_SC("[%s] %.14g\n"),name,f);
+					break;
+				case OT_USERPOINTER:
+					pf(v,_SC("[%s] USERPOINTER\n"),name);
+					break;
+				case OT_STRING:
 					sq_getstring(v,-1,&s);
 					if(sq_getsize(v, -1) > max_str_size)
 					{
-						pf(v,_SC("[%s] (%d max dump) \"%.*s\"\n"), name, max_str_size, max_str_size, s);
+						pf(v,_SC("[%s] (%d max dump) \"%.*s\"\n"), name, (int)max_str_size, (int)max_str_size, s);
 					}
 					else
 					{
 						pf(v,_SC("[%s] \"%s\"\n"), name, s);
-					}
-					break;
-				case OT_TABLE:
-					pf(v,_SC("[%s] TABLE\n"),name);
-					break;
-				case OT_ARRAY:
-					pf(v,_SC("[%s] ARRAY\n"),name);
-					break;
-				case OT_CLOSURE:
-					pf(v,_SC("[%s] CLOSURE\n"),name);
-					break;
-				case OT_NATIVECLOSURE:
-					pf(v,_SC("[%s] NATIVECLOSURE\n"),name);
-					break;
-				case OT_GENERATOR:
-					pf(v,_SC("[%s] GENERATOR\n"),name);
-					break;
-				case OT_USERDATA:
-					pf(v,_SC("[%s] USERDATA\n"),name);
-					break;
-				case OT_THREAD:
-					pf(v,_SC("[%s] THREAD\n"),name);
-					break;
-				case OT_CLASS:
-					pf(v,_SC("[%s] CLASS\n"),name);
-					break;
-				case OT_INSTANCE:
-					pf(v,_SC("[%s] INSTANCE\n"),name);
-					break;
-				case OT_WEAKREF:
-					pf(v,_SC("[%s] WEAKREF\n"),name);
-					break;
+					}
+					break;
+				case OT_TABLE:
+					pf(v,_SC("[%s] TABLE\n"),name);
+					break;
+				case OT_ARRAY:
+					pf(v,_SC("[%s] ARRAY\n"),name);
+					break;
+				case OT_CLOSURE:
+					pf(v,_SC("[%s] CLOSURE\n"),name);
+					break;
+				case OT_NATIVECLOSURE:
+					pf(v,_SC("[%s] NATIVECLOSURE\n"),name);
+					break;
+				case OT_GENERATOR:
+					pf(v,_SC("[%s] GENERATOR\n"),name);
+					break;
+				case OT_USERDATA:
+					pf(v,_SC("[%s] USERDATA\n"),name);
+					break;
+				case OT_THREAD:
+					pf(v,_SC("[%s] THREAD\n"),name);
+					break;
+				case OT_CLASS:
+					pf(v,_SC("[%s] CLASS\n"),name);
+					break;
+				case OT_INSTANCE:
+					pf(v,_SC("[%s] INSTANCE\n"),name);
+					break;
+				case OT_WEAKREF:
+					pf(v,_SC("[%s] WEAKREF\n"),name);
+					break;
 				case OT_BOOL:{
-				    SQBool bval;
-					sq_getbool(v,-1,&bval);
-					pf(v,_SC("[%s] %s\n"),name, bval == SQTrue ? _SC("true") : _SC("false"));
-							 }
-					break;
-				default: assert(0); break;
-				}
-				sq_pop(v,1);
-			}
-		}
-	}
-}
-
-static SQRESULT _sqstd_aux_printerror(HSQUIRRELVM v)
-{
-	SQPRINTFUNCTION pf = sq_geterrorfunc(v);
-	if(pf) {
-		const SQChar *sErr = 0;
-		if(sq_gettop(v)>=1) {
-			if(SQ_SUCCEEDED(sq_getstring(v,2,&sErr)))	{
-				pf(v,_SC("\nAN ERROR HAS OCCURED [%s]\n"),sErr);
-			}
-			else{
-				pf(v,_SC("\nAN ERROR HAS OCCURED [unknown]\n"));
-			}
-			sqstd_printcallstack(v);
-		}
-	}
-	return 0;
-}
-
-void _sqstd_compiler_error(HSQUIRRELVM v,const SQChar *sErr,const SQChar *sSource,SQInteger line,SQInteger column)
-{
-	SQPRINTFUNCTION pf = sq_geterrorfunc(v);
-	if(pf) {
-		//pf(v,_SC("%s line = (%d) column = (%d) : error %s\n"),sSource,line,column,sErr);
-		pf(v,_SC("%s:%d:%d : error %s\n"),sSource,line,column,sErr);
-	}
-}
-
-void sqstd_seterrorhandlers(HSQUIRRELVM v)
-{
-	sq_setcompilererrorhandler(v,_sqstd_compiler_error);
-	sq_newclosure(v,_sqstd_aux_printerror,0);
-	sq_seterrorhandler(v);
-}
+				    SQBool bval;
+					sq_getbool(v,-1,&bval);
+					pf(v,_SC("[%s] %s\n"),name, bval == SQTrue ? _SC("true") : _SC("false"));
+							 }
+					break;
+				default: assert(0); break;
+				}
+				sq_pop(v,1);
+			}
+		}
+	}
+}
+
+static SQRESULT _sqstd_aux_printerror(HSQUIRRELVM v)
+{
+	SQPRINTFUNCTION pf = sq_geterrorfunc(v);
+	if(pf) {
+		const SQChar *sErr = 0;
+		if(sq_gettop(v)>=1) {
+			if(SQ_SUCCEEDED(sq_getstring(v,2,&sErr)))	{
+				pf(v,_SC("\nAN ERROR HAS OCCURED [%s]\n"),sErr);
+			}
+			else{
+				pf(v,_SC("\nAN ERROR HAS OCCURED [unknown]\n"));
+			}
+			sqstd_printcallstack(v);
+		}
+	}
+	return 0;
+}
+
+void _sqstd_compiler_error(HSQUIRRELVM v,const SQChar *sErr,const SQChar *sSource,SQInteger line,SQInteger column)
+{
+	SQPRINTFUNCTION pf = sq_geterrorfunc(v);
+	if(pf) {
+		//pf(v,_SC("%s line = (%d) column = (%d) : error %s\n"),sSource,line,column,sErr);
+		pf(v,_SC("%s:%d:%d : error %s\n"),sSource,(int)line,(int)column,sErr);
+	}
+}
+
+void sqstd_seterrorhandlers(HSQUIRRELVM v)
+{
+	sq_setcompilererrorhandler(v,_sqstd_compiler_error);
+	sq_newclosure(v,_sqstd_aux_printerror,0);
+	sq_seterrorhandler(v);
+}

+ 7 - 5
SquiLu/sqstdlib/sqstdblob.cpp

@@ -254,6 +254,7 @@ static SQRESULT _blob__get(HSQUIRRELVM v)
 {
 	SETUP_BLOB(v);
 	SQInteger idx;
+
 	if ((sq_gettype(v, 2) & SQOBJECT_NUMERIC) == 0)
 	{
 		sq_pushnull(v);
@@ -420,7 +421,6 @@ static SQRESULT _blob_bit_ops(HSQUIRRELVM v, int op)
     case BLOB_BIT_GET:
         sq_pushinteger(v, (BLOB_CH_POS(cpos) & b8));
         return 1;
-        break;
 
     case BLOB_BIT_SET:
         BLOB_CH_POS(cpos) |= b8;
@@ -479,7 +479,7 @@ static SQRESULT _blob_match(HSQUIRRELVM v)
     return string_gmatch_base(v, 0, (const SQChar*)self->GetBuf(), self->Len());
 }
 
-#define _DECL_BLOB_FUNC(name,nparams,typecheck) {_SC(#name),_blob_##name,nparams,typecheck}
+#define _DECL_BLOB_FUNC(name,nparams,typecheck) {_SC(#name),_blob_##name,nparams,typecheck,false}
 static SQRegFunction _blob_methods[] = {
 	_DECL_BLOB_FUNC(constructor,-1,_SC("xnn")),
 	_DECL_BLOB_FUNC(resize,2,_SC("xn")),
@@ -504,7 +504,7 @@ static SQRegFunction _blob_methods[] = {
 	_DECL_BLOB_FUNC(find_lua,-2,_SC("xs a|t|c n b n")),
 	_DECL_BLOB_FUNC(gmatch,-3,_SC("x s c n n")),
 	_DECL_BLOB_FUNC(match,-2,_SC("x s n n")),
-	{NULL,(SQFUNCTION)0,0,NULL}
+	{NULL,(SQFUNCTION)0,0,NULL, false}
 };
 
 
@@ -555,14 +555,14 @@ static SQRESULT _g_blob_swapfloat(HSQUIRRELVM v)
 	return 1;
 }
 
-#define _DECL_GLOBALBLOB_FUNC(name,nparams,typecheck) {_SC(#name),_g_blob_##name,nparams,typecheck}
+#define _DECL_GLOBALBLOB_FUNC(name,nparams,typecheck) {_SC(#name),_g_blob_##name,nparams,typecheck,false}
 static SQRegFunction bloblib_funcs[]={
 	_DECL_GLOBALBLOB_FUNC(casti2f,2,_SC(".n")),
 	_DECL_GLOBALBLOB_FUNC(castf2i,2,_SC(".n")),
 	_DECL_GLOBALBLOB_FUNC(swap2,2,_SC(".n")),
 	_DECL_GLOBALBLOB_FUNC(swap4,2,_SC(".n")),
 	_DECL_GLOBALBLOB_FUNC(swapfloat,2,_SC(".n")),
-	{NULL,(SQFUNCTION)0,0,NULL}
+	{NULL,(SQFUNCTION)0,0,NULL,false}
 };
 
 SQRESULT sqstd_getblob(HSQUIRRELVM v,SQInteger idx,SQUserPointer *ptr)
@@ -582,6 +582,7 @@ SQInteger sqstd_getblobsize(HSQUIRRELVM v,SQInteger idx)
 	return blob->Len();
 }
 
+//used by sqstdio
 SQInteger blob_read(SQUserPointer file,SQUserPointer buf,SQInteger size)
 {
 	SQInteger ret;
@@ -590,6 +591,7 @@ SQInteger blob_read(SQUserPointer file,SQUserPointer buf,SQInteger size)
 	return -1;
 }
 
+//used by sqstdio
 SQInteger blob_write(SQUserPointer file,SQUserPointer p,SQInteger size)
 {
     SQBlob *blob = (SQBlob *)file;

+ 1 - 1
SquiLu/sqstdlib/sqstdblobimpl.h

@@ -37,10 +37,10 @@ struct SQBlob : public SQStream
 	static SQUserPointer SQBlob_TAG;
 private:
 	void init(SQInteger size, SQInteger allocated);
+	unsigned char *_buf;
 	SQInteger _size;
 	SQInteger _allocated;
 	SQInteger _ptr;
-	unsigned char *_buf;
 	bool _owns;
 };
 

+ 62 - 12
SquiLu/sqstdlib/sqstdio.cpp

@@ -7,6 +7,13 @@
 #include <sqstdfile.h>
 #include "sqstdstream.h"
 
+#if 0
+#ifndef _WIN32
+#include <unistd.h>
+#include <fcntl.h>
+#endif // _WIN32
+#endif // 0
+
 //only to make the SQFile vtable be generated here
 void SQFile::DummyPinVtable(){}
 
@@ -147,13 +154,12 @@ static SQRESULT _popen_close(HSQUIRRELVM v)
 	return 0;
 }
 
-//bindings
-#define _DECL_FILE_FUNC(name,nparams,typecheck) {_SC(#name),_popen_##name,nparams,typecheck}
+#define _DECL_FILE_FUNC(name,nparams,typecheck) {_SC(#name),_popen_##name,nparams,typecheck,false}
 static const SQRegFunction _popen_methods[] = {
     _DECL_FILE_FUNC(constructor,3,_SC("x")),
     _DECL_FILE_FUNC(_typeof,1,_SC("x")),
     _DECL_FILE_FUNC(close,1,_SC("x")),
-    {NULL,(SQFUNCTION)0,0,NULL}
+    {NULL,(SQFUNCTION)0,0,NULL,false}
 };
 #undef _DECL_FILE_FUNC
 
@@ -209,14 +215,57 @@ static SQRESULT _file_close(HSQUIRRELVM v)
 	}
 	return 0;
 }
-
+#if 0
+static SQRESULT _file_nonblock(HSQUIRRELVM v)
+{
+	SQFile *self = NULL;
+#ifdef _WIN32
+    return sq_throwerror(v, _SC("nonblock not supported on win32"));
+#else
+	if(SQ_SUCCEEDED(sq_getinstanceup(v,1,(SQUserPointer*)&self,(SQUserPointer)SQSTD_FILE_TYPE_TAG))
+		&& self != NULL)
+	{
+	    SQFILE handle = self->GetHandle();
+	    if(handle)
+        {
+            int fd = fileno((FILE*)handle);
+            if(fd > STDERR_FILENO)
+            {
+                int flags = fcntl(fd, F_GETFL, 0);
+
+                if(sq_gettop(v) > 1)
+                {
+                    //set nonblocking
+                    SQBool isNonBlocking;
+                    sq_getbool(v, 2, &isNonBlocking);
+                    if (flags >= 0) {
+                        int rc = fcntl(fd, F_SETFL,
+                                    isNonBlocking ? flags | O_NONBLOCK
+                                    : flags ^ O_NONBLOCK);
+                        sq_pushbool(v, rc == 0);
+                    }
+                    else return 0;
+                }
+                else
+                {
+                    sq_pushbool(v, flags & O_NONBLOCK);
+                }
+                return 1;
+            }
+        }
+	}
+	return 0;
+#endif // _WIN32
+}
+#endif // 0
 //bindings
-#define _DECL_FILE_FUNC(name,nparams,typecheck) {_SC(#name),_file_##name,nparams,typecheck}
+#define _DECL_FILE_FUNC(name,nparams,typecheck) {_SC(#name),_file_##name,nparams,typecheck,false}
 static const SQRegFunction _file_methods[] = {
     _DECL_FILE_FUNC(constructor,3,_SC("x")), //TODO if we change "x" to "xss" it stops working
     _DECL_FILE_FUNC(_typeof,1,_SC("x")),
     _DECL_FILE_FUNC(close,1,_SC("x")),
-    {NULL,(SQFUNCTION)0,0,NULL}
+    //_DECL_FILE_FUNC(nonblock,-1,_SC("xb")),
+    {NULL,(SQFUNCTION)0,0,NULL,false}
 };
 
 
@@ -264,7 +313,7 @@ struct IOBuffer {
     SQFILE file;
 };
 
-SQInteger _read_byte(IOBuffer *iobuffer)
+static SQInteger _read_byte(IOBuffer *iobuffer)
 {
 	if(iobuffer->ptr < iobuffer->size) {
 
@@ -284,7 +333,7 @@ SQInteger _read_byte(IOBuffer *iobuffer)
 	return 0;
 }
 
-SQInteger _read_two_bytes(IOBuffer *iobuffer)
+static SQInteger _read_two_bytes(IOBuffer *iobuffer)
 {
     if(iobuffer->ptr < iobuffer->size) {
         if(iobuffer->size < 2) return 0;
@@ -372,14 +421,14 @@ static SQInteger _io_file_lexfeed_UCS2_BE(SQUserPointer iobuf)
 	return 0;
 }
 
-SQInteger file_read(SQUserPointer file,SQUserPointer buf,SQInteger size)
+static SQInteger file_read(SQUserPointer file,SQUserPointer buf,SQInteger size)
 {
 	SQInteger ret;
 	if( ( ret = sqstd_fread(buf,1,size,(SQFILE)file ))!=0 )return ret;
 	return -1;
 }
 
-SQInteger file_write(SQUserPointer file,SQUserPointer p,SQInteger size)
+static SQInteger file_write(SQUserPointer file,SQUserPointer p,SQInteger size)
 {
 	return sqstd_fwrite(p,1,size,(SQFILE)file);
 }
@@ -536,6 +585,7 @@ SQInteger _g_io_loadstring(HSQUIRRELVM v)
 	return rc < 0 ? rc : 1;
 }
 
+//used by sq_slave_vm
 SQInteger _g_io_dostring(HSQUIRRELVM v)
 {
     SQ_FUNC_VARS(v);
@@ -608,7 +658,7 @@ SQInteger _g_io_writefile(HSQUIRRELVM v)
 	return sq_throwerror(v,_SC("could not open file %s"), filename);
 }
 
-#define _DECL_GLOBALIO_FUNC(name,nparams,typecheck) {_SC(#name),_g_io_##name,nparams,typecheck}
+#define _DECL_GLOBALIO_FUNC(name,nparams,typecheck) {_SC(#name),_g_io_##name,nparams,typecheck,false}
 static const SQRegFunction iolib_funcs[]={
 	_DECL_GLOBALIO_FUNC(loadfile,-2,_SC(".sbb")),
 	_DECL_GLOBALIO_FUNC(dofile,-2,_SC(".sbb")),
@@ -619,7 +669,7 @@ static const SQRegFunction iolib_funcs[]={
 	_DECL_GLOBALIO_FUNC(existsfile,2,_SC(".s")),
 	_DECL_GLOBALIO_FUNC(readfile,2,_SC(".s")),
 	_DECL_GLOBALIO_FUNC(writefile,3,_SC(".ss")),
-	{NULL,(SQFUNCTION)0,0,NULL}
+	{NULL,(SQFUNCTION)0,0,NULL,false}
 };
 
 SQRESULT sqstd_register_iolib(HSQUIRRELVM v)

+ 5 - 5
SquiLu/sqstdlib/sqstdmath.cpp

@@ -1,6 +1,7 @@
 /* see copyright notice in squirrel.h */
 #include <squirrel.h>
 #include <math.h>
+//#include <float.h>
 #include <limits.h>
 #include <stdlib.h>
 #include <sqstdmath.h>
@@ -130,7 +131,7 @@ static SQRESULT math_abs(HSQUIRRELVM v)
 {
     SQInteger n;
     sq_getinteger(v,2,&n);
-    sq_pushinteger(v,(SQInteger)abs(n));
+    sq_pushinteger(v,(SQInteger)::abs(n));
 	return 1;
 }
 
@@ -294,8 +295,7 @@ static SQRESULT math_number_format(HSQUIRRELVM v) {
 		dec = -dec;
 	}
 
-    int idec = dec; //on 64 bits there is a warning here about SQInteger/int
-	tmplen = scsprintf(tmpbuf, sizeof(tmpbuf), _SC("%.*f"), idec, d);
+	tmplen = scsprintf(tmpbuf, sizeof(tmpbuf), _SC("%.*f"), (int)dec, d);
 
 	resbuf[0] = _SC('\0');
 
@@ -443,7 +443,7 @@ static SQRESULT math_rad (HSQUIRRELVM v) {
 
 //DAD end
 
-#define _DECL_FUNC(name,nparams,tycheck) {_SC(#name),math_##name,nparams,tycheck}
+#define _DECL_FUNC(name,nparams,tycheck) {_SC(#name),math_##name,nparams,tycheck,false}
 static const SQRegFunction mathlib_funcs[] = {
 	_DECL_FUNC(sqrt,2,_SC(".n")),
 	_DECL_FUNC(sin,2,_SC(".n")),
@@ -484,7 +484,7 @@ static const SQRegFunction mathlib_funcs[] = {
 	_DECL_FUNC(tanh,2,_SC(".n")),
 	_DECL_FUNC(atanh,2,_SC(".n")),
 
-	{NULL,(SQFUNCTION)0,0,NULL}
+	{NULL,(SQFUNCTION)0,0,NULL,false}
 };
 #undef _DECL_FUNC
 

+ 13 - 13
SquiLu/sqstdlib/sqstdstream.cpp

@@ -21,7 +21,7 @@ static const SQChar SQSTD_STREAM_TYPE_TAG[] = _SC("std_stream");
 	if(!self || !self->IsValid())  \
 		return sq_throwerror(v,_SC("the stream is invalid"));
 
-SQInteger _stream_read_line(HSQUIRRELVM v) {
+static SQInteger _stream_read_line(HSQUIRRELVM v) {
 	SETUP_STREAM(v);
     const SQChar nl = _SC('\n');
     const SQChar rc = _SC('\r');
@@ -67,7 +67,7 @@ SQInteger _stream_read_line(HSQUIRRELVM v) {
     return 1;
 }
 
-SQInteger _stream_read_all(HSQUIRRELVM v) {
+static SQInteger _stream_read_all(HSQUIRRELVM v) {
 	SETUP_STREAM(v);
     SQInteger size = 4096, read_size;
     SQBlob line_buf(0, size);
@@ -201,15 +201,15 @@ SQInteger _stream_readn(HSQUIRRELVM v)
 	return 1;
 }
 
-SQInteger _stream_write_str(HSQUIRRELVM v)
+static SQInteger _stream_write_str(HSQUIRRELVM v)
 {
     SQ_FUNC_VARS(v);
-	SETUP_STREAM(v);
+    SETUP_STREAM(v);
     SQ_GET_STRING(v, 2, str);
     SQ_OPT_INTEGER(v, 3, start, 0);
-    if(start < 0 || start > str_size) return sq_throwerror(v, _SC("start position out of range (%d)"), start);
+    if(start < 0 || start > str_size) return sq_throwerror(v, _SC("start position out of range (" _PRINT_INT_FMT ")"), start);
     SQ_OPT_INTEGER(v, 4, len, str_size - start);
-    if(len < 0 || len > (str_size-start)) return sq_throwerror(v, _SC("len value out of range (%d)"), len);
+    if(len < 0 || len > (str_size-start)) return sq_throwerror(v, _SC("len value out of range (" _PRINT_INT_FMT ")"), len);
 
     if(self->Write(((const SQChar*)str)+start, len) != len)
             return sq_throwerror(v,_SC("io error"));
@@ -217,7 +217,7 @@ SQInteger _stream_write_str(HSQUIRRELVM v)
 	return 1;
 }
 
-SQInteger _stream_write(HSQUIRRELVM v)
+static SQInteger _stream_write(HSQUIRRELVM v)
 {
 	const SQChar *str;
 	SQInteger total_size, size;
@@ -237,7 +237,7 @@ SQInteger _stream_write(HSQUIRRELVM v)
 	return 1;
 }
 
-SQInteger _stream_write_non_null(HSQUIRRELVM v)
+static SQInteger _stream_write_non_null(HSQUIRRELVM v)
 {
     if(sq_gettype(v, 2) != OT_NULL)
     {
@@ -246,7 +246,7 @@ SQInteger _stream_write_non_null(HSQUIRRELVM v)
 	return 0;
 }
 
-SQInteger _stream_write_fmt(HSQUIRRELVM v)
+static SQInteger _stream_write_fmt(HSQUIRRELVM v)
 {
 	const SQChar *str;
 	SQInteger size;
@@ -398,12 +398,12 @@ SQInteger _stream_eos(HSQUIRRELVM v)
 	return 1;
 }
 
- SQInteger _stream__cloned(HSQUIRRELVM v)
+ static SQInteger _stream__cloned(HSQUIRRELVM v)
  {
 	 return sq_throwerror(v,_SC("this object cannot be cloned"));
  }
 
-#define _DECL_STREAM_FUNC2(name,name2, nparams,typecheck) {_SC(#name2),_stream_##name,nparams,typecheck}
+#define _DECL_STREAM_FUNC2(name,name2, nparams,typecheck) {_SC(#name2),_stream_##name,nparams,typecheck,false}
 
 static SQRegFunction _stream_methods[] = {
 	_DECL_STREAM_FUNC(read_line,-1,_SC("xi")),
@@ -425,10 +425,10 @@ static SQRegFunction _stream_methods[] = {
 	_DECL_STREAM_FUNC(eos,1,_SC("x")),
 	_DECL_STREAM_FUNC(flush,1,_SC("x")),
 	_DECL_STREAM_FUNC(_cloned,0,NULL),
-	{NULL,(SQFUNCTION)0,0,NULL}
+	{NULL,(SQFUNCTION)0,0,NULL,false}
 };
 
-void init_streamclass(HSQUIRRELVM v)
+static void init_streamclass(HSQUIRRELVM v)
 {
 	sq_pushregistrytable(v);
 	sq_pushstring(v,SQSTD_STREAM_TYPE_TAG,-1);

+ 1 - 1
SquiLu/sqstdlib/sqstdstream.h

@@ -18,6 +18,6 @@ SQInteger _stream_len(HSQUIRRELVM v);
 SQInteger _stream_eos(HSQUIRRELVM v);
 SQInteger _stream_flush(HSQUIRRELVM v);
 
-#define _DECL_STREAM_FUNC(name,nparams,typecheck) {_SC(#name),_stream_##name,nparams,typecheck}
+#define _DECL_STREAM_FUNC(name,nparams,typecheck) {_SC(#name),_stream_##name,nparams,typecheck,false}
 SQRESULT declare_stream(HSQUIRRELVM v,const SQChar* name,SQUserPointer typetag,const SQChar* reg_name,const SQRegFunction *methods,const SQRegFunction *globals);
 #endif /*_SQSTD_STREAM_H_*/

+ 6 - 6
SquiLu/sqstdlib/sqstdstring.cpp

@@ -504,7 +504,7 @@ static SQRESULT _regexp_gsub(HSQUIRRELVM v)
                             }
                             else
                             {
-                                return sq_throwerror(v, _SC("there is no match for replacement $%d"), idx);
+                                return sq_throwerror(v, _SC("there is no match for replacement $%d"), (int)idx);
                             }
                             continue;
                         }
@@ -638,7 +638,7 @@ static SQRESULT _regexp_constructor(HSQUIRRELVM v)
 	const SQChar *error,*pattern;
 	sq_getstring(v,2,&pattern);
 	SQRex *rex = sqstd_rex_compile(pattern,&error);
-	if(!rex) return sq_throwerror(v,error);
+	if(!rex) return sq_throwerror(v,_SC("%s"),error);
 	sq_setinstanceup(v,1,rex);
 	sq_setreleasehook(v,1,_rexobj_releasehook);
 	return 0;
@@ -650,7 +650,7 @@ static SQRESULT _regexp__typeof(HSQUIRRELVM v)
 	return 1;
 }
 
-#define _DECL_REX_FUNC(name,nparams,pmask) {_SC(#name),_regexp_##name,nparams,pmask}
+#define _DECL_REX_FUNC(name,nparams,pmask) {_SC(#name),_regexp_##name,nparams,pmask,false}
 static SQRegFunction rexobj_funcs[]={
 	_DECL_REX_FUNC(constructor,2,_SC(".s")),
 	_DECL_REX_FUNC(search,-2,_SC("xsn")),
@@ -662,16 +662,16 @@ static SQRegFunction rexobj_funcs[]={
 	_DECL_REX_FUNC(getxcapture,4,_SC("xsna")),
 	_DECL_REX_FUNC(subexpcount,1,_SC("x")),
 	_DECL_REX_FUNC(_typeof,1,_SC("x")),
-	{NULL,(SQFUNCTION)0,0,NULL}
+	{NULL,(SQFUNCTION)0,0,NULL,false}
 };
 #undef _DECL_REX_FUNC
 
-#define _DECL_FUNC(name,nparams,pmask) {_SC(#name),_string_##name,nparams,pmask}
+#define _DECL_FUNC(name,nparams,pmask) {_SC(#name),_string_##name,nparams,pmask,false}
 static SQRegFunction stringlib_funcs[]={
 	_DECL_FUNC(printf,-2,_SC(".s")),
 	_DECL_FUNC(format,-2,_SC(".s")),
     _DECL_FUNC(escape,2,_SC(".s")),
-	{NULL,(SQFUNCTION)0,0,NULL}
+	{NULL,(SQFUNCTION)0,0,NULL,false}
 };
 #undef _DECL_FUNC
 

+ 5 - 5
SquiLu/sqstdlib/sqstdsystem.cpp

@@ -367,7 +367,7 @@ static int sqftime(struct timeb *tp)
 #endif
 
 
-int GetMilliCount()
+static int GetMilliCount()
 {
   // Something like GetTickCount but portable
   // It rolls over every ~ 12.1 days (0x100000/24/60/60)
@@ -382,7 +382,7 @@ int GetMilliCount()
   return nCount;
 }
 
-int GetMilliSpan( int nTimeStart )
+static int GetMilliSpan( int nTimeStart )
 {
   int nSpan = GetMilliCount() - nTimeStart;
   if ( nSpan < 0 )
@@ -564,7 +564,7 @@ static SQRESULT _system_signal_int2str (HSQUIRRELVM v) {
         sq_pushstring(v, signame, -1);
         return 1;
     }
-    return sq_throwerror(v, _SC("invalid signal (%d)"), sig);
+    return sq_throwerror(v, _SC("invalid signal (%d)"), (int)sig);
 }
 
 static int _get_signal(HSQUIRRELVM v)
@@ -614,7 +614,7 @@ static SQRESULT _system_raise(HSQUIRRELVM v)
 }
 #endif
 
-#define _DECL_FUNC(name,nparams,pmask) {_SC(#name),_system_##name,nparams,pmask}
+#define _DECL_FUNC(name,nparams,pmask) {_SC(#name),_system_##name,nparams,pmask,false}
 static SQRegFunction systemlib_funcs[]={
 	_DECL_FUNC(getenv,2,_SC(".s")),
 	_DECL_FUNC(system,2,_SC(".s")),
@@ -643,7 +643,7 @@ static SQRegFunction systemlib_funcs[]={
 	_DECL_FUNC(signal_str2int,2,_SC(".s")),
 	_DECL_FUNC(signal_int2str,2,_SC(".i")),
 #endif
-	{NULL,(SQFUNCTION)0,0,NULL}
+	{NULL,(SQFUNCTION)0,0,NULL,false}
 };
 #undef _DECL_FUNC
 

File diff suppressed because it is too large
+ 645 - 61
SquiLu/squilu.cbp


+ 25 - 2
SquiLu/squirrel/Makefile

@@ -45,13 +45,36 @@ sq32:
 	ar rc $(OUT) *.o
 	rm *.o
 
+sq32i64:
+	$(CC) -g -D_SQ64 -O2 -fno-exceptions -fno-rtti -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
+	ar rc $(OUT) *.o
+	rm *.o
+
+sq32dbg:
+	$(CC) -g -m32 -fno-exceptions -fno-rtti -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
+	ar rc $(OUT) *.o
+	rm *.o
+
 sqprof:
-	$(CC) -O2 -pg -fno-exceptions -fno-rtti -pie -gstabs -g3 -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
+	#$(CC) -O2 -pg -fno-exceptions -fno-rtti -pie -gstabs -g3 -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
+	$(CC) -O2 -pg -g -fno-exceptions -fno-rtti -gstabs -g3 -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
 	ar rc $(OUT) *.o
 	rm *.o
 
 sq64:
-	$(CC) -O2 -m64 -D_SQ64 -fno-exceptions -fno-rtti -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
+	$(CC) -O3 -m64 -D_SQ64 -fno-exceptions -fno-rtti -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
+#	$(CC) -g -m64 -D_SQ64 -fno-exceptions -fno-rtti -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
+	ar rc $(OUT) *.o
+	rm *.o
+
+sq64p:
+	$(CC) -fpack-struct -DSQ_PACKED_STRUCT -march=native -O3 -m64 -D_SQ64 -fno-exceptions -fno-rtti -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
 #	$(CC) -g -m64 -D_SQ64 -fno-exceptions -fno-rtti -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
 	ar rc $(OUT) *.o
 	rm *.o
+
+sq64dbg:
+	$(CC) -g -fno-exceptions -fno-rtti -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
+	ar rc $(OUT) *.o
+	rm *.o
+

+ 2 - 1
SquiLu/squirrel/sq_lexer.cpp

@@ -260,7 +260,8 @@ static SQRESULT sq_SQLexer_readcount(HSQUIRRELVM v){
     sq_pushinteger(v, self->lex->data->readcount);
 	return 1;
 }
-#define _DECL_SQLEXER_FUNC(name,nparams,pmask) {_SC(#name),sq_SQLexer_##name,nparams,pmask}
+
+#define _DECL_SQLEXER_FUNC(name,nparams,pmask) {_SC(#name),sq_SQLexer_##name,nparams,pmask,false}
 static SQRegFunction SQLexer_obj_funcs[]={
 
 	_DECL_SQLEXER_FUNC(constructor, -2, _SC(".sbt")),

+ 13 - 15
SquiLu/squirrel/sqapi.cpp

@@ -14,14 +14,14 @@
 #include "sqclass.h"
 #include <stdarg.h>
 
-void sq_raise_type_error(HSQUIRRELVM v, SQObjectType type,SQObjectPtr &o)
+static void sq_raise_type_error(HSQUIRRELVM v, SQObjectType type,SQObjectPtr &o)
 {
     SQObjectPtr oval = v->PrintObjVal(o);
     v->Raise_Error(_SC("wrong argument type, expected '%s' got '%.50s'"),IdType2Name(type),_stringval(oval));
 }
 #define _CHECK_OBJ_TYPE(v,otype,o) if(sq_type(o) != otype) {sq_raise_type_error(v, otype, o); return SQ_ERROR;}
 
-bool sq_aux_gettypedarg(HSQUIRRELVM v,SQInteger idx,SQObjectType type,SQObjectPtr **o)
+static bool sq_aux_gettypedarg(HSQUIRRELVM v,SQInteger idx,SQObjectType type,SQObjectPtr **o)
 {
 	*o = &stack_get(v,idx);
 	if(sq_type(**o) != type){
@@ -40,7 +40,7 @@ bool sq_aux_gettypedarg(HSQUIRRELVM v,SQInteger idx,SQObjectType type,SQObjectPt
 }
 
 
-SQInteger sq_aux_invalidtype(HSQUIRRELVM v,SQObjectType type)
+static SQInteger sq_aux_invalidtype(HSQUIRRELVM v,SQObjectType type)
 {
 	return sq_throwerror(v, _SC("unexpected type %s"), IdType2Name(type));
 }
@@ -56,11 +56,9 @@ HSQUIRRELVM sq_open(SQInteger initialstacksize)
 	ss->_root_vm = v;
 	if(v->Init(NULL, initialstacksize)) {
 		return v;
-	} else {
-		sq_delete(v, SQVM);
-		return NULL;
 	}
-	return v;
+	sq_delete(v, SQVM);
+	return NULL;
 }
 
 HSQUIRRELVM sq_newthread(HSQUIRRELVM friendvm, SQInteger initialstacksize)
@@ -770,8 +768,8 @@ SQRESULT sq_delete_on_registry_table(HSQUIRRELVM v, SQUserPointer uptr)
 }
 
 SQRESULT sq_preload_modules(HSQUIRRELVM v, const sq_modules_preload_st *modules){
-    int result = 0;
-    int saved_top = sq_gettop(v);
+    SQRESULT result = 0;
+    SQInteger saved_top = sq_gettop(v);
     sq_pushliteral(v, SQ_EXTENSIONS_KEY);
     if(sq_getonregistrytable(v) != SQ_OK){
         //create a table for Extensions
@@ -797,7 +795,7 @@ SQRESULT sq_preload_modules(HSQUIRRELVM v, const sq_modules_preload_st *modules)
 SQFUNCTION sq_get_preload_module_func(HSQUIRRELVM v, const SQChar *module_name)
 {
     SQFUNCTION result = NULL;
-    int saved_top = sq_gettop(v);
+    SQInteger saved_top = sq_gettop(v);
     sq_pushliteral(v, SQ_EXTENSIONS_KEY);
     if(sq_getonregistrytable(v) == SQ_OK){
       sq_pushstring(v, module_name, -1);
@@ -1677,9 +1675,9 @@ SQRELEASEHOOK sq_getreleasehook(HSQUIRRELVM v,SQInteger idx)
     if(sq_gettop(v) >= 1){
         SQObjectPtr &ud=stack_get(v,idx);
         switch( sq_type(ud) ) {
-        case OT_USERDATA:   return _userdata(ud)->_hook;    break;
-        case OT_INSTANCE:   return _instance(ud)->_hook;    break;
-        case OT_CLASS:      return _class(ud)->_hook;       break;
+        case OT_USERDATA:   return _userdata(ud)->_hook;
+        case OT_INSTANCE:   return _instance(ud)->_hook;
+        case OT_CLASS:      return _class(ud)->_hook;
         default: break; //shutup compiler
         }
     }
@@ -2085,7 +2083,7 @@ SQRESULT sq_optinteger(HSQUIRRELVM sqvm, SQInteger idx, SQInteger *value, SQInte
     return SQ_OK;
 }
 
-SQRESULT sq_optstr_and_size(HSQUIRRELVM sqvm, SQInteger idx, const SQChar **value, const SQChar *dflt, SQInteger *size){
+static SQRESULT sq_optstr_and_size(HSQUIRRELVM sqvm, SQInteger idx, const SQChar **value, const SQChar *dflt, SQInteger *size){
     if(sq_gettop(sqvm) >= idx){
         return sq_getstr_and_size(sqvm, idx, value, size);
     }
@@ -2249,5 +2247,5 @@ SQRESULT sq_checkoption (HSQUIRRELVM v, SQInteger narg, const SQChar *def,
   for (i=0; lst[i]; i++)
     if (scstrcmp(lst[i], name) == 0)
       return i;
-  return sq_throwerror(v, _SC("invalid option [%d] [%s]"), narg-1, name);
+  return sq_throwerror(v, _SC("invalid option [%d] [%s]"), (int)narg-1, name);
 }

+ 254 - 252
SquiLu/squirrel/sqbaselib.cpp

@@ -15,7 +15,7 @@
 
 SQ_OPT_STRING_STRLEN();
 
-bool str2num(const SQChar *s,SQObjectPtr &res, SQInteger base=10)
+static bool str2num(const SQChar *s,SQObjectPtr &res, SQInteger base=10)
 {
 	SQChar *end;
 	const SQChar *e = s;
@@ -235,7 +235,7 @@ static SQRESULT base_assert(HSQUIRRELVM v)
         if (top>2 && SQ_SUCCEEDED(sq_tostring(v,3))) {
             const SQChar *str = 0;
             if (SQ_SUCCEEDED(sq_getstring(v,-1,&str))) {
-                return sq_throwerror(v, str);
+                return sq_throwerror(v,_SC("%s"), str);
             }
         }
         return sq_throwerror(v, _SC("assertion failed"));
@@ -440,7 +440,7 @@ static SQRESULT base_str_from_chars (HSQUIRRELVM v) {
   for (i=2; i<=n; ++i) {
     SQ_GET_INTEGER(v, i, c);
     if(SQUChar(c) != c){
-        return sq_throwerror(v, _SC("invalid value for parameter %d"), i);
+        return sq_throwerror(v, _SC("invalid value for parameter %d"), (int)i);
     }
     data[i-2] = SQUChar(c);
   }
@@ -591,70 +591,70 @@ static SQRESULT bf_table_create(HSQUIRRELVM v)
 
 static SQRegFunction base_funcs[]={
 	//generic
-	{_SC("setatexithandler"),base_setatexithandler,2, _SC(".c")},
-	{_SC("getatexithandler"),base_getatexithandler,1, NULL},
-	{_SC("seterrorhandler"),base_seterrorhandler,2, _SC(".c")},
-	{_SC("geterrorhandler"),base_geterrorhandler,1, NULL},
-	{_SC("setdebughook"),base_setdebughook,2, NULL},
-	{_SC("enabledebuginfo"),base_enabledebuginfo,2, NULL},
-	{_SC("getstackinfos"),base_getstackinfos,2, _SC(".n")},
-	{_SC("getstacktop"),base_getstacktop,1, _SC(".")},
-	{_SC("gettypetag"),base_gettypetag,2, _SC("..")},
-	{_SC("getdefaultdelegate"),base_getdefaultdelegate,2, _SC("..")},
-	{_SC("getroottable"),base_getroottable,1, NULL},
-	{_SC("setroottable"),base_setroottable,2, NULL},
-	{_SC("getconsttable"),base_getconsttable,1, NULL},
-	{_SC("setconsttable"),base_setconsttable,2, NULL},
-	{_SC("assert"),base_assert,-2, ".bs"},
-	{_SC("print1"),base_print1,2, NULL},
-	{_SC("print"),base_print,-2, NULL},
-	{_SC("error"),base_error,2, NULL},
-	{_SC("get_last_error"),base_get_last_error,1, NULL},
-	{_SC("get_last_stackinfo"),base_get_last_stackinfo,1, NULL},
-	{_SC("compilestring"),base_compilestring,-2, _SC(".ssb")},
-	{_SC("newthread"),base_newthread,2, _SC(".c")},
-	{_SC("suspend"),base_suspend,-1, NULL},
-	{_SC("array"),base_array,-2, _SC(".n.")},
-	{_SC("array_float64"),base_array_float64,-2, _SC(".nf")},
-	{_SC("array_float32"),base_array_float32,-2, _SC(".nf")},
-	{_SC("array_int64"),base_array_int64,-2, _SC(".ni")},
-	{_SC("array_int32"),base_array_int32,-2, _SC(".ni")},
-	{_SC("array_int16"),base_array_int16,-2, _SC(".ni")},
-	{_SC("array_int8"),base_array_int8,-2, _SC(".ni")},
-	{_SC("type"),base_type,2, NULL},
-	{_SC("callee"),base_callee,0,NULL},
-	{_SC("dummy"),base_dummy,0,NULL},
+	{_SC("setatexithandler"),base_setatexithandler,2, _SC(".c"), false},
+	{_SC("getatexithandler"),base_getatexithandler,1, NULL, false},
+	{_SC("seterrorhandler"),base_seterrorhandler,2, _SC(".c"), false},
+	{_SC("geterrorhandler"),base_geterrorhandler,1, NULL, false},
+	{_SC("setdebughook"),base_setdebughook,2, NULL, false},
+	{_SC("enabledebuginfo"),base_enabledebuginfo,2, NULL, false},
+	{_SC("getstackinfos"),base_getstackinfos,2, _SC(".n"), false},
+	{_SC("getstacktop"),base_getstacktop,1, _SC("."), false},
+	{_SC("gettypetag"),base_gettypetag,2, _SC(".."), false},
+	{_SC("getdefaultdelegate"),base_getdefaultdelegate,2, _SC(".."), false},
+	{_SC("getroottable"),base_getroottable,1, NULL, false},
+	{_SC("setroottable"),base_setroottable,2, NULL, false},
+	{_SC("getconsttable"),base_getconsttable,1, NULL, false},
+	{_SC("setconsttable"),base_setconsttable,2, NULL, false},
+	{_SC("assert"),base_assert,-2, ".bs", false},
+	{_SC("print1"),base_print1,2, NULL, false},
+	{_SC("print"),base_print,-2, NULL, false},
+	{_SC("error"),base_error,2, NULL, false},
+	{_SC("get_last_error"),base_get_last_error,1, NULL, false},
+	{_SC("get_last_stackinfo"),base_get_last_stackinfo,1, NULL, false},
+	{_SC("compilestring"),base_compilestring,-2, _SC(".ssb"), false},
+	{_SC("newthread"),base_newthread,2, _SC(".c"), false},
+	{_SC("suspend"),base_suspend,-1, NULL, false},
+	{_SC("array"),base_array,-2, _SC(".n."), false},
+	{_SC("array_float64"),base_array_float64,-2, _SC(".nf"), false},
+	{_SC("array_float32"),base_array_float32,-2, _SC(".nf"), false},
+	{_SC("array_int64"),base_array_int64,-2, _SC(".ni"), false},
+	{_SC("array_int32"),base_array_int32,-2, _SC(".ni"), false},
+	{_SC("array_int16"),base_array_int16,-2, _SC(".ni"), false},
+	{_SC("array_int8"),base_array_int8,-2, _SC(".ni"), false},
+	{_SC("type"),base_type,2, NULL, false},
+	{_SC("callee"),base_callee,0,NULL, false},
+	{_SC("dummy"),base_dummy,0,NULL, false},
 #ifndef NO_GARBAGE_COLLECTOR
-	{_SC("collectgarbage"),base_collectgarbage,0, NULL},
-	{_SC("resurrectunreachable"),base_resurectureachable,0, NULL},
-	{_SC("getrefcount"),base_getrefcount,2, _SC("..")},
+	{_SC("collectgarbage"),base_collectgarbage,0, NULL, false},
+	{_SC("resurrectunreachable"),base_resurectureachable,0, NULL, false},
+	{_SC("getrefcount"),base_getrefcount,2, _SC(".."), false},
 #ifdef SQ_WITH_DELAYED_RELEASE_HOOKS
-	{_SC("check_delayed_release_hooks"),base_check_delayed_release_hooks,-1, _SC(".b")},
-	{_SC("call_delayed_release_hooks"),base_call_delayed_release_hooks,1, NULL},
+	{_SC("check_delayed_release_hooks"),base_check_delayed_release_hooks,-1, _SC(".b"), false},
+	{_SC("call_delayed_release_hooks"),base_call_delayed_release_hooks,1, NULL, false},
 #endif // SQ_WITH_DELAYED_RELEASE_HOOKS
 #endif
-	{_SC("str_from_chars"),base_str_from_chars,-1, _SC(".i")},
-	{_SC("try_tostring"),base_try_tostring,-2, _SC("..s")},
-	{_SC("getincludepath"),base_getincludepath,1, _SC(".")},
-	{_SC("table_create"),bf_table_create,-1, _SC(".i")},
-	{_SC("table_new"),bf_table_create,-1, _SC(".i")},
-	{_SC("table_len"),bf_table_len,2, _SC(".t")},
-	{_SC("table_size"),bf_table_len,2, _SC(".t")},
-	{_SC("table_get"),bf_table_get,-3, _SC(".t.")},
-	{_SC("table_rawget"),bf_table_rawget,-3, _SC(".t.")},
-	{_SC("table_set"),bf_table_set,4, _SC(".t..")},
-	{_SC("table_rawset"),bf_table_rawset,4, _SC(".t..")},
-	{_SC("table_rawdelete"),bf_table_rawdelete,3, _SC(".t.")},
-	{_SC("table_rawin"),bf_table_rawexists,3, _SC(".t.")},
-	{_SC("table_weakref"),bf_table_weakref,2, _SC(".t")},
-	{_SC("table_tostring"),bf_table_tostring,2, _SC(".t")},
-	{_SC("table_clear"),bf_table_clear,2, _SC(".t")},
-	{_SC("table_setdelegate"),bf_table_setdelegate,3, _SC(".t t|o")},
-	{_SC("table_getdelegate"),bf_table_getdelegate,2, _SC(".t")},
-	{_SC("table_getdelegate_squirrel"),bf_table_getdelegate_squirrel,1, _SC(".")},
-	{_SC("table_incnum"),bf_table_incnum,-4, _SC(".tsnb")},
-	{_SC("obj_clone"),bf_obj_clone,2, _SC(". t|a|x|i|f|s")},
-	{NULL,(SQFUNCTION)0,0,NULL}
+	{_SC("str_from_chars"),base_str_from_chars,-1, _SC(".i"), false},
+	{_SC("try_tostring"),base_try_tostring,-2, _SC("..s"), false},
+	{_SC("getincludepath"),base_getincludepath,1, _SC("."), false},
+	{_SC("table_create"),bf_table_create,-1, _SC(".i"), false},
+	{_SC("table_new"),bf_table_create,-1, _SC(".i"), false},
+	{_SC("table_len"),bf_table_len,2, _SC(".t"), false},
+	{_SC("table_size"),bf_table_len,2, _SC(".t"), false},
+	{_SC("table_get"),bf_table_get,-3, _SC(".t."), false},
+	{_SC("table_rawget"),bf_table_rawget,-3, _SC(".t."), false},
+	{_SC("table_set"),bf_table_set,4, _SC(".t.."), false},
+	{_SC("table_rawset"),bf_table_rawset,4, _SC(".t.."), false},
+	{_SC("table_rawdelete"),bf_table_rawdelete,3, _SC(".t."), false},
+	{_SC("table_rawin"),bf_table_rawexists,3, _SC(".t."), false},
+	{_SC("table_weakref"),bf_table_weakref,2, _SC(".t"), false},
+	{_SC("table_tostring"),bf_table_tostring,2, _SC(".t"), false},
+	{_SC("table_clear"),bf_table_clear,2, _SC(".t"), false},
+	{_SC("table_setdelegate"),bf_table_setdelegate,3, _SC(".t t|o"), false},
+	{_SC("table_getdelegate"),bf_table_getdelegate,2, _SC(".t"), false},
+	{_SC("table_getdelegate_squirrel"),bf_table_getdelegate_squirrel,1, _SC("."), false},
+	{_SC("table_incnum"),bf_table_incnum,-4, _SC(".tsnb"), false},
+	{_SC("obj_clone"),bf_obj_clone,2, _SC(". t|a|x|i|f|s"), false},
+	{NULL,(SQFUNCTION)0,0,NULL, false}
 };
 
 void sq_base_register(HSQUIRRELVM v)
@@ -708,7 +708,6 @@ static SQRESULT default_delegate_tofloat(HSQUIRRELVM v)
 			break;
 		}}
 		return sq_throwerror(v, _SC("cannot convert the string"));
-		break;
 	case OT_INTEGER:case OT_FLOAT:
 		v->Push(SQObjectPtr(tofloat(o)));
 		break;
@@ -731,7 +730,7 @@ static SQRESULT default_delegate_tointeger(HSQUIRRELVM v)
 		SQInteger base;
 		if(sq_gettop(v) > 1){
 		    if(sq_getinteger(v, 2, &base) < 0) return sq_throwerror(v, _SC("parameter integer expected (2-36)"));
-		    if(base < 2 || base > 36) return sq_throwerror(v, _SC("invalid base \"%d\" to tointeger (2-36)"), base);
+		    if(base < 2 || base > 36) return sq_throwerror(v, _SC("invalid base \"%d\" to tointeger (2-36)"), (int)base);
 		}
 		else base = 10;
 		if(str2num(_stringval(o),res, base)){
@@ -739,7 +738,6 @@ static SQRESULT default_delegate_tointeger(HSQUIRRELVM v)
 			break;
 		}}
 		return sq_throwerror(v, _SC("cannot convert the string"));
-		break;
 	case OT_INTEGER:case OT_FLOAT:
 		v->Push(SQObjectPtr(tointeger(o)));
 		break;
@@ -824,7 +822,7 @@ static SQRESULT container_rawget(HSQUIRRELVM v)
 static SQRESULT container_get(HSQUIRRELVM v)
 {
     switch(sq_gettop(v)){
-        case 2: return SQ_SUCCEEDED(sq_get(v,-2))?1:SQ_ERROR;break;
+        case 2: return SQ_SUCCEEDED(sq_get(v,-2))?1:SQ_ERROR;
         case 3: {
             sq_push(v, 2); //copy key to top
             sq_get(v,-4); //if it fail pop the key and default value is on top
@@ -849,23 +847,23 @@ static SQRESULT table_getdelegate(HSQUIRRELVM v)
 }
 
 SQRegFunction SQSharedState::_table_default_delegate_squirrel_funcz[]={
-	{_SC("len"),default_delegate_len,1, _SC("t")},
-	{_SC("size"),default_delegate_len,1, _SC("t")},
-	{_SC("get"),container_get,-2, _SC("t")},
-	{_SC("rawget"),container_rawget,-2, _SC("t")},
-	{_SC("rawset"),container_rawset,3, _SC("t")},
-	{_SC("rawdelete"),table_rawdelete,2, _SC("t")},
-	{_SC("rawin"),container_rawexists,2, _SC("t")},
-	{_SC("weakref"),obj_delegate_weakref,1, NULL },
-	{_SC("tostring"),default_delegate_tostring,1, _SC(".")},
-	{_SC("clear"),obj_clear,1, _SC(".")},
-	{_SC("setdelegate"),table_setdelegate,2, _SC(".t|o")},
-	{_SC("getdelegate"),table_getdelegate,1, _SC(".")},
-	{NULL,(SQFUNCTION)0,0,NULL}
+	{_SC("len"),default_delegate_len,1, _SC("t"), false},
+	{_SC("size"),default_delegate_len,1, _SC("t"), false},
+	{_SC("get"),container_get,-2, _SC("t"), false},
+	{_SC("rawget"),container_rawget,-2, _SC("t"), false},
+	{_SC("rawset"),container_rawset,3, _SC("t"), false},
+	{_SC("rawdelete"),table_rawdelete,2, _SC("t"), false},
+	{_SC("rawin"),container_rawexists,2, _SC("t"), false},
+	{_SC("weakref"),obj_delegate_weakref,1, NULL, false},
+	{_SC("tostring"),default_delegate_tostring,1, _SC("."), false},
+	{_SC("clear"),obj_clear,1, _SC("."), false},
+	{_SC("setdelegate"),table_setdelegate,2, _SC(".t|o"), false},
+	{_SC("getdelegate"),table_getdelegate,1, _SC("."), false},
+	{NULL,(SQFUNCTION)0,0,NULL, false}
 };
 
 SQRegFunction SQSharedState::_table_default_delegate_funcz[]={
-	{NULL,(SQFUNCTION)0,0,NULL}
+	{NULL,(SQFUNCTION)0,0,NULL, false}
 };
 
 //ARRAY DEFAULT DELEGATE///////////////////////////////////////
@@ -1392,42 +1390,42 @@ static SQRESULT array_sizeofelm(HSQUIRRELVM v)
 //DAD end
 
 SQRegFunction SQSharedState::_array_default_delegate_funcz[]={
-	{_SC("len"),default_delegate_len,1, _SC("a")},
-	{_SC("size"),default_delegate_len,1, _SC("a")},
-	{_SC("append"),array_append,2, _SC("a")},
-	{_SC("push"),array_append,2, _SC("a")},
-	{_SC("push_back"),array_append,2, _SC("a")},
-	{_SC("extend"),array_extend,2, _SC("aa")},
-	{_SC("pop"),array_pop,1, _SC("a")},
-	{_SC("top"),array_top,1, _SC("a")},
-	{_SC("insert"),array_insert,3, _SC("an")},
-	{_SC("remove"),array_remove,2, _SC("an")},
-	{_SC("resize"),array_resize,-2, _SC("an")},
-	{_SC("minsize"),array_minsize,-2, _SC("an")},
-	{_SC("reserve"),array_reserve,-2, _SC("an")},
-	{_SC("capacity"),array_capacity,1, _SC("a")},
-	{_SC("reverse"),array_reverse,1, _SC("a")},
-	{_SC("sort"),array_sort,-1, _SC("a c|o a")},
-	{_SC("slice"),array_slice,-1, _SC("ann")},
-	{_SC("weakref"),obj_delegate_weakref,1, NULL },
-	{_SC("tostring"),default_delegate_tostring,1, _SC(".")},
-	{_SC("clear"),obj_clear,1, _SC(".")},
-	{_SC("map"),array_map,2, _SC("ac")},
-	{_SC("apply"),array_apply,2, _SC("ac")},
-	{_SC("reduce"),array_reduce,2, _SC("ac")},
-	{_SC("filter"),array_filter,2, _SC("ac")},
-	{_SC("find"),array_find,2, _SC("a.")},
-	{_SC("indexOf"),array_find,2, _SC("a.")},
-	{_SC("bsearch"),array_bsearch,2, _SC("a.")},
-	{_SC("concat"),array_concat,-1, _SC("as")},
-	{_SC("join"),array_concat,-1, _SC("as")},
-	{_SC("concat2"),array_concat2,-1, _SC("as")},
-	{_SC("getdelegate"),array_getdelegate,1, _SC(".")},
-	{_SC("get"),container_rawget, -2, _SC("ai.")},
-	{_SC("set"),array_set, 3, _SC("ai.")},
-	{_SC("isempty"),array_empty, 1, _SC("a")},
-	{_SC("sizeofelm"),array_sizeofelm, 1, _SC("a")},
-	{NULL,(SQFUNCTION)0,0,NULL}
+	{_SC("len"),default_delegate_len,1, _SC("a"), false},
+	{_SC("size"),default_delegate_len,1, _SC("a"), false},
+	{_SC("append"),array_append,2, _SC("a"), false},
+	{_SC("push"),array_append,2, _SC("a"), false},
+	{_SC("push_back"),array_append,2, _SC("a"), false},
+	{_SC("extend"),array_extend,2, _SC("aa"), false},
+	{_SC("pop"),array_pop,1, _SC("a"), false},
+	{_SC("top"),array_top,1, _SC("a"), false},
+	{_SC("insert"),array_insert,3, _SC("an"), false},
+	{_SC("remove"),array_remove,2, _SC("an"), false},
+	{_SC("resize"),array_resize,-2, _SC("an"), false},
+	{_SC("minsize"),array_minsize,-2, _SC("an"), false},
+	{_SC("reserve"),array_reserve,-2, _SC("an"), false},
+	{_SC("capacity"),array_capacity,1, _SC("a"), false},
+	{_SC("reverse"),array_reverse,1, _SC("a"), false},
+	{_SC("sort"),array_sort,-1, _SC("a c|o a"), false},
+	{_SC("slice"),array_slice,-1, _SC("ann"), false},
+	{_SC("weakref"),obj_delegate_weakref,1, NULL, false},
+	{_SC("tostring"),default_delegate_tostring,1, _SC("."), false},
+	{_SC("clear"),obj_clear,1, _SC("."), false},
+	{_SC("map"),array_map,2, _SC("ac"), false},
+	{_SC("apply"),array_apply,2, _SC("ac"), false},
+	{_SC("reduce"),array_reduce,2, _SC("ac"), false},
+	{_SC("filter"),array_filter,2, _SC("ac"), false},
+	{_SC("find"),array_find,2, _SC("a."), false},
+	{_SC("indexOf"),array_find,2, _SC("a."), false},
+	{_SC("bsearch"),array_bsearch,2, _SC("a."), false},
+	{_SC("concat"),array_concat,-1, _SC("as"), false},
+	{_SC("join"),array_concat,-1, _SC("as"), false},
+	{_SC("concat2"),array_concat2,-1, _SC("as"), false},
+	{_SC("getdelegate"),array_getdelegate,1, _SC("."), false},
+	{_SC("get"),container_rawget, -2, _SC("ai."), false},
+	{_SC("set"),array_set, 3, _SC("ai."), false},
+	{_SC("isempty"),array_empty, 1, _SC("a"), false},
+	{_SC("sizeofelm"),array_sizeofelm, 1, _SC("a"), false},
+	{NULL,(SQFUNCTION)0,0,NULL, false}
 };
 
 //STRING DEFAULT DELEGATE//////////////////////////
@@ -1459,7 +1457,7 @@ static SQRESULT string_substr(HSQUIRRELVM v)
 	SQObjectPtr &o = stack_get(v,1);
     SQInteger str_size = sq_getsize(v, 1);
     SQ_OPT_INTEGER(v, 3, len, str_size - start);
-	if(start < 0)	return sq_throwerror(v,_SC("invalid start index %d"), start);
+	if(start < 0)	return sq_throwerror(v,_SC("invalid start index " _PRINT_INT_FMT), start);
 	if(len > (str_size - start))	return sq_throwerror(v,_SC("lenght out of range"));
 	v->Push(SQString::Create(_ss(v),&_stringval(o)[start], len));
 	return 1;
@@ -1639,7 +1637,7 @@ static SQRESULT string_gsub(HSQUIRRELVM v)
             free(buf);
             return 1;
         }
-        return sq_throwerror(v,error_ptr);
+        return sq_throwerror(v,_SC("%s"),error_ptr);
     }
     else
     {
@@ -1656,7 +1654,7 @@ static SQRESULT string_gsub(HSQUIRRELVM v)
                     free(buf);
                     if(!error_ptr) return 1;
                 }
-                return sq_throwerror(v,error_ptr);
+                return sq_throwerror(v,_SC("%s"),error_ptr);
             }
    	   default:
 		return sq_throwerror(v, _SC("unexpected type"));
@@ -1705,6 +1703,7 @@ static int process_string_gmatch(LuaMatchState *ms, void *udata, lua_char_buffer
     return process_string_gmatch_find(ms, udata, b, false);
 }
 
+//used by sqstdblob
 SQRESULT string_gmatch_base(HSQUIRRELVM v, int isGmatch, const SQChar *src, SQInteger src_size)
 {
     SQ_FUNC_VARS(v);
@@ -1724,7 +1723,7 @@ SQRESULT string_gmatch_base(HSQUIRRELVM v, int isGmatch, const SQChar *src, SQIn
         if((rtype == OT_CLOSURE) || (rtype == OT_NATIVECLOSURE)){
             _rc_ = lua_str_match(&ms, src, max_len ? start_pos + max_len : src_size,
                     pattern, pattern_size, start_pos, 0, process_string_gmatch, v);
-            if(ms.error) return sq_throwerror(v, ms.error);
+            if(ms.error) return sq_throwerror(v,_SC("%s"), ms.error);
             sq_pushinteger(v, _rc_);
             return 1;
         }
@@ -1738,7 +1737,7 @@ SQRESULT string_gmatch_base(HSQUIRRELVM v, int isGmatch, const SQChar *src, SQIn
     }
     _rc_ = lua_str_match(&ms, src, max_len ? start_pos + max_len : src_size,
                         pattern, pattern_size, start_pos, 0, 0, 0);
-    if(ms.error) return sq_throwerror(v, ms.error);
+    if(ms.error) return sq_throwerror(v,_SC("%s"), ms.error);
     if(_rc_ < 0) sq_pushnull(v);
     else if(ms.level){
         if(ms.level == 1)
@@ -1778,6 +1777,7 @@ static int process_string_find_lua(LuaMatchState *ms, void *udata, lua_char_buff
     return process_string_gmatch_find(ms, udata, b, true);
 }
 
+//used by sqstdblob
 SQRESULT string_find_lua(HSQUIRRELVM v, const SQChar *src, SQInteger src_size)
 {
     SQ_FUNC_VARS(v);
@@ -1797,7 +1797,7 @@ SQRESULT string_find_lua(HSQUIRRELVM v, const SQChar *src, SQInteger src_size)
         memset(&ms, 0, sizeof(ms));
         int rc = lua_str_find(&ms, src, src_size, pattern, pattern_size,
                 start_pos, raw == SQTrue, 0, 0);
-        if(ms.error) return sq_throwerror(v, ms.error);
+        if(ms.error) return sq_throwerror(v,_SC("%s"), ms.error);
         sq_pushinteger(v, rc);
         return 1;
     }
@@ -1806,7 +1806,7 @@ SQRESULT string_find_lua(HSQUIRRELVM v, const SQChar *src, SQInteger src_size)
         memset(&ms, 0, sizeof(ms));
         int rc = lua_str_find(&ms, src, src_size, pattern, pattern_size,
                 start_pos, raw == SQTrue, process_string_find_lua, v);
-        if(ms.error) return sq_throwerror(v, ms.error);
+        if(ms.error) return sq_throwerror(v,_SC("%s"), ms.error);
         sq_pushinteger(v, rc);
         return 1;
     }
@@ -1815,7 +1815,7 @@ SQRESULT string_find_lua(HSQUIRRELVM v, const SQChar *src, SQInteger src_size)
         memset(&ms, 0, sizeof(ms));
         int rc = lua_str_find(&ms, src, src_size, pattern, pattern_size,
                 start_pos, raw == SQTrue, 0, 0);
-        if(ms.error) return sq_throwerror(v, ms.error);
+        if(ms.error) return sq_throwerror(v,_SC("%s"), ms.error);
         if(rtype == OT_TABLE){
             sq_pushstring(v, _SC("start_pos"), -1);
             sq_pushinteger(v, ms.start_pos);
@@ -2252,7 +2252,7 @@ static SQRESULT string_##name(HSQUIRRELVM v)\
     SQ_GET_STRING(v, 1, str);\
     SQ_GET_INTEGER(v, 2, idx);\
     if(idx >= str_size) {\
-        return sq_throwerror(v, _SC("index %d out of range"), idx);\
+        return sq_throwerror(v, _SC("index " _PRINT_INT_FMT " out of range"), idx);\
     }\
 	sq_pushbool(v, sc##name(str[idx]));\
 	return 1;\
@@ -2265,6 +2265,8 @@ string_char_is(isalnum);
 string_char_is(isdigit);
 string_char_is(isxdigit);
 string_char_is(iscntrl);
+string_char_is(islower);
+string_char_is(isupper);
 
 static SQRESULT string_count_char(HSQUIRRELVM v)
 {
@@ -2509,70 +2511,72 @@ static SQRESULT string_iso88959_to_utf8 (HSQUIRRELVM v) {
 
 
 SQRegFunction SQSharedState::_string_default_delegate_funcz[]={
-	{_SC("len"),default_delegate_len,1, _SC("s")},
-	{_SC("size"),default_delegate_len,1, _SC("s")},
-	{_SC("tointeger"),default_delegate_tointeger,-1, _SC("sn")},
-	{_SC("tofloat"),default_delegate_tofloat,1, _SC("s")},
-	{_SC("tostring"),default_delegate_tostring,1, _SC(".")},
-	{_SC("hash"),string_hash,1, _SC("s")},
-	{_SC("slice"),string_slice,-1, _SC(" s n  n")},
-	{_SC("substr"),string_substr,-2, _SC(" s n  n")},
-	{_SC("replace"),string_replace,-3, _SC("sssi")},
-	{_SC("find"),string_find,-2, _SC("s s n ")},
-	{_SC("indexOf"),string_find,-2, _SC("s s n ")},
-	{_SC("find_lua"),string_find_lua,-2, _SC("ss a|t|c n b n")},
-	{_SC("find_close_quote"),string_find_close_quote,-1, _SC("sni")},
-	{_SC("find_delimiter"),string_find_delimiter,4, _SC("siin")},
-	{_SC("strchr"),string_strchr,-2, _SC("sii")},
-	{_SC("strncmp"),string_strncmp,-3, _SC("sisi")},
-	{_SC("countchr"),string_countchr,2, _SC("si")},
-	{_SC("gsub"),string_gsub,-3, _SC("s s s|a|t|c n")},
-	{_SC("gmatch"),string_gmatch, -3, _SC("s s c n n")},
-	{_SC("match"), string_match, -2, _SC("s s n n")},
-	{_SC("startswith"),string_startswith, 2, _SC("ss")},
-	{_SC("endswith"),string_endswith, 2, _SC("ss")},
-	{_SC("reverse"),string_reverse, 1, _SC("s")},
-	{_SC("rep"),string_rep, 2, _SC("si")},
-	{_SC("tolower"),string_tolower,1, _SC("s")},
-	{_SC("toupper"),string_toupper,1, _SC("s")},
-	{_SC("weakref"),obj_delegate_weakref,1, NULL },
-	{_SC("getdelegate"),string_getdelegate,1, _SC(".")},
-	{_SC("strip"),string_strip,1, _SC("s")},
-	{_SC("trim"),string_strip,1, _SC("s")},
-	{_SC("lstrip"),string_lstrip,1, _SC("s")},
-	{_SC("ltrim"),string_lstrip,1, _SC("s")},
-	{_SC("rstrip"),string_rstrip,1, _SC("s")},
-	{_SC("rtrim"),string_rstrip,1, _SC("s")},
-	{_SC("split"),string_split,2, _SC("s i|s")},
-	{_SC("split_csv"),string_split_csv,2, _SC("si")},
-	{_SC("isempty"),string_isempty,1, _SC("s")},
-	{_SC("isspace"),string_isspace,2, _SC("si")},
-	{_SC("isprint"),string_isprint,2, _SC("si")},
-	{_SC("iscntrl"),string_iscntrl,2, _SC("si")},
-	{_SC("isalpha"),string_isalpha,2, _SC("si")},
-	{_SC("isalnum"),string_isalnum,2, _SC("si")},
-	{_SC("isdigit"),string_isdigit,2, _SC("si")},
-	{_SC("isxdigit"),string_isxdigit,2, _SC("si")},
-	{_SC("count_char"),string_count_char,2, _SC("si")},
-	{_SC("uchar"),string_uchar,2, _SC("si")},
-	{_SC("ushort"),string_ushort,2, _SC("si")},
-	{_SC("edit_distance"),string_edit_distance,-2, _SC("ssi")},
-	{_SC("mod_97_10"),string_mod_97_10,1, _SC("s")},
-	{_SC("iso88959_to_utf8"),string_iso88959_to_utf8,1, _SC("s")},
-	{_SC("isvalidutf8"),string_isvalidutf8,1, _SC("s")},
+	{_SC("len"),default_delegate_len,1, _SC("s"), false},
+	{_SC("size"),default_delegate_len,1, _SC("s"), false},
+	{_SC("tointeger"),default_delegate_tointeger,-1, _SC("sn"), false},
+	{_SC("tofloat"),default_delegate_tofloat,1, _SC("s"), false},
+	{_SC("tostring"),default_delegate_tostring,1, _SC("."), false},
+	{_SC("hash"),string_hash,1, _SC("s"), false},
+	{_SC("slice"),string_slice,-1, _SC(" s n  n"), false},
+	{_SC("substr"),string_substr,-2, _SC(" s n  n"), false},
+	{_SC("replace"),string_replace,-3, _SC("sssi"), false},
+	{_SC("find"),string_find,-2, _SC("s s n "), false},
+	{_SC("indexOf"),string_find,-2, _SC("s s n "), false},
+	{_SC("find_lua"),string_find_lua,-2, _SC("ss a|t|c n b n"), false},
+	{_SC("find_close_quote"),string_find_close_quote,-1, _SC("sni"), false},
+	{_SC("find_delimiter"),string_find_delimiter,4, _SC("siin"), false},
+	{_SC("strchr"),string_strchr,-2, _SC("sii"), false},
+	{_SC("strncmp"),string_strncmp,-3, _SC("sisi"), false},
+	{_SC("countchr"),string_countchr,2, _SC("si"), false},
+	{_SC("gsub"),string_gsub,-3, _SC("s s s|a|t|c n"), false},
+	{_SC("gmatch"),string_gmatch, -3, _SC("s s c n n"), false},
+	{_SC("match"), string_match, -2, _SC("s s n n"), false},
+	{_SC("startswith"),string_startswith, 2, _SC("ss"), false},
+	{_SC("endswith"),string_endswith, 2, _SC("ss"), false},
+	{_SC("reverse"),string_reverse, 1, _SC("s"), false},
+	{_SC("rep"),string_rep, 2, _SC("si"), false},
+	{_SC("tolower"),string_tolower,1, _SC("s"), false},
+	{_SC("toupper"),string_toupper,1, _SC("s"), false},
+	{_SC("weakref"),obj_delegate_weakref,1, NULL, false},
+	{_SC("getdelegate"),string_getdelegate,1, _SC("."), false},
+	{_SC("strip"),string_strip,1, _SC("s"), false},
+	{_SC("trim"),string_strip,1, _SC("s"), false},
+	{_SC("lstrip"),string_lstrip,1, _SC("s"), false},
+	{_SC("ltrim"),string_lstrip,1, _SC("s"), false},
+	{_SC("rstrip"),string_rstrip,1, _SC("s"), false},
+	{_SC("rtrim"),string_rstrip,1, _SC("s"), false},
+	{_SC("split"),string_split,2, _SC("s i|s"), false},
+	{_SC("split_csv"),string_split_csv,2, _SC("si"), false},
+	{_SC("isempty"),string_isempty,1, _SC("s"), false},
+	{_SC("isspace"),string_isspace,2, _SC("si"), false},
+	{_SC("isprint"),string_isprint,2, _SC("si"), false},
+	{_SC("iscntrl"),string_iscntrl,2, _SC("si"), false},
+	{_SC("isalpha"),string_isalpha,2, _SC("si"), false},
+	{_SC("isalnum"),string_isalnum,2, _SC("si"), false},
+	{_SC("isdigit"),string_isdigit,2, _SC("si"), false},
+	{_SC("isxdigit"),string_isxdigit,2, _SC("si"), false},
+	{_SC("islower"),string_islower,2, _SC("si"), false},
+	{_SC("isupper"),string_isupper,2, _SC("si"), false},
+	{_SC("count_char"),string_count_char,2, _SC("si"), false},
+	{_SC("uchar"),string_uchar,2, _SC("si"), false},
+	{_SC("ushort"),string_ushort,2, _SC("si"), false},
+	{_SC("edit_distance"),string_edit_distance,-2, _SC("ssi"), false},
+	{_SC("mod_97_10"),string_mod_97_10,1, _SC("s"), false},
+	{_SC("iso88959_to_utf8"),string_iso88959_to_utf8,1, _SC("s"), false},
+	{_SC("isvalidutf8"),string_isvalidutf8,1, _SC("s"), false},
 #ifdef SQ_SUBLATIN
-	{_SC("sl_len"),string_sl_len,1, _SC("s")},
-	{_SC("sl_lower"),string_sl_lower,1, _SC("s")},
-	{_SC("sl_upper"),string_sl_upper,1, _SC("s")},
-	{_SC("sl_deaccent"),string_sl_deaccent,1, _SC("s")},
-	{_SC("sl_lower_deaccent"),string_sl_lower_deaccent,1, _SC("s")},
-	{_SC("sl_icmp"),string_sl_icmp,2, _SC("ss")},
-	{_SC("sl_icmp_noaccents"),string_sl_icmp_noaccents,2, _SC("ss")},
-	{_SC("sl_cmp_noaccents"),string_sl_cmp_noaccents, 2, _SC("ss")},
-	{_SC("sl_like_cmp"),string_sl_like_cmp, -2, _SC("ssi")},
-	{_SC("sl_like_cmp_noaccents"),string_sl_like_cmp_noaccents, -2, _SC("ssi")},
+	{_SC("sl_len"),string_sl_len,1, _SC("s"), false},
+	{_SC("sl_lower"),string_sl_lower,1, _SC("s"), false},
+	{_SC("sl_upper"),string_sl_upper,1, _SC("s"), false},
+	{_SC("sl_deaccent"),string_sl_deaccent,1, _SC("s"), false},
+	{_SC("sl_lower_deaccent"),string_sl_lower_deaccent,1, _SC("s"), false},
+	{_SC("sl_icmp"),string_sl_icmp,2, _SC("ss"), false},
+	{_SC("sl_icmp_noaccents"),string_sl_icmp_noaccents,2, _SC("ss"), false},
+	{_SC("sl_cmp_noaccents"),string_sl_cmp_noaccents, 2, _SC("ss"), false},
+	{_SC("sl_like_cmp"),string_sl_like_cmp, -2, _SC("ssi"), false},
+	{_SC("sl_like_cmp_noaccents"),string_sl_like_cmp_noaccents, -2, _SC("ssi"), false},
 #endif
-	{NULL,(SQFUNCTION)0,0,NULL}
+	{NULL,(SQFUNCTION)0,0,NULL, false}
 };
 
 //NUMBER DEFAULT DELEGATE//////////////////////////
@@ -2582,13 +2586,13 @@ static SQRESULT number_getdelegate(HSQUIRRELVM v)
 }
 
 SQRegFunction SQSharedState::_number_default_delegate_funcz[]={
-	{_SC("tointeger"),default_delegate_tointeger,1, _SC("n|b")},
-	{_SC("tofloat"),default_delegate_tofloat,1, _SC("n|b")},
-	{_SC("tostring"),default_delegate_tostring,1, _SC(".")},
-	{_SC("tochar"),number_delegate_tochar,1, _SC("n|b")},
-	{_SC("weakref"),obj_delegate_weakref,1, NULL },
-	{_SC("getdelegate"),number_getdelegate,1, _SC(".")},
-	{NULL,(SQFUNCTION)0,0,NULL}
+	{_SC("tointeger"),default_delegate_tointeger,1, _SC("n|b"), false},
+	{_SC("tofloat"),default_delegate_tofloat,1, _SC("n|b"), false},
+	{_SC("tostring"),default_delegate_tostring,1, _SC("."), false},
+	{_SC("tochar"),number_delegate_tochar,1, _SC("n|b"), false},
+	{_SC("weakref"),obj_delegate_weakref,1, NULL, false},
+	{_SC("getdelegate"),number_getdelegate,1, _SC("."), false},
+	{NULL,(SQFUNCTION)0,0,NULL, false}
 };
 
 //CLOSURE DEFAULT DELEGATE//////////////////////////
@@ -2710,20 +2714,20 @@ static SQRESULT closure_getdelegate(HSQUIRRELVM v)
 
 
 SQRegFunction SQSharedState::_closure_default_delegate_funcz[]={
-	{_SC("call"),closure_call,-1, _SC("c")},
+	{_SC("call"),closure_call,-1, _SC("c"), false},
 	//pcall removed because it doesn't work as documented use try/catch instead
-	//{_SC("pcall"),closure_pcall,-1, _SC("c")},
-	{_SC("acall"),closure_acall,2, _SC("ca")},
-	{_SC("acall2"),closure_acall2,3, _SC("c.a")},
-	{_SC("pacall"),closure_pacall,2, _SC("ca")},
-	{_SC("weakref"),obj_delegate_weakref,1, NULL },
-	{_SC("tostring"),default_delegate_tostring,1, _SC(".")},
-	{_SC("bindenv"),closure_bindenv,2, _SC("c x|y|t|a")},
-	{_SC("setenv"),closure_setenv,2, _SC("c x|y|t")},
-	{_SC("getenv"),closure_getenv,1, _SC("c")},
-	{_SC("getinfos"),closure_getinfos,1, _SC("c")},
-	{_SC("getdelegate"),closure_getdelegate,1, _SC(".")},
-	{NULL,(SQFUNCTION)0,0,NULL}
+	//{_SC("pcall"),closure_pcall,-1, _SC("c"), false},
+	{_SC("acall"),closure_acall,2, _SC("ca"), false},
+	{_SC("acall2"),closure_acall2,3, _SC("c.a"), false},
+	{_SC("pacall"),closure_pacall,2, _SC("ca"), false},
+	{_SC("weakref"),obj_delegate_weakref,1, NULL, false},
+	{_SC("tostring"),default_delegate_tostring,1, _SC("."), false},
+	{_SC("bindenv"),closure_bindenv,2, _SC("c x|y|t|a"), false},
+	{_SC("setenv"),closure_setenv,2, _SC("c x|y|t"), false},
+	{_SC("getenv"),closure_getenv,1, _SC("c"), false},
+	{_SC("getinfos"),closure_getinfos,1, _SC("c"), false},
+	{_SC("getdelegate"),closure_getdelegate,1, _SC("."), false},
+	{NULL,(SQFUNCTION)0,0,NULL, false}
 };
 
 //GENERATOR DEFAULT DELEGATE
@@ -2745,11 +2749,11 @@ static SQRESULT generator_getdelegate(HSQUIRRELVM v)
 }
 
 SQRegFunction SQSharedState::_generator_default_delegate_funcz[]={
-	{_SC("getstatus"),generator_getstatus,1, _SC("g")},
-	{_SC("weakref"),obj_delegate_weakref,1, NULL },
-	{_SC("tostring"),default_delegate_tostring,1, _SC(".")},
-	{_SC("getdelegate"),generator_getdelegate,1, _SC(".")},
-	{NULL,(SQFUNCTION)0,0,NULL}
+	{_SC("getstatus"),generator_getstatus,1, _SC("g"), false},
+	{_SC("weakref"),obj_delegate_weakref,1, NULL, false},
+	{_SC("tostring"),default_delegate_tostring,1, _SC("."), false},
+	{_SC("getdelegate"),generator_getdelegate,1, _SC("."), false},
+	{NULL,(SQFUNCTION)0,0,NULL, false}
 };
 
 //THREAD DEFAULT DELEGATE
@@ -2782,10 +2786,8 @@ static SQRESULT thread_wakeup(HSQUIRRELVM v)
 			switch(state) {
 				case SQ_VMSTATE_IDLE:
 					return sq_throwerror(v,_SC("cannot wakeup a idle thread"));
-				break;
 				case SQ_VMSTATE_RUNNING:
 					return sq_throwerror(v,_SC("cannot wakeup a running thread"));
-				break;
 			}
 		}
 
@@ -2840,7 +2842,7 @@ static SQRESULT thread_getstackinfos(HSQUIRRELVM v)
 		{
 			sq_settop(thread,threadtop);
 			if(sq_type(thread->_lasterror) == OT_STRING) {
-				sq_throwerror(v,_stringval(thread->_lasterror));
+				sq_throwerror(v,_SC("%s"),_stringval(thread->_lasterror));
 			}
 			else {
 				sq_throwerror(v,_SC("unknown error"));
@@ -2868,14 +2870,14 @@ static SQRESULT thread_getdelegate(HSQUIRRELVM v)
 
 
 SQRegFunction SQSharedState::_thread_default_delegate_funcz[] = {
-	{_SC("call"), thread_call, -1, _SC("v")},
-	{_SC("wakeup"), thread_wakeup, -1, _SC("v")},
-	{_SC("getstatus"), thread_getstatus, 1, _SC("v")},
-	{_SC("weakref"),obj_delegate_weakref,1, NULL },
-	{_SC("getstackinfos"),thread_getstackinfos,2, _SC("vn")},
-	{_SC("tostring"),default_delegate_tostring,1, _SC(".")},
-	{_SC("getdelegate"),thread_getdelegate,1, _SC(".")},
-	{NULL,(SQFUNCTION)0,0,NULL},
+	{_SC("call"), thread_call, -1, _SC("v"), false},
+	{_SC("wakeup"), thread_wakeup, -1, _SC("v"), false},
+	{_SC("getstatus"), thread_getstatus, 1, _SC("v"), false},
+	{_SC("weakref"),obj_delegate_weakref,1, NULL, false},
+	{_SC("getstackinfos"),thread_getstackinfos,2, _SC("vn"), false},
+	{_SC("tostring"),default_delegate_tostring,1, _SC("."), false},
+	{_SC("getdelegate"),thread_getdelegate,1, _SC("."), false},
+	{NULL,(SQFUNCTION)0,0,NULL,false},
 };
 
 static SQRESULT class_getattributes(HSQUIRRELVM v)
@@ -2936,20 +2938,20 @@ static SQRESULT class_getdelegate(HSQUIRRELVM v)
 }
 
 SQRegFunction SQSharedState::_class_default_delegate_funcz[] = {
-	{_SC("getattributes"), class_getattributes, 2, _SC("y.")},
-	{_SC("setattributes"), class_setattributes, 3, _SC("y..")},
-	{_SC("get"),container_get,-2, _SC("y")},
-	{_SC("rawget"),container_rawget,-2, _SC("y")},
-	{_SC("rawset"),container_rawset,3, _SC("y")},
-	{_SC("rawin"),container_rawexists,2, _SC("y")},
-	{_SC("weakref"),obj_delegate_weakref,1, NULL },
-	{_SC("tostring"),default_delegate_tostring,1, _SC(".")},
-	{_SC("instance"),class_instance,1, _SC("y")},
-	{_SC("getbase"),class_getbase,1, _SC("y")},
-	{_SC("newmember"),class_newmember,-3, _SC("y")},
-	{_SC("rawnewmember"),class_rawnewmember,-3, _SC("y")},
-	{_SC("getdelegate"),class_getdelegate,1, _SC(".")},
-	{NULL,(SQFUNCTION)0,0,NULL}
+	{_SC("getattributes"), class_getattributes, 2, _SC("y."), false},
+	{_SC("setattributes"), class_setattributes, 3, _SC("y.."), false},
+	{_SC("get"),container_get,-2, _SC("y"), false},
+	{_SC("rawget"),container_rawget,-2, _SC("y"), false},
+	{_SC("rawset"),container_rawset,3, _SC("y"), false},
+	{_SC("rawin"),container_rawexists,2, _SC("y"), false},
+	{_SC("weakref"),obj_delegate_weakref,1, NULL, false},
+	{_SC("tostring"),default_delegate_tostring,1, _SC("."), false},
+	{_SC("instance"),class_instance,1, _SC("y"), false},
+	{_SC("getbase"),class_getbase,1, _SC("y"), false},
+	{_SC("newmember"),class_newmember,-3, _SC("y"), false},
+	{_SC("rawnewmember"),class_rawnewmember,-3, _SC("y"), false},
+	{_SC("getdelegate"),class_getdelegate,1, _SC("."), false},
+	{NULL,(SQFUNCTION)0,0,NULL, false}
 };
 
 
@@ -2966,15 +2968,15 @@ static SQRESULT instance_getdelegate(HSQUIRRELVM v)
 }
 
 SQRegFunction SQSharedState::_instance_default_delegate_funcz[] = {
-	{_SC("getclass"), instance_getclass, 1, _SC("x")},
-	{_SC("get"),container_get,-2, _SC("x")},
-	{_SC("rawget"),container_rawget,-2, _SC("x")},
-	{_SC("rawset"),container_rawset,3, _SC("x")},
-	{_SC("rawin"),container_rawexists,2, _SC("x")},
-	{_SC("weakref"),obj_delegate_weakref,1, NULL },
-	{_SC("tostring"),default_delegate_tostring,1, _SC(".")},
-	{_SC("getdelegate"),instance_getdelegate,1, _SC(".")},
-	{NULL,(SQFUNCTION)0,0,NULL}
+	{_SC("getclass"), instance_getclass, 1, _SC("x"), false},
+	{_SC("get"),container_get,-2, _SC("x"), false},
+	{_SC("rawget"),container_rawget,-2, _SC("x"), false},
+	{_SC("rawset"),container_rawset,3, _SC("x"), false},
+	{_SC("rawin"),container_rawexists,2, _SC("x"), false},
+	{_SC("weakref"),obj_delegate_weakref,1, NULL, false},
+	{_SC("tostring"),default_delegate_tostring,1, _SC("."), false},
+	{_SC("getdelegate"),instance_getdelegate,1, _SC("."), false},
+	{NULL,(SQFUNCTION)0,0,NULL, false}
 };
 
 static SQRESULT weakref_ref(HSQUIRRELVM v)
@@ -2990,11 +2992,11 @@ static SQRESULT weakref_getdelegate(HSQUIRRELVM v)
 }
 
 SQRegFunction SQSharedState::_weakref_default_delegate_funcz[] = {
-	{_SC("ref"),weakref_ref,1, _SC("r")},
-	{_SC("weakref"),obj_delegate_weakref,1, NULL },
-	{_SC("tostring"),default_delegate_tostring,1, _SC(".")},
-	{_SC("getdelegate"),weakref_getdelegate,1, _SC(".")},
-	{NULL,(SQFUNCTION)0,0,NULL}
+	{_SC("ref"),weakref_ref,1, _SC("r"), false},
+	{_SC("weakref"),obj_delegate_weakref,1, NULL, false},
+	{_SC("tostring"),default_delegate_tostring,1, _SC("."), false},
+	{_SC("getdelegate"),weakref_getdelegate,1, _SC("."), false},
+	{NULL,(SQFUNCTION)0,0,NULL,false}
 };
 
 

+ 1 - 1
SquiLu/squirrel/sqclass.cpp

@@ -11,7 +11,7 @@
 
 
 SQClass::SQClass(SQSharedState *ss,SQClass *base):
-    _base(base),_typetag(0),_hook(NULL),_constructoridx(-1),_destructoridx(-1),_udsize(0),_locked(false)
+    _base(base),_typetag(0),_hook(NULL),_udsize(0),_constructoridx(-1),_destructoridx(-1),_locked(false)
 {
 	if(_base) {
 		_constructoridx = _base->_constructoridx;

+ 24 - 32
SquiLu/squirrel/sqcompiler.cpp

@@ -48,8 +48,8 @@ struct SQScope
 
 #define BEGIN_SCOPE() SQScope __oldscope__ = _scope; \
     ++_scope.nested; \
-    _scope.outers = _fs->_outers; \
-    _scope.stacksize = _fs->GetStackSize();\
+    _scope.outers = (SQInt16)_fs->_outers; \
+    _scope.stacksize = (SQInt32)_fs->GetStackSize();\
     _scope_types.push_back(SQTable::Create(_ss(_vm),0)); \
     _scope_consts.push_back(SQTable::Create(_ss(_vm),0));
 
@@ -186,10 +186,10 @@ public:
     static void ThrowError(void *ud, const SQChar *s)
     {
         SQCompiler *c = (SQCompiler *)ud;
-        c->Error(s);
+        c->Error(_SC("%s"), s);
     }
 
-    void Error(const SQChar *s, ...) //__attribute__((format(printf, 2, 3)))
+    void Error(const SQChar *s, ...) __attribute__((format(printf, 2, 3)))
     {
         va_list vl;
         va_start(vl, s);
@@ -199,7 +199,7 @@ public:
         longjmp(_errorjmp,1);
     }
 
-    void Warning(const SQChar *s, ...) //__attribute__((format(printf, 2, 3)))
+    void Warning(const SQChar *s, ...) __attribute__((format(printf, 2, 3)))
     {
         if(!_show_warnings) return;
         va_list vl;
@@ -243,7 +243,7 @@ public:
         return _table(_type_names)->NewSlot(key,val);
     }
 
-    int CheckExternName(const SQObject &name, bool addIfNotExists=false)
+    SQInteger CheckExternName(const SQObject &name, bool addIfNotExists=false)
     {
         SQObjectPtr orefcount;
         int found = _table(_extern_names)->Get(name, orefcount);
@@ -256,9 +256,9 @@ public:
         }
         return found ? _integer(orefcount) : 0;
     }
-    int ExternNameSetRefCount(const SQObject &name)
+    SQInteger ExternNameSetRefCount(const SQObject &name)
     {
-        int ref_count = CheckExternName(name);
+        SQInteger ref_count = CheckExternName(name);
         if(ref_count == 1)
         {
             SQObjectPtr orefcount;
@@ -289,7 +289,7 @@ public:
         {
             if(checkLocals) Error(_SC("%s '%s' already declared"), found, _stringval(name));
             else Warning(_SC("%s:%d:%d warning %s '%s' already declared will be shadowed\n"),
-                             _stringval(_sourcename), _lex.data->currentline, _lex.data->currentcolumn,
+                             _stringval(_sourcename), (int)_lex.data->currentline, (int)_lex.data->currentcolumn,
                              found, _stringval(name));
         }
         else if(checkLocals) CheckLocalNameScope(name, -1, false);
@@ -309,13 +309,13 @@ public:
                 Error(_SC("local '%s' already declared"), _stringval(name));
             else
                 Warning(_SC("%s:%d:%d warning local '%s' already declared will be shadowed\n"),
-                        _stringval(_sourcename), _lex.data->currentline, _lex.data->currentcolumn, _stringval(name));
+                        _stringval(_sourcename), (int)_lex.data->currentline, (int)_lex.data->currentcolumn, _stringval(name));
         }
         else
         {
             found = _fs->FindOuterVariable(name);
             if(found >= 0) Warning(_SC("%s:%d:%d warning outer variable '%s' already declared will be shadowed\n"),
-                                       _stringval(_sourcename), _lex.data->currentline, _lex.data->currentcolumn, _stringval(name));
+                                       _stringval(_sourcename), (int)_lex.data->currentline, (int)_lex.data->currentcolumn, _stringval(name));
         }
         if(checkGlobals) CheckGlobalName(name, false, false);
         SQObjectPtr strongid = name;
@@ -397,7 +397,7 @@ public:
             Error(_SC("constant '%s' already exists\n"), _stringval(key));
         }
         if(found >= 0) Warning(_SC("%s:%d:%d warning an already defined constant '%s' will be shadowed\n"),
-                                   _stringval(_sourcename), _lex.data->currentline, _lex.data->currentcolumn,  _stringval(key));
+                                   _stringval(_sourcename), (int)_lex.data->currentline, (int)_lex.data->currentcolumn,  _stringval(key));
     }
 
     bool ConstsGet(const SQObjectPtr &key,SQObjectPtr &val)
@@ -482,7 +482,7 @@ public:
                     }
                     Error(_SC("expected '%s'"), etypename);
                 }
-                Error(_SC("expected '%c'"), tok);
+                Error(_SC("expected '%c'"), (int)tok);
             }
         }
     }
@@ -497,7 +497,6 @@ public:
         {
         CASE_TK_LOCAL_TYPES:
             return GetTokenObject(_token);
-            break;
         case TK_IDENTIFIER:
             break;
         default:
@@ -518,7 +517,7 @@ public:
         }
         if(!IsEndOfStatement())
         {
-            Error(_SC("end of statement expected (; or lf) found (%d)"), _token);
+            Error(_SC("end of statement expected (; or lf) found (%d)"), (int)_token);
         }
     }
     void MoveIfCurrentTargetIsLocal()
@@ -533,8 +532,8 @@ public:
 
     void Pragma()
     {
-        int line = _lex.data->currentline;
-        int column = _lex.data->currentcolumn;
+        SQInteger line = _lex.data->currentline;
+        SQInteger column = _lex.data->currentcolumn;
         Lex();
         if(_token == TK_ELSE)
         {
@@ -552,7 +551,7 @@ public:
             SQInteger nested_count = _nested_includes_count + 1;
             if((_max_nested_includes <= 0) || (nested_count > _max_nested_includes))
             {
-                Error(_SC("Error: too many nested includes %d %s\n"), nested_count, _stringval(id));
+                Error(_SC("Error: too many nested includes %d %s\n"), (int)nested_count, _stringval(id));
             }
 
             //C/C++ system includes we do not use it in SquiLu
@@ -640,7 +639,7 @@ public:
 
                 //close file
                 fclose(fp);
-                if(_inside_ifdef) Error(_SC("unterminated #ifdef starting on line %d"), _ifdef_line);
+                if(_inside_ifdef) Error(_SC("unterminated #ifdef starting on line %d"), (int)_ifdef_line);
                 //restore saved source file and lex state
                 _fs->_sourcename = saved_source_name;
                 _sourcename = saved_source_name;
@@ -696,7 +695,7 @@ public:
             {
                 if(_vm->IsDefined(_stringval(id)))
                     Warning(_SC("%s:%d:%d warning '%s' redefined\n"),
-                        _stringval(_sourcename), line, column, _stringval(id));
+                        _stringval(_sourcename), (int)line, (int)column, _stringval(id));
                 _vm->AddDefined(_stringval(id));
             }
         }
@@ -734,7 +733,7 @@ public:
                 Statement();
                 if(_lex.data->prevtoken != _SC('}') && _lex.data->prevtoken != _SC(';')) OptionalSemicolon();
             }
-            if(_inside_ifdef) Error(_SC("unterminated #ifdef starting on line %d"), _ifdef_line);
+            if(_inside_ifdef) Error(_SC("unterminated #ifdef starting on line %d"), (int)_ifdef_line);
             _fs->SetStackSize(stacksize);
             _fs->AddLineInfos(_lex.data->currentline, _lineinfo, true);
             _fs->AddInstruction(_OP_RETURN, 0xFF);
@@ -774,7 +773,7 @@ public:
         while(_ifdef_exclude && (_token != TK_PRAGMA))
         {
             Lex();
-            if(_token <= 0) Error(_SC("'#endif' expected to close '#ifdef' started at %d"), _ifdef_line);
+            if(_token <= 0) Error(_SC("'#endif' expected to close '#ifdef' started at %d"), (int)_ifdef_line);
         }
 start_again:
         switch(_token)
@@ -975,7 +974,7 @@ start_again:
             if(_scope.nested)
             {
                 Warning(_SC("%s:%d:%d warning static cualifier is ignored\n"),
-                        _stringval(_sourcename), _lex.data->currentline, _lex.data->currentcolumn);
+                        _stringval(_sourcename), (int)_lex.data->currentline, (int)_lex.data->currentcolumn);
             }
             Lex(); //ignore it only to allow run some C/C++ code
             goto start_again;
@@ -1023,7 +1022,6 @@ start_again:
         case TK_UNSAFE:
             Lex(); //ignore for now
             goto start_again;
-            break;
 
         case TK_TEMPLATE:
             TemplateStatement();
@@ -1192,7 +1190,7 @@ start_again:
                 break;
             case _SC('='): //ASSIGN
                 if(warningAssign) Warning(_SC("%s:%d:%d warning making assignment, maybe it's not what you want\n"),
-                                              _stringval(_sourcename), _lex.data->currentline, _lex.data->currentcolumn);
+                                              _stringval(_sourcename), (int)_lex.data->currentline, (int)_lex.data->currentcolumn);
                 switch(ds)
                 {
                 case LOCAL:
@@ -1485,7 +1483,6 @@ start_again:
         case TK_MODEQ:
             oper = _SC('%');
             break;
-            break;
         default:
             oper = 0; //shut up compiler
             assert(0);
@@ -1613,7 +1610,6 @@ start_again:
                 }
             }
             return;
-            break;
             case _SC('('):
                 switch(_es.etype)
                 {
@@ -1690,7 +1686,6 @@ start_again:
             _es.etype  = BASE;
             _es.epos   = _fs->TopTarget();
             return (_es.epos);
-            break;
         case _SC('$'): //compile time checked constant
             Lex();
             ErrorIfNotToken(TK_IDENTIFIER);
@@ -1817,7 +1812,6 @@ start_again:
             _token = _SC('.'); /* hack: drop into PrefixExpr, case '.'*/
             _es.epos = -1;
             return _es.epos;
-            break;
         case TK_NULL:
             _fs->AddInstruction(_OP_LOADNULLS, _fs->PushTarget(),1);
             Lex();
@@ -1969,7 +1963,6 @@ start_again:
             //        _lex.data->currentline, _lex.data->currentcolumn);
             Lex();
             return Factor();
-            break;
         default:
             Error(_SC("expression expected"));
         }
@@ -2235,7 +2228,6 @@ function_params_decl:
                         }
                         AddClassMemberExists(member_names, obj_id);
                         goto function_params_decl;
-                        break;
                     case _SC(':'): //typescript field with type annotation
                         if(membertypename)
                         {
@@ -3258,7 +3250,7 @@ error:
                     //param type specifier like typescript
                     if(param_type_name)
                     {
-                        Error(_SC("parameter type already declared before %s"), _string(paramname));
+                        Error(_SC("parameter type already declared before %s"), _stringval(paramname));
                     }
                     Lex();
                     type_name = ExpectTypeToken();

+ 1 - 3
SquiLu/squirrel/sqdebug.cpp

@@ -78,11 +78,9 @@ SQString *SQVM::PrintObjVal(const SQObjectPtr &o)
     case OT_INTEGER:
         scsprintf(_sp(sq_rsl(NUMBER_MAX_CHAR+1)),sq_rsl(NUMBER_MAX_CHAR), _PRINT_INT_FMT, _integer(o));
         return SQString::Create(_ss(this), _spval);
-        break;
     case OT_FLOAT:
         scsprintf(_sp(sq_rsl(NUMBER_MAX_CHAR+1)), sq_rsl(NUMBER_MAX_CHAR), _SC("%.14g"), _float(o));
         return SQString::Create(_ss(this), _spval);
-        break;
     default:
         return SQString::Create(_ss(this), GetTypeName(o));
     }
@@ -114,5 +112,5 @@ void SQVM::Raise_ParamTypeError(SQInteger nparam,SQInteger typemask,SQInteger ty
 			StringCat(exptypes,SQString::Create(_ss(this), IdType2Name((SQObjectType)mask), -1), exptypes);
 		}
 	}
-	Raise_Error(_SC("parameter %d has an invalid type '%s' ; expected: '%s'"), nparam, IdType2Name((SQObjectType)type), _stringval(exptypes));
+	Raise_Error(_SC("parameter %d has an invalid type '%s' ; expected: '%s'"), (int)nparam, IdType2Name((SQObjectType)type), _stringval(exptypes));
 }

+ 10 - 6
SquiLu/squirrel/sqfuncproto.h

@@ -71,11 +71,15 @@ typedef sqvector<SQGotoLabelsInfo> SQGotoLabelsInfoVec;
 
 #define _FUNC_SIZE(ni,nl,nparams,nfuncs,nouters,nlineinf,localinf,defparams) \
         (sizeof(SQFunctionProto) \
-		+((ni-1)*sizeof(SQInstruction))+(nl*sizeof(SQObjectPtr)) \
-		+(nparams*sizeof(SQObjectPtr))+(/*param_types*/nparams*sizeof(SQObjectPtr)) \
-        +(nfuncs*sizeof(SQObjectPtr)) \
-		+(nouters*sizeof(SQOuterVar))+(nlineinf*sizeof(SQLineInfo)) \
-		+(localinf*sizeof(SQLocalVarInfo))+(defparams*sizeof(SQInteger)))
+		+((ni-1)*sizeof(SQInstruction)) \
+		+(nl*sizeof(SQObjectPtr)) \
+		+(nparams*sizeof(SQObjectPtr)) \
+		+(/*param_types*/nparams*sizeof(SQObjectPtr)) \
+		+(nfuncs*sizeof(SQObjectPtr)) \
+		+(nouters*sizeof(SQOuterVar)) \
+		+(nlineinf*sizeof(SQLineInfo)) \
+		+(localinf*sizeof(SQLocalVarInfo)) \
+		+(defparams*sizeof(SQInteger)))
 
 
 struct SQFunctionProto : public CHAINABLE_OBJ
@@ -154,7 +158,7 @@ public:
 	SQObjectPtr _sourcename;
 	SQObjectPtr _name;
 	SQObjectPtr _return_type;
-    SQInteger _stacksize;
+	SQInteger _stacksize;
 	bool _bgenerator;
 	SQInteger _varparams;
 

+ 1 - 1
SquiLu/squirrel/sqfuncstate.cpp

@@ -31,7 +31,7 @@ void DumpLiteral(SQObjectPtr &o)
 		case OT_FLOAT: scprintf(_SC("{%f}"),_float(o));break;
 		case OT_INTEGER: scprintf(_SC("{") _PRINT_INT_FMT _SC("}"),_integer(o));break;
 		case OT_BOOL: scprintf(_SC("%s"),_integer(o)?_SC("true"):_SC("false"));break;
-		default: scprintf(_SC("(%s %p)"),GetTypeName(o),(void*)_rawval(o));break; break; //shut up compiler
+		default: scprintf(_SC("(%s %p)"),GetTypeName(o),(void*)_rawval(o));break; //shut up compiler
 	}
 }
 

+ 18 - 19
SquiLu/squirrel/sqlexer.cpp

@@ -186,7 +186,7 @@ const SQChar *SQLexer::Tok2Str(SQInteger tok)
 	return NULL;
 }
 
-const SQChar *SQLexer::GetTokenName(int tk_code) {
+const SQChar *SQLexer::GetTokenName(SQInteger tk_code) {
 	const SQChar *str_tk;
 
     switch(tk_code){
@@ -351,7 +351,6 @@ SQInteger SQLexer::Lex()
 					RETURN_TOKEN(TK_3WAYSCMP);
 				}
 				RETURN_TOKEN(TK_LE)
-				break;
 			case _SC('-'): NEXT(); RETURN_TOKEN(TK_NEWSLOT); break;
 			case _SC('<'):
 			    NEXT();
@@ -694,23 +693,22 @@ try_again:
 					case _SC('6'):
 					case _SC('7'):
 					    {
-                            int ndigits = 0;
-                            int octal_char = 0;
-                            while(scisodigit(CUR_CHAR)) {
-                                octal_char = (octal_char)*8+(CUR_CHAR-_SC('0'));
-                                NEXT();
-                                if(++ndigits == 3) break;
-                            }
-                            if(octal_char > 0xff) return Error(_SC("max value of embedded octal digits is \377"));
-                            APPEND_CHAR(octal_char);
-                            goto try_again;
+						int ndigits = 0;
+						int octal_char = 0;
+						while(scisodigit(CUR_CHAR)) {
+							octal_char = (octal_char)*8+(CUR_CHAR-_SC('0'));
+							NEXT();
+							if(++ndigits == 3) break;
+						}
+						if(octal_char > 0xff) return Error(_SC("max value of embedded octal digits is \377"));
+						APPEND_CHAR(octal_char);
+						goto try_again;
 					    }
 					    break;
-					case _SC('/'): APPEND_CHAR(CUR_CHAR); NEXT(); break;
+					case _SC('/'): APPEND_CHAR(CUR_CHAR); NEXT();
 					    break;
 					default:
 						return Error(_SC("unrecognised escaper char"));
-					break;
 					}
 				}
 				break;
@@ -800,12 +798,12 @@ static int isneg (const SQChar **s) {
 }
 
 #define ADD_CHECK_DIGIT(dig, base) \
-	    if (a >= MAXBY10 && (a > MAXBY10 || d > MAXLASTD + neg))  /* overflow? */ \
+	    if (a >= MAXBY10 && (a > MAXBY10 || d > ((int)MAXLASTD + neg)))  /* overflow? */ \
             return false;  /* do not accept it (as integer) */ \
 		a = a*base+dig;
 
 
-bool LexHexadecimal(const SQChar *s,SQUnsignedInteger *res)
+static bool LexHexadecimal(const SQChar *s,SQUnsignedInteger *res)
 {
 	SQUnsignedInteger a = 0;
 	int d = 0, neg = isneg(&s);
@@ -820,7 +818,7 @@ bool LexHexadecimal(const SQChar *s,SQUnsignedInteger *res)
 	return true;
 }
 
-bool LexInteger(const SQChar *s,SQUnsignedInteger *res)
+static bool LexInteger(const SQChar *s,SQUnsignedInteger *res)
 {
 	SQUnsignedInteger a = 0;
 	int d = 0, neg = isneg(&s);
@@ -833,7 +831,7 @@ bool LexInteger(const SQChar *s,SQUnsignedInteger *res)
 	return true;
 }
 
-bool LexOctal(const SQChar *s,SQUnsignedInteger *res)
+static bool LexOctal(const SQChar *s,SQUnsignedInteger *res)
 {
 	SQUnsignedInteger a = 0;
 	int d = 0, neg = isneg(&s);
@@ -847,7 +845,7 @@ bool LexOctal(const SQChar *s,SQUnsignedInteger *res)
 	return true;
 }
 
-SQInteger isexponent(SQInteger c) { return c == _SC('e') || c==_SC('E'); }
+static SQInteger isexponent(SQInteger c) { return c == _SC('e') || c==_SC('E'); }
 
 
 #define MAX_HEX_DIGITS (sizeof(SQInteger)*2)
@@ -908,6 +906,7 @@ SQInteger SQLexer::ReadNumber()
 	case TINT:
 		okNumber = LexInteger(&data->longstr[0],&itmp);
 		if(okNumber) break;
+		//fallthrough
 	case TSCIENTIFIC:
 	case TFLOAT:
 		data->fvalue = (SQFloat)scstrtod(&data->longstr[0],&sTemp);

+ 3 - 3
SquiLu/squirrel/sqlexer.h

@@ -21,8 +21,8 @@ struct SQLexerData
     SQInteger nvalue;
     SQFloat fvalue;
     LexChar currdata;
-    SQBool reached_eof;
     SQInteger readcount;
+    SQBool reached_eof;
     SQChar lasterror[256];
     SQLexerData()
     {
@@ -77,11 +77,11 @@ struct SQLexer
                 CompilerErrorFunc efunc,void *ed, SQBool want_comments=SQFalse);
 	SQInteger ResetReader(SQLEXREADFUNC rg, SQUserPointer up, SQInteger line);
 	virtual SQTable * GetKeywords();
-	SQInteger Error(const SQChar *err, ...);
+	SQInteger Error(const SQChar *err, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
 	SQInteger Lex();
 	SQInteger LookaheadLex();
 	const SQChar *Tok2Str(SQInteger tok);
-	const SQChar *GetTokenName(int tk_code);
+	const SQChar *GetTokenName(SQInteger tk_code);
 private:
 	SQInteger GetIDType(const SQChar *s,SQInteger len);
 	SQInteger ReadString(SQInteger ndelim,bool verbatim);

+ 1 - 0
SquiLu/squirrel/sqmem.cpp

@@ -11,6 +11,7 @@ void sq_vm_free(void *p, SQUnsignedInteger SQ_UNUSED_ARG(size)){ free(p); }
 #endif
 
 #ifdef CUSTOM_DELETE_OPERATOR
+//made public to allow link without libstdc++
 void operator delete(void *p, unsigned long len)
 {
 	printf("DELETE SHOULD NOT BE CALLED %p : %d\n", p, (int)len);

+ 82 - 73
SquiLu/squirrel/sqobject.cpp

@@ -318,6 +318,7 @@ static bool SafeWrite(HSQUIRRELVM v,SQWRITEFUNC write,SQUserPointer up,SQUserPoi
 	return true;
 }
 
+static bool SafeWriteFmt(HSQUIRRELVM v,SQWRITEFUNC write,SQUserPointer up, const SQChar *fmt, ...) __attribute__ ((__format__ (__printf__, 4, 5)));
 static bool SafeWriteFmt(HSQUIRRELVM v,SQWRITEFUNC write,SQUserPointer up, const SQChar *fmt, ...)
 {
     if(fmt){
@@ -678,7 +679,7 @@ bool SQFunctionProto::SaveAsSource(SQVM *v,SQUserPointer up,SQWRITEFUNC write)
 
 	SafeWriteFmt(v,write,up,"\tliterals = [\n");
 	for(i=0;i<nliterals;i++){
-		SafeWriteFmt(v,write,up,"\t\t/*%d*/ ", i);
+		SafeWriteFmt(v,write,up,"\t\t/*" _PRINT_INT_FMT "*/ ", i);
 		_CHECK_IO(WriteObjectAsCode(v,up,write,_literals[i], false));
 		SafeWriteFmt(v,write,up,",\n");
 	}
@@ -686,7 +687,7 @@ bool SQFunctionProto::SaveAsSource(SQVM *v,SQUserPointer up,SQWRITEFUNC write)
 
 	SafeWriteFmt(v,write,up,"\tparameters = [\n");
 	for(i=0;i<nparameters;i++){
-		SafeWriteFmt(v,write,up,"\t\t/*%d*/ ", i);
+		SafeWriteFmt(v,write,up,"\t\t/*" _PRINT_INT_FMT "*/ ", i);
 		_CHECK_IO(WriteObjectAsCode(v,up,write,_parameters[i]));
 		SafeWriteFmt(v,write,up,",\n");
 	}
@@ -694,7 +695,7 @@ bool SQFunctionProto::SaveAsSource(SQVM *v,SQUserPointer up,SQWRITEFUNC write)
 
 	SafeWriteFmt(v,write,up,"\toutervalues = [\n\t\t//[type, src, name],\n");
 	for(i=0;i<noutervalues;i++){
-		SafeWriteFmt(v,write,up,"\t\t/*%d*/ [%d, ", i, _outervalues[i]._type);
+		SafeWriteFmt(v,write,up,"\t\t/*" _PRINT_INT_FMT "*/ [" _PRINT_INT_FMT ", ", i, (SQInteger)_outervalues[i]._type);
 		_CHECK_IO(WriteObjectAsCode(v,up,write,_outervalues[i]._src));
 		SafeWriteFmt(v,write,up,", ");
 		_CHECK_IO(WriteObjectAsCode(v,up,write,_outervalues[i]._name));
@@ -705,28 +706,28 @@ bool SQFunctionProto::SaveAsSource(SQVM *v,SQUserPointer up,SQWRITEFUNC write)
 	SafeWriteFmt(v,write,up,"\tlocalvarinfos = [\n\t\t//[pos, name, start_op, end_op, scope, type, type_name, dtype_name],\n");
 	for(i=0;i<nlocalvarinfos;i++){
 	    SQLocalVarInfo &lvi=_localvarinfos[nlocalvarinfos-1-i];
-		SafeWriteFmt(v,write,up,"\t\t/*%d*/ [", i);
-		SafeWriteFmt(v,write,up,"%d, ", lvi._pos);
+		SafeWriteFmt(v,write,up,"\t\t/*" _PRINT_INT_FMT "*/ [", i);
+		SafeWriteFmt(v,write,up, _PRINT_INT_FMT ", ", lvi._pos);
 		_CHECK_IO(WriteObjectAsCode(v,up,write,lvi._name));
-		SafeWriteFmt(v,write,up,", %d", lvi._start_op);
-		SafeWriteFmt(v,write,up,", %d", lvi._end_op);
-		SafeWriteFmt(v,write,up,", %d", lvi._scope);
+		SafeWriteFmt(v,write,up,", " _PRINT_INT_FMT, lvi._start_op);
+		SafeWriteFmt(v,write,up,", " _PRINT_INT_FMT, lvi._end_op);
+		SafeWriteFmt(v,write,up,", " _PRINT_INT_FMT, (SQInteger)lvi._scope);
 		const char* type_name = (sq_type(lvi._type_name) == OT_STRING) ? _stringval(lvi._type_name) : "";
-		SafeWriteFmt(v,write,up,", %d, \"%s\", \"%s\"],\n", lvi._type, SQGetVarTypeName(lvi._type), type_name);
+		SafeWriteFmt(v,write,up,", " _PRINT_INT_FMT ", \"%s\", \"%s\"],\n", (SQInteger)lvi._type, SQGetVarTypeName(lvi._type), type_name);
 	}
     SafeWriteFmt(v,write,up,"\t],\n");
 
 	SafeWriteFmt(v,write,up,"\tlineinfos = [\n\t\t//[op, line],\n");
 	for(i=0;i<nlineinfos;i++){
 	    SQLineInfo &li=_lineinfos[i];
-		SafeWriteFmt(v,write,up,"\t\t/*%d*/ [%d, %d], /*%s*/\n", i, li._op, li._line,
+		SafeWriteFmt(v,write,up,"\t\t/*" _PRINT_INT_FMT "*/ [" _PRINT_INT_FMT ", " _PRINT_INT_FMT "], /*%s*/\n", i, li._op, li._line,
             SQGetOpName(_instructions[li._op].op));
 	}
     SafeWriteFmt(v,write,up,"\t],\n");
 
 	SafeWriteFmt(v,write,up,"\tdefaultparams = [");
 	for(i=0;i<ndefaultparams;i++){
-		SafeWriteFmt(v,write,up,"%d,", _defaultparams[i]);
+		SafeWriteFmt(v,write,up,_PRINT_INT_FMT ",", _defaultparams[i]);
 	}
     SafeWriteFmt(v,write,up,"],\n");
 
@@ -736,26 +737,26 @@ bool SQFunctionProto::SaveAsSource(SQVM *v,SQUserPointer up,SQWRITEFUNC write)
 	for(i=0;i<ninstructions;i++){
 	    SQInstruction &inst = _instructions[i];
         str_op = SQGetOpName(inst.op);
-		SafeWriteFmt(v,write,up,"\t\t/*%d*/ [\"%s\", %d, %d, %d, %d, %d],", i, str_op, inst.op, inst._arg0, inst._arg1, inst._arg2, inst._arg3);
+		SafeWriteFmt(v,write,up,"\t\t/*" _PRINT_INT_FMT "*/ [\"%s\", " _PRINT_INT_FMT ", " _PRINT_INT_FMT ", " _PRINT_INT_FMT ", " _PRINT_INT_FMT ", " _PRINT_INT_FMT "],", i, str_op, (SQInteger)inst.op, (SQInteger)inst._arg0, (SQInteger)inst._arg1, (SQInteger)inst._arg2, (SQInteger)inst._arg3);
 
         switch(inst.op){
             case _OP_LOAD:
             case _OP_DLOAD:
             case _OP_GETK:{
                 SQInteger lidx = inst._arg1;
-                if(lidx >= 0xFFFFFFFF) SafeWriteFmt(v,write,up,"\t\t/* stk[%d] <- null */", inst._arg0);
+                if(lidx >= MAX_CHAR) SafeWriteFmt(v,write,up,"\t\t/* stk[" _PRINT_INT_FMT "] <- null */", (SQInteger)inst._arg0);
                 else
                 {
                     const SQChar *str_name = sq_isstring(_literals[lidx]) ? _stringval(_literals[lidx]) : "?";
-                    SafeWriteFmt(v,write,up,"\t\t/* stk[%d] <- literals[%d](\"%s\") */", inst._arg0, lidx, str_name);
+                    SafeWriteFmt(v,write,up,"\t\t/* stk[" _PRINT_INT_FMT "] <- literals[" _PRINT_INT_FMT "](\"%s\") */", (SQInteger)inst._arg0, lidx, str_name);
                     //_CHECK_IO(WriteObjectAsCode(v,up,write,_literals[lidx], false));
                     //SafeWriteFmt(v,write,up," */");
                 }
                 if(inst.op == _OP_DLOAD) {
                     lidx = inst._arg3;
-                    if(lidx >= 0xFFFFFFFF)  SafeWriteFmt(v,write,up," /* stk[%d] <- null */", inst._arg2);
+                    if(lidx >= MAX_CHAR)  SafeWriteFmt(v,write,up," /* stk[" _PRINT_INT_FMT "] <- null */", (SQInteger)inst._arg2);
                     else {
-                        SafeWriteFmt(v,write,up," /* stk[%d] <- literals[%d] ", inst._arg2, lidx);
+                        SafeWriteFmt(v,write,up," /* stk[" _PRINT_INT_FMT "] <- literals[" _PRINT_INT_FMT "] ", (SQInteger)inst._arg2, lidx);
                         _CHECK_IO(WriteObjectAsCode(v,up,write,_literals[lidx], false));
                         SafeWriteFmt(v,write,up," */");
                     }
@@ -763,38 +764,41 @@ bool SQFunctionProto::SaveAsSource(SQVM *v,SQUserPointer up,SQWRITEFUNC write)
             }
             break;
             case _OP_GET:
-                    SafeWriteFmt(v,write,up,"\t/* stk_at_arg0[%d] = stk_at_arg1[%d].get(stk_at_arg2(%d)) */",
-                                inst._arg0, inst._arg1, inst._arg2);
+                    SafeWriteFmt(v,write,up,"\t/* stk_at_arg0[" _PRINT_INT_FMT "] = stk_at_arg1[" _PRINT_INT_FMT "].get(stk_at_arg2(" _PRINT_INT_FMT ")) */",
+                                (SQInteger)inst._arg0, (SQInteger)inst._arg1, (SQInteger)inst._arg2);
             break;
             case _OP_SET:
-                    SafeWriteFmt(v,write,up,"\t/* stk_at_arg1[%d].set(stk_at_arg2(%d), stk_at_arg3(%d)) */",
-                                inst._arg1, inst._arg2, inst._arg3);
+                    SafeWriteFmt(v,write,up,"\t/* stk_at_arg1[" _PRINT_INT_FMT "].set(stk_at_arg2(" _PRINT_INT_FMT "), stk_at_arg3(" _PRINT_INT_FMT ")) */",
+                                (SQInteger)inst._arg1, (SQInteger)inst._arg2, (SQInteger)inst._arg3);
             break;
             case _OP_PREPCALLK:
             case _OP_PREPCALL:
-                    SafeWriteFmt(v,write,up,"\t/* closure_at_stk[%d], stk[%d].get(%s[%d]) -> stk[%d] */",
-                                inst._arg0, inst._arg2, inst.op == _OP_PREPCALLK ? "literals" : "stk", inst._arg1, inst._arg3);
+                    SafeWriteFmt(v,write,up,"\t/* closure_at_stk[" _PRINT_INT_FMT "], stk[" _PRINT_INT_FMT "].get(%s[" _PRINT_INT_FMT "]) -> stk[" _PRINT_INT_FMT "] */",
+                                (SQInteger)inst._arg0, (SQInteger)inst._arg2, inst.op == _OP_PREPCALLK ? "literals" : "stk",
+                                (SQInteger)inst._arg1, (SQInteger)inst._arg3);
             break;
             case _OP_LOADFLOAT:
                     SafeWriteFmt(v,write,up,"\t/* %f */", *((SQFloat32*)&inst._arg1));
             break;
             case _OP_GETOUTER:
-                    SafeWriteFmt(v,write,up,"\t/* stk[%d] <- outervalues[%d] == (%s) */",
-                                inst._arg0, inst._arg1, _stringval(_outervalues[inst._arg1]._name));
+                    SafeWriteFmt(v,write,up,"\t/* stk[" _PRINT_INT_FMT "] <- outervalues[" _PRINT_INT_FMT "] == (%s) */",
+                                (SQInteger)inst._arg0, (SQInteger)inst._arg1, _stringval(_outervalues[inst._arg1]._name));
             break;
             case _OP_CALL:
             {
                     SQLocalVarInfo &lvi=_localvarinfos[nlocalvarinfos-1-inst._arg1];
                     const SQChar *str_name =  sq_isstring(lvi._name) ? _stringval(lvi._name) : "?";
-                    SafeWriteFmt(v,write,up,"\t\t/* target[%d], lvi[%d](\"%s\"), stackbase(%d), nargs(%d) */",
-                                inst._arg0, inst._arg1, str_name, inst._arg2, inst._arg3);
+                    SafeWriteFmt(v,write,up,"\t\t/* target[" _PRINT_INT_FMT "], lvi[" _PRINT_INT_FMT "](\"%s\"), stackbase(" _PRINT_INT_FMT "), nargs(" _PRINT_INT_FMT ") */",
+                                (SQInteger)inst._arg0, (SQInteger)inst._arg1, str_name,
+                                (SQInteger)inst._arg2, (SQInteger)inst._arg3);
             }
             break;
             case _OP_MOVE:
             {
                     SQLocalVarInfo &lvi=_localvarinfos[nlocalvarinfos-1-inst._arg1];
                     const SQChar *str_name =  sq_isstring(lvi._name) ? _stringval(lvi._name) : "?";
-                    SafeWriteFmt(v,write,up,"\t\t/* stk[%d] <- lvi[%d](\"%s\") */", inst._arg0, inst._arg1, str_name);
+                    SafeWriteFmt(v,write,up,"\t\t/* stk[" _PRINT_INT_FMT "] <- lvi[" _PRINT_INT_FMT "](\"%s\") */",
+                        (SQInteger)inst._arg0, (SQInteger)inst._arg1, str_name);
             }
             break;
             case _OP_DMOVE:
@@ -803,73 +807,79 @@ bool SQFunctionProto::SaveAsSource(SQVM *v,SQUserPointer up,SQWRITEFUNC write)
                     const SQChar *str_name1 =  sq_isstring(lvi1._name) ? _stringval(lvi1._name) : "?";
                     SQLocalVarInfo &lvi2=_localvarinfos[nlocalvarinfos-1-inst._arg3];
                     const SQChar *str_name2 =  sq_isstring(lvi2._name) ? _stringval(lvi2._name) : "?";
-                    SafeWriteFmt(v,write,up,"\t/* stk[%d] <- lvi[%d](\"%s\"), stk[%d] <- lvi[%d](\"%s\") */",
-                                inst._arg0, inst._arg1, str_name1, inst._arg2, inst._arg3, str_name2);
+                    SafeWriteFmt(v,write,up,"\t/* stk[" _PRINT_INT_FMT "] <- lvi[" _PRINT_INT_FMT "](\"%s\"), stk[" _PRINT_INT_FMT "] <- lvi[" _PRINT_INT_FMT "](\"%s\") */",
+                                (SQInteger)inst._arg0, (SQInteger)inst._arg1, str_name1,
+                                (SQInteger)inst._arg2, (SQInteger)inst._arg3, str_name2);
             }
             break;
             case _OP_LOADINT:
-                    SafeWriteFmt(v,write,up,"\t/* stk[%d] <- arg1(%d) */", inst._arg0, inst._arg1);
+                    SafeWriteFmt(v,write,up,"\t/* stk[" _PRINT_INT_FMT "] <- arg1(" _PRINT_INT_FMT ") */",
+                        (SQInteger)inst._arg0, (SQInteger)inst._arg1);
             break;
             case _OP_EQ:
-                    SafeWriteFmt(v,write,up,"\t\t/* stk_at_arg0[%d] = stk_at_arg2[%d] == (arg3(%d) !=0 ? literals_at_arg1[%d] : stk_at_arg1[%d]) */",
-                                inst._arg0, inst._arg2, inst._arg3, inst._arg1, inst._arg1);
+                    SafeWriteFmt(v,write,up,"\t\t/* stk_at_arg0[" _PRINT_INT_FMT "] = stk_at_arg2[" _PRINT_INT_FMT "] == (arg3(" _PRINT_INT_FMT ") !=0 ? literals_at_arg1[" _PRINT_INT_FMT "] : stk_at_arg1[" _PRINT_INT_FMT "]) */",
+                                (SQInteger)inst._arg0, (SQInteger)inst._arg2, (SQInteger)inst._arg3, (SQInteger)inst._arg1, (SQInteger)inst._arg1);
             break;
             case _OP_NOT:
-                    SafeWriteFmt(v,write,up,"\t\t/* stk_at_arg0[%d] = IsFalse(stk_at_arg1[%d]) */",
-                                inst._arg0, inst._arg1);
+                    SafeWriteFmt(v,write,up,"\t\t/* stk_at_arg0[" _PRINT_INT_FMT "] = IsFalse(stk_at_arg1[" _PRINT_INT_FMT "]) */",
+                                (SQInteger)inst._arg0, (SQInteger)inst._arg1);
             break;
             case _OP_AND:
             case _OP_OR:
-                    SafeWriteFmt(v,write,up,"\t\t/* %s(stk_at_arg2[%d]) {stk_at_arg0[%d] = stk[%d]; goto[%d]} */",
+                    SafeWriteFmt(v,write,up,"\t\t/* %s(stk_at_arg2[" _PRINT_INT_FMT "]) {stk_at_arg0[" _PRINT_INT_FMT "] = stk[" _PRINT_INT_FMT "]; goto[" _PRINT_INT_FMT "]} */",
                                 ((inst.op == _OP_OR) ? "IsTrue" : "IsFalse"),
-                                inst._arg2, inst._arg0, inst._arg2, i + inst._arg1 + 1);
+                                (SQInteger)inst._arg2, (SQInteger)inst._arg0,
+                                (SQInteger)inst._arg2, i + inst._arg1 + 1);
             break;
             case _OP_JZ:
-                    SafeWriteFmt(v,write,up,"\t\t/* IsFalse(STK(%d) (ci->_ip+=(%d) -> goto[%d]) */",
-                                inst._arg0, inst._arg1, i + inst._arg1 + 1);
+                    SafeWriteFmt(v,write,up,"\t\t/* IsFalse(STK(" _PRINT_INT_FMT ") (ci->_ip+=(" _PRINT_INT_FMT ") -> goto[" _PRINT_INT_FMT "]) */",
+                                (SQInteger)inst._arg0, (SQInteger)inst._arg1, i + inst._arg1 + 1);
             break;
             case _OP_JCMP:
-                    SafeWriteFmt(v,write,up,"\t\t/* IsFalse(STK(%d) %s STK(%d)) (ci->_ip+=(%d) -> goto[%d]) */",
-                                inst._arg2, SQGetCmpOpName(inst._arg3), inst._arg0, inst._arg1, i + inst._arg1 + 1);
+                    SafeWriteFmt(v,write,up,"\t\t/* IsFalse(STK(" _PRINT_INT_FMT ") %s STK(" _PRINT_INT_FMT ")) (ci->_ip+=(" _PRINT_INT_FMT ") -> goto[" _PRINT_INT_FMT "]) */",
+                                (SQInteger)inst._arg2, SQGetCmpOpName(inst._arg3),
+                                (SQInteger)inst._arg0, (SQInteger)inst._arg1, i + inst._arg1 + 1);
             break;
             case _OP_JMP:
-                    SafeWriteFmt(v,write,up,"\t\t/* (ci->_ip+=(%d)) -> goto[%d] */",
-                                inst._arg1, i + inst._arg1 + 1);
+                    SafeWriteFmt(v,write,up,"\t\t/* (ci->_ip+=(" _PRINT_INT_FMT ")) -> goto[" _PRINT_INT_FMT "] */",
+                                (SQInteger)inst._arg1, i + inst._arg1 + 1);
             break;
             case _OP_RETURN:
-                    SafeWriteFmt(v,write,up,"\t/* _arg0(%d) != 255 ? stk[%d] : null */",
-                                inst._arg0, inst._arg1);
+                    SafeWriteFmt(v,write,up,"\t/* _arg0(" _PRINT_INT_FMT ") != 255 ? stk[" _PRINT_INT_FMT "] : null */",
+                                (SQInteger)inst._arg0, (SQInteger)inst._arg1);
             break;
             case _OP_NEWOBJ:
-                    SafeWriteFmt(v,write,up,"\t/* stk[%d], len(%d), %s(%d) */",
-                                inst._arg0, inst._arg1, SQGetNewObjTypeName(inst._arg3), inst._arg3);
+                    SafeWriteFmt(v,write,up,"\t/* stk[" _PRINT_INT_FMT "], len(" _PRINT_INT_FMT "), %s(" _PRINT_INT_FMT ") */",
+                                (SQInteger)inst._arg0, (SQInteger)inst._arg1, SQGetNewObjTypeName(inst._arg3), (SQInteger)inst._arg3);
             break;
             case _OP_APPENDARRAY:
-                    SafeWriteFmt(v,write,up,"\t/* array_at_stk(%d), %s(%d), sq_type(%d) */",
-                                inst._arg0, SQGetArrayAppendTypeName(inst._arg2), inst._arg1, inst._arg2);
+                    SafeWriteFmt(v,write,up,"\t/* array_at_stk(" _PRINT_INT_FMT "), %s(" _PRINT_INT_FMT "), sq_type(" _PRINT_INT_FMT ") */",
+                                (SQInteger)inst._arg0, SQGetArrayAppendTypeName(inst._arg2),
+                                (SQInteger)inst._arg1, (SQInteger)inst._arg2);
             break;
             case _OP_NEWSLOT:
             case _OP_NEWSLOTA:
-                    SafeWriteFmt(v,write,up,"\t/* flags(%d), table_at_stk(%d),  key_at_stk(%d), val_at_stk(%d) */",
-                                inst._arg0, inst._arg1, inst._arg2, inst._arg3);
+                    SafeWriteFmt(v,write,up,"\t/* flags(" _PRINT_INT_FMT "), table_at_stk(" _PRINT_INT_FMT "),  key_at_stk(" _PRINT_INT_FMT "), val_at_stk(" _PRINT_INT_FMT ") */",
+                                (SQInteger)inst._arg0, (SQInteger)inst._arg1,
+                                (SQInteger)inst._arg2, (SQInteger)inst._arg3);
             break;
             case _OP_LOADBOOL:
-                    SafeWriteFmt(v,write,up,"\t/* stk[%d] <- bool(%d) */",
-                                inst._arg0, inst._arg2);
+                    SafeWriteFmt(v,write,up,"\t/* stk[" _PRINT_INT_FMT "] <- bool(" _PRINT_INT_FMT ") */",
+                                (SQInteger)inst._arg0, (SQInteger)inst._arg2);
             break;
             case _OP_LOADNULLS:
-                    SafeWriteFmt(v,write,up,"\t/* stk_at_arg0[%d .. (arg0 + arg1(%d))] = null */",
-                                inst._arg0, inst._arg1);
+                    SafeWriteFmt(v,write,up,"\t/* stk_at_arg0[" _PRINT_INT_FMT ".. (arg0 + arg1(" _PRINT_INT_FMT "))] = null */",
+                                (SQInteger)inst._arg0, (SQInteger)inst._arg1);
             break;
             case _OP_LOADROOT:
-                    SafeWriteFmt(v,write,up,"\t/* stk_at_arg0[%d] <- roottable */",
-                                inst._arg0);
+                    SafeWriteFmt(v,write,up,"\t/* stk_at_arg0[" _PRINT_INT_FMT "] <- roottable */",
+                                (SQInteger)inst._arg0);
             break;
             case _OP_CLOSURE:
-                    SafeWriteFmt(v,write,up,"\t/* stk_at_arg0[%d] <- functions[%d](",
-                                inst._arg0, inst._arg1);
+                    SafeWriteFmt(v,write,up,"\t/* stk_at_arg0[" _PRINT_INT_FMT "] <- functions[" _PRINT_INT_FMT "](",
+                                (SQInteger)inst._arg0, (SQInteger)inst._arg1);
                     _CHECK_IO(WriteObjectAsCode(v,up,write,_funcproto(_functions[inst._arg1])->_name));
-                    SafeWriteFmt(v,write,up,"), isLanbda(%d) */", inst._arg2);
+                    SafeWriteFmt(v,write,up,"), isLanbda(" _PRINT_INT_FMT ") */", (SQInteger)inst._arg2);
             break;
             case _OP_ADD:
             case _OP_SUB:
@@ -881,21 +891,21 @@ bool SQFunctionProto::SaveAsSource(SQVM *v,SQUserPointer up,SQWRITEFUNC write)
                     const SQChar *str_name1 =  sq_isstring(lvi1._name) ? _stringval(lvi1._name) : "?";
                     SQLocalVarInfo &lvi2=_localvarinfos[nlocalvarinfos-1-inst._arg2];
                     const SQChar *str_name2 =  sq_isstring(lvi2._name) ? _stringval(lvi2._name) : "?";
-                    SafeWriteFmt(v,write,up,"\t\t/* stk[%d] = stk[%d](\"%s\") %s stk[%d](\"%s\") */",
-                                inst._arg0, inst._arg1, str_name1, SQGetArithOpName(inst.op), inst._arg2, str_name2);
+                    SafeWriteFmt(v,write,up,"\t\t/* stk[" _PRINT_INT_FMT "] = stk[" _PRINT_INT_FMT "](\"%s\") %s stk[" _PRINT_INT_FMT "](\"%s\") */",
+                                (SQInteger)inst._arg0, (SQInteger)inst._arg1, str_name1, SQGetArithOpName(inst.op), (SQInteger)inst._arg2, str_name2);
             }
             break;
             case _OP_INCL:
-                    SafeWriteFmt(v,write,up,"\t\t/* stk[%d] = stk[%d] + sarg3(%d) */",
-                                inst._arg1, inst._arg1, ((char)inst._arg3));
+                    SafeWriteFmt(v,write,up,"\t\t/* stk[" _PRINT_INT_FMT "] = stk[" _PRINT_INT_FMT "] + sarg3(%c) */",
+                                (SQInteger)inst._arg1, (SQInteger)inst._arg1, ((char)inst._arg3));
             break;
             case _OP_PINCL:
-                    SafeWriteFmt(v,write,up,"\t\t/* target = stk(%d); stk[%d] = stk[%d] + sarg3(%d) */",
-                                inst._arg1, inst._arg1, inst._arg1, ((char)inst._arg3));
+                    SafeWriteFmt(v,write,up,"\t\t/* target = stk(" _PRINT_INT_FMT "); stk[" _PRINT_INT_FMT "] = stk[" _PRINT_INT_FMT "] + sarg3(%c) */",
+                                (SQInteger)inst._arg1, (SQInteger)inst._arg1, (SQInteger)inst._arg1, ((char)inst._arg3));
             break;
             case _OP_BITW:
-                    SafeWriteFmt(v,write,up,"\t\t/* stk[%d] = stk[%d] %s stk[%d] */",
-                                inst._arg0, inst._arg1, SQGetBitwiseOpName(inst._arg3), inst._arg2);
+                    SafeWriteFmt(v,write,up,"\t\t/* stk[" _PRINT_INT_FMT "] = stk[" _PRINT_INT_FMT "] %s stk[" _PRINT_INT_FMT "] */",
+                                (SQInteger)inst._arg0, (SQInteger)inst._arg1, SQGetBitwiseOpName(inst._arg3), (SQInteger)inst._arg2);
             break;
             //default:
         }
@@ -905,15 +915,15 @@ bool SQFunctionProto::SaveAsSource(SQVM *v,SQUserPointer up,SQWRITEFUNC write)
 
 	SafeWriteFmt(v,write,up,"\tfunctions = [\n");
 	for(i=0;i<nfunctions;i++){
-	    SafeWriteFmt(v,write,up,"/*function %d*/", i);
+	    SafeWriteFmt(v,write,up,"/*function " _PRINT_INT_FMT "*/", i);
 	    _CHECK_IO(_funcproto(_functions[i])->SaveAsSource(v,up,write));
 	    SafeWriteFmt(v,write,up,",\n");
 	}
     SafeWriteFmt(v,write,up,"\t],\n");
 
-	SafeWriteFmt(v,write,up,"\tstacksize = %d,\n", _stacksize);
-	SafeWriteFmt(v,write,up,"\tbgenerator = %d,\n", _bgenerator);
-	SafeWriteFmt(v,write,up,"\tvarparams = %d,\n", _varparams);
+	SafeWriteFmt(v,write,up,"\tstacksize = " _PRINT_INT_FMT ",\n", _stacksize);
+	SafeWriteFmt(v,write,up,"\tbgenerator = " _PRINT_INT_FMT ",\n", (SQInteger)_bgenerator);
+	SafeWriteFmt(v,write,up,"\tvarparams = " _PRINT_INT_FMT ",\n", _varparams);
 	SafeWriteFmt(v,write,up,"}");
 	return true;
 }
@@ -971,12 +981,11 @@ bool SQFunctionProto::Load(SQVM *v,SQUserPointer up,SQREADFUNC read,SQObjectPtr
 	_CHECK_IO(CheckTag(v,read,up,SQ_CLOSURESTREAM_PART));
 
 	for(i = 0; i < nlocalvarinfos; i++){
-		SQLocalVarInfo lvi;
+		SQLocalVarInfo &lvi = f->_localvarinfos[i];
 		_CHECK_IO(ReadObject(v, up, read, lvi._name));
 		_CHECK_IO(SafeRead(v,read,up, &lvi._pos, sizeof(SQUnsignedInteger)));
 		_CHECK_IO(SafeRead(v,read,up, &lvi._start_op, sizeof(SQUnsignedInteger)));
 		_CHECK_IO(SafeRead(v,read,up, &lvi._end_op, sizeof(SQUnsignedInteger)));
-		f->_localvarinfos[i] = lvi;
 	}
 	_CHECK_IO(CheckTag(v,read,up,SQ_CLOSURESTREAM_PART));
 	_CHECK_IO(SafeRead(v,read,up, f->_lineinfos, sizeof(SQLineInfo)*nlineinfos));

+ 9 - 17
SquiLu/squirrel/sqstate.cpp

@@ -25,8 +25,8 @@ SQSharedState::SQSharedState()
 	_errorfunc = NULL;
 	_debuginfo = false;
 	_notifyallexceptions = false;
-    _foreignptr = NULL;
-    _releasehook = NULL;
+	_foreignptr = NULL;
+	_releasehook = NULL;
 #ifdef SQ_WITH_DELAYED_RELEASE_HOOKS
 	_already_in_CallDelayedReleaseHooks = false;
 #endif // SQ_WITH_DELAYED_RELEASE_HOOKS
@@ -87,7 +87,7 @@ bool CompileTypemask(SQIntVec &res,const SQChar *typemask)
 	return true;
 }
 
-SQTable *CreateDefaultDelegate(SQSharedState *ss,const SQRegFunction *funcz)
+static SQTable *CreateDefaultDelegate(SQSharedState *ss,const SQRegFunction *funcz)
 {
 	SQInteger i=0;
 	SQTable *t=SQTable::Create(ss,0);
@@ -118,20 +118,12 @@ void SQSharedState::Init()
 	_defined_names = SQTable::Create(this,0);
 #define SQUILU_NAME_BASE "__SQUILU_"
 	_define_squilu = SQString::Create(this,_SC(SQUILU_NAME_BASE "_"));
-	_define_squilu_int_sz = SQString::Create(this,_SC(SQUILU_NAME_BASE
-#ifdef _SQ64
-        "INT_SZ8__"
-#else
-        "INT_SZ4__"
-#endif // _SQ64
-        ));
-	_define_squilu_float_sz = SQString::Create(this,_SC(SQUILU_NAME_BASE
-#ifdef SQUSEDOUBLE
-        "FLOAT_SZ8__"
-#else
-        "FLOAT_SZ4__"
-#endif // _SQ64
-        ));
+	_define_squilu_int_sz = SQString::Create(this,
+        _SC((sizeof(SQInteger) == 8) ? SQUILU_NAME_BASE "INT_SZ8__" :
+            SQUILU_NAME_BASE "INT_SZ4__"));
+	_define_squilu_float_sz = SQString::Create(this,
+        _SC((sizeof(SQFloat) == 8) ? SQUILU_NAME_BASE "FLOAT_SZ8__" :
+            SQUILU_NAME_BASE "FLOAT_SZ4__"));
 	_define_squilu_ptr_sz = SQString::Create(this,
         _SC((sizeof(void *) == 8) ? SQUILU_NAME_BASE "PTR_SZ8__" :
             SQUILU_NAME_BASE "PTR_SZ4__"));

+ 7 - 6
SquiLu/squirrel/sqstate.h

@@ -131,17 +131,18 @@ public:
 	SQCOMPILERERROR _compilererrorhandler;
 	SQPRINTFUNCTION _printfunc;
 	SQPRINTFUNCTION _errorfunc;
-	bool _debuginfo;
-	bool _notifyallexceptions;
-    SQUserPointer _foreignptr;
-    SQRELEASEHOOK _releasehook;
+	SQUserPointer _foreignptr;
+	SQRELEASEHOOK _releasehook;
 private:
 	SQChar *_scratchpad;
 	SQInteger _scratchpadsize;
 #ifdef SQ_WITH_DELAYED_RELEASE_HOOKS
-    bool _already_in_CallDelayedReleaseHooks;
-    sqvector<SQDelayedReleseHook> _delayed_release_hook;
+	bool _already_in_CallDelayedReleaseHooks;
+	sqvector<SQDelayedReleseHook> _delayed_release_hook;
 #endif // SQ_WITH_DELAYED_RELEASE_HOOKS
+public: //moved here for alignment purposes
+	bool _debuginfo;
+	bool _notifyallexceptions;
 };
 
 #define _sp(s) (_sharedstate->GetScratchPad(s))

+ 5 - 7
SquiLu/squirrel/sqvm.cpp

@@ -221,7 +221,7 @@ bool SQVM::ArithMetaMethod(SQInteger op,const SQObjectPtr &o1,const SQObjectPtr
 			return CallMetaMethod(closure,mm,2,dest);
 		}
 	}
-	Raise_Error(_SC("arith op %c on between '%s' and '%s'"),op,GetTypeName(o1),GetTypeName(o2));
+	Raise_Error(_SC("arith op %c on between '%s' and '%s'"),(int)op,GetTypeName(o1),GetTypeName(o2));
 	return false;
 }
 
@@ -1791,7 +1791,8 @@ bool SQVM::NewSlot(const SQObjectPtr &self,const SQObjectPtr &key,const SQObject
 		}
 		Raise_Error(_SC("class instances do not support the new slot operator"));
 		return false;
-		break;}
+		}
+		break;
 	case OT_CLASS:
 		if(!_class(self)->NewSlot(_ss(this),key,val,bstatic)) {
 			if(_class(self)->_locked) {
@@ -1808,7 +1809,6 @@ bool SQVM::NewSlot(const SQObjectPtr &self,const SQObjectPtr &key,const SQObject
 	default:
 		Raise_Error(_SC("indexing %s with %s"),GetTypeName(self),GetTypeName(key));
 		return false;
-		break;
 	}
 	return true;
 }
@@ -1861,12 +1861,10 @@ SQInteger prevstackbase = _stackbase;
 	switch(sq_type(closure)) {
 	case OT_CLOSURE:
 		return Execute(closure, nparams, stackbase, outres, raiseerror);
-		break;
 	case OT_NATIVECLOSURE:{
 		bool dummy;
 		return CallNative(_nativeclosure(closure), nparams, stackbase, outres, -1, dummy, dummy);
-
-						  }
+		}
 		break;
 	case OT_CLASS: {
 		SQObjectPtr constr;
@@ -1878,7 +1876,7 @@ SQInteger prevstackbase = _stackbase;
 			return Call(constr,nparams,stackbase,temp,raiseerror);
 		}
 		return true;
-				   }
+		}
 		break;
 	default:
 		return false;

+ 1 - 1
SquiLu/squirrel/sqvm.h

@@ -97,7 +97,7 @@ public:
 	SQString *PrintObjVal(const SQObjectPtr &o);
 
 
-	void Raise_Error(const SQChar *s, ...);
+	void Raise_Error(const SQChar *s, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
 	void Raise_Error(const SQObjectPtr &desc);
 	void Raise_IdxError(const SQObjectPtr &o);
 	void Raise_CompareError(const SQObject &o1, const SQObject &o2);

+ 28 - 28
SquiLu/squirrel/sublatin.c

@@ -132,7 +132,7 @@ const unsigned char isUpperMapTable[] = { //0
 int nstrLenSubSetLatinUtf8( const char *str, int n )
 {
 	int result = 0;
-	unsigned char *pstr = ( unsigned char * )str;
+	const unsigned char *pstr = ( const unsigned char * )str;
 
 	while ( *pstr && (--n >= 0) ) {
 		// an error when an utf8 char  is formed by 195#195 ???
@@ -146,7 +146,7 @@ int nstrLenSubSetLatinUtf8( const char *str, int n )
 
 int strLenSubSetLatinUtf8( const char *str ) {
 	int result = 0;
-	unsigned char *pstr = ( unsigned char * )str;
+	const unsigned char *pstr = ( const unsigned char * )str;
 
 	while ( *pstr ) {
 		// an error when an utf8 char  is formed by 195#195 ???
@@ -160,7 +160,7 @@ int strLenSubSetLatinUtf8( const char *str ) {
 
 int isDeaccentableSubSetLatinUtf8( const char *str ) {
 	unsigned int c1, c2;
-	unsigned char *pstr = ( unsigned char * )str;
+	const unsigned char *pstr = ( const unsigned char * )str;
 
 	if ( *pstr == 195 ) {
 		c1 = *( pstr + 1 );
@@ -249,17 +249,17 @@ char *toUpperSubSetLatinUtf8( char *str ) {
 }
 
 #define checkToLowerSubSetLatinUtf8( a, b ) \
-	if ( (*(unsigned char *)b) == 195 ) ++b;\
+	if ( (*(const unsigned char *)b) == 195 ) ++b;\
 	a = toLowerMap(*b)
 
 int strICmpSubSetLatinUtf8( const char *zLeft, const char *zRight ) {
 
-	unsigned char *a, *b;
+	const unsigned char *a, *b;
 	unsigned char a2, b2;
 	a2 = b2 = '\0';
 
-	a = ( unsigned char* )zLeft;
-	b = ( unsigned char* )zRight;
+	a = (const  unsigned char* )zLeft;
+	b = ( const unsigned char* )zRight;
 
 	while ( *a && *b) {
 		checkToLowerSubSetLatinUtf8( a2, a );
@@ -275,16 +275,16 @@ int strICmpSubSetLatinUtf8( const char *zLeft, const char *zRight ) {
 }
 
 #define  checkLowerDeAccentSubSetLatinUtf8( a, b ) \
-	if ( (*(unsigned char *)b) == 195 ) b++;\
+	if ( (*(const unsigned char *)b) == 195 ) b++;\
 	a = toLowerDeaccentedMap(*b)
 
 int strICmpSubSetLatinUtf8NoAccents( const char *zLeft, const char *zRight ) {
-	unsigned char *a, *b;
+	const unsigned char *a, *b;
 	unsigned char a2, b2;
 	a2 = b2 = '\0';
 
-	a = ( unsigned char * )zLeft;
-	b = ( unsigned char * )zRight;
+	a = ( const unsigned char * )zLeft;
+	b = ( const unsigned char * )zRight;
 
 	while ( *a && *b) {
 		checkLowerDeAccentSubSetLatinUtf8( a2, a );
@@ -300,16 +300,16 @@ int strICmpSubSetLatinUtf8NoAccents( const char *zLeft, const char *zRight ) {
 }
 
 #define  checkDeAccentSubSetLatinUtf8( a, b ) \
-	if ( (*(unsigned char *)b) == 195 ) b++;\
+	if ( (*(const unsigned char *)b) == 195 ) b++;\
 	a = deAccentMap(*b)
 
 int strCmpSubSetLatinUtf8NoAccents( const char *zLeft, const char *zRight ) {
-	unsigned char *a, *b;
+	const unsigned char *a, *b;
 	unsigned char a2, b2;
 	a2 = b2 = '\0';
 
-	a = ( unsigned char * )zLeft;
-	b = ( unsigned char * )zRight;
+	a = ( const unsigned char * )zLeft;
+	b = ( const unsigned char * )zRight;
 
 	while ( *a && *b) {
 		checkDeAccentSubSetLatinUtf8( a2, a );
@@ -326,12 +326,12 @@ int strCmpSubSetLatinUtf8NoAccents( const char *zLeft, const char *zRight ) {
 
 // the N parameter is expected to be utf8 chars count
 int strNICmpSubSetLatinUtf8( const char *zLeft, const char *zRight, int n ) {
-	unsigned char *a, *b;
+	const unsigned char *a, *b;
 	unsigned char a2, b2;
 	a2 = b2 = '\0';
 
-	a = ( unsigned char * )zLeft;
-	b = ( unsigned char * )zRight;
+	a = ( const unsigned char * )zLeft;
+	b = ( const unsigned char * )zRight;
 
 	while ( *a && *b ) {
 		if ( --n < 0 ) break;
@@ -350,12 +350,12 @@ int strNICmpSubSetLatinUtf8( const char *zLeft, const char *zRight, int n ) {
 
 // the N parameter is expected to be utf8 chars count
 int strNICmpSubSetLatinUtf8NoAccents( const char *zLeft, const char *zRight, int n ) {
-	unsigned char *a, *b;
+	const unsigned char *a, *b;
 	unsigned char a2, b2;
 	a2 = b2 = '\0';
 
-	a = ( unsigned char * )zLeft;
-	b = ( unsigned char * )zRight;
+	a = ( const unsigned char * )zLeft;
+	b = ( const unsigned char * )zRight;
 
 	while ( *a && *b) {
 		if ( --n < 0 ) break;
@@ -374,12 +374,12 @@ int strNICmpSubSetLatinUtf8NoAccents( const char *zLeft, const char *zRight, int
 
 // the N parameter is expected to be utf8 chars count
 int strNCmpSubSetLatinUtf8NoAccents( const char *zLeft, const char *zRight, int n ) {
-	unsigned char *a, *b;
+	const unsigned char *a, *b;
 	unsigned char a2, b2;
 	a2 = b2 = '\0';
 
-	a = ( unsigned char * )zLeft;
-	b = ( unsigned char * )zRight;
+	a = ( const unsigned char * )zLeft;
+	b = ( const unsigned char * )zRight;
 
 	while ( *a && *b) {
 		if ( --n < 0 ) break;
@@ -413,15 +413,15 @@ static int subLatinLikeCompare0(
 	int prevEscape;
 
 #define checkStringChar() \
-	if( *(unsigned char*)(zString+iString) == 195 ) iString++;
+	if( *(const unsigned char*)(zString+iString) == 195 ) iString++;
 #define nextStringChar() \
 	iString++;\
-	if( *(unsigned char*)(zString+iString) == 195 ) iString++;
+	if( *(const unsigned char*)(zString+iString) == 195 ) iString++;
 #define checkPatternChar()\
-	if( *(unsigned char*)(zPattern+iPattern) == 195 ) iPattern++;
+	if( *(const unsigned char*)(zPattern+iPattern) == 195 ) iPattern++;
 #define nextPatternChar()\
 	iPattern++;\
-	if( *(unsigned char*)(zPattern+iPattern) == 195 ) iPattern++;
+	if( *(const unsigned char*)(zPattern+iPattern) == 195 ) iPattern++;
 
 	MATCH_ONE = '_';
 	MATCH_ALL = '%';

Some files were not shown because too many files changed in this diff