mirror of
https://github.com/VCMP-SqMod/SqMod.git
synced 2025-06-18 08:07:12 +02:00
Updated the Squirrel and Sqrat libraries to the latest development versions.
This commit is contained in:
2
external/Squirrel/COPYRIGHT
vendored
2
external/Squirrel/COPYRIGHT
vendored
@ -1,4 +1,4 @@
|
||||
Copyright (c) 2003-2015 Alberto Demichelis
|
||||
Copyright (c) 2003-2016 Alberto Demichelis
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
4
external/Squirrel/Lib/sqstdaux.cpp
vendored
4
external/Squirrel/Lib/sqstdaux.cpp
vendored
@ -103,10 +103,10 @@ static SQInteger _sqstd_aux_printerror(HSQUIRRELVM v)
|
||||
const SQChar *sErr = 0;
|
||||
if(sq_gettop(v)>=1) {
|
||||
if(SQ_SUCCEEDED(sq_getstring(v,2,&sErr))) {
|
||||
pf(v,_SC("\nAN ERROR HAS OCCURED [%s]\n"),sErr);
|
||||
pf(v,_SC("\nAN ERROR HAS OCCURRED [%s]\n"),sErr);
|
||||
}
|
||||
else{
|
||||
pf(v,_SC("\nAN ERROR HAS OCCURED [unknown]\n"));
|
||||
pf(v,_SC("\nAN ERROR HAS OCCURRED [unknown]\n"));
|
||||
}
|
||||
sqstd_printcallstack(v);
|
||||
}
|
||||
|
6
external/Squirrel/Lib/sqstdio.cpp
vendored
6
external/Squirrel/Lib/sqstdio.cpp
vendored
@ -372,7 +372,7 @@ SQRESULT sqstd_loadfile(HSQUIRRELVM v,const SQChar *filename,SQBool printerror)
|
||||
}
|
||||
if(uc != 0xBF) {
|
||||
sqstd_fclose(file);
|
||||
return sq_throwerror(v,_SC("Unrecognozed ecoding"));
|
||||
return sq_throwerror(v,_SC("Unrecognized encoding"));
|
||||
}
|
||||
#ifdef SQUNICODE
|
||||
func = _io_file_lexfeed_UTF8;
|
||||
@ -399,6 +399,10 @@ SQRESULT sqstd_loadfile(HSQUIRRELVM v,const SQChar *filename,SQBool printerror)
|
||||
|
||||
SQRESULT sqstd_dofile(HSQUIRRELVM v,const SQChar *filename,SQBool retval,SQBool printerror)
|
||||
{
|
||||
//at least one entry must exist in order for us to push it as the environment
|
||||
if(sq_gettop(v) == 0)
|
||||
return sq_throwerror(v,_SC("environment table expected"));
|
||||
|
||||
if(SQ_SUCCEEDED(sqstd_loadfile(v,filename,printerror))) {
|
||||
sq_push(v,-2);
|
||||
if(SQ_SUCCEEDED(sq_call(v,1,retval,SQTrue))) {
|
||||
|
3
external/Squirrel/Lib/sqstdrex.cpp
vendored
3
external/Squirrel/Lib/sqstdrex.cpp
vendored
@ -153,6 +153,9 @@ static SQInteger sqstd_rex_charnode(SQRex *exp,SQBool isclass)
|
||||
exp->_nodes[node].right = ce;
|
||||
return node;
|
||||
}
|
||||
case 0:
|
||||
sqstd_rex_error(exp,_SC("letter expected for argument of escape sequence"));
|
||||
break;
|
||||
case 'b':
|
||||
case 'B':
|
||||
if(!isclass) {
|
||||
|
16
external/Squirrel/Lib/sqstdstring.cpp
vendored
16
external/Squirrel/Lib/sqstdstring.cpp
vendored
@ -89,7 +89,7 @@ SQRESULT sqstd_format(HSQUIRRELVM v,SQInteger nformatstringidx,SQInteger *outlen
|
||||
else {
|
||||
n++;
|
||||
if( nparam > sq_gettop(v) )
|
||||
return sq_throwerror(v,_SC("not enough paramters for the given format string"));
|
||||
return sq_throwerror(v,_SC("not enough parameters for the given format string"));
|
||||
n = validate_format(v,fmt,format,n,w);
|
||||
if(n < 0) return -1;
|
||||
SQInteger addlen = 0;
|
||||
@ -150,6 +150,19 @@ SQRESULT sqstd_format(HSQUIRRELVM v,SQInteger nformatstringidx,SQInteger *outlen
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
static SQInteger _string_printf(HSQUIRRELVM v)
|
||||
{
|
||||
SQChar *dest = NULL;
|
||||
SQInteger length = 0;
|
||||
if(SQ_FAILED(sqstd_format(v,2,&length,&dest)))
|
||||
return -1;
|
||||
|
||||
SQPRINTFUNCTION printfunc = sq_getprintfunc(v);
|
||||
if(printfunc) printfunc(v,dest);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static SQInteger _string_format(HSQUIRRELVM v)
|
||||
{
|
||||
SQChar *dest = NULL;
|
||||
@ -459,6 +472,7 @@ static const SQRegFunction rexobj_funcs[]={
|
||||
#define _DECL_FUNC(name,nparams,pmask) {_SC(#name),_string_##name,nparams,pmask}
|
||||
static const SQRegFunction stringlib_funcs[]={
|
||||
_DECL_FUNC(format,-2,_SC(".s")),
|
||||
_DECL_FUNC(printf,-2,_SC(".s")),
|
||||
_DECL_FUNC(strip,2,_SC(".s")),
|
||||
_DECL_FUNC(lstrip,2,_SC(".s")),
|
||||
_DECL_FUNC(rstrip,2,_SC(".s")),
|
||||
|
40
external/Squirrel/sqapi.cpp
vendored
40
external/Squirrel/sqapi.cpp
vendored
@ -680,6 +680,15 @@ SQRESULT sq_getbool(HSQUIRRELVM v,SQInteger idx,SQBool *b)
|
||||
return SQ_ERROR;
|
||||
}
|
||||
|
||||
SQRESULT sq_getstringandsize(HSQUIRRELVM v,SQInteger idx,const SQChar **c,SQInteger *size)
|
||||
{
|
||||
SQObjectPtr *o = NULL;
|
||||
_GETSAFE_OBJ(v, idx, OT_STRING,o);
|
||||
*c = _stringval(*o);
|
||||
*size = _string(*o)->_len;
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,const SQChar **c)
|
||||
{
|
||||
SQObjectPtr *o = NULL;
|
||||
@ -1128,7 +1137,7 @@ SQRESULT sq_reservestack(HSQUIRRELVM v,SQInteger nsize)
|
||||
{
|
||||
if (((SQUnsignedInteger)v->_top + nsize) > v->_stack.size()) {
|
||||
if(v->_nmetamethodscall) {
|
||||
return sq_throwerror(v,_SC("cannot resize stack while in a metamethod"));
|
||||
return sq_throwerror(v,_SC("cannot resize stack while in a metamethod"));
|
||||
}
|
||||
v->_stack.resize(v->_stack.size() + ((v->_top + nsize) - v->_stack.size()));
|
||||
}
|
||||
@ -1199,29 +1208,24 @@ SQRESULT sq_wakeupvm(HSQUIRRELVM v,SQBool wakeupret,SQBool retval,SQBool raiseer
|
||||
|
||||
void sq_setreleasehook(HSQUIRRELVM v,SQInteger idx,SQRELEASEHOOK hook)
|
||||
{
|
||||
if(sq_gettop(v) >= 1){
|
||||
SQObjectPtr &ud=stack_get(v,idx);
|
||||
switch( type(ud) ) {
|
||||
case OT_USERDATA: _userdata(ud)->_hook = hook; break;
|
||||
case OT_INSTANCE: _instance(ud)->_hook = hook; break;
|
||||
case OT_CLASS: _class(ud)->_hook = hook; break;
|
||||
default: break; //shutup compiler
|
||||
}
|
||||
SQObjectPtr &ud=stack_get(v,idx);
|
||||
switch( type(ud) ) {
|
||||
case OT_USERDATA: _userdata(ud)->_hook = hook; break;
|
||||
case OT_INSTANCE: _instance(ud)->_hook = hook; break;
|
||||
case OT_CLASS: _class(ud)->_hook = hook; break;
|
||||
default: return;
|
||||
}
|
||||
}
|
||||
|
||||
SQRELEASEHOOK sq_getreleasehook(HSQUIRRELVM v,SQInteger idx)
|
||||
{
|
||||
if(sq_gettop(v) >= 1){
|
||||
SQObjectPtr &ud=stack_get(v,idx);
|
||||
switch( type(ud) ) {
|
||||
case OT_USERDATA: return _userdata(ud)->_hook; break;
|
||||
case OT_INSTANCE: return _instance(ud)->_hook; break;
|
||||
case OT_CLASS: return _class(ud)->_hook; break;
|
||||
default: break; //shutup compiler
|
||||
}
|
||||
SQObjectPtr &ud=stack_get(v,idx);
|
||||
switch( type(ud) ) {
|
||||
case OT_USERDATA: return _userdata(ud)->_hook; break;
|
||||
case OT_INSTANCE: return _instance(ud)->_hook; break;
|
||||
case OT_CLASS: return _class(ud)->_hook; break;
|
||||
default: return NULL;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void sq_setcompilererrorhandler(HSQUIRRELVM v,SQCOMPILERERROR f)
|
||||
|
7
external/Squirrel/sqbaselib.cpp
vendored
7
external/Squirrel/sqbaselib.cpp
vendored
@ -17,12 +17,13 @@ static bool str2num(const SQChar *s,SQObjectPtr &res,SQInteger base)
|
||||
{
|
||||
SQChar *end;
|
||||
const SQChar *e = s;
|
||||
SQBool isfloat = SQFalse;
|
||||
bool iseintbase = base > 13; //to fix error converting hexadecimals with e like 56f0791e
|
||||
bool isfloat = false;
|
||||
SQChar c;
|
||||
while((c = *e) != _SC('\0'))
|
||||
{
|
||||
if(c == _SC('.') || c == _SC('E')|| c == _SC('e')) { //e and E is for scientific notation
|
||||
isfloat = SQTrue;
|
||||
if (c == _SC('.') || (!iseintbase && (c == _SC('E') || c == _SC('e')))) { //e and E is for scientific notation
|
||||
isfloat = true;
|
||||
break;
|
||||
}
|
||||
e++;
|
||||
|
2
external/Squirrel/sqlexer.cpp
vendored
2
external/Squirrel/sqlexer.cpp
vendored
@ -389,7 +389,7 @@ SQInteger SQLexer::ReadString(SQInteger ndelim,bool verbatim)
|
||||
#if WCHAR_SIZE == 2
|
||||
AddUTF16(scstrtoul(temp, &stemp, 16));
|
||||
#else
|
||||
ADD_CHAR((SQChar)scstrtoul(temp, &stemp, 16));
|
||||
APPEND_CHAR((SQChar)scstrtoul(temp, &stemp, 16));
|
||||
#endif
|
||||
#else
|
||||
AddUTF8(scstrtoul(temp, &stemp, 16));
|
||||
|
52
external/Squirrel/sqstate.cpp
vendored
52
external/Squirrel/sqstate.cpp
vendored
@ -12,12 +12,6 @@
|
||||
#include "squserdata.h"
|
||||
#include "sqclass.h"
|
||||
|
||||
//SQObjectPtr _null_;
|
||||
//SQObjectPtr _true_(true);
|
||||
//SQObjectPtr _false_(false);
|
||||
//SQObjectPtr _one_((SQInteger)1);
|
||||
//SQObjectPtr _minusone_((SQInteger)-1);
|
||||
|
||||
SQSharedState::SQSharedState()
|
||||
{
|
||||
_compilererrorhandler = NULL;
|
||||
@ -41,31 +35,29 @@ SQSharedState::SQSharedState()
|
||||
bool CompileTypemask(SQIntVec &res,const SQChar *typemask)
|
||||
{
|
||||
SQInteger i = 0;
|
||||
|
||||
SQInteger mask = 0;
|
||||
while(typemask[i] != 0) {
|
||||
|
||||
switch(typemask[i]){
|
||||
case 'o': mask |= _RT_NULL; break;
|
||||
case 'i': mask |= _RT_INTEGER; break;
|
||||
case 'f': mask |= _RT_FLOAT; break;
|
||||
case 'n': mask |= (_RT_FLOAT | _RT_INTEGER); break;
|
||||
case 's': mask |= _RT_STRING; break;
|
||||
case 't': mask |= _RT_TABLE; break;
|
||||
case 'a': mask |= _RT_ARRAY; break;
|
||||
case 'u': mask |= _RT_USERDATA; break;
|
||||
case 'c': mask |= (_RT_CLOSURE | _RT_NATIVECLOSURE); break;
|
||||
case 'b': mask |= _RT_BOOL; break;
|
||||
case 'g': mask |= _RT_GENERATOR; break;
|
||||
case 'p': mask |= _RT_USERPOINTER; break;
|
||||
case 'v': mask |= _RT_THREAD; break;
|
||||
case 'x': mask |= _RT_INSTANCE; break;
|
||||
case 'y': mask |= _RT_CLASS; break;
|
||||
case 'r': mask |= _RT_WEAKREF; break;
|
||||
case '.': mask = -1; res.push_back(mask); i++; mask = 0; continue;
|
||||
case ' ': i++; continue; //ignores spaces
|
||||
default:
|
||||
return false;
|
||||
switch(typemask[i]) {
|
||||
case 'o': mask |= _RT_NULL; break;
|
||||
case 'i': mask |= _RT_INTEGER; break;
|
||||
case 'f': mask |= _RT_FLOAT; break;
|
||||
case 'n': mask |= (_RT_FLOAT | _RT_INTEGER); break;
|
||||
case 's': mask |= _RT_STRING; break;
|
||||
case 't': mask |= _RT_TABLE; break;
|
||||
case 'a': mask |= _RT_ARRAY; break;
|
||||
case 'u': mask |= _RT_USERDATA; break;
|
||||
case 'c': mask |= (_RT_CLOSURE | _RT_NATIVECLOSURE); break;
|
||||
case 'b': mask |= _RT_BOOL; break;
|
||||
case 'g': mask |= _RT_GENERATOR; break;
|
||||
case 'p': mask |= _RT_USERPOINTER; break;
|
||||
case 'v': mask |= _RT_THREAD; break;
|
||||
case 'x': mask |= _RT_INSTANCE; break;
|
||||
case 'y': mask |= _RT_CLASS; break;
|
||||
case 'r': mask |= _RT_WEAKREF; break;
|
||||
case '.': mask = -1; res.push_back(mask); i++; mask = 0; continue;
|
||||
case ' ': i++; continue; //ignores spaces
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
i++;
|
||||
if(typemask[i] == '|') {
|
||||
@ -160,7 +152,6 @@ void SQSharedState::Init()
|
||||
_class_default_delegate = CreateDefaultDelegate(this,_class_default_delegate_funcz);
|
||||
_instance_default_delegate = CreateDefaultDelegate(this,_instance_default_delegate_funcz);
|
||||
_weakref_default_delegate = CreateDefaultDelegate(this,_weakref_default_delegate_funcz);
|
||||
|
||||
}
|
||||
|
||||
SQSharedState::~SQSharedState()
|
||||
@ -282,7 +273,6 @@ SQInteger SQSharedState::ResurrectUnreachable(SQVM *vm)
|
||||
|
||||
SQCollectable *resurrected = _gc_chain;
|
||||
SQCollectable *t = resurrected;
|
||||
//SQCollectable *nx = NULL;
|
||||
|
||||
_gc_chain = tchain;
|
||||
|
||||
|
9
external/Squirrel/sqvm.cpp
vendored
9
external/Squirrel/sqvm.cpp
vendored
@ -15,6 +15,8 @@
|
||||
#include "sqclass.h"
|
||||
|
||||
#define TOP() (_stack._vals[_top-1])
|
||||
#define TARGET _stack._vals[_stackbase+arg0]
|
||||
#define STK(a) _stack._vals[_stackbase+(a)]
|
||||
|
||||
bool SQVM::BW_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,const SQObjectPtr &o2)
|
||||
{
|
||||
@ -301,7 +303,7 @@ bool SQVM::ToString(const SQObjectPtr &o,SQObjectPtr &res)
|
||||
SQObjectPtr closure;
|
||||
if(_delegable(o)->GetMetaMethod(this, MT_TOSTRING, closure)) {
|
||||
Push(o);
|
||||
if(CallMetaMethod(closure,MT_TOSTRING,1,res)) {;
|
||||
if(CallMetaMethod(closure,MT_TOSTRING,1,res)) {
|
||||
if(type(res) == OT_STRING)
|
||||
return true;
|
||||
}
|
||||
@ -1367,9 +1369,8 @@ SQInteger SQVM::FallBackSet(const SQObjectPtr &self,const SQObjectPtr &key,const
|
||||
return FALLBACK_OK;
|
||||
}
|
||||
else {
|
||||
Pop(3);
|
||||
if(type(_lasterror) != OT_NULL) { //NULL means "clean failure" (not found)
|
||||
//error
|
||||
Pop(3);
|
||||
return FALLBACK_ERROR;
|
||||
}
|
||||
}
|
||||
@ -1632,7 +1633,7 @@ bool SQVM::EnterFrame(SQInteger newbase, SQInteger newtop, bool tailcall)
|
||||
_top = newtop;
|
||||
if(newtop + MIN_STACK_OVERHEAD > (SQInteger)_stack.size()) {
|
||||
if(_nmetamethodscall) {
|
||||
Raise_Error(_SC("stack overflow, cannot resize stack while in a metamethod"));
|
||||
Raise_Error(_SC("stack overflow, cannot resize stack while in a metamethod"));
|
||||
return false;
|
||||
}
|
||||
_stack.resize(newtop + (MIN_STACK_OVERHEAD << 2));
|
||||
|
3
external/Squirrel/sqvm.h
vendored
3
external/Squirrel/sqvm.h
vendored
@ -28,9 +28,6 @@ struct SQExceptionTrap{
|
||||
|
||||
#define _INLINE
|
||||
|
||||
#define STK(a) _stack._vals[_stackbase+(a)]
|
||||
#define TARGET _stack._vals[_stackbase+arg0]
|
||||
|
||||
typedef sqvector<SQExceptionTrap> ExceptionsTraps;
|
||||
|
||||
struct SQVM : public CHAINABLE_OBJ
|
||||
|
Reference in New Issue
Block a user