Răsfoiți Sursa

Add new parameter for SQCompiler "bool show_warnings" to allow suppress issuing warnings.
This change propagate to several places.

mingodad 13 ani în urmă
părinte
comite
0bca304824

+ 1 - 1
SquiLu-ext/sq_mix.cpp

@@ -31,7 +31,7 @@ static SQRESULT mix_loadbuffer(HSQUIRRELVM sqvm, mix_state_t *S, const SQChar *n
 	}
 	else
 	{
-        res = sq_compile(sqvm, sq_mix_reader_char, S, name, SQTrue);
+        res = sq_compile(sqvm, sq_mix_reader_char, S, name, SQTrue, SQTrue);
         if (S->error != NULL) {
             return sq_throwerror(sqvm, S->error);
         } else if (res != 0) {

+ 9 - 6
SquiLu-ext/sq_slave_vm.cpp

@@ -220,10 +220,11 @@ static SQRESULT sq_slave_vm_dofile(HSQUIRRELVM v){
     SQ_GET_STRING(v, 2, file_name);
     SQ_OPT_BOOL(v, 3, retval, false);
     SQ_OPT_BOOL(v, 4, printerror, false);
+    SQ_OPT_BOOL(v, 5, show_warnings, false);
 	SQInteger top = sq_gettop(self);
     SQRESULT result = SQ_ERROR;
     sq_pushroottable(self); //important always push the root table, because sqstd_dofile will try to do a sq_push(v, -2)
-    if(sqstd_dofile(self, file_name, retval, printerror) >= 0){
+    if(sqstd_dofile(self, file_name, retval, printerror, show_warnings) >= 0){
         if(retval){
             if(copy_values_between_vms(v, self, 1, sq_gettop(self)) == SQ_OK) result = 1;
         }
@@ -240,11 +241,12 @@ static SQRESULT sq_slave_vm_loadfile(HSQUIRRELVM v){
     SQ_GET_STRING(v, 2, func_name);
     SQ_GET_STRING(v, 3, file_name);
     SQ_OPT_BOOL(v, 4, printerror, false);
+    SQ_OPT_BOOL(v, 5, show_warnings, false);
 	SQInteger top = sq_gettop(self);
     SQRESULT result = SQ_ERROR;
     sq_pushroottable(self);
     sq_pushstring(self, func_name, func_name_size);
-    if(sqstd_loadfile(self, file_name, printerror) >= 0){
+    if(sqstd_loadfile(self, file_name, printerror, show_warnings) >= 0){
         result = sq_newslot(self, -3, SQFalse);
     }
     sq_settop(self, top);
@@ -257,11 +259,12 @@ static SQRESULT sq_slave_vm_compilestring(HSQUIRRELVM v){
     SQ_GET_STRING(v, 2, func_name);
     SQ_GET_STRING(v, 3, str_script);
     SQ_OPT_BOOL(v, 4, printerror, false);
+    SQ_OPT_BOOL(v, 5, show_warnings, false);
 	SQInteger top = sq_gettop(self);
     SQRESULT result = SQ_ERROR;
     sq_pushroottable(self);
     sq_pushstring(self, func_name, func_name_size);
-    if(sq_compilebuffer(self, str_script, str_script_size, func_name, printerror) >= 0){
+    if(sq_compilebuffer(self, str_script, str_script_size, func_name, printerror, show_warnings) >= 0){
         result = sq_newslot(self, -3, SQFalse);
     }
     sq_settop(self, top);
@@ -285,9 +288,9 @@ extern "C" {
         sq_insertfunc(v, _SC("_set"), sq_slave_vm_set, 3, get_set_validation_mask, SQFalse);
         sq_insertfunc(v, _SC("get"), sq_slave_vm_get, -2, get_set_validation_mask, SQFalse);
         sq_insertfunc(v, _SC("_get"), sq_slave_vm_get, -2, get_set_validation_mask, SQFalse);
-        sq_insertfunc(v, _SC("dofile"), sq_slave_vm_dofile, -2, _SC("xsbb"), SQFalse);
-        sq_insertfunc(v, _SC("loadfile"), sq_slave_vm_loadfile, -3, _SC("xssb"), SQFalse);
-        sq_insertfunc(v, _SC("compilestring"), sq_slave_vm_compilestring, -3, _SC("xssb"), SQFalse);
+        sq_insertfunc(v, _SC("dofile"), sq_slave_vm_dofile, -2, _SC("xsbbb"), SQFalse);
+        sq_insertfunc(v, _SC("loadfile"), sq_slave_vm_loadfile, -3, _SC("xssbb"), SQFalse);
+        sq_insertfunc(v, _SC("compilestring"), sq_slave_vm_compilestring, -3, _SC("xssbb"), SQFalse);
         sq_insertfunc(v, _SC("call"), sq_slave_vm_call, -3, _SC("xbs"), SQFalse);
 
         sq_newslot(v,-3,SQTrue); //push sq_slave_vm class

+ 4 - 2
SquiLu-ext/sqmodule.h

@@ -58,8 +58,10 @@ extern "C" {
         SQInteger       (*getvmstate)(HSQUIRRELVM v);
 
         /*compiler*/
-        SQRESULT        (*compile)(HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQChar *sourcename,SQBool raiseerror);
-        SQRESULT        (*compilebuffer)(HSQUIRRELVM v,const SQChar *s,SQInteger size,const SQChar *sourcename,SQBool raiseerror);
+        SQRESULT        (*compile)(HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQChar *sourcename,
+                                   SQBool raiseerror,SQBool show_warnings);
+        SQRESULT        (*compilebuffer)(HSQUIRRELVM v,const SQChar *s,SQInteger size,const SQChar *sourcename,
+                                         SQBool raiseerror,SQBool show_warnings);
         void            (*enabledebuginfo)(HSQUIRRELVM v, SQBool enable);
         void            (*notifyallexceptions)(HSQUIRRELVM v, SQBool enable);
         void            (*setcompilererrorhandler)(HSQUIRRELVM v,SQCOMPILERERROR f);

+ 2 - 2
SquiLu-ext/sqratimport.cpp

@@ -196,10 +196,10 @@ static void sqrat_deleteapi(HSQAPI sq) {
 }
 
 static SQRESULT sqrat_importscript(HSQUIRRELVM v, const SQChar* moduleName) {
-    if(SQ_FAILED(sqstd_loadfile(v, moduleName, true))) {
+    if(SQ_FAILED(sqstd_loadfile(v, moduleName, true, true))) {
         std::basic_string<SQChar> filename(moduleName);
         filename += _SC(".nut");
-        if(SQ_FAILED(sqstd_loadfile(v, filename.c_str(), true))) {
+        if(SQ_FAILED(sqstd_loadfile(v, filename.c_str(), true, true))) {
             return SQ_ERROR;
         }
     }

+ 2 - 2
SquiLu/include/sqstdio.h

@@ -39,8 +39,8 @@ SQUIRREL_API SQRESULT sqstd_createfile(HSQUIRRELVM v, SQFILE file,SQBool own);
 SQUIRREL_API SQRESULT sqstd_getfile(HSQUIRRELVM v, SQInteger idx, SQFILE *file);
 
 //compiler helpers
-SQUIRREL_API SQRESULT sqstd_loadfile(HSQUIRRELVM v,const SQChar *filename,SQBool printerror);
-SQUIRREL_API SQRESULT sqstd_dofile(HSQUIRRELVM v,const SQChar *filename,SQBool retval,SQBool printerror);
+SQUIRREL_API SQRESULT sqstd_loadfile(HSQUIRRELVM v,const SQChar *filename,SQBool printerror,SQBool show_warnings);
+SQUIRREL_API SQRESULT sqstd_dofile(HSQUIRRELVM v,const SQChar *filename,SQBool retval,SQBool printerror,SQBool show_warnings);
 SQUIRREL_API SQRESULT sqstd_writeclosuretofile(HSQUIRRELVM v,const SQChar *filename);
 SQUIRREL_API SQRESULT sqstd_writeclosuretofile_as_source(HSQUIRRELVM v,const SQChar *filename);
 

+ 4 - 2
SquiLu/include/squirrel.h

@@ -356,8 +356,10 @@ SQUIRREL_API SQInteger sq_getvmstate(HSQUIRRELVM v);
 SQUIRREL_API SQInteger sq_getversion();
 
 /*compiler*/
-SQUIRREL_API SQRESULT sq_compile(HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQChar *sourcename,SQBool raiseerror);
-SQUIRREL_API SQRESULT sq_compilebuffer(HSQUIRRELVM v,const SQChar *s,SQInteger size,const SQChar *sourcename,SQBool raiseerror);
+SQUIRREL_API SQRESULT sq_compile(HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQChar *sourcename,
+                                 SQBool raiseerror, SQBool show_warnings);
+SQUIRREL_API SQRESULT sq_compilebuffer(HSQUIRRELVM v,const SQChar *s,SQInteger size,const SQChar *sourcename,
+                                       SQBool raiseerror, SQBool show_warnings);
 SQUIRREL_API void sq_enabledebuginfo(HSQUIRRELVM v, SQBool enable);
 SQUIRREL_API void sq_notifyallexceptions(HSQUIRRELVM v, SQBool enable);
 SQUIRREL_API void sq_setcompilererrorhandler(HSQUIRRELVM v,SQCOMPILERERROR f);

+ 6 - 6
SquiLu/sq/sq.c

@@ -161,7 +161,7 @@ int getargs(HSQUIRRELVM v,int argc, char* argv[],SQInteger *retval)
 			//sq_createslot(v,-3);
 			//sq_pop(v,1);
 			if(compiles_only) {
-				if(SQ_SUCCEEDED(sqstd_loadfile(v,filename,SQTrue))){
+				if(SQ_SUCCEEDED(sqstd_loadfile(v,filename,SQTrue,SQTrue))){
 					const SQChar *outfile = _SC("out.cnut");
 					if(output) {
 #ifdef SQUNICODE
@@ -177,7 +177,7 @@ int getargs(HSQUIRRELVM v,int argc, char* argv[],SQInteger *retval)
 				}
 			}
 			else if(compiles_as_source_only) {
-				if(SQ_SUCCEEDED(sqstd_loadfile(v,filename,SQTrue))){
+				if(SQ_SUCCEEDED(sqstd_loadfile(v,filename,SQTrue,SQTrue))){
 					const SQChar *outfile = _SC("out.nut");
 					if(output) {
 #ifdef SQUNICODE
@@ -196,7 +196,7 @@ int getargs(HSQUIRRELVM v,int argc, char* argv[],SQInteger *retval)
 				//if(SQ_SUCCEEDED(sqstd_dofile(v,filename,SQFalse,SQTrue))) {
 					//return _DONE;
 				//}
-				if(SQ_SUCCEEDED(sqstd_loadfile(v,filename,SQTrue))) {
+				if(SQ_SUCCEEDED(sqstd_loadfile(v,filename,SQTrue,SQTrue))) {
 					int callargs = 1;
 					sq_pushroottable(v);
 					for(i=arg;i<argc;i++)
@@ -307,7 +307,7 @@ void Interactive(HSQUIRRELVM v)
 		i=scstrlen(buffer);
 		if(i>0){
 			SQInteger oldtop=sq_gettop(v);
-			if(SQ_SUCCEEDED(sq_compilebuffer(v,buffer,i,_SC("interactive console"),SQTrue))){
+			if(SQ_SUCCEEDED(sq_compilebuffer(v,buffer,i,_SC("interactive console"),SQTrue, SQTrue))){
 				sq_pushroottable(v);
 				if(SQ_SUCCEEDED(sq_call(v,1,retval,SQTrue)) &&	retval){
 					scprintf(_SC("\n"));
@@ -488,10 +488,10 @@ static SQInteger LoadFrozenScript(HSQUIRRELVM v, const SQChar* filename, int onl
     fclose(f);
     SQChar srcBoot[192];
     SQInteger scr_len = scsnprintf(srcBoot, sizeof(srcBoot),
-            _SC("local __fd=file(\"%s\", \"rb\");__fd.seek(%d, 'b');local __zsrc=__fd.read(%d);__fd.close();dostring(zlib.inflate(__zsrc));"),
+            _SC("local __fd=file(\"%s\", \"rb\");__fd.seek(%d, 'b');local __zsrc=__fd.read(%d);__fd.close();__zsrc=compilestring(zlib.inflate(__zsrc),\"zsrc\",false);__zsrc();"),
             filename, fileSize-END_TAG_LEN - script_len, script_len);
 
-    if(SQ_SUCCEEDED(sq_compilebuffer(v,srcBoot, scr_len, _SC("bootScript"), SQTrue))) {
+    if(SQ_SUCCEEDED(sq_compilebuffer(v,srcBoot, scr_len, _SC("bootScript"), SQTrue, SQTrue))) {
         sq_pushroottable(v);
         if(SQ_SUCCEEDED(sq_call(v, 1,SQFalse, SQTrue))) {
             return _DONE;

+ 22 - 27
SquiLu/sqstdlib/sqstdio.cpp

@@ -290,7 +290,7 @@ SQInteger file_write(SQUserPointer file,SQUserPointer p,SQInteger size)
 	return sqstd_fwrite(p,1,size,(SQFILE)file);
 }
 
-SQRESULT sqstd_loadfile(HSQUIRRELVM v,const SQChar *filename,SQBool printerror)
+SQRESULT sqstd_loadfile(HSQUIRRELVM v,const SQChar *filename,SQBool printerror,SQBool show_warnings)
 {
 	SQFILE file = sqstd_fopen(filename,_SC("rb"));
 	SQInteger ret;
@@ -334,7 +334,7 @@ SQRESULT sqstd_loadfile(HSQUIRRELVM v,const SQChar *filename,SQBool printerror)
 				default: sqstd_fseek(file,0,SQ_SEEK_SET); break; // ascii
 			}
 
-			if(SQ_SUCCEEDED(sq_compile(v,func,file,filename,printerror))){
+			if(SQ_SUCCEEDED(sq_compile(v,func,file,filename,printerror,show_warnings))){
 				sqstd_fclose(file);
 				return SQ_OK;
 			}
@@ -345,9 +345,9 @@ SQRESULT sqstd_loadfile(HSQUIRRELVM v,const SQChar *filename,SQBool printerror)
 	return sq_throwerror(v,_SC("cannot open the file"));
 }
 
-SQRESULT sqstd_dofile(HSQUIRRELVM v,const SQChar *filename,SQBool retval,SQBool printerror)
+SQRESULT sqstd_dofile(HSQUIRRELVM v,const SQChar *filename,SQBool retval,SQBool printerror,SQBool show_warnings)
 {
-	if(SQ_SUCCEEDED(sqstd_loadfile(v,filename,printerror))) {
+	if(SQ_SUCCEEDED(sqstd_loadfile(v,filename,printerror,show_warnings))) {
 		sq_push(v,-2);
 		if(SQ_SUCCEEDED(sq_call(v,1,retval,SQTrue))) {
 			sq_remove(v,retval?-2:-1); //removes the closure
@@ -383,14 +383,12 @@ SQRESULT sqstd_writeclosuretofile_as_source(HSQUIRRELVM v,const SQChar *filename
 }
 
 SQInteger _g_io_loadfile(HSQUIRRELVM v)
-{
-	const SQChar *filename;
-	SQBool printerror = SQFalse;
-	sq_getstring(v,2,&filename);
-	if(sq_gettop(v) >= 3) {
-		sq_getbool(v,3,&printerror);
-	}
-	if(SQ_SUCCEEDED(sqstd_loadfile(v,filename,printerror)))
+{
+    SQ_FUNC_VARS(v);
+    SQ_GET_STRING(v, 2, filename);
+    SQ_OPT_BOOL(v, 3, printerror, SQFalse);
+    SQ_OPT_BOOL(v, 4, show_warnings, SQTrue);
+	if(SQ_SUCCEEDED(sqstd_loadfile(v,filename,printerror,show_warnings)))
 		return 1;
 	return SQ_ERROR; //propagates the error
 }
@@ -432,18 +430,17 @@ SQInteger _g_io_loadstring(HSQUIRRELVM v)
     }
     else
     {
-        rc = sq_compilebuffer(v, dump, size, "dostring", SQFalse);
+        rc = sq_compilebuffer(v, dump, size, "dostring", SQFalse, SQFalse);
     }
 	return rc < 0 ? rc : 1;
 }
 
 SQInteger _g_io_dostring(HSQUIRRELVM v)
 {
+    SQ_FUNC_VARS(v);
     SQInteger rc = _g_io_loadstring(v);
     if(rc < 0) return rc;
-    SQBool retval;
-    if(sq_gettop(v) > 2) sq_getbool(v, 3, &retval);
-    else retval = SQFalse;
+    SQ_OPT_BOOL(v, 3, retval, SQFalse);
     sq_push(v,1); //this environment
     if(SQ_SUCCEEDED(sq_call(v,1,retval,SQTrue))) {
         sq_remove(v,retval?-2:-1); //removes the closure
@@ -455,25 +452,23 @@ SQInteger _g_io_dostring(HSQUIRRELVM v)
 
 SQInteger _g_io_dofile(HSQUIRRELVM v)
 {
-	const SQChar *filename;
-	SQBool printerror = SQFalse;
-	sq_getstring(v,2,&filename);
-	if(sq_gettop(v) >= 3) {
-		sq_getbool(v,3,&printerror);
-	}
+    SQ_FUNC_VARS(v);
+    SQ_GET_STRING(v, 2, filename);
+    SQ_OPT_BOOL(v, 3, printerror, SQFalse);
+    SQ_OPT_BOOL(v, 4, show_warnings, SQTrue);
 	sq_push(v,1); //repush the this
-	if(SQ_SUCCEEDED(sqstd_dofile(v,filename,SQTrue,printerror)))
+	if(SQ_SUCCEEDED(sqstd_dofile(v,filename,SQTrue,printerror,show_warnings)))
 		return 1;
 	return SQ_ERROR; //propagates the error
 }
 
 #define _DECL_GLOBALIO_FUNC(name,nparams,typecheck) {_SC(#name),_g_io_##name,nparams,typecheck}
 static SQRegFunction iolib_funcs[]={
-	_DECL_GLOBALIO_FUNC(loadfile,-2,_SC(".sb")),
-	_DECL_GLOBALIO_FUNC(dofile,-2,_SC(".sb")),
+	_DECL_GLOBALIO_FUNC(loadfile,-2,_SC(".sbb")),
+	_DECL_GLOBALIO_FUNC(dofile,-2,_SC(".sbb")),
 	_DECL_GLOBALIO_FUNC(writeclosuretofile,3,_SC(".sc")),
-	_DECL_GLOBALIO_FUNC(dostring,-2,_SC(".sb")),
-	_DECL_GLOBALIO_FUNC(loadstring,-2,_SC(".sb")),
+	_DECL_GLOBALIO_FUNC(dostring,-2,_SC(".sbb")),
+	_DECL_GLOBALIO_FUNC(loadstring,-2,_SC(".sbb")),
 	_DECL_GLOBALIO_FUNC(dumpclosure,3,_SC(".sc")),
 	{0,0}
 };

+ 6 - 4
SquiLu/squirrel/sqapi.cpp

@@ -146,11 +146,12 @@ SQInteger sq_getversion()
 	return SQUIRREL_VERSION_NUMBER;
 }
 
-SQRESULT sq_compile(HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQChar *sourcename,SQBool raiseerror)
+SQRESULT sq_compile(HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQChar *sourcename
+                    ,SQBool raiseerror, SQBool show_warnings)
 {
 	SQObjectPtr o;
 #ifndef NO_COMPILER
-	if(Compile(v, read, p, sourcename, o, raiseerror?true:false, _ss(v)->_debuginfo)) {
+	if(Compile(v, read, p, sourcename, o, raiseerror?true:false, _ss(v)->_debuginfo, show_warnings)) {
 		v->Push(SQClosure::Create(_ss(v), _funcproto(o)));
 		return SQ_OK;
 	}
@@ -1742,12 +1743,13 @@ SQInteger buf_lexfeed(SQUserPointer file)
 	return buf->buf[buf->ptr++];
 }
 
-SQRESULT sq_compilebuffer(HSQUIRRELVM v,const SQChar *s,SQInteger size,const SQChar *sourcename,SQBool raiseerror) {
+SQRESULT sq_compilebuffer(HSQUIRRELVM v,const SQChar *s,SQInteger size,const SQChar *sourcename,
+                          SQBool raiseerror, SQBool show_warnings) {
 	BufState buf;
 	buf.buf = s;
 	buf.size = size;
 	buf.ptr = 0;
-	return sq_compile(v, buf_lexfeed, &buf, sourcename, raiseerror);
+	return sq_compile(v, buf_lexfeed, &buf, sourcename, raiseerror, show_warnings);
 }
 
 void sq_move(HSQUIRRELVM dest,HSQUIRRELVM src,SQInteger idx)

+ 13 - 17
SquiLu/squirrel/sqbaselib.cpp

@@ -11,7 +11,9 @@
 #include "sqclass.h"
 #include <stdlib.h>
 #include <stdarg.h>
-#include <ctype.h>
+#include <ctype.h>
+
+SQ_OPT_STRING_STRLEN();
 
 bool str2num(const SQChar *s,SQObjectPtr &res, SQInteger base=10)
 {
@@ -277,19 +279,15 @@ static SQRESULT base_get_last_stackinfo(HSQUIRRELVM v)
 }
 
 static SQRESULT base_compilestring(HSQUIRRELVM v)
-{
-	SQInteger nargs=sq_gettop(v);
-	const SQChar *src=NULL,*name=_SC("unnamedbuffer");
-	SQInteger size;
-	sq_getstring(v,2,&src);
-	size=sq_getsize(v,2);
-	if(nargs>2){
-		sq_getstring(v,3,&name);
-	}
-	if(SQ_SUCCEEDED(sq_compilebuffer(v,src,size,name,SQFalse)))
-		return 1;
-	else
-		return SQ_ERROR;
+{
+    SQ_FUNC_VARS(v);
+    SQ_GET_STRING(v, 2, src);
+    SQ_OPT_STRING(v, 3, name, _SC("unnamedbuffer"));
+    SQ_OPT_BOOL(v, 4, show_wanings, SQTrue);
+    if(SQ_SUCCEEDED(sq_compilebuffer(v,src,src_size,name,SQFalse, show_wanings)))
+        return 1;
+    else
+        return SQ_ERROR;
 }
 
 static SQRESULT base_newthread(HSQUIRRELVM v)
@@ -378,7 +376,7 @@ static SQRegFunction base_funcs[]={
 	{_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(".ss")},
+	{_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")},
@@ -929,8 +927,6 @@ static SQRESULT array_slice(HSQUIRRELVM v)
 #include "sqstdstream.h"
 #include "sqstdblobimpl.h"
 
-SQ_OPT_STRING_STRLEN();
-
 static SQRESULT array_concat0 (HSQUIRRELVM v, int allowAll) {
     SQ_FUNC_VARS(v);
     SQInteger last = sq_getsize(v, 1);

+ 11 - 6
SquiLu/squirrel/sqcompiler.cpp

@@ -74,12 +74,14 @@ struct SQScope {
 class SQCompiler
 {
 public:
-	SQCompiler(SQVM *v, SQLEXREADFUNC rg, SQUserPointer up, const SQChar* sourcename, bool raiseerror, bool lineinfo)
-	{
+	SQCompiler(SQVM *v, SQLEXREADFUNC rg, SQUserPointer up, const SQChar* sourcename,
+            bool raiseerror, bool lineinfo, bool show_warnings)
+	{
 		_vm=v;
 		_lex.Init(_ss(v), rg, up,ThrowError,this);
 		_sourcename = SQString::Create(_ss(v), sourcename);
-		_lineinfo = lineinfo;_raiseerror = raiseerror;
+		_lineinfo = lineinfo;_raiseerror = raiseerror;
+		_show_warnings = show_warnings;
 		_scope.outers = 0;
 		_scope.stacksize = 0;
 		_scope.nested = 0;
@@ -108,7 +110,8 @@ public:
 	}
 
 	void Warning(const SQChar *s, ...)
-	{
+	{
+	    if(!_show_warnings) return;
 		va_list vl;
 		va_start(vl, s);
 		scvfprintf(stderr, s, vl);
@@ -1776,6 +1779,7 @@ private:
 	SQLexer _lex;
 	bool _lineinfo;
 	bool _raiseerror;
+	bool _show_warnings;
 	SQInteger _debugline;
 	SQInteger _debugop;
 	SQExpState   _es;
@@ -1787,9 +1791,10 @@ private:
 	SQObjectPtr _globals;
 };
 
-bool Compile(SQVM *vm,SQLEXREADFUNC rg, SQUserPointer up, const SQChar *sourcename, SQObjectPtr &out, bool raiseerror, bool lineinfo)
+bool Compile(SQVM *vm,SQLEXREADFUNC rg, SQUserPointer up, const SQChar *sourcename, SQObjectPtr &out,
+             bool raiseerror, bool lineinfo, bool show_warnings)
 {
-	SQCompiler p(vm, rg, up, sourcename, raiseerror, lineinfo);
+	SQCompiler p(vm, rg, up, sourcename, raiseerror, lineinfo, show_warnings);
 	return p.Compile(out);
 }
 

+ 2 - 1
SquiLu/squirrel/sqcompiler.h

@@ -117,5 +117,6 @@ enum SQKeywordsEnum {
 };
 
 typedef void(*CompilerErrorFunc)(void *ud, const SQChar *s);
-bool Compile(SQVM *vm, SQLEXREADFUNC rg, SQUserPointer up, const SQChar *sourcename, SQObjectPtr &out, bool raiseerror, bool lineinfo);
+bool Compile(SQVM *vm, SQLEXREADFUNC rg, SQUserPointer up, const SQChar *sourcename, SQObjectPtr &out,
+             bool raiseerror, bool lineinfo, bool show_warnings);
 #endif //_SQCOMPILER_H_