Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
sqstdaux.cpp
00001 /* see copyright notice in squirrel.h */ 00002 #include <squirrel.h> 00003 #include <sqstdaux.h> 00004 #include <assert.h> 00005 00006 void sqstd_printcallstack(HSQUIRRELVM v) 00007 { 00008 SQPRINTFUNCTION pf = sq_geterrorfunc(v); 00009 if(pf) { 00010 SQStackInfos si; 00011 SQInteger i; 00012 SQFloat f; 00013 const SQChar *s; 00014 SQInteger level=1; //1 is to skip this function that is level 0 00015 const SQChar *name=0; 00016 SQInteger seq=0; 00017 pf(v,_SC("\nCALLSTACK\n")); 00018 while(SQ_SUCCEEDED(sq_stackinfos(v,level,&si))) 00019 { 00020 const SQChar *fn=_SC("unknown"); 00021 const SQChar *src=_SC("unknown"); 00022 if(si.funcname)fn=si.funcname; 00023 if(si.source)src=si.source; 00024 pf(v,_SC("*FUNCTION [%s()] %s line [%d]\n"),fn,src,si.line); 00025 level++; 00026 } 00027 level=0; 00028 pf(v,_SC("\nLOCALS\n")); 00029 00030 for(level=0;level<10;level++){ 00031 seq=0; 00032 while((name = sq_getlocal(v,level,seq))) 00033 { 00034 seq++; 00035 switch(sq_gettype(v,-1)) 00036 { 00037 case OT_NULL: 00038 pf(v,_SC("[%s] NULL\n"),name); 00039 break; 00040 case OT_INTEGER: 00041 sq_getinteger(v,-1,&i); 00042 pf(v,_SC("[%s] %d\n"),name,i); 00043 break; 00044 case OT_FLOAT: 00045 sq_getfloat(v,-1,&f); 00046 pf(v,_SC("[%s] %.14g\n"),name,f); 00047 break; 00048 case OT_USERPOINTER: 00049 pf(v,_SC("[%s] USERPOINTER\n"),name); 00050 break; 00051 case OT_STRING: 00052 sq_getstring(v,-1,&s); 00053 pf(v,_SC("[%s] \"%s\"\n"),name,s); 00054 break; 00055 case OT_TABLE: 00056 pf(v,_SC("[%s] TABLE\n"),name); 00057 break; 00058 case OT_ARRAY: 00059 pf(v,_SC("[%s] ARRAY\n"),name); 00060 break; 00061 case OT_CLOSURE: 00062 pf(v,_SC("[%s] CLOSURE\n"),name); 00063 break; 00064 case OT_NATIVECLOSURE: 00065 pf(v,_SC("[%s] NATIVECLOSURE\n"),name); 00066 break; 00067 case OT_GENERATOR: 00068 pf(v,_SC("[%s] GENERATOR\n"),name); 00069 break; 00070 case OT_USERDATA: 00071 pf(v,_SC("[%s] USERDATA\n"),name); 00072 break; 00073 case OT_THREAD: 00074 pf(v,_SC("[%s] THREAD\n"),name); 00075 break; 00076 case OT_CLASS: 00077 pf(v,_SC("[%s] CLASS\n"),name); 00078 break; 00079 case OT_INSTANCE: 00080 pf(v,_SC("[%s] INSTANCE\n"),name); 00081 break; 00082 case OT_WEAKREF: 00083 pf(v,_SC("[%s] WEAKREF\n"),name); 00084 break; 00085 case OT_BOOL:{ 00086 sq_getinteger(v,-1,&i); 00087 pf(v,_SC("[%s] %s\n"),name,i?_SC("true"):_SC("false")); 00088 } 00089 break; 00090 default: assert(0); break; 00091 } 00092 sq_pop(v,1); 00093 } 00094 } 00095 } 00096 } 00097 00098 static SQInteger _sqstd_aux_printerror(HSQUIRRELVM v) 00099 { 00100 SQPRINTFUNCTION pf = sq_geterrorfunc(v); 00101 if(pf) { 00102 const SQChar *sErr = 0; 00103 if(sq_gettop(v)>=1) { 00104 if(SQ_SUCCEEDED(sq_getstring(v,2,&sErr))) { 00105 pf(v,_SC("\nAN ERROR HAS OCCURED [%s]\n"),sErr); 00106 } 00107 else{ 00108 pf(v,_SC("\nAN ERROR HAS OCCURED [unknown]\n")); 00109 } 00110 sqstd_printcallstack(v); 00111 } 00112 } 00113 return 0; 00114 } 00115 00116 void _sqstd_compiler_error(HSQUIRRELVM v,const SQChar *sErr,const SQChar *sSource,SQInteger line,SQInteger column) 00117 { 00118 SQPRINTFUNCTION pf = sq_geterrorfunc(v); 00119 if(pf) { 00120 pf(v,_SC("%s line = (%d) column = (%d) : error %s\n"),sSource,line,column,sErr); 00121 } 00122 } 00123 00124 void sqstd_seterrorhandlers(HSQUIRRELVM v) 00125 { 00126 sq_setcompilererrorhandler(v,_sqstd_compiler_error); 00127 sq_newclosure(v,_sqstd_aux_printerror,0); 00128 sq_seterrorhandler(v); 00129 }
Generated on Tue Jul 12 2022 21:35:49 by
1.7.2