diff --git a/cbp/Squirrel.cbp b/cbp/Squirrel.cbp
index edf0dbe7..143e947b 100644
--- a/cbp/Squirrel.cbp
+++ b/cbp/Squirrel.cbp
@@ -165,6 +165,7 @@
+
diff --git a/external/Squirrel/COPYRIGHT b/external/Squirrel/COPYRIGHT
index 4530d81b..3adb5e7b 100644
--- a/external/Squirrel/COPYRIGHT
+++ b/external/Squirrel/COPYRIGHT
@@ -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
diff --git a/external/Squirrel/Lib/sqstdaux.cpp b/external/Squirrel/Lib/sqstdaux.cpp
index a2bb7293..3c478fcf 100644
--- a/external/Squirrel/Lib/sqstdaux.cpp
+++ b/external/Squirrel/Lib/sqstdaux.cpp
@@ -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);
}
diff --git a/external/Squirrel/Lib/sqstdio.cpp b/external/Squirrel/Lib/sqstdio.cpp
index 273bb5cc..3a862626 100644
--- a/external/Squirrel/Lib/sqstdio.cpp
+++ b/external/Squirrel/Lib/sqstdio.cpp
@@ -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))) {
diff --git a/external/Squirrel/Lib/sqstdrex.cpp b/external/Squirrel/Lib/sqstdrex.cpp
index 9390c2dc..38a85085 100644
--- a/external/Squirrel/Lib/sqstdrex.cpp
+++ b/external/Squirrel/Lib/sqstdrex.cpp
@@ -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) {
diff --git a/external/Squirrel/Lib/sqstdstring.cpp b/external/Squirrel/Lib/sqstdstring.cpp
index 6190edda..9e42dba4 100644
--- a/external/Squirrel/Lib/sqstdstring.cpp
+++ b/external/Squirrel/Lib/sqstdstring.cpp
@@ -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")),
diff --git a/external/Squirrel/sqapi.cpp b/external/Squirrel/sqapi.cpp
index 56187b0f..c5a70d64 100644
--- a/external/Squirrel/sqapi.cpp
+++ b/external/Squirrel/sqapi.cpp
@@ -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)
diff --git a/external/Squirrel/sqbaselib.cpp b/external/Squirrel/sqbaselib.cpp
index 71dfc26e..662aeac8 100644
--- a/external/Squirrel/sqbaselib.cpp
+++ b/external/Squirrel/sqbaselib.cpp
@@ -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++;
diff --git a/external/Squirrel/sqlexer.cpp b/external/Squirrel/sqlexer.cpp
index 88112104..51158ba5 100644
--- a/external/Squirrel/sqlexer.cpp
+++ b/external/Squirrel/sqlexer.cpp
@@ -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));
diff --git a/external/Squirrel/sqstate.cpp b/external/Squirrel/sqstate.cpp
index c6a5cf7a..2711306d 100644
--- a/external/Squirrel/sqstate.cpp
+++ b/external/Squirrel/sqstate.cpp
@@ -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;
diff --git a/external/Squirrel/sqvm.cpp b/external/Squirrel/sqvm.cpp
index 455f92b9..757f4382 100644
--- a/external/Squirrel/sqvm.cpp
+++ b/external/Squirrel/sqvm.cpp
@@ -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));
diff --git a/external/Squirrel/sqvm.h b/external/Squirrel/sqvm.h
index 2138fb30..35fef5bd 100644
--- a/external/Squirrel/sqvm.h
+++ b/external/Squirrel/sqvm.h
@@ -28,9 +28,6 @@ struct SQExceptionTrap{
#define _INLINE
-#define STK(a) _stack._vals[_stackbase+(a)]
-#define TARGET _stack._vals[_stackbase+arg0]
-
typedef sqvector ExceptionsTraps;
struct SQVM : public CHAINABLE_OBJ
diff --git a/include/sqrat/sqratObject.h b/include/sqrat/sqratObject.h
index bf553df2..20f503cb 100644
--- a/include/sqrat/sqratObject.h
+++ b/include/sqrat/sqratObject.h
@@ -281,6 +281,44 @@ public:
#endif
}
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ /// Checks if the object has a slot with a specified key
+ ///
+ /// \param key Name of the key
+ ///
+ /// \return True if the Object has a value associated with key, otherwise false
+ ///
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ bool HasKey(const SQChar* key) const {
+ sq_pushobject(vm, GetObject());
+ sq_pushstring(vm, key, -1);
+ if (SQ_FAILED(sq_get(vm, -2))) {
+ sq_pop(vm, 1);
+ return false;
+ }
+ sq_pop(vm, 2);
+ return true;
+ }
+
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ /// Checks if the object has a slot with a specified index
+ ///
+ /// \param index Index to check
+ ///
+ /// \return True if the Object has a value associated with index, otherwise false
+ ///
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ bool HasKey(SQInteger index) const {
+ sq_pushobject(vm, GetObject());
+ sq_pushinteger(vm, index);
+ if (SQ_FAILED(sq_get(vm, -2))) {
+ sq_pop(vm, 1);
+ return false;
+ }
+ sq_pop(vm, 2);
+ return true;
+ }
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Casts the object to a certain C++ type
///
diff --git a/include/sqstdio.h b/include/sqstdio.h
index d19ec2ed..fbc74510 100644
--- a/include/sqstdio.h
+++ b/include/sqstdio.h
@@ -7,6 +7,7 @@
#define SQSTD_STREAM_TYPE_TAG 0x80000000
struct SQStream {
+ virtual ~SQStream() {}
virtual SQInteger Read(void *buffer, SQInteger size) = 0;
virtual SQInteger Write(void *buffer, SQInteger size) = 0;
virtual SQInteger Flush() = 0;
diff --git a/include/squirrel.h b/include/squirrel.h
index e93bf5da..d41fd784 100644
--- a/include/squirrel.h
+++ b/include/squirrel.h
@@ -1,5 +1,5 @@
/*
-Copyright (c) 2003-2014 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
@@ -62,7 +62,7 @@ struct SQOuter;
#include "sqconfig.h"
#define SQUIRREL_VERSION _SC("Squirrel 3.1 stable")
-#define SQUIRREL_COPYRIGHT _SC("Copyright (C) 2003-2015 Alberto Demichelis")
+#define SQUIRREL_COPYRIGHT _SC("Copyright (C) 2003-2016 Alberto Demichelis")
#define SQUIRREL_AUTHOR _SC("Alberto Demichelis")
#define SQUIRREL_VERSION_NUMBER 310
@@ -195,6 +195,7 @@ typedef struct tagSQFunctionInfo {
}SQFunctionInfo;
#ifndef SQMOD_PLUGIN_API
+
/*vm*/
SQUIRREL_API HSQUIRRELVM sq_open(SQInteger initialstacksize);
SQUIRREL_API HSQUIRRELVM sq_newthread(HSQUIRRELVM friendvm, SQInteger initialstacksize);
@@ -259,6 +260,7 @@ SQUIRREL_API SQRESULT sq_getbase(HSQUIRRELVM v,SQInteger idx);
SQUIRREL_API SQBool sq_instanceof(HSQUIRRELVM v);
SQUIRREL_API SQRESULT sq_tostring(HSQUIRRELVM v,SQInteger idx);
SQUIRREL_API void sq_tobool(HSQUIRRELVM v, SQInteger idx, SQBool *b);
+SQUIRREL_API SQRESULT sq_getstringandsize(HSQUIRRELVM v,SQInteger idx,const SQChar **c,SQInteger *size);
SQUIRREL_API SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,const SQChar **c);
SQUIRREL_API SQRESULT sq_getinteger(HSQUIRRELVM v,SQInteger idx,SQInteger *i);
SQUIRREL_API SQRESULT sq_getfloat(HSQUIRRELVM v,SQInteger idx,SQFloat *f);
@@ -362,6 +364,7 @@ SQUIRREL_API void sq_free(void *p,SQUnsignedInteger size);
SQUIRREL_API SQRESULT sq_stackinfos(HSQUIRRELVM v,SQInteger level,SQStackInfos *si);
SQUIRREL_API void sq_setdebughook(HSQUIRRELVM v);
SQUIRREL_API void sq_setnativedebughook(HSQUIRRELVM v,SQDEBUGHOOK hook);
+
#endif // SQMOD_PLUGIN_API
/*UTILITY MACRO*/
diff --git a/shared/SqAPI.h b/shared/SqAPI.h
index f539ec5c..27174696 100644
--- a/shared/SqAPI.h
+++ b/shared/SqAPI.h
@@ -98,6 +98,7 @@ extern "C" {
typedef SQBool (*sqapi_instanceof)(HSQUIRRELVM v);
typedef SQRESULT (*sqapi_tostring)(HSQUIRRELVM v,SQInteger idx);
typedef void (*sqapi_tobool)(HSQUIRRELVM v, SQInteger idx, SQBool *b);
+ typedef SQRESULT (*sqapi_getstringandsize)(HSQUIRRELVM v,SQInteger idx,const SQChar **c,SQInteger *size);
typedef SQRESULT (*sqapi_getstring)(HSQUIRRELVM v,SQInteger idx,const SQChar **c);
typedef SQRESULT (*sqapi_getinteger)(HSQUIRRELVM v,SQInteger idx,SQInteger *i);
typedef SQRESULT (*sqapi_getfloat)(HSQUIRRELVM v,SQInteger idx,SQFloat *f);
@@ -285,6 +286,7 @@ extern "C" {
sqapi_instanceof instanceof;
sqapi_tostring tostring;
sqapi_tobool tobool;
+ sqapi_getstringandsize getstringandsize;
sqapi_getstring getstring;
sqapi_getinteger getinteger;
sqapi_getfloat getfloat;
@@ -406,184 +408,185 @@ extern "C" {
#ifdef SQMOD_PLUGIN_API
/*vm*/
- extern sqapi_open sq_open;
- extern sqapi_newthread sq_newthread;
- extern sqapi_seterrorhandler sq_seterrorhandler;
- extern sqapi_close sq_close;
- extern sqapi_setforeignptr sq_setforeignptr;
- extern sqapi_getforeignptr sq_getforeignptr;
- extern sqapi_setsharedforeignptr sq_setsharedforeignptr;
- extern sqapi_getsharedforeignptr sq_getsharedforeignptr;
- extern sqapi_setvmreleasehook sq_setvmreleasehook;
- extern sqapi_getvmreleasehook sq_getvmreleasehook;
- extern sqapi_setsharedreleasehook sq_setsharedreleasehook;
- extern sqapi_getsharedreleasehook sq_getsharedreleasehook;
- extern sqapi_setprintfunc sq_setprintfunc;
- extern sqapi_getprintfunc sq_getprintfunc;
- extern sqapi_geterrorfunc sq_geterrorfunc;
- extern sqapi_suspendvm sq_suspendvm;
- extern sqapi_wakeupvm sq_wakeupvm;
- extern sqapi_getvmstate sq_getvmstate;
- extern sqapi_getversion sq_getversion;
+ extern sqapi_open sq_open;
+ extern sqapi_newthread sq_newthread;
+ extern sqapi_seterrorhandler sq_seterrorhandler;
+ extern sqapi_close sq_close;
+ extern sqapi_setforeignptr sq_setforeignptr;
+ extern sqapi_getforeignptr sq_getforeignptr;
+ extern sqapi_setsharedforeignptr sq_setsharedforeignptr;
+ extern sqapi_getsharedforeignptr sq_getsharedforeignptr;
+ extern sqapi_setvmreleasehook sq_setvmreleasehook;
+ extern sqapi_getvmreleasehook sq_getvmreleasehook;
+ extern sqapi_setsharedreleasehook sq_setsharedreleasehook;
+ extern sqapi_getsharedreleasehook sq_getsharedreleasehook;
+ extern sqapi_setprintfunc sq_setprintfunc;
+ extern sqapi_getprintfunc sq_getprintfunc;
+ extern sqapi_geterrorfunc sq_geterrorfunc;
+ extern sqapi_suspendvm sq_suspendvm;
+ extern sqapi_wakeupvm sq_wakeupvm;
+ extern sqapi_getvmstate sq_getvmstate;
+ extern sqapi_getversion sq_getversion;
/*compiler*/
- extern sqapi_compile sq_compile;
- extern sqapi_compilebuffer sq_compilebuffer;
- extern sqapi_enabledebuginfo sq_enabledebuginfo;
- extern sqapi_notifyallexceptions sq_notifyallexceptions;
- extern sqapi_setcompilererrorhandler sq_setcompilererrorhandler;
+ extern sqapi_compile sq_compile;
+ extern sqapi_compilebuffer sq_compilebuffer;
+ extern sqapi_enabledebuginfo sq_enabledebuginfo;
+ extern sqapi_notifyallexceptions sq_notifyallexceptions;
+ extern sqapi_setcompilererrorhandler sq_setcompilererrorhandler;
/*stack operations*/
- extern sqapi_push sq_push;
- extern sqapi_pop sq_pop;
- extern sqapi_poptop sq_poptop;
- extern sqapi_remove sq_remove;
- extern sqapi_gettop sq_gettop;
- extern sqapi_settop sq_settop;
- extern sqapi_reservestack sq_reservestack;
- extern sqapi_cmp sq_cmp;
- extern sqapi_move sq_move;
+ extern sqapi_push sq_push;
+ extern sqapi_pop sq_pop;
+ extern sqapi_poptop sq_poptop;
+ extern sqapi_remove sq_remove;
+ extern sqapi_gettop sq_gettop;
+ extern sqapi_settop sq_settop;
+ extern sqapi_reservestack sq_reservestack;
+ extern sqapi_cmp sq_cmp;
+ extern sqapi_move sq_move;
/*object creation handling*/
- extern sqapi_newuserdata sq_newuserdata;
- extern sqapi_newtable sq_newtable;
- extern sqapi_newtableex sq_newtableex;
- extern sqapi_newarray sq_newarray;
- extern sqapi_newclosure sq_newclosure;
- extern sqapi_setparamscheck sq_setparamscheck;
- extern sqapi_bindenv sq_bindenv;
- extern sqapi_setclosureroot sq_setclosureroot;
- extern sqapi_getclosureroot sq_getclosureroot;
- extern sqapi_pushstring sq_pushstring;
- extern sqapi_pushfloat sq_pushfloat;
- extern sqapi_pushinteger sq_pushinteger;
- extern sqapi_pushbool sq_pushbool;
- extern sqapi_pushuserpointer sq_pushuserpointer;
- extern sqapi_pushnull sq_pushnull;
- extern sqapi_pushthread sq_pushthread;
- extern sqapi_gettype sq_gettype;
- extern sqapi_typeof sq_typeof;
- extern sqapi_getsize sq_getsize;
- extern sqapi_gethash sq_gethash;
- extern sqapi_getbase sq_getbase;
- extern sqapi_instanceof sq_instanceof;
- extern sqapi_tostring sq_tostring;
- extern sqapi_tobool sq_tobool;
- extern sqapi_getstring sq_getstring;
- extern sqapi_getinteger sq_getinteger;
- extern sqapi_getfloat sq_getfloat;
- extern sqapi_getbool sq_getbool;
- extern sqapi_getthread sq_getthread;
- extern sqapi_getuserpointer sq_getuserpointer;
- extern sqapi_getuserdata sq_getuserdata;
- extern sqapi_settypetag sq_settypetag;
- extern sqapi_gettypetag sq_gettypetag;
- extern sqapi_setreleasehook sq_setreleasehook;
- extern sqapi_getreleasehook sq_getreleasehook;
- extern sqapi_getscratchpad sq_getscratchpad;
- extern sqapi_getfunctioninfo sq_getfunctioninfo;
- extern sqapi_getclosureinfo sq_getclosureinfo;
- extern sqapi_getclosurename sq_getclosurename;
- extern sqapi_setnativeclosurename sq_setnativeclosurename;
- extern sqapi_setinstanceup sq_setinstanceup;
- extern sqapi_getinstanceup sq_getinstanceup;
- extern sqapi_setclassudsize sq_setclassudsize;
- extern sqapi_newclass sq_newclass;
- extern sqapi_createinstance sq_createinstance;
- extern sqapi_setattributes sq_setattributes;
- extern sqapi_getattributes sq_getattributes;
- extern sqapi_getclass sq_getclass;
- extern sqapi_weakref sq_weakref;
- extern sqapi_getdefaultdelegate sq_getdefaultdelegate;
- extern sqapi_getmemberhandle sq_getmemberhandle;
- extern sqapi_getbyhandle sq_getbyhandle;
- extern sqapi_setbyhandle sq_setbyhandle;
+ extern sqapi_newuserdata sq_newuserdata;
+ extern sqapi_newtable sq_newtable;
+ extern sqapi_newtableex sq_newtableex;
+ extern sqapi_newarray sq_newarray;
+ extern sqapi_newclosure sq_newclosure;
+ extern sqapi_setparamscheck sq_setparamscheck;
+ extern sqapi_bindenv sq_bindenv;
+ extern sqapi_setclosureroot sq_setclosureroot;
+ extern sqapi_getclosureroot sq_getclosureroot;
+ extern sqapi_pushstring sq_pushstring;
+ extern sqapi_pushfloat sq_pushfloat;
+ extern sqapi_pushinteger sq_pushinteger;
+ extern sqapi_pushbool sq_pushbool;
+ extern sqapi_pushuserpointer sq_pushuserpointer;
+ extern sqapi_pushnull sq_pushnull;
+ extern sqapi_pushthread sq_pushthread;
+ extern sqapi_gettype sq_gettype;
+ extern sqapi_typeof sq_typeof;
+ extern sqapi_getsize sq_getsize;
+ extern sqapi_gethash sq_gethash;
+ extern sqapi_getbase sq_getbase;
+ extern sqapi_instanceof sq_instanceof;
+ extern sqapi_tostring sq_tostring;
+ extern sqapi_tobool sq_tobool;
+ extern sqapi_getstringandsize sq_getstringandsize;
+ extern sqapi_getstring sq_getstring;
+ extern sqapi_getinteger sq_getinteger;
+ extern sqapi_getfloat sq_getfloat;
+ extern sqapi_getbool sq_getbool;
+ extern sqapi_getthread sq_getthread;
+ extern sqapi_getuserpointer sq_getuserpointer;
+ extern sqapi_getuserdata sq_getuserdata;
+ extern sqapi_settypetag sq_settypetag;
+ extern sqapi_gettypetag sq_gettypetag;
+ extern sqapi_setreleasehook sq_setreleasehook;
+ extern sqapi_getreleasehook sq_getreleasehook;
+ extern sqapi_getscratchpad sq_getscratchpad;
+ extern sqapi_getfunctioninfo sq_getfunctioninfo;
+ extern sqapi_getclosureinfo sq_getclosureinfo;
+ extern sqapi_getclosurename sq_getclosurename;
+ extern sqapi_setnativeclosurename sq_setnativeclosurename;
+ extern sqapi_setinstanceup sq_setinstanceup;
+ extern sqapi_getinstanceup sq_getinstanceup;
+ extern sqapi_setclassudsize sq_setclassudsize;
+ extern sqapi_newclass sq_newclass;
+ extern sqapi_createinstance sq_createinstance;
+ extern sqapi_setattributes sq_setattributes;
+ extern sqapi_getattributes sq_getattributes;
+ extern sqapi_getclass sq_getclass;
+ extern sqapi_weakref sq_weakref;
+ extern sqapi_getdefaultdelegate sq_getdefaultdelegate;
+ extern sqapi_getmemberhandle sq_getmemberhandle;
+ extern sqapi_getbyhandle sq_getbyhandle;
+ extern sqapi_setbyhandle sq_setbyhandle;
/*object manipulation*/
- extern sqapi_pushroottable sq_pushroottable;
- extern sqapi_pushregistrytable sq_pushregistrytable;
- extern sqapi_pushconsttable sq_pushconsttable;
- extern sqapi_setroottable sq_setroottable;
- extern sqapi_setconsttable sq_setconsttable;
- extern sqapi_newslot sq_newslot;
- extern sqapi_deleteslot sq_deleteslot;
- extern sqapi_set sq_set;
- extern sqapi_get sq_get;
- extern sqapi_rawget sq_rawget;
- extern sqapi_rawset sq_rawset;
- extern sqapi_rawdeleteslot sq_rawdeleteslot;
- extern sqapi_newmember sq_newmember;
- extern sqapi_rawnewmember sq_rawnewmember;
- extern sqapi_arrayappend sq_arrayappend;
- extern sqapi_arraypop sq_arraypop;
- extern sqapi_arrayresize sq_arrayresize;
- extern sqapi_arrayreverse sq_arrayreverse;
- extern sqapi_arrayremove sq_arrayremove;
- extern sqapi_arrayinsert sq_arrayinsert;
- extern sqapi_setdelegate sq_setdelegate;
- extern sqapi_getdelegate sq_getdelegate;
- extern sqapi_clone sq_clone;
- extern sqapi_setfreevariable sq_setfreevariable;
- extern sqapi_next sq_next;
- extern sqapi_getweakrefval sq_getweakrefval;
- extern sqapi_clear sq_clear;
+ extern sqapi_pushroottable sq_pushroottable;
+ extern sqapi_pushregistrytable sq_pushregistrytable;
+ extern sqapi_pushconsttable sq_pushconsttable;
+ extern sqapi_setroottable sq_setroottable;
+ extern sqapi_setconsttable sq_setconsttable;
+ extern sqapi_newslot sq_newslot;
+ extern sqapi_deleteslot sq_deleteslot;
+ extern sqapi_set sq_set;
+ extern sqapi_get sq_get;
+ extern sqapi_rawget sq_rawget;
+ extern sqapi_rawset sq_rawset;
+ extern sqapi_rawdeleteslot sq_rawdeleteslot;
+ extern sqapi_newmember sq_newmember;
+ extern sqapi_rawnewmember sq_rawnewmember;
+ extern sqapi_arrayappend sq_arrayappend;
+ extern sqapi_arraypop sq_arraypop;
+ extern sqapi_arrayresize sq_arrayresize;
+ extern sqapi_arrayreverse sq_arrayreverse;
+ extern sqapi_arrayremove sq_arrayremove;
+ extern sqapi_arrayinsert sq_arrayinsert;
+ extern sqapi_setdelegate sq_setdelegate;
+ extern sqapi_getdelegate sq_getdelegate;
+ extern sqapi_clone sq_clone;
+ extern sqapi_setfreevariable sq_setfreevariable;
+ extern sqapi_next sq_next;
+ extern sqapi_getweakrefval sq_getweakrefval;
+ extern sqapi_clear sq_clear;
/*calls*/
- extern sqapi_call sq_call;
- extern sqapi_resume sq_resume;
- extern sqapi_getlocal sq_getlocal;
- extern sqapi_getcallee sq_getcallee;
- extern sqapi_getfreevariable sq_getfreevariable;
- extern sqapi_throwerror sq_throwerror;
- extern sqapi_throwobject sq_throwobject;
- extern sqapi_reseterror sq_reseterror;
- extern sqapi_getlasterror sq_getlasterror;
+ extern sqapi_call sq_call;
+ extern sqapi_resume sq_resume;
+ extern sqapi_getlocal sq_getlocal;
+ extern sqapi_getcallee sq_getcallee;
+ extern sqapi_getfreevariable sq_getfreevariable;
+ extern sqapi_throwerror sq_throwerror;
+ extern sqapi_throwobject sq_throwobject;
+ extern sqapi_reseterror sq_reseterror;
+ extern sqapi_getlasterror sq_getlasterror;
/*raw object handling*/
- extern sqapi_getstackobj sq_getstackobj;
- extern sqapi_pushobject sq_pushobject;
- extern sqapi_addref sq_addref;
- extern sqapi_release sq_release;
- extern sqapi_getrefcount sq_getrefcount;
- extern sqapi_resetobject sq_resetobject;
- extern sqapi_objtostring sq_objtostring;
- extern sqapi_objtobool sq_objtobool;
- extern sqapi_objtointeger sq_objtointeger;
- extern sqapi_objtofloat sq_objtofloat;
- extern sqapi_objtouserpointer sq_objtouserpointer;
- extern sqapi_getobjtypetag sq_getobjtypetag;
- extern sqapi_getvmrefcount sq_getvmrefcount;
+ extern sqapi_getstackobj sq_getstackobj;
+ extern sqapi_pushobject sq_pushobject;
+ extern sqapi_addref sq_addref;
+ extern sqapi_release sq_release;
+ extern sqapi_getrefcount sq_getrefcount;
+ extern sqapi_resetobject sq_resetobject;
+ extern sqapi_objtostring sq_objtostring;
+ extern sqapi_objtobool sq_objtobool;
+ extern sqapi_objtointeger sq_objtointeger;
+ extern sqapi_objtofloat sq_objtofloat;
+ extern sqapi_objtouserpointer sq_objtouserpointer;
+ extern sqapi_getobjtypetag sq_getobjtypetag;
+ extern sqapi_getvmrefcount sq_getvmrefcount;
/*GC*/
- extern sqapi_collectgarbage sq_collectgarbage;
- extern sqapi_resurrectunreachable sq_resurrectunreachable;
+ extern sqapi_collectgarbage sq_collectgarbage;
+ extern sqapi_resurrectunreachable sq_resurrectunreachable;
/*serialization*/
- extern sqapi_writeclosure sq_writeclosure;
- extern sqapi_readclosure sq_readclosure;
+ extern sqapi_writeclosure sq_writeclosure;
+ extern sqapi_readclosure sq_readclosure;
/*mem allocation*/
- extern sqapi_malloc sq_malloc;
- extern sqapi_realloc sq_realloc;
- extern sqapi_free sq_free;
+ extern sqapi_malloc sq_malloc;
+ extern sqapi_realloc sq_realloc;
+ extern sqapi_free sq_free;
/*debug*/
- extern sqapi_stackinfos sq_stackinfos;
- extern sqapi_setdebughook sq_setdebughook;
- extern sqapi_setnativedebughook sq_setnativedebughook;
+ extern sqapi_stackinfos sq_stackinfos;
+ extern sqapi_setdebughook sq_setdebughook;
+ extern sqapi_setnativedebughook sq_setnativedebughook;
/*compiler helpers*/
- extern sqapi_loadfile sqstd_loadfile;
- extern sqapi_dofile sqstd_dofile;
- extern sqapi_writeclosuretofile sqstd_writeclosuretofile;
+ extern sqapi_loadfile sqstd_loadfile;
+ extern sqapi_dofile sqstd_dofile;
+ extern sqapi_writeclosuretofile sqstd_writeclosuretofile;
/*blob*/
- extern sqapi_createblob sqstd_createblob;
- extern sqapi_getblob sqstd_getblob;
- extern sqapi_getblobsize sqstd_getblobsize;
+ extern sqapi_createblob sqstd_createblob;
+ extern sqapi_getblob sqstd_getblob;
+ extern sqapi_getblobsize sqstd_getblobsize;
/*string*/
- extern sqapi_format sqstd_format;
+ extern sqapi_format sqstd_format;
#endif // SQMOD_PLUGIN_API
diff --git a/shared/SqMod.inl b/shared/SqMod.inl
index 58c6ada1..bc858f5c 100644
--- a/shared/SqMod.inl
+++ b/shared/SqMod.inl
@@ -65,6 +65,7 @@ sqapi_getbase sq_getbase = NULL;
sqapi_instanceof sq_instanceof = NULL;
sqapi_tostring sq_tostring = NULL;
sqapi_tobool sq_tobool = NULL;
+sqapi_getstringandsize sq_getstringandsize = NULL;
sqapi_getstring sq_getstring = NULL;
sqapi_getinteger sq_getinteger = NULL;
sqapi_getfloat sq_getfloat = NULL;
@@ -277,6 +278,7 @@ SQRESULT sq_api_expand(HSQAPI sqapi)
sq_instanceof = sqapi->instanceof;
sq_tostring = sqapi->tostring;
sq_tobool = sqapi->tobool;
+ sq_getstringandsize = sqapi->getstringandsize;
sq_getstring = sqapi->getstring;
sq_getinteger = sqapi->getinteger;
sq_getfloat = sqapi->getfloat;
@@ -467,6 +469,7 @@ void sq_api_collapse()
sq_instanceof = NULL;
sq_tostring = NULL;
sq_tobool = NULL;
+ sq_getstringandsize = NULL;
sq_getstring = NULL;
sq_getinteger = NULL;
sq_getfloat = NULL;
diff --git a/source/Exports.cpp b/source/Exports.cpp
index 67607ef4..ee7c29cf 100644
--- a/source/Exports.cpp
+++ b/source/Exports.cpp
@@ -348,6 +348,7 @@ void InitExports()
g_SqAPI.instanceof = sq_instanceof;
g_SqAPI.tostring = sq_tostring;
g_SqAPI.tobool = sq_tobool;
+ g_SqAPI.getstringandsize = sq_getstringandsize;
g_SqAPI.getstring = sq_getstring;
g_SqAPI.getinteger = sq_getinteger;
g_SqAPI.getfloat = sq_getfloat;