Selaa lähdekoodia

Add new api functions:
sq_insert to be equivalent to lua_insert.
sq_replace to equivalent to lua_replace.
sq_gettypename return a char* with the type name to be used mainly on sq_throwerror.
sq_getbyname a shortcut for sq_pushstring, sq_get sequence on tables, class, instances.

Refactored some api functions removing multiple redundant calls to v->Get(x).

Several inutil spaces are removed from the sources, that's why so many diff lines with the same content.

mingodad 13 vuotta sitten
vanhempi
sitoutus
f7be9c0f1c
4 muutettua tiedostoa jossa 137 lisäystä ja 56 poistoa
  1. 4 0
      include/squirrel.h
  2. 97 49
      squirrel/sqapi.cpp
  3. 28 2
      squirrel/sqvm.cpp
  4. 8 5
      squirrel/sqvm.h

+ 4 - 0
include/squirrel.h

@@ -347,6 +347,8 @@ SQUIRREL_API void sq_push(HSQUIRRELVM v,SQInteger idx);
 SQUIRREL_API void sq_pop(HSQUIRRELVM v,SQInteger nelemstopop);
 SQUIRREL_API void sq_poptop(HSQUIRRELVM v);
 SQUIRREL_API void sq_remove(HSQUIRRELVM v,SQInteger idx);
+SQUIRREL_API void sq_insert(HSQUIRRELVM v,SQInteger idx);
+SQUIRREL_API void sq_replace(HSQUIRRELVM v,SQInteger idx);
 SQUIRREL_API SQInteger sq_gettop(HSQUIRRELVM v);
 SQUIRREL_API void sq_settop(HSQUIRRELVM v,SQInteger newtop);
 SQUIRREL_API SQRESULT sq_reservestack(HSQUIRRELVM v,SQInteger nsize);
@@ -368,6 +370,7 @@ SQUIRREL_API void sq_pushbool(HSQUIRRELVM v,SQBool b);
 SQUIRREL_API void sq_pushuserpointer(HSQUIRRELVM v,SQUserPointer p);
 SQUIRREL_API void sq_pushnull(HSQUIRRELVM v);
 SQUIRREL_API SQObjectType sq_gettype(HSQUIRRELVM v,SQInteger idx);
+SQUIRREL_API const SQChar *sq_gettypename(HSQUIRRELVM v,SQInteger idx);
 SQUIRREL_API SQRESULT sq_typeof(HSQUIRRELVM v,SQInteger idx);
 SQUIRREL_API SQInteger sq_getsize(HSQUIRRELVM v,SQInteger idx);
 SQUIRREL_API SQHash sq_gethash(HSQUIRRELVM v, SQInteger idx);
@@ -416,6 +419,7 @@ SQUIRREL_API SQRESULT sq_newslot(HSQUIRRELVM v, SQInteger idx, SQBool bstatic);
 SQUIRREL_API SQRESULT sq_deleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval);
 SQUIRREL_API SQRESULT sq_set(HSQUIRRELVM v,SQInteger idx);
 SQUIRREL_API SQRESULT sq_get(HSQUIRRELVM v,SQInteger idx);
+SQUIRREL_API SQRESULT sq_getbyname(HSQUIRRELVM v,SQInteger idx, const SQChar *key, SQInteger key_len);
 SQUIRREL_API SQRESULT sq_rawget(HSQUIRRELVM v,SQInteger idx);
 SQUIRREL_API SQRESULT sq_rawset(HSQUIRRELVM v,SQInteger idx);
 SQUIRREL_API SQRESULT sq_rawdeleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval);

+ 97 - 49
squirrel/sqapi.cpp

@@ -30,7 +30,7 @@ bool sq_aux_gettypedarg(HSQUIRRELVM v,SQInteger idx,SQObjectType type,SQObjectPt
 #define sq_aux_paramscheck(v,count) \
 { \
 	if(sq_gettop(v) < count){ v->Raise_Error(_SC("not enough params in the stack")); return SQ_ERROR; }\
-}		
+}
 
 
 SQInteger sq_aux_invalidtype(HSQUIRRELVM v,SQObjectType type)
@@ -62,10 +62,10 @@ HSQUIRRELVM sq_newthread(HSQUIRRELVM friendvm, SQInteger initialstacksize)
 	SQSharedState *ss;
 	SQVM *v;
 	ss=_ss(friendvm);
-	
+
 	v= (SQVM *)SQ_MALLOC(sizeof(SQVM));
 	new (v) SQVM(ss);
-	
+
 	if(v->Init(friendvm, initialstacksize)) {
 		friendvm->Push(v);
 		return v;
@@ -79,7 +79,7 @@ SQInteger sq_getvmstate(HSQUIRRELVM v)
 {
 	if(v->_suspended)
 		return SQ_VMSTATE_SUSPENDED;
-	else { 
+	else {
 		if(v->_callsstacksize != 0) return SQ_VMSTATE_RUNNING;
 		else return SQ_VMSTATE_IDLE;
 	}
@@ -162,10 +162,10 @@ SQUnsignedInteger sq_getrefcount(HSQUIRRELVM v,HSQOBJECT *po)
 {
 	if(!ISREFCOUNTED(type(*po))) return 0;
 #ifdef NO_GARBAGE_COLLECTOR
-   return po->_unVal.pRefCounted->_uiRef; 
+   return po->_unVal.pRefCounted->_uiRef;
 #else
-   return _ss(v)->_refs_table.GetRefCount(*po); 
-#endif 
+   return _ss(v)->_refs_table.GetRefCount(*po);
+#endif
 }
 
 SQBool sq_release(HSQUIRRELVM v,HSQOBJECT *po)
@@ -180,7 +180,7 @@ SQBool sq_release(HSQUIRRELVM v,HSQOBJECT *po)
 #endif
 }
 
-const SQChar *sq_objtostring(const HSQOBJECT *o) 
+const SQChar *sq_objtostring(const HSQOBJECT *o)
 {
 	if(sq_type(*o) == OT_STRING) {
 		return _stringval(*o);
@@ -188,7 +188,7 @@ const SQChar *sq_objtostring(const HSQOBJECT *o)
 	return NULL;
 }
 
-SQInteger sq_objtointeger(const HSQOBJECT *o) 
+SQInteger sq_objtointeger(const HSQOBJECT *o)
 {
 	if(sq_isnumeric(*o)) {
 		return tointeger(*o);
@@ -196,7 +196,7 @@ SQInteger sq_objtointeger(const HSQOBJECT *o)
 	return 0;
 }
 
-SQFloat sq_objtofloat(const HSQOBJECT *o) 
+SQFloat sq_objtofloat(const HSQOBJECT *o)
 {
 	if(sq_isnumeric(*o)) {
 		return tofloat(*o);
@@ -204,7 +204,7 @@ SQFloat sq_objtofloat(const HSQOBJECT *o)
 	return 0;
 }
 
-SQBool sq_objtobool(const HSQOBJECT *o) 
+SQBool sq_objtobool(const HSQOBJECT *o)
 {
 	if(sq_isbool(*o)) {
 		return _integer(*o);
@@ -261,17 +261,17 @@ SQUserPointer sq_newuserdata(HSQUIRRELVM v,SQUnsignedInteger size)
 
 void sq_newtable(HSQUIRRELVM v)
 {
-	v->Push(SQTable::Create(_ss(v), 0));	
+	v->Push(SQTable::Create(_ss(v), 0));
 }
 
 void sq_newtableex(HSQUIRRELVM v,SQInteger initialcapacity)
 {
-	v->Push(SQTable::Create(_ss(v), initialcapacity));	
+	v->Push(SQTable::Create(_ss(v), initialcapacity));
 }
 
 void sq_newarray(HSQUIRRELVM v,SQInteger size)
 {
-	v->Push(SQArray::Create(_ss(v), size));	
+	v->Push(SQArray::Create(_ss(v), size));
 }
 
 SQRESULT sq_newclass(HSQUIRRELVM v,SQBool hasbase)
@@ -285,7 +285,7 @@ SQRESULT sq_newclass(HSQUIRRELVM v,SQBool hasbase)
 	}
 	SQClass *newclass = SQClass::Create(_ss(v), baseclass);
 	if(baseclass) v->Pop();
-	v->Push(newclass);	
+	v->Push(newclass);
 	return SQ_OK;
 }
 
@@ -356,15 +356,15 @@ SQRESULT sq_arrayreverse(HSQUIRRELVM v,SQInteger idx)
 
 SQRESULT sq_arrayremove(HSQUIRRELVM v,SQInteger idx,SQInteger itemidx)
 {
-	sq_aux_paramscheck(v, 1); 
+	sq_aux_paramscheck(v, 1);
 	SQObjectPtr *arr;
-	_GETSAFE_OBJ(v, idx, OT_ARRAY,arr); 
-	return _array(*arr)->Remove(itemidx) ? SQ_OK : sq_throwerror(v,_SC("index out of range")); 
+	_GETSAFE_OBJ(v, idx, OT_ARRAY,arr);
+	return _array(*arr)->Remove(itemidx) ? SQ_OK : sq_throwerror(v,_SC("index out of range"));
 }
 
 SQRESULT sq_arrayinsert(HSQUIRRELVM v,SQInteger idx,SQInteger destpos)
 {
-	sq_aux_paramscheck(v, 1); 
+	sq_aux_paramscheck(v, 1);
 	SQObjectPtr *arr;
 	_GETSAFE_OBJ(v, idx, OT_ARRAY,arr);
 	SQRESULT ret = _array(*arr)->Insert(destpos, v->GetUp(-1)) ? SQ_OK : sq_throwerror(v,_SC("index out of range"));
@@ -380,7 +380,7 @@ void sq_newclosure(HSQUIRRELVM v,SQFUNCTION func,SQUnsignedInteger nfreevars)
 		nc->_outervalues[i] = v->Top();
 		v->Pop();
 	}
-	v->Push(SQObjectPtr(nc));	
+	v->Push(SQObjectPtr(nc));
 }
 
 SQRESULT sq_getclosureinfo(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger *nparams,SQUnsignedInteger *nfreevars)
@@ -514,7 +514,8 @@ void sq_pushregistrytable(HSQUIRRELVM v)
 
 SQRESULT sq_getonregistrytable(HSQUIRRELVM v)
 {
-	if(_table(_ss(v)->_registry)->Get(v->GetUp(-1),v->GetUp(-1)))
+    SQObjectPtr &obj = v->GetUp(-1);
+	if(_table(_ss(v)->_registry)->Get(obj,obj))
 		return SQ_OK;
 	v->Pop();
 	return SQ_ERROR;
@@ -522,11 +523,12 @@ SQRESULT sq_getonregistrytable(HSQUIRRELVM v)
 
 SQRESULT sq_setonregistrytable(HSQUIRRELVM v)
 {
-	if(type(v->GetUp(-2)) == OT_NULL) {
+    SQObjectPtr &key = v->GetUp(-2);
+	if(type(key) == OT_NULL) {
 		v->Pop(2);
 		return sq_throwerror(v, _SC("null key"));
 	}
-    _table(_ss(v)->_registry)->NewSlot(v->GetUp(-2), v->GetUp(-1));
+    _table(_ss(v)->_registry)->NewSlot(key, v->GetUp(-1));
     v->Pop(2);
     return SQ_OK;
 }
@@ -576,6 +578,11 @@ void sq_push(HSQUIRRELVM v,SQInteger idx)
 SQObjectType sq_gettype(HSQUIRRELVM v,SQInteger idx)
 {
 	return type(stack_get(v, idx));
+}
+
+SQUIRREL_API const SQChar *sq_gettypename(HSQUIRRELVM v,SQInteger idx){
+	SQObjectPtr &o = stack_get(v, idx);
+    return GetTypeName(o);
 }
 
 SQRESULT sq_typeof(HSQUIRRELVM v,SQInteger idx)
@@ -813,6 +820,16 @@ void sq_remove(HSQUIRRELVM v, SQInteger idx)
 	v->Remove(idx);
 }
 
+void sq_insert(HSQUIRRELVM v, SQInteger idx)
+{
+	v->Insert(idx);
+}
+
+void sq_replace(HSQUIRRELVM v, SQInteger idx)
+{
+	v->Replace(idx);
+}
+
 SQInteger sq_cmp(HSQUIRRELVM v)
 {
 	SQInteger res;
@@ -863,29 +880,30 @@ SQRESULT sq_set(HSQUIRRELVM v,SQInteger idx)
 SQRESULT sq_rawset(HSQUIRRELVM v,SQInteger idx)
 {
 	SQObjectPtr &self = stack_get(v, idx);
-	if(type(v->GetUp(-2)) == OT_NULL) {
+	SQObjectPtr &key = v->GetUp(-2);
+	if(type(key) == OT_NULL) {
 		v->Pop(2);
 		return sq_throwerror(v, _SC("null key"));
 	}
 	switch(type(self)) {
 	case OT_TABLE:
-		_table(self)->NewSlot(v->GetUp(-2), v->GetUp(-1));
+		_table(self)->NewSlot(key, v->GetUp(-1));
 		v->Pop(2);
 		return SQ_OK;
 	break;
 	case OT_CLASS:
-		_class(self)->NewSlot(_ss(v), v->GetUp(-2), v->GetUp(-1),false);
+		_class(self)->NewSlot(_ss(v), key, v->GetUp(-1),false);
 		v->Pop(2);
 		return SQ_OK;
 	break;
 	case OT_INSTANCE:
-		if(_instance(self)->Set(v->GetUp(-2), v->GetUp(-1))) {
+		if(_instance(self)->Set(key, v->GetUp(-1))) {
 			v->Pop(2);
 			return SQ_OK;
 		}
 	break;
 	case OT_ARRAY:
-		if(v->Set(self, v->GetUp(-2), v->GetUp(-1),false)) {
+		if(v->Set(self, key, v->GetUp(-1),false)) {
 			v->Pop(2);
 			return SQ_OK;
 		}
@@ -901,20 +919,22 @@ SQRESULT sq_newmember(HSQUIRRELVM v,SQInteger idx,SQBool bstatic)
 {
 	SQObjectPtr &self = stack_get(v, idx);
 	if(type(self) != OT_CLASS) return sq_throwerror(v, _SC("new member only works with classes"));
-	if(type(v->GetUp(-3)) == OT_NULL) return sq_throwerror(v, _SC("null key"));
-	if(!v->NewSlotA(self,v->GetUp(-3),v->GetUp(-2),v->GetUp(-1),bstatic?true:false,false))
+	SQObjectPtr &key = v->GetUp(-3);
+	if(type(key) == OT_NULL) return sq_throwerror(v, _SC("null key"));
+	if(!v->NewSlotA(self,key,v->GetUp(-2),v->GetUp(-1),bstatic?true:false,false))
 		return SQ_ERROR;
-	return SQ_OK; 
+	return SQ_OK;
 }
 
 SQRESULT sq_rawnewmember(HSQUIRRELVM v,SQInteger idx,SQBool bstatic)
 {
 	SQObjectPtr &self = stack_get(v, idx);
 	if(type(self) != OT_CLASS) return sq_throwerror(v, _SC("new member only works with classes"));
-	if(type(v->GetUp(-3)) == OT_NULL) return sq_throwerror(v, _SC("null key"));
-	if(!v->NewSlotA(self,v->GetUp(-3),v->GetUp(-2),v->GetUp(-1),bstatic?true:false,true))
+	SQObjectPtr &key = v->GetUp(-3);
+	if(type(key) == OT_NULL) return sq_throwerror(v, _SC("null key"));
+	if(!v->NewSlotA(self,key,v->GetUp(-2),v->GetUp(-1),bstatic?true:false,true))
 		return SQ_ERROR;
-	return SQ_OK; 
+	return SQ_OK;
 }
 
 SQRESULT sq_setdelegate(HSQUIRRELVM v,SQInteger idx)
@@ -976,38 +996,65 @@ SQRESULT sq_getdelegate(HSQUIRRELVM v,SQInteger idx)
 	default: return sq_throwerror(v,_SC("wrong type")); break;
 	}
 	return SQ_OK;
-	
+
 }
 
 SQRESULT sq_get(HSQUIRRELVM v,SQInteger idx)
 {
 	SQObjectPtr &self=stack_get(v,idx);
-	if(v->Get(self,v->GetUp(-1),v->GetUp(-1),false,DONT_FALL_BACK))
+	SQObjectPtr &obj = v->GetUp(-1);
+	if(v->Get(self,obj,obj,false,DONT_FALL_BACK))
 		return SQ_OK;
 	v->Pop();
 	return SQ_ERROR;
 }
 
+SQRESULT sq_getbyname(HSQUIRRELVM v,SQInteger idx, const SQChar *key, SQInteger key_len)
+{
+	SQObjectPtr &self=stack_get(v,idx);
+	sq_pushstring(v, key, key_len);
+	SQObjectPtr &obj = v->GetUp(-1);
+	switch(type(self)) {
+	case OT_TABLE:
+		if(_table(self)->Get(obj,obj))
+			return SQ_OK;
+		break;
+	case OT_CLASS:
+		if(_class(self)->Get(obj,obj))
+			return SQ_OK;
+		break;
+	case OT_INSTANCE:
+		if(_instance(self)->Get(obj,obj))
+			return SQ_OK;
+		break;
+	default:
+		sq_poptop(v);
+		return sq_throwerror(v,_SC("sq_getbyname works only on table/instance and class"));
+	}
+	sq_poptop(v);
+	return sq_throwerror(v,_SC("the index doesn't exist"));
+}
+
 SQRESULT sq_rawget(HSQUIRRELVM v,SQInteger idx)
 {
 	SQObjectPtr &self=stack_get(v,idx);
+	SQObjectPtr &obj = v->GetUp(-1);
 	switch(type(self)) {
 	case OT_TABLE:
-		if(_table(self)->Get(v->GetUp(-1),v->GetUp(-1)))
+		if(_table(self)->Get(obj,obj))
 			return SQ_OK;
 		break;
 	case OT_CLASS:
-		if(_class(self)->Get(v->GetUp(-1),v->GetUp(-1)))
+		if(_class(self)->Get(obj,obj))
 			return SQ_OK;
 		break;
 	case OT_INSTANCE:
-		if(_instance(self)->Get(v->GetUp(-1),v->GetUp(-1)))
+		if(_instance(self)->Get(obj,obj))
 			return SQ_OK;
 		break;
 	case OT_ARRAY:{
-		SQObjectPtr& key = v->GetUp(-1);
-		if(sq_isnumeric(key)){
-			if(_array(self)->Get(tointeger(key),v->GetUp(-1))) {
+		if(sq_isnumeric(obj)){
+			if(_array(self)->Get(tointeger(obj),obj)) {
 				return SQ_OK;
 			}
 		}
@@ -1020,7 +1067,7 @@ SQRESULT sq_rawget(HSQUIRRELVM v,SQInteger idx)
 	default:
 		v->Pop();
 		return sq_throwerror(v,_SC("rawget works only on array/table/instance and class"));
-	}	
+	}
 	v->Pop();
 	return sq_throwerror(v,_SC("the index doesn't exist"));
 }
@@ -1113,9 +1160,10 @@ SQRESULT sq_reservestack(HSQUIRRELVM v,SQInteger nsize)
 
 SQRESULT sq_resume(HSQUIRRELVM v,SQBool retval,SQBool raiseerror)
 {
-	if(type(v->GetUp(-1))==OT_GENERATOR){
+    SQObjectPtr &obj = v->GetUp(-1);
+	if(type(obj)==OT_GENERATOR){
 		v->PushNull(); //retval
-		if(!v->Execute(v->GetUp(-2),0,v->_top,v->GetUp(-1),raiseerror,SQVM::ET_RESUME_GENERATOR))
+		if(!v->Execute(v->GetUp(-2),0,v->_top,obj,raiseerror,SQVM::ET_RESUME_GENERATOR))
 		{v->Raise_Error(v->_lasterror); return SQ_ERROR;}
 		if(!retval)
 			v->Pop();
@@ -1195,7 +1243,7 @@ SQRESULT sq_writeclosure(HSQUIRRELVM v,SQWRITEFUNC w,SQUserPointer up)
 	SQObjectPtr *o = NULL;
 	_GETSAFE_OBJ(v, -1, OT_CLOSURE,o);
 	unsigned short tag = SQ_BYTECODE_STREAM_TAG;
-	if(_closure(*o)->_function->_noutervalues) 
+	if(_closure(*o)->_function->_noutervalues)
 		return sq_throwerror(v,_SC("a closure with free valiables bound it cannot be serialized"));
 	if(w(up,&tag,2) != 2)
 		return sq_throwerror(v,_SC("io error"));
@@ -1207,7 +1255,7 @@ SQRESULT sq_writeclosure(HSQUIRRELVM v,SQWRITEFUNC w,SQUserPointer up)
 SQRESULT sq_readclosure(HSQUIRRELVM v,SQREADFUNC r,SQUserPointer up)
 {
 	SQObjectPtr closure;
-	
+
 	unsigned short tag;
 	if(r(up,&tag,2) != 2)
 		return sq_throwerror(v,_SC("io error"));
@@ -1339,7 +1387,7 @@ SQRESULT sq_getattributes(HSQUIRRELVM v,SQInteger idx)
 	if(type(key) == OT_NULL) {
 		attrs = _class(*o)->_attributes;
 		v->Pop();
-		v->Push(attrs); 
+		v->Push(attrs);
 		return SQ_OK;
 	}
 	else if(_class(*o)->GetAttributes(key,attrs)) {
@@ -1377,7 +1425,7 @@ SQRESULT _getmemberbyhandle(HSQUIRRELVM v,SQObjectPtr &self,const HSQMEMBERHANDL
 				}
 				else {
 					val = &i->_values[handle->_index];
-					
+
 				}
 			}
 			break;

+ 28 - 2
squirrel/sqvm.cpp

@@ -1662,14 +1662,40 @@ void SQVM::CloseOuters(SQObjectPtr *stackindex) {
   }
 }
 
+#define CALC_PSEUDO_INDEX(n) n = (n >= 0)?n + _stackbase - 1:_top + n
+
 void SQVM::Remove(SQInteger n) {
-	n = (n >= 0)?n + _stackbase - 1:_top + n;
-	for(SQInteger i = n; i < _top; i++){
+	CALC_PSEUDO_INDEX(n);
+	for(SQInteger i = n; i < _top; ++i){
 		_stack[i] = _stack[i+1];
 	}
 	_stack[_top].Null();
 	_top--;
 }
+
+void SQVM::Replace(SQInteger n) {
+	CALC_PSEUDO_INDEX(n);
+	_stack[n] = _stack[_top-1];
+	_stack[_top].Null();
+	_top--;
+}
+
+void SQVM::ReplaceAbs(SQInteger n) {
+	_stack[n] = _stack[_top-1];
+	_stack[_top].Null();
+	_top--;
+}
+
+void SQVM::Insert(SQInteger n) {
+    //Todo revise this to emit error message when used with pseudo-index
+	if(n < 0) return; //nothing to do with pseudo-index
+	n += _stackbase - 1;
+	SQObjectPtr &old_top = _stack[_top];
+	for(SQInteger i = _top; i > n; --i){
+		_stack[i] = _stack[i-1];
+	}
+	_stack[n] = old_top;
+}
 
 void SQVM::Pop() {
 	_stack[--_top].Null();

+ 8 - 5
squirrel/sqvm.h

@@ -22,7 +22,7 @@ struct SQExceptionTrap{
 	SQInteger _extarget;
 };
 
-#define _INLINE 
+#define _INLINE
 
 #define STK(a) _stack._vals[_stackbase+(a)]
 #define TARGET _stack._vals[_stackbase+arg0]
@@ -44,7 +44,7 @@ struct SQVM : public CHAINABLE_OBJ
 		SQInt32 _ncalls;
 		SQBool _root;
 	};
-	
+
 typedef sqvector<CallInfo> CallInfoVec;
 public:
 	void DebugHookProxy(SQInteger type, const SQChar * sourcename, SQInteger line, const SQChar * funcname);
@@ -80,7 +80,7 @@ public:
 	bool ToString(const SQObjectPtr &o,SQObjectPtr &res);
 	SQString *PrintObjVal(const SQObjectPtr &o);
 
- 
+
 	void Raise_Error(const SQChar *s, ...);
 	void Raise_Error(const SQObjectPtr &desc);
 	void Raise_IdxError(const SQObjectPtr &o);
@@ -128,9 +128,12 @@ public:
 ////////////////////////////////////////////////////////////////////////////
 	//stack functions for the api
 	void Remove(SQInteger n);
+	void Replace(SQInteger n);
+	void ReplaceAbs(SQInteger n);
+	void Insert(SQInteger n);
 
 	static bool IsFalse(SQObjectPtr &o);
-	
+
 	void Pop();
 	void Pop(SQInteger n);
 	void Push(const SQObjectPtr &o);
@@ -154,7 +157,7 @@ public:
 	SQObjectPtr _debughook_closure;
 
 	SQObjectPtr temp_reg;
-	
+
 
 	CallInfo* _callsstack;
 	SQInteger _callsstacksize;