New grow and skid sounds from remaxim
[supertux.git] / src / squirrel / squirrel / sqdebug.cpp
index 88daf9e..14f7f64 100644 (file)
@@ -8,9 +8,26 @@
 #include "sqclosure.h"
 #include "sqstring.h"
 
-SQRESULT sq_stackinfos(HSQUIRRELVM v, int level, SQStackInfos *si)
+SQRESULT sq_getfunctioninfo(HSQUIRRELVM v,SQInteger level,SQFunctionInfo *fi)
 {
-       int cssize = v->_callsstack.size();
+       SQInteger cssize = v->_callsstacksize;
+       if (cssize > level) {
+               SQVM::CallInfo &ci = v->_callsstack[cssize-level-1];
+               if(sq_isclosure(ci._closure)) {
+                       SQClosure *c = _closure(ci._closure);
+                       SQFunctionProto *proto = _funcproto(c->_function);
+                       fi->funcid = proto;
+                       fi->name = type(proto->_name) == OT_STRING?_stringval(proto->_name):_SC("unknown");
+                       fi->source = type(proto->_name) == OT_STRING?_stringval(proto->_sourcename):_SC("unknown");
+                       return SQ_OK;
+               }
+       }
+       return sq_throwerror(v,_SC("the object is not a closure"));
+}
+
+SQRESULT sq_stackinfos(HSQUIRRELVM v, SQInteger level, SQStackInfos *si)
+{
+       SQInteger cssize = v->_callsstacksize;
        if (cssize > level) {
                memset(si, 0, sizeof(SQStackInfos));
                SQVM::CallInfo &ci = v->_callsstack[cssize-level-1];
@@ -31,6 +48,7 @@ SQRESULT sq_stackinfos(HSQUIRRELVM v, int level, SQStackInfos *si)
                                si->funcname = _stringval(_nativeclosure(ci._closure)->_name);
                        si->line = -1;
                        break;
+               default: break; //shutup compiler
                }
                return SQ_OK;
        }
@@ -41,7 +59,7 @@ void SQVM::Raise_Error(const SQChar *s, ...)
 {
        va_list vl;
        va_start(vl, s);
-       scvsprintf(_sp(rsl(scstrlen(s)+(NUMBER_MAX_CHAR*2))), s, vl);
+       scvsprintf(_sp(rsl((SQInteger)scstrlen(s)+(NUMBER_MAX_CHAR*2))), s, vl);
        va_end(vl);
        _lasterror = SQString::Create(_ss(this),_spval,-1);
 }
@@ -81,13 +99,13 @@ void SQVM::Raise_CompareError(const SQObject &o1, const SQObject &o2)
 }
 
 
-void SQVM::Raise_ParamTypeError(int nparam,int typemask,int type)
+void SQVM::Raise_ParamTypeError(SQInteger nparam,SQInteger typemask,SQInteger type)
 {
        SQObjectPtr exptypes = SQString::Create(_ss(this), _SC(""), -1);
-       int found = 0;  
-       for(int i=0; i<16; i++)
+       SQInteger found = 0;    
+       for(SQInteger i=0; i<16; i++)
        {
-               int mask = 0x00000001 << i;
+               SQInteger mask = 0x00000001 << i;
                if(typemask & (mask)) {
                        if(found>0) StringCat(exptypes,SQString::Create(_ss(this), _SC("|"), -1), exptypes);
                        found ++;