فهرست منبع

Add some fixes from squirrel.

mingodad 10 سال پیش
والد
کامیت
12c181bdc4
4فایلهای تغییر یافته به همراه19 افزوده شده و 14 حذف شده
  1. 13 8
      SquiLu/squirrel/sqapi.cpp
  2. 1 1
      SquiLu/squirrel/sqobject.cpp
  3. 4 4
      SquiLu/squirrel/sqvm.cpp
  4. 1 1
      SquiLu/squirrel/sqvm.h

+ 13 - 8
SquiLu/squirrel/sqapi.cpp

@@ -1405,10 +1405,10 @@ SQRESULT sq_reservestack(HSQUIRRELVM v,SQInteger nsize)
 
 SQRESULT sq_resume(HSQUIRRELVM v,SQBool retval,SQBool raiseerror)
 {
-    SQObjectPtr &obj = v->GetUp(-1);
-	if(type(obj)==OT_GENERATOR){
+	if (type(v->GetUp(-1)) == OT_GENERATOR)
+	{
 		v->PushNull(); //retval
-		if(!v->Execute(v->GetUp(-2),0,v->_top,obj,raiseerror,SQVM::ET_RESUME_GENERATOR))
+		if (!v->Execute(v->GetUp(-2), 0, v->_top, v->GetUp(-1), raiseerror, SQVM::ET_RESUME_GENERATOR))
 		{v->Raise_Error(v->_lasterror); return SQ_ERROR;}
 		if(!retval)
 			v->Pop();
@@ -1919,17 +1919,22 @@ void sq_insert_reg_funcs(HSQUIRRELVM sqvm, SQRegFunction *obj_funcs){
 #define DONE_AND_RETURN(x) {ret_val =x; goto done_and_return;}
 #define CHECK_OK(v) if((ret_val = v) < 0) goto done_and_return;
 
-SQRESULT sq_call_va_vl(HSQUIRRELVM v, SQBool reset_stack, SQInteger idx, const SQChar *func, SQInteger idx_this, const SQChar *sig, va_list vl)
+SQRESULT sq_call_va_vl(HSQUIRRELVM v, SQBool reset_stack, SQInteger idx, const SQChar *func_name, SQInteger idx_this, const SQChar *sig, va_list vl)
 {
     int narg; // nres;  /* number of arguments and results */
     SQRESULT ret_val = 0;
     SQObjectType toptype;
     SQInteger top = sq_gettop(v);
 
-    sq_pushstring(v, func, -1);
-    CHECK_OK(sq_get(v, idx > 0 ? idx : idx-1));
-    toptype = sq_gettype(v, -1);
-    if(!(toptype == OT_CLOSURE || toptype == OT_NATIVECLOSURE)) DONE_AND_RETURN(-100);
+    //if func_name not null assume global function name
+    //else function already on stack
+    if(func_name)
+    {
+        sq_pushstring(v, func_name, -1);
+        CHECK_OK(sq_get(v, idx > 0 ? idx : idx-1));
+        toptype = sq_gettype(v, -1);
+        if(!(toptype == OT_CLOSURE || toptype == OT_NATIVECLOSURE)) DONE_AND_RETURN(-100);
+    }
 
     if(idx_this == 0) sq_pushroottable(v);
     else sq_push(v, idx_this > 0 ? idx_this : idx_this-1);

+ 1 - 1
SquiLu/squirrel/sqobject.cpp

@@ -402,7 +402,7 @@ bool ReadObject(HSQUIRRELVM v,SQUserPointer up,SQREADFUNC read,SQObjectPtr &o)
 	case OT_STRING:{
 		SQInteger len;
 		_CHECK_IO(SafeRead(v,read,up,&len,sizeof(SQInteger)));
-		_CHECK_IO(SafeRead(v,read,up,_ss(v)->GetScratchPad(rsl(len)),rsl(len)));
+		_CHECK_IO(SafeRead(v,read,up,_ss(v)->GetScratchPad(sq_rsl(len)),sq_rsl(len)));
 		o=SQString::Create(_ss(v),_ss(v)->GetScratchPad(-1),len);
 				   }
 		break;

+ 4 - 4
SquiLu/squirrel/sqvm.cpp

@@ -364,9 +364,9 @@ bool SQVM::StringCat(const SQObjectPtr &str,const SQObjectPtr &obj,SQObjectPtr &
 	if(!ToString(str, a)) return false;
 	if(!ToString(obj, b)) return false;
 	SQInteger l = _string(a)->_len , ol = _string(b)->_len;
-	SQChar *s = _sp(rsl(l + ol + 1));
-	memcpy(s, _stringval(a), rsl(l));
-	memcpy(s + l, _stringval(b), rsl(ol));
+	SQChar *s = _sp(sq_rsl(l + ol + 1));
+	memcpy(s, _stringval(a), sq_rsl(l));
+	memcpy(s + l, _stringval(b), sq_rsl(ol));
 	dest = SQString::Create(_ss(this), _spval, l + ol);
 	return true;
 }
@@ -938,7 +938,7 @@ exception_restore:
 						continue;
 					case OT_CLASS:{
 						SQObjectPtr inst;
-						CreateClassInstance(_class(clo),inst,clo);
+						_GUARD(CreateClassInstance(_class(clo),inst,clo));
 						if(sarg0 != -1) {
 							STK(arg0) = inst;
 						}

+ 1 - 1
SquiLu/squirrel/sqvm.h

@@ -182,7 +182,7 @@ public:
 
 	ExceptionsTraps _etraps;
 	CallInfo *ci;
-	void *_foreignptr;
+	SQUserPointer _foreignptr;
 	//VMs sharing the same state
 	SQSharedState *_sharedstate;
 	SQInteger _nnativecalls;