Browse Source

Apply some fixes from SQuirrel

mingodad 3 years ago
parent
commit
a8da5791c2

+ 1 - 1
SquiLu-ext/sq_blosc.cpp

@@ -104,7 +104,7 @@ static SQRESULT sq_blosc_compcode_to_compname(HSQUIRRELVM v)
 {
 {
     SQ_FUNC_VARS_NO_TOP(v);
     SQ_FUNC_VARS_NO_TOP(v);
     SQ_GET_INTEGER(v, 2, compcode);
     SQ_GET_INTEGER(v, 2, compcode);
-    char *compname;
+    const char *compname;
     int rc = blosc_compcode_to_compname(compcode, &compname);
     int rc = blosc_compcode_to_compname(compcode, &compname);
     if(rc > -1) sq_pushstring(v, compname, -1);
     if(rc > -1) sq_pushstring(v, compname, -1);
     else sq_pushnull(v);
     else sq_pushnull(v);

+ 1 - 1
SquiLu-ext/sq_decimal.cpp

@@ -83,7 +83,7 @@ static mpd_context_t * sq_get_global_ctx(HSQUIRRELVM v, SQInteger idx)
     SQ_PUSH_CONTEXT_STATIC(v);
     SQ_PUSH_CONTEXT_STATIC(v);
     sq_get(v, idx);
     sq_get(v, idx);
     mpd_context_t *ctx = 0;
     mpd_context_t *ctx = 0;
-    sq_getinstanceup(v, -1, (void**)&ctx, (void*)sq_decimal_ctx_TAG);
+    sq_getinstanceup(v, -1, (void**)&ctx, (void*)sq_decimal_ctx_TAG,SQFalse);
     sq_poptop(v);
     sq_poptop(v);
 	return ctx;
 	return ctx;
 }
 }

+ 2 - 2
SquiLu-ext/sq_fltk.cpp

@@ -312,7 +312,7 @@ static SQRESULT getInstance_for_Fl_Klass(HSQUIRRELVM v, const SQChar *klass, SQU
 
 
 static SQRESULT get_fltk_klass_instance(HSQUIRRELVM v, SQInteger idx, void **Var, void *klass_Tag){
 static SQRESULT get_fltk_klass_instance(HSQUIRRELVM v, SQInteger idx, void **Var, void *klass_Tag){
     SQRESULT _rc_;
     SQRESULT _rc_;
-	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)Var,klass_Tag)) < 0) return _rc_;
+	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)Var,klass_Tag,SQFalse)) < 0) return _rc_;
 	if(!*Var) return sq_throwerror(v, _SC("widget (%s) is empty"), (SQChar*)klass_Tag);
 	if(!*Var) return sq_throwerror(v, _SC("widget (%s) is empty"), (SQChar*)klass_Tag);
 	return _rc_;
 	return _rc_;
 }
 }
@@ -3458,7 +3458,7 @@ static SQRESULT _Fl_Text_Display_buffer(HSQUIRRELVM v)
     SETUP_FL_TEXT_DISPLAY(v);
     SETUP_FL_TEXT_DISPLAY(v);
     if(sq_gettop(v) > 1){
     if(sq_gettop(v) > 1){
         SQUserPointer rsz;
         SQUserPointer rsz;
-        sq_getinstanceup(v, -1, &rsz, 0);
+        sq_getinstanceup(v, -1, &rsz, 0,SQFalse);
         self->buffer((Fl_Text_Buffer*)rsz);
         self->buffer((Fl_Text_Buffer*)rsz);
         return 0;
         return 0;
     }
     }

+ 1 - 1
SquiLu-ext/sq_fpdf.cpp

@@ -583,7 +583,7 @@ static SQRESULT sq_glue_Output(HSQUIRRELVM v){
 	if(_top_ > 1) {
 	if(_top_ > 1) {
         SQObjectType ptype = sq_gettype(v, 2);
         SQObjectType ptype = sq_gettype(v, 2);
         if(ptype == OT_INSTANCE){
         if(ptype == OT_INSTANCE){
-            if(SQ_FAILED(sq_getinstanceup(v,2,(SQUserPointer*)&blob,(SQUserPointer)SQBlob::SQBlob_TAG)))
+            if(SQ_FAILED(sq_getinstanceup(v,2,(SQUserPointer*)&blob,(SQUserPointer)SQBlob::SQBlob_TAG,SQFalse)))
                 return sq_throwerror(v,_SC("invalid type tag"));
                 return sq_throwerror(v,_SC("invalid type tag"));
             if(!blob || !blob->IsValid())
             if(!blob || !blob->IsValid())
                 return sq_throwerror(v,_SC("the blob is invalid"));
                 return sq_throwerror(v,_SC("the blob is invalid"));

+ 2 - 1
SquiLu-ext/sq_libclang.cpp

@@ -186,7 +186,7 @@ struct MyLibClang {
 
 
 static SQRESULT get_libclang_instance(HSQUIRRELVM v, SQInteger idx, MyLibClang **self){
 static SQRESULT get_libclang_instance(HSQUIRRELVM v, SQInteger idx, MyLibClang **self){
     SQRESULT _rc_;
     SQRESULT _rc_;
-	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)self,(void*)LibClang_TAG)) < 0) return _rc_;
+	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)self,(void*)LibClang_TAG,SQFalse)) < 0) return _rc_;
 	if(!*self) return sq_throwerror(v, _SC("libclang is closed"));
 	if(!*self) return sq_throwerror(v, _SC("libclang is closed"));
 	return _rc_;
 	return _rc_;
 }
 }
@@ -359,6 +359,7 @@ cursorVisitor(CXCursor cursor, CXCursor parent, CXClientData client_data)
 
 
 		dlclang_disposeString(to_func_filename);
 		dlclang_disposeString(to_func_filename);
 		ret = CXChildVisit_Continue;
 		ret = CXChildVisit_Continue;
+	} else if (kind == CXCursor_VarDecl) {
 	}
 	}
 
 
 	dlclang_disposeString(name);
 	dlclang_disposeString(name);

+ 2 - 3
SquiLu-ext/sq_libcurl.cpp

@@ -463,7 +463,7 @@ static size_t sq_EasyCurl_reader_writer_callback(char *bufptr, size_t size, size
     case OT_INSTANCE:
     case OT_INSTANCE:
         {
         {
             SQBlob *blob = NULL;
             SQBlob *blob = NULL;
-            if(SQ_FAILED(sq_getinstanceup(v,-1,(SQUserPointer*)&blob,(SQUserPointer)SQBlob::SQBlob_TAG)))
+            if(SQ_FAILED(sq_getinstanceup(v,-1,(SQUserPointer*)&blob,(SQUserPointer)SQBlob::SQBlob_TAG,SQFalse)))
                 break;
                 break;
             if(!blob || !blob->IsValid())
             if(!blob || !blob->IsValid())
                 break;
                 break;
@@ -524,7 +524,6 @@ static size_t sq_EasyCurl_reader_writer_callback(char *bufptr, size_t size, size
             }
             }
         }
         }
 
 
-
         break;
         break;
     }
     }
 
 
@@ -570,7 +569,7 @@ static SQRESULT sq_EasyCurl_set_reader_writer(HSQUIRRELVM v, int isReader){
         case OT_INSTANCE:
         case OT_INSTANCE:
             {
             {
             SQBlob *blob = NULL;
             SQBlob *blob = NULL;
-            if(SQ_FAILED(sq_getinstanceup(v,2,(SQUserPointer*)&blob,(SQUserPointer)SQBlob::SQBlob_TAG)))
+            if(SQ_FAILED(sq_getinstanceup(v,2,(SQUserPointer*)&blob,(SQUserPointer)SQBlob::SQBlob_TAG,SQFalse)))
                 return sq_throwerror(v,_SC("expect a blob as second parameter"));
                 return sq_throwerror(v,_SC("expect a blob as second parameter"));
             if(!blob || !blob->IsValid())
             if(!blob || !blob->IsValid())
                 return sq_throwerror(v,_SC("the blob is invalid"));
                 return sq_throwerror(v,_SC("the blob is invalid"));

+ 0 - 2
SquiLu-ext/sq_lmdb.cpp

@@ -235,7 +235,6 @@ static SQRESULT sq_LmDB_Env_txn_begin(HSQUIRRELVM v){
 
 
 static SQRESULT sq_LmDB_Env_strerror(HSQUIRRELVM v){
 static SQRESULT sq_LmDB_Env_strerror(HSQUIRRELVM v){
 	SQ_FUNC_VARS_NO_TOP(v);
 	SQ_FUNC_VARS_NO_TOP(v);
-
 	SQ_GET_INTEGER(v, 2, int_error);
 	SQ_GET_INTEGER(v, 2, int_error);
 //	char *mdb_strerror(int err)
 //	char *mdb_strerror(int err)
 	sq_pushstring(v, mdb_strerror(int_error), -1);
 	sq_pushstring(v, mdb_strerror(int_error), -1);
@@ -243,7 +242,6 @@ static SQRESULT sq_LmDB_Env_strerror(HSQUIRRELVM v){
 }
 }
 
 
 static SQRESULT sq_LmDB_Env_version(HSQUIRRELVM v){
 static SQRESULT sq_LmDB_Env_version(HSQUIRRELVM v){
-
 //	char *mdb_version(int *major, int *minor, int *patch)
 //	char *mdb_version(int *major, int *minor, int *patch)
 	int major, minor, patch;
 	int major, minor, patch;
 	sq_pushstring(v, mdb_version(&major, &minor, &patch), -1);
 	sq_pushstring(v, mdb_version(&major, &minor, &patch), -1);

+ 4 - 4
SquiLu-ext/sq_mongoose.cpp

@@ -82,7 +82,7 @@ static const SQChar sq_http_request_TAG[] = "HttpRequest";
 
 
 #define GET_http_request_INSTANCE() \
 #define GET_http_request_INSTANCE() \
     struct mg_connection *conn; \
     struct mg_connection *conn; \
-    if((_rc_ = sq_getinstanceup(v,1,(SQUserPointer*)&conn,(void*)sq_http_request_TAG)) < 0) return _rc_;
+    if((_rc_ = sq_getinstanceup(v,1,(SQUserPointer*)&conn,(void*)sq_http_request_TAG,SQFalse)) < 0) return _rc_;
 
 
 static SQRESULT sq_http_request_releasehook(SQUserPointer p, SQInteger size, void */*ep*/)
 static SQRESULT sq_http_request_releasehook(SQUserPointer p, SQInteger size, void */*ep*/)
 {
 {
@@ -157,7 +157,7 @@ sq_http_request_read(HSQUIRRELVM v)
 
 
     SQBlob *blob = NULL;
     SQBlob *blob = NULL;
     if(_top_ > 2) {
     if(_top_ > 2) {
-        if(SQ_FAILED(sq_getinstanceup(v,3,(SQUserPointer*)&blob,(SQUserPointer)SQBlob::SQBlob_TAG)))
+        if(SQ_FAILED(sq_getinstanceup(v,3,(SQUserPointer*)&blob,(SQUserPointer)SQBlob::SQBlob_TAG,SQFalse)))
             return sq_throwerror(v,_SC("expect a blob as second parameter"));
             return sq_throwerror(v,_SC("expect a blob as second parameter"));
         if(!blob || !blob->IsValid())
         if(!blob || !blob->IsValid())
             return sq_throwerror(v,_SC("the blob is invalid"));
             return sq_throwerror(v,_SC("the blob is invalid"));
@@ -199,7 +199,7 @@ sq_http_request_write_blob(HSQUIRRELVM v)
     SQ_FUNC_VARS_NO_TOP(v);
     SQ_FUNC_VARS_NO_TOP(v);
     GET_http_request_INSTANCE();
     GET_http_request_INSTANCE();
 	SQBlob *blob = NULL;
 	SQBlob *blob = NULL;
-	{ if(SQ_FAILED(sq_getinstanceup(v,2,(SQUserPointer*)&blob,(SQUserPointer)SQBlob::SQBlob_TAG)))
+	{ if(SQ_FAILED(sq_getinstanceup(v,2,(SQUserPointer*)&blob,(SQUserPointer)SQBlob::SQBlob_TAG,SQFalse)))
 		return sq_throwerror(v,_SC("invalid type tag"));  }
 		return sq_throwerror(v,_SC("invalid type tag"));  }
 	if(!blob || !blob->IsValid())
 	if(!blob || !blob->IsValid())
 		return sq_throwerror(v,_SC("the blob is invalid"));
 		return sq_throwerror(v,_SC("the blob is invalid"));
@@ -699,7 +699,7 @@ static SQRESULT sq_mongoose_constructor(HSQUIRRELVM v)
 
 
 #define GET_mongoose_INSTANCE() \
 #define GET_mongoose_INSTANCE() \
     SQ_Mg_Context *self; \
     SQ_Mg_Context *self; \
-    if((_rc_ = sq_getinstanceup(v,1,(SQUserPointer*)&self,(void*)sq_mongoose_TAG)) < 0) return _rc_;
+    if((_rc_ = sq_getinstanceup(v,1,(SQUserPointer*)&self,(void*)sq_mongoose_TAG,SQFalse)) < 0) return _rc_;
 
 
 static SQRESULT
 static SQRESULT
 sq_mongoose_show_errors_on_stdout(HSQUIRRELVM v)
 sq_mongoose_show_errors_on_stdout(HSQUIRRELVM v)

+ 3 - 3
SquiLu-ext/sq_mysql.cpp

@@ -224,7 +224,7 @@ static const SQChar *MySQL_TAG = _SC("MySQL");
 
 
 static SQRESULT get_mysql_instance(HSQUIRRELVM v, SQInteger idx, MYSQL **self){
 static SQRESULT get_mysql_instance(HSQUIRRELVM v, SQInteger idx, MYSQL **self){
     SQRESULT _rc_;
     SQRESULT _rc_;
-	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)self,(void*)MySQL_TAG)) < 0) return _rc_;
+	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)self,(void*)MySQL_TAG,SQFalse)) < 0) return _rc_;
 	if(!*self) return sq_throwerror(v, _SC("database is closed"));
 	if(!*self) return sq_throwerror(v, _SC("database is closed"));
 	return _rc_;
 	return _rc_;
 }
 }
@@ -240,7 +240,7 @@ static const SQChar *_curr_row_key = _SC("_curr_row");
 
 
 static SQRESULT get_mysql_result_instance(HSQUIRRELVM v, SQInteger idx, MYSQL_RES **self){
 static SQRESULT get_mysql_result_instance(HSQUIRRELVM v, SQInteger idx, MYSQL_RES **self){
     SQRESULT _rc_;
     SQRESULT _rc_;
-	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)self,(void*)MySQL_Result_TAG)) < 0) return _rc_;
+	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)self,(void*)MySQL_Result_TAG,SQFalse)) < 0) return _rc_;
 	if(!*self) return sq_throwerror(v, _SC("MYSQL_RES is closed"));
 	if(!*self) return sq_throwerror(v, _SC("MYSQL_RES is closed"));
 	return _rc_;
 	return _rc_;
 }
 }
@@ -455,7 +455,7 @@ static const SQChar *MySQL_Statement_TAG = _SC("MySQL_Statement");
 
 
 static SQRESULT get_mysql_statement_instance(HSQUIRRELVM v, SQInteger idx, SQ_MysqlStatement **self){
 static SQRESULT get_mysql_statement_instance(HSQUIRRELVM v, SQInteger idx, SQ_MysqlStatement **self){
     SQRESULT _rc_;
     SQRESULT _rc_;
-	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)self,(void*)MySQL_Statement_TAG)) < 0) return _rc_;
+	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)self,(void*)MySQL_Statement_TAG,SQFalse)) < 0) return _rc_;
 	if(!*self) return sq_throwerror(v, _SC("MySql statement is closed"));
 	if(!*self) return sq_throwerror(v, _SC("MySql statement is closed"));
 	return _rc_;
 	return _rc_;
 }
 }

+ 3 - 3
SquiLu-ext/sq_postgresql.cpp

@@ -332,7 +332,7 @@ static const SQChar *PostgreSQL_TAG = _SC("PostgreSQL");
 
 
 static SQRESULT get_pgsql_instance(HSQUIRRELVM v, SQInteger idx, PGconn **self){
 static SQRESULT get_pgsql_instance(HSQUIRRELVM v, SQInteger idx, PGconn **self){
     SQRESULT _rc_;
     SQRESULT _rc_;
-	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)self,(void*)PostgreSQL_TAG)) < 0) return _rc_;
+	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)self,(void*)PostgreSQL_TAG,SQFalse)) < 0) return _rc_;
 	if(!*self) return sq_throwerror(v, _SC("database is closed"));
 	if(!*self) return sq_throwerror(v, _SC("database is closed"));
 	return _rc_;
 	return _rc_;
 }
 }
@@ -348,7 +348,7 @@ static const SQChar *_curr_row_key = _SC("_curr_row");
 
 
 static SQRESULT get_pgsql_result_instance(HSQUIRRELVM v, SQInteger idx, PGresult **self){
 static SQRESULT get_pgsql_result_instance(HSQUIRRELVM v, SQInteger idx, PGresult **self){
     SQRESULT _rc_;
     SQRESULT _rc_;
-	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)self,(void*)PostgreSQL_Result_TAG)) < 0) return _rc_;
+	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)self,(void*)PostgreSQL_Result_TAG,SQFalse)) < 0) return _rc_;
 	if(!*self) return sq_throwerror(v, _SC("PGresult is closed"));
 	if(!*self) return sq_throwerror(v, _SC("PGresult is closed"));
 	return _rc_;
 	return _rc_;
 }
 }
@@ -524,7 +524,7 @@ static const SQChar *PostgreSQL_Statement_TAG = _SC("PostgreSQL_Statement");
 
 
 static SQRESULT get_pgsql_statement_instance(HSQUIRRELVM v, SQInteger idx, PgSqlStatement **self){
 static SQRESULT get_pgsql_statement_instance(HSQUIRRELVM v, SQInteger idx, PgSqlStatement **self){
     SQRESULT _rc_;
     SQRESULT _rc_;
-	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)self,(void*)PostgreSQL_Statement_TAG)) < 0) return _rc_;
+	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)self,(void*)PostgreSQL_Statement_TAG,SQFalse)) < 0) return _rc_;
 	if(!*self) return sq_throwerror(v, _SC("PGstatement is closed"));
 	if(!*self) return sq_throwerror(v, _SC("PGstatement is closed"));
 	return _rc_;
 	return _rc_;
 }
 }

+ 2 - 2
SquiLu-ext/sq_rs232.c

@@ -53,7 +53,7 @@ static const SQChar SQRS232_TAG[] = _SC("SqRs232");
 
 
 static SQRESULT get_rs232_instance(HSQUIRRELVM v, SQInteger idx, struct rs232_port_t **self){
 static SQRESULT get_rs232_instance(HSQUIRRELVM v, SQInteger idx, struct rs232_port_t **self){
     SQRESULT _rc_;
     SQRESULT _rc_;
-	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)self,(void*)SQRS232_TAG)) < 0) return _rc_;
+	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)self,(void*)SQRS232_TAG,SQFalse)) < 0) return _rc_;
 	if(!*self) return sq_throwerror(v, _SC("rs232 is closed"));
 	if(!*self) return sq_throwerror(v, _SC("rs232 is closed"));
 	return _rc_;
 	return _rc_;
 }
 }
@@ -79,7 +79,7 @@ static SQRESULT sq_rs232_constructor (HSQUIRRELVM v) {
 static SQRESULT sq_rs232_open(HSQUIRRELVM v){
 static SQRESULT sq_rs232_open(HSQUIRRELVM v){
     SQ_FUNC_VARS_NO_TOP(v);
     SQ_FUNC_VARS_NO_TOP(v);
     struct rs232_port_t *self=NULL;
     struct rs232_port_t *self=NULL;
-    if((_rc_ = sq_getinstanceup(v,1,(SQUserPointer*)&self,(void*)SQRS232_TAG)) < 0) return _rc_;
+    if((_rc_ = sq_getinstanceup(v,1,(SQUserPointer*)&self,(void*)SQRS232_TAG,SQFalse)) < 0) return _rc_;
 	SQ_GET_STRING(v, 2, device);
 	SQ_GET_STRING(v, 2, device);
 	if(self != NULL) sq_throwerror(v, _SC("rs232 already opened"));
 	if(self != NULL) sq_throwerror(v, _SC("rs232 already opened"));
 	self = rs232_init();
 	self = rs232_init();

+ 1 - 1
SquiLu-ext/sq_slave_vm.cpp

@@ -119,7 +119,7 @@ static const SQChar sq_slave_vm_TAG[] = _SC("SlaveVM");
 
 
 static SQRESULT get_slave_vm_instance(HSQUIRRELVM v, SQInteger idx, SlaveVM_st **svm_st)
 static SQRESULT get_slave_vm_instance(HSQUIRRELVM v, SQInteger idx, SlaveVM_st **svm_st)
 {
 {
-    if(sq_getinstanceup(v, idx, (SQUserPointer*)svm_st, (void*)sq_slave_vm_TAG) != SQ_OK) return SQ_ERROR;
+    if(sq_getinstanceup(v, idx, (SQUserPointer*)svm_st, (void*)sq_slave_vm_TAG,SQFalse) != SQ_OK) return SQ_ERROR;
     if(!*svm_st) return sq_throwerror(v, _SC("%s"), _SC("slave vm already closed"));
     if(!*svm_st) return sq_throwerror(v, _SC("%s"), _SC("slave vm already closed"));
     return SQ_OK;
     return SQ_OK;
 }
 }

+ 3 - 3
SquiLu-ext/sq_socket.cpp

@@ -860,7 +860,7 @@ typedef t_tcp *p_tcp;
 static const SQChar SQ_tcp_TAG[] = _SC("sq_tcp");
 static const SQChar SQ_tcp_TAG[] = _SC("sq_tcp");
 #define GET_tcp_INSTANCE_AT(v, idx) \
 #define GET_tcp_INSTANCE_AT(v, idx) \
 	p_tcp tcp; \
 	p_tcp tcp; \
-	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)&tcp,(void*)SQ_tcp_TAG)) < 0) return _rc_;
+	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)&tcp,(void*)SQ_tcp_TAG,SQFalse)) < 0) return _rc_;
 
 
 #define GET_tcp_client_INSTANCE_AT(v, idx) GET_tcp_INSTANCE_AT(v, idx)\
 #define GET_tcp_client_INSTANCE_AT(v, idx) GET_tcp_INSTANCE_AT(v, idx)\
 	if(tcp->type != TCP_TYPE_CLIENT) return sq_throwerror(v, _SC("tcp client expected"));
 	if(tcp->type != TCP_TYPE_CLIENT) return sq_throwerror(v, _SC("tcp client expected"));
@@ -1164,7 +1164,7 @@ static t_opt udp_opt[] = {
 static const SQChar SQ_udp_TAG[] = _SC("sq_udp");
 static const SQChar SQ_udp_TAG[] = _SC("sq_udp");
 #define GET_udp_INSTANCE_AT(v, idx) \
 #define GET_udp_INSTANCE_AT(v, idx) \
 	p_udp udp; \
 	p_udp udp; \
-	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)&udp,(void*)SQ_udp_TAG)) < 0) return _rc_;
+	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)&udp,(void*)SQ_udp_TAG,SQFalse)) < 0) return _rc_;
 
 
 #define GET_udp_connected_INSTANCE_AT(v, idx) GET_udp_INSTANCE_AT(v, idx)\
 #define GET_udp_connected_INSTANCE_AT(v, idx) GET_udp_INSTANCE_AT(v, idx)\
 	if(udp->type != UDP_TYPE_CONNECTED) return sq_throwerror(v, _SC("udp connected expected"));
 	if(udp->type != UDP_TYPE_CONNECTED) return sq_throwerror(v, _SC("udp connected expected"));
@@ -1458,7 +1458,7 @@ typedef t_unix *p_unix;
 static const SQChar SQ_unix_TAG[] = _SC("sq_unix_socket");
 static const SQChar SQ_unix_TAG[] = _SC("sq_unix_socket");
 #define GET_unix_INSTANCE_AT(v, idx) \
 #define GET_unix_INSTANCE_AT(v, idx) \
 	p_unix unix_sock; \
 	p_unix unix_sock; \
-	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)&unix_sock,(void*)SQ_unix_TAG)) < 0) return _rc_;
+	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)&unix_sock,(void*)SQ_unix_TAG,SQFalse)) < 0) return _rc_;
 
 
 #define GET_unix_client_INSTANCE_AT(v, idx) GET_unix_INSTANCE_AT(v, idx)\
 #define GET_unix_client_INSTANCE_AT(v, idx) GET_unix_INSTANCE_AT(v, idx)\
 	if(unix_sock->type != UNIX_TYPE_CLIENT) return sq_throwerror(v, _SC("unix client expected"));
 	if(unix_sock->type != UNIX_TYPE_CLIENT) return sq_throwerror(v, _SC("unix client expected"));

+ 1 - 1
SquiLu-ext/sq_spawnx.cpp

@@ -156,7 +156,7 @@ static const SQChar sq_spawnx_TAG[] = _SC("SQ_SpawnX");
 
 
 static SQRESULT get_spawnx_instance(HSQUIRRELVM v, SQInteger idx, SQ_SpawnX **spawnx_st)
 static SQRESULT get_spawnx_instance(HSQUIRRELVM v, SQInteger idx, SQ_SpawnX **spawnx_st)
 {
 {
-    if(sq_getinstanceup(v, idx, (SQUserPointer*)spawnx_st, (void*)sq_spawnx_TAG) != SQ_OK) return SQ_ERROR;
+    if(sq_getinstanceup(v, idx, (SQUserPointer*)spawnx_st, (void*)sq_spawnx_TAG,SQFalse) != SQ_OK) return SQ_ERROR;
     if(!*spawnx_st) return sq_throwerror(v, _SC("%s"), _SC("spawnx already closed"));
     if(!*spawnx_st) return sq_throwerror(v, _SC("%s"), _SC("spawnx already closed"));
     return SQ_OK;
     return SQ_OK;
 }
 }

+ 12 - 12
SquiLu-ext/sq_sqlite3.cpp

@@ -21,7 +21,7 @@ static const SQChar nullName[] = _SC("Null");
 static SQRESULT getOptionalBlob(HSQUIRRELVM v, SQInteger idx, SQBlob **blob)
 static SQRESULT getOptionalBlob(HSQUIRRELVM v, SQInteger idx, SQBlob **blob)
 {
 {
     if(sq_gettop(v) >= idx) {
     if(sq_gettop(v) >= idx) {
-        if(SQ_FAILED(sq_getinstanceup(v,3,(SQUserPointer*)blob,(SQUserPointer)SQBlob::SQBlob_TAG)))
+        if(SQ_FAILED(sq_getinstanceup(v,3,(SQUserPointer*)blob,(SQUserPointer)SQBlob::SQBlob_TAG,SQFalse)))
             return sq_throwerror(v,_SC("expect a blob as second parameter"));
             return sq_throwerror(v,_SC("expect a blob as second parameter"));
         if(!(*blob) || !(*blob)->IsValid())
         if(!(*blob) || !(*blob)->IsValid())
             return sq_throwerror(v,_SC("the blob is invalid"));
             return sq_throwerror(v,_SC("the blob is invalid"));
@@ -48,7 +48,7 @@ SQRegFunction sqlite3_NULL_methods[]=
 static SQRESULT get_sqlite3_instance(HSQUIRRELVM v, SQInteger idx, sq_sqlite3_sdb **sdb)
 static SQRESULT get_sqlite3_instance(HSQUIRRELVM v, SQInteger idx, sq_sqlite3_sdb **sdb)
 {
 {
     SQRESULT _rc_;
     SQRESULT _rc_;
-    if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)sdb,(void*)SQLite3_TAG)) < 0) return _rc_;
+    if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)sdb,(void*)SQLite3_TAG,SQFalse)) < 0) return _rc_;
     if(!*sdb) return sq_throwerror(v, _SC("database is closed"));
     if(!*sdb) return sq_throwerror(v, _SC("database is closed"));
     return _rc_;
     return _rc_;
 }
 }
@@ -56,7 +56,7 @@ static SQRESULT get_sqlite3_instance(HSQUIRRELVM v, SQInteger idx, sq_sqlite3_sd
 static SQRESULT get_sqlite3_stmt_instance(HSQUIRRELVM v, SQInteger idx, sqlite3_stmt **stmt)
 static SQRESULT get_sqlite3_stmt_instance(HSQUIRRELVM v, SQInteger idx, sqlite3_stmt **stmt)
 {
 {
     SQRESULT _rc_;
     SQRESULT _rc_;
-    if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)stmt,(void*)SQLite3_Stmt_TAG)) < 0) return _rc_;
+    if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)stmt,(void*)SQLite3_Stmt_TAG,SQFalse)) < 0) return _rc_;
     if(!*stmt) return sq_throwerror(v, _SC("statement is closed"));
     if(!*stmt) return sq_throwerror(v, _SC("statement is closed"));
     return _rc_;
     return _rc_;
 }
 }
@@ -64,7 +64,7 @@ static SQRESULT get_sqlite3_stmt_instance(HSQUIRRELVM v, SQInteger idx, sqlite3_
 static SQRESULT get_sqlite3_blob_instance(HSQUIRRELVM v, SQInteger idx, sqlite3_blob **blob)
 static SQRESULT get_sqlite3_blob_instance(HSQUIRRELVM v, SQInteger idx, sqlite3_blob **blob)
 {
 {
     SQRESULT _rc_;
     SQRESULT _rc_;
-    if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)blob,(void*)SQLite3_Blob_TAG)) < 0) return _rc_;
+    if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)blob,(void*)SQLite3_Blob_TAG,SQFalse)) < 0) return _rc_;
     if(!*blob) return sq_throwerror(v, _SC("blob is closed"));
     if(!*blob) return sq_throwerror(v, _SC("blob is closed"));
     return _rc_;
     return _rc_;
 }
 }
@@ -1261,7 +1261,7 @@ static SQRESULT sq_sle2vecOfvec(HSQUIRRELVM v)
         sq_getstr_and_size(v, 2, &sle, &sle_size);
         sq_getstr_and_size(v, 2, &sle, &sle_size);
         break;
         break;
     case OT_INSTANCE:
     case OT_INSTANCE:
-        if(SQ_FAILED(sq_getinstanceup(v,2,(SQUserPointer*)&blob,(SQUserPointer)SQBlob::SQBlob_TAG)))
+        if(SQ_FAILED(sq_getinstanceup(v,2,(SQUserPointer*)&blob,(SQUserPointer)SQBlob::SQBlob_TAG,SQFalse)))
             return sq_throwerror(v,_SC("invalid type tag"));
             return sq_throwerror(v,_SC("invalid type tag"));
         if(!blob || !blob->IsValid())
         if(!blob || !blob->IsValid())
             return sq_throwerror(v,_SC("the blob is invalid"));
             return sq_throwerror(v,_SC("the blob is invalid"));
@@ -1565,7 +1565,7 @@ static const SQChar *SQLite3_Transaction_TAG = "SQLite3Transaction";
 static SQRESULT get_sqlite3_transaction_instance(HSQUIRRELVM v, SQInteger idx, sq_sqlite3_sdb **sdb)
 static SQRESULT get_sqlite3_transaction_instance(HSQUIRRELVM v, SQInteger idx, sq_sqlite3_sdb **sdb)
 {
 {
     SQRESULT _rc_;
     SQRESULT _rc_;
-    if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)sdb,(void*)SQLite3_Transaction_TAG)) < 0) return _rc_;
+    if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)sdb,(void*)SQLite3_Transaction_TAG,SQFalse)) < 0) return _rc_;
     if(!*sdb) return sq_throwerror(v, _SC("transaction is closed"));
     if(!*sdb) return sq_throwerror(v, _SC("transaction is closed"));
     return _rc_;
     return _rc_;
 }
 }
@@ -1680,7 +1680,7 @@ static const SQChar *SQLite3_Session_TAG = "SQLite3Session";
 static SQRESULT get_sqlite3_session_instance(HSQUIRRELVM v, SQInteger idx, sqlite3_session **session)
 static SQRESULT get_sqlite3_session_instance(HSQUIRRELVM v, SQInteger idx, sqlite3_session **session)
 {
 {
     SQRESULT _rc_;
     SQRESULT _rc_;
-    if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)session,(void*)SQLite3_Session_TAG)) < 0) return _rc_;
+    if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)session,(void*)SQLite3_Session_TAG,SQFalse)) < 0) return _rc_;
     if(!*session) return sq_throwerror(v, _SC("session is closed"));
     if(!*session) return sq_throwerror(v, _SC("session is closed"));
     return _rc_;
     return _rc_;
 }
 }
@@ -1836,7 +1836,7 @@ static const SQChar *SQLite3_Session_Iterator_TAG = "SQLite3SessionIterator";
 static SQRESULT get_sqlite3_session_iterator_instance(HSQUIRRELVM v, SQInteger idx, sqlite3_changeset_iter **ppIter)
 static SQRESULT get_sqlite3_session_iterator_instance(HSQUIRRELVM v, SQInteger idx, sqlite3_changeset_iter **ppIter)
 {
 {
     SQRESULT _rc_;
     SQRESULT _rc_;
-    if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)ppIter,(void*)SQLite3_Session_Iterator_TAG)) < 0) return _rc_;
+    if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)ppIter,(void*)SQLite3_Session_Iterator_TAG,SQFalse)) < 0) return _rc_;
     if(!*ppIter) return sq_throwerror(v, _SC("changeset iterator is closed"));
     if(!*ppIter) return sq_throwerror(v, _SC("changeset iterator is closed"));
     return _rc_;
     return _rc_;
 }
 }
@@ -3076,7 +3076,7 @@ static SQRESULT sq_sqlite3_context_constructor(HSQUIRRELVM v)
 
 
 #define SQ_SQLITE3_GETCONTEXT(v, idx) \
 #define SQ_SQLITE3_GETCONTEXT(v, idx) \
     sq_sqlite3_context_st *self;\
     sq_sqlite3_context_st *self;\
-    if((_rc_ = sq_getinstanceup(v, idx, (void**)&self, (void*)sq_sqlite3_context_TAG)) < 0) return _rc_;
+    if((_rc_ = sq_getinstanceup(v, idx, (void**)&self, (void*)sq_sqlite3_context_TAG,SQFalse)) < 0) return _rc_;
 
 
 #define GET_sqlite3_context_INSTANCE() SQ_SQLITE3_GETCONTEXT(v,1)
 #define GET_sqlite3_context_INSTANCE() SQ_SQLITE3_GETCONTEXT(v,1)
 
 
@@ -3340,7 +3340,7 @@ static SQRESULT new_context_instance(HSQUIRRELVM v, sq_sqlite3_context_st **ctx)
     sq_pushroottable(v);
     sq_pushroottable(v);
     rc = sq_call(v, 1, SQTrue, SQFalse);
     rc = sq_call(v, 1, SQTrue, SQFalse);
     sq_remove(v, -2); //class
     sq_remove(v, -2); //class
-    rc = sq_getinstanceup(v, -1, (void**)ctx, (void*)sq_sqlite3_context_TAG);
+    rc = sq_getinstanceup(v, -1, (void**)ctx, (void*)sq_sqlite3_context_TAG,SQFalse);
     return rc;
     return rc;
 }
 }
 /* scalar function to be called
 /* scalar function to be called
@@ -3424,14 +3424,14 @@ static void db_sql_finalize_function(sqlite3_context *context)
     sq_remove(v, -2); //registrytable
     sq_remove(v, -2); //registrytable
 
 
     sq_sqlite3_context_st *self;
     sq_sqlite3_context_st *self;
-    SQRESULT rc = sq_getinstanceup(v, -1, (void**)&self, (void*)sq_sqlite3_context_TAG);
+    SQRESULT rc = sq_getinstanceup(v, -1, (void**)&self, (void*)sq_sqlite3_context_TAG,SQFalse);
     if(rc != SQ_OK)
     if(rc != SQ_OK)
     {
     {
         sqlite3_result_error(context, "Unexpected missing sqlite3_aggregate_context on stack", -1);
         sqlite3_result_error(context, "Unexpected missing sqlite3_aggregate_context on stack", -1);
         sq_settop(v, top);
         sq_settop(v, top);
         return;
         return;
     }
     }
-    self->ctx = context;
+    self->ctx = context; //xFinal function has a different context saved from xStep
 
 
     if (sq_call(v, 2, SQFalse, SQFalse) != SQ_OK) //2 = roottable + ctx
     if (sq_call(v, 2, SQFalse, SQFalse) != SQ_OK) //2 = roottable + ctx
     {
     {

+ 1 - 1
SquiLu/include/sqapi.h

@@ -114,7 +114,7 @@ SQUIRREL_API_FUNC(SQRESULT, getclosureinfo, (HSQUIRRELVM v,SQInteger idx,SQInteg
 SQUIRREL_API_FUNC(SQRESULT, getclosurename, (HSQUIRRELVM v,SQInteger idx))
 SQUIRREL_API_FUNC(SQRESULT, getclosurename, (HSQUIRRELVM v,SQInteger idx))
 SQUIRREL_API_FUNC(SQRESULT, setnativeclosurename, (HSQUIRRELVM v,SQInteger idx,const SQChar *name))
 SQUIRREL_API_FUNC(SQRESULT, setnativeclosurename, (HSQUIRRELVM v,SQInteger idx,const SQChar *name))
 SQUIRREL_API_FUNC(SQRESULT, setinstanceup, (HSQUIRRELVM v, SQInteger idx, SQUserPointer p))
 SQUIRREL_API_FUNC(SQRESULT, setinstanceup, (HSQUIRRELVM v, SQInteger idx, SQUserPointer p))
-SQUIRREL_API_FUNC(SQRESULT, getinstanceup, (HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserPointer typetag))
+SQUIRREL_API_FUNC(SQRESULT, getinstanceup, (HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserPointer typetag,SQBool throwerror))
 SQUIRREL_API_FUNC(SQRESULT, setclassudsize, (HSQUIRRELVM v, SQInteger idx, SQInteger udsize))
 SQUIRREL_API_FUNC(SQRESULT, setclassudsize, (HSQUIRRELVM v, SQInteger idx, SQInteger udsize))
 SQUIRREL_API_FUNC(SQRESULT, newclass, (HSQUIRRELVM v,SQBool hasbase))
 SQUIRREL_API_FUNC(SQRESULT, newclass, (HSQUIRRELVM v,SQBool hasbase))
 SQUIRREL_API_FUNC(SQRESULT, pushnewclass, (HSQUIRRELVM v, const SQChar *className,
 SQUIRREL_API_FUNC(SQRESULT, pushnewclass, (HSQUIRRELVM v, const SQChar *className,

+ 1 - 1
SquiLu/include/squirrel.h

@@ -294,7 +294,7 @@ typedef struct {
 
 
 #define SQ_GET_INSTANCE_VAR(v, idx, Klass, Var, Klass_tag) \
 #define SQ_GET_INSTANCE_VAR(v, idx, Klass, Var, Klass_tag) \
 	KLASS_VAR(Klass, Var); \
 	KLASS_VAR(Klass, Var); \
-	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)&Var,(void*)Klass_tag)) < 0) return _rc_;
+	if((_rc_ = sq_getinstanceup(v,idx,(SQUserPointer*)&Var,(void*)Klass_tag,SQFalse)) < 0) return _rc_;
 
 
 #define SQ_GET_INSTANCE(v, idx, Klass, Klass_tag) SQ_GET_INSTANCE_VAR(v, idx, Klass, self, Klass_tag)
 #define SQ_GET_INSTANCE(v, idx, Klass, Klass_tag) SQ_GET_INSTANCE_VAR(v, idx, Klass, self, Klass_tag)
 #define SQ_GET_INSTANCE2(v, idx, Var, Klass, Klass_tag) SQ_GET_INSTANCE_VAR(v, idx, Klass, Var, Klass_tag)
 #define SQ_GET_INSTANCE2(v, idx, Var, Klass, Klass_tag) SQ_GET_INSTANCE_VAR(v, idx, Klass, Var, Klass_tag)

+ 5 - 5
SquiLu/sqstdlib/sqstdblob.cpp

@@ -151,7 +151,7 @@ bool SQBlob::SetLen(SQInteger len){
 
 
 #define SETUP_BLOB(v) \
 #define SETUP_BLOB(v) \
 	SQBlob *self = NULL; \
 	SQBlob *self = NULL; \
-	{ if(SQ_FAILED(sq_getinstanceup(v,1,(SQUserPointer*)&self,(SQUserPointer)SQSTD_BLOB_TYPE_TAG))) \
+	{ if(SQ_FAILED(sq_getinstanceup(v,1,(SQUserPointer*)&self,(SQUserPointer)SQSTD_BLOB_TYPE_TAG,SQFalse))) \
 		return sq_throwerror(v,_SC("invalid type tag"));  } \
 		return sq_throwerror(v,_SC("invalid type tag"));  } \
 	if(!self || !self->IsValid())  \
 	if(!self || !self->IsValid())  \
 		return sq_throwerror(v,_SC("the blob is invalid"));
 		return sq_throwerror(v,_SC("the blob is invalid"));
@@ -334,7 +334,7 @@ static SQRESULT _blob__cloned(HSQUIRRELVM v)
 {
 {
 	SQBlob *other = NULL;
 	SQBlob *other = NULL;
 	{
 	{
-		if(SQ_FAILED(sq_getinstanceup(v,2,(SQUserPointer*)&other,(SQUserPointer)SQSTD_BLOB_TYPE_TAG)))
+		if(SQ_FAILED(sq_getinstanceup(v,2,(SQUserPointer*)&other,(SQUserPointer)SQSTD_BLOB_TYPE_TAG,SQFalse)))
 			return SQ_ERROR;
 			return SQ_ERROR;
 	}
 	}
 	//SQBlob *thisone = new SQBlob(other->Len());
 	//SQBlob *thisone = new SQBlob(other->Len());
@@ -588,7 +588,7 @@ static SQRegFunction bloblib_funcs[]={
 SQRESULT sqstd_getblob(HSQUIRRELVM v,SQInteger idx,SQUserPointer *ptr)
 SQRESULT sqstd_getblob(HSQUIRRELVM v,SQInteger idx,SQUserPointer *ptr)
 {
 {
 	SQBlob *blob;
 	SQBlob *blob;
-	if(SQ_FAILED(sq_getinstanceup(v,idx,(SQUserPointer *)&blob,(SQUserPointer)SQSTD_BLOB_TYPE_TAG)))
+	if(SQ_FAILED(sq_getinstanceup(v,idx,(SQUserPointer *)&blob,(SQUserPointer)SQSTD_BLOB_TYPE_TAG,SQTrue)))
 		return -1;
 		return -1;
 	*ptr = blob->GetBuf();
 	*ptr = blob->GetBuf();
 	return SQ_OK;
 	return SQ_OK;
@@ -597,7 +597,7 @@ SQRESULT sqstd_getblob(HSQUIRRELVM v,SQInteger idx,SQUserPointer *ptr)
 SQInteger sqstd_getblobsize(HSQUIRRELVM v,SQInteger idx)
 SQInteger sqstd_getblobsize(HSQUIRRELVM v,SQInteger idx)
 {
 {
 	SQBlob *blob;
 	SQBlob *blob;
-	if(SQ_FAILED(sq_getinstanceup(v,idx,(SQUserPointer *)&blob,(SQUserPointer)SQSTD_BLOB_TYPE_TAG)))
+	if(SQ_FAILED(sq_getinstanceup(v,idx,(SQUserPointer *)&blob,(SQUserPointer)SQSTD_BLOB_TYPE_TAG,SQTrue)))
 		return -1;
 		return -1;
 	return blob->Len();
 	return blob->Len();
 }
 }
@@ -630,7 +630,7 @@ SQUserPointer sqstd_createblob(HSQUIRRELVM v, SQInteger size)
 		sq_pushinteger(v,size); //size
 		sq_pushinteger(v,size); //size
 		SQBlob *blob = NULL;
 		SQBlob *blob = NULL;
 		if(SQ_SUCCEEDED(sq_call(v,2,SQTrue,SQFalse))
 		if(SQ_SUCCEEDED(sq_call(v,2,SQTrue,SQFalse))
-			&& SQ_SUCCEEDED(sq_getinstanceup(v,-1,(SQUserPointer *)&blob,(SQUserPointer)SQSTD_BLOB_TYPE_TAG))) {
+			&& SQ_SUCCEEDED(sq_getinstanceup(v,-1,(SQUserPointer *)&blob,(SQUserPointer)SQSTD_BLOB_TYPE_TAG,SQTrue))) {
 			sq_remove(v,-2);
 			sq_remove(v,-2);
 			return blob->GetBuf();
 			return blob->GetBuf();
 		}
 		}

+ 3 - 3
SquiLu/sqstdlib/sqstdio.cpp

@@ -145,7 +145,7 @@ static SQRESULT _popen_constructor(HSQUIRRELVM v)
 static SQRESULT _popen_close(HSQUIRRELVM v)
 static SQRESULT _popen_close(HSQUIRRELVM v)
 {
 {
 	SQPopen *self = NULL;
 	SQPopen *self = NULL;
-	if(SQ_SUCCEEDED(sq_getinstanceup(v,1,(SQUserPointer*)&self,(SQUserPointer)SQSTD_FILE_TYPE_TAG))
+	if(SQ_SUCCEEDED(sq_getinstanceup(v,1,(SQUserPointer*)&self,(SQUserPointer)SQSTD_FILE_TYPE_TAG,SQTrue))
 		&& self != NULL)
 		&& self != NULL)
 	{
 	{
 		sq_pushinteger(v, self->PClose());
 		sq_pushinteger(v, self->PClose());
@@ -208,7 +208,7 @@ static SQRESULT _file_constructor(HSQUIRRELVM v)
 static SQRESULT _file_close(HSQUIRRELVM v)
 static SQRESULT _file_close(HSQUIRRELVM v)
 {
 {
 	SQFile *self = NULL;
 	SQFile *self = NULL;
-	if(SQ_SUCCEEDED(sq_getinstanceup(v,1,(SQUserPointer*)&self,(SQUserPointer)SQSTD_FILE_TYPE_TAG))
+	if(SQ_SUCCEEDED(sq_getinstanceup(v,1,(SQUserPointer*)&self,(SQUserPointer)SQSTD_FILE_TYPE_TAG,SQTrue))
 		&& self != NULL)
 		&& self != NULL)
 	{
 	{
 		self->Close();
 		self->Close();
@@ -296,7 +296,7 @@ SQRESULT sqstd_createfile(HSQUIRRELVM v, SQFILE file,SQBool own)
 SQRESULT sqstd_getfile(HSQUIRRELVM v, SQInteger idx, SQFILE *file)
 SQRESULT sqstd_getfile(HSQUIRRELVM v, SQInteger idx, SQFILE *file)
 {
 {
 	SQFile *fileobj = NULL;
 	SQFile *fileobj = NULL;
-	if(SQ_SUCCEEDED(sq_getinstanceup(v,idx,(SQUserPointer*)&fileobj,(SQUserPointer)SQSTD_FILE_TYPE_TAG))) {
+	if(SQ_SUCCEEDED(sq_getinstanceup(v,idx,(SQUserPointer*)&fileobj,(SQUserPointer)SQSTD_FILE_TYPE_TAG,SQFalse))) {
 		*file = fileobj->GetHandle();
 		*file = fileobj->GetHandle();
 		return SQ_OK;
 		return SQ_OK;
 	}
 	}

+ 2 - 2
SquiLu/sqstdlib/sqstdstream.cpp

@@ -16,7 +16,7 @@ static const SQChar SQSTD_STREAM_TYPE_TAG[] = _SC("std_stream");
 
 
 #define SETUP_STREAM(v) \
 #define SETUP_STREAM(v) \
 	SQStream *self = NULL; \
 	SQStream *self = NULL; \
-	if(SQ_FAILED(sq_getinstanceup(v,1,(SQUserPointer*)&self,(SQUserPointer)SQSTD_STREAM_TYPE_TAG))) \
+	if(SQ_FAILED(sq_getinstanceup(v,1,(SQUserPointer*)&self,(SQUserPointer)SQSTD_STREAM_TYPE_TAG,SQFalse))) \
 		return sq_throwerror(v,_SC("invalid type tag")); \
 		return sq_throwerror(v,_SC("invalid type tag")); \
 	if(!self || !self->IsValid())  \
 	if(!self || !self->IsValid())  \
 		return sq_throwerror(v,_SC("the stream is invalid"));
 		return sq_throwerror(v,_SC("the stream is invalid"));
@@ -137,7 +137,7 @@ SQInteger _stream_readblob(HSQUIRRELVM v)
 		return sq_throwerror(v,_SC("no data left to read"));
 		return sq_throwerror(v,_SC("no data left to read"));
     if(res < size) {
     if(res < size) {
         SQBlob *blob;
         SQBlob *blob;
-        if(SQ_FAILED(sq_getinstanceup(v,-1,(SQUserPointer *)&blob,SQBlob::SQBlob_TAG)))
+        if(SQ_FAILED(sq_getinstanceup(v,-1,(SQUserPointer *)&blob,SQBlob::SQBlob_TAG,SQFalse)))
             return sq_throwerror(v,_SC("failed to get blob from stack"));
             return sq_throwerror(v,_SC("failed to get blob from stack"));
         blob->Resize(res);
         blob->Resize(res);
     }
     }

+ 1 - 1
SquiLu/sqstdlib/sqstdstring.cpp

@@ -340,7 +340,7 @@ static SQInteger _string_escape(HSQUIRRELVM v)
 
 
 #define SETUP_REX(v) \
 #define SETUP_REX(v) \
 	SQRex *self = NULL; \
 	SQRex *self = NULL; \
-	sq_getinstanceup(v,1,(SQUserPointer *)&self,0);
+	sq_getinstanceup(v,1,(SQUserPointer *)&self,0,SQFalse);
 
 
 static SQRESULT _rexobj_releasehook(SQUserPointer p, SQInteger /*size*/, void */*ep*/)
 static SQRESULT _rexobj_releasehook(SQUserPointer p, SQInteger /*size*/, void */*ep*/)
 {
 {

+ 3 - 3
SquiLu/squirrel/sqapi.cpp

@@ -1150,10 +1150,10 @@ SQRESULT sq_setclassudsize(HSQUIRRELVM v, SQInteger idx, SQInteger udsize)
 }
 }
 
 
 
 
-SQRESULT sq_getinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserPointer typetag)
+SQRESULT sq_getinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserPointer typetag,SQBool throwerror)
 {
 {
 	SQObjectPtr &o = stack_get(v,idx);
 	SQObjectPtr &o = stack_get(v,idx);
-	if(sq_type(o) != OT_INSTANCE) return sq_throwerror(v,_SC("the object is not a class instance"));
+	if(sq_type(o) != OT_INSTANCE) return throwerror ? sq_throwerror(v, _SC("the object is not a class instance")) : SQ_ERROR;
 	(*p) = _instance(o)->_userpointer;
 	(*p) = _instance(o)->_userpointer;
 	if(typetag != 0) {
 	if(typetag != 0) {
 		SQClass *cl = _instance(o)->_class;
 		SQClass *cl = _instance(o)->_class;
@@ -1162,7 +1162,7 @@ SQRESULT sq_getinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserP
 				return SQ_OK;
 				return SQ_OK;
 			cl = cl->_base;
 			cl = cl->_base;
 		}while(cl != NULL);
 		}while(cl != NULL);
-		return sq_throwerror(v,_SC("invalid type tag"));
+		return throwerror ? sq_throwerror(v, _SC("invalid type tag")) : SQ_ERROR;
 	}
 	}
 	return SQ_OK;
 	return SQ_OK;
 }
 }

+ 1 - 0
SquiLu/squirrel/sqbaselib.cpp

@@ -2898,6 +2898,7 @@ static SQRESULT thread_call(HSQUIRRELVM v)
 	SQObjectPtr o = stack_get(v,1);
 	SQObjectPtr o = stack_get(v,1);
 	if(sq_type(o) == OT_THREAD) {
 	if(sq_type(o) == OT_THREAD) {
 		SQInteger nparams = sq_gettop(v);
 		SQInteger nparams = sq_gettop(v);
+		sq_reservestack(_thread(o), nparams + 3);
 		_thread(o)->Push(_thread(o)->_roottable);
 		_thread(o)->Push(_thread(o)->_roottable);
 		for(SQInteger i = 2; i<(nparams+1); i++)
 		for(SQInteger i = 2; i<(nparams+1); i++)
 			sq_move(_thread(o),v,i);
 			sq_move(_thread(o),v,i);

+ 1 - 1
SquiLu/squirrel/sqvm.cpp

@@ -1431,7 +1431,7 @@ void SQVM::CallDebugHook(SQInteger type,SQInteger forcedline)
 		SQObjectPtr creg;
 		SQObjectPtr creg;
 		SQInteger nparams=5;
 		SQInteger nparams=5;
 		Push(_roottable); Push(type); Push(func->_sourcename); Push(forcedline?forcedline:func->GetLine(ci->_ip)); Push(func->_name);
 		Push(_roottable); Push(type); Push(func->_sourcename); Push(forcedline?forcedline:func->GetLine(ci->_ip)); Push(func->_name);
-		Call(_debughook_closure,nparams,_top-nparams,creg,SQFalse);
+		Call(_debughook_closure,nparams,_top-nparams,creg,SQTrue);
 		Pop(nparams);
 		Pop(nparams);
 	}
 	}
 	_debughook = true;
 	_debughook = true;