[DEV] simplify typing (too much)

This commit is contained in:
Edouard DUPIN 2018-06-27 01:30:21 +02:00
parent bec51d5c0a
commit db219fa8e6
45 changed files with 1418 additions and 1453 deletions

View File

@ -48,7 +48,7 @@ int MemAllocHook(int allocType,
#endif
SQInteger quit(HRABBITVM v)
int64_t quit(HRABBITVM v)
{
int *done;
sq_getuserpointer(v,-1,(SQUserPointer*)&done);
@ -74,7 +74,7 @@ void errorfunc(HRABBITVM SQ_UNUSED_ARG(v),const SQChar *s,...)
void PrintVersionInfos()
{
scfprintf(stdout,_SC("%s %s (%d bits)\n"),RABBIT_VERSION,RABBIT_COPYRIGHT,((int)(sizeof(SQInteger)*8)));
scfprintf(stdout,_SC("%s %s (%d bits)\n"),RABBIT_VERSION,RABBIT_COPYRIGHT,((int)(sizeof(int64_t)*8)));
}
void PrintUsage()
@ -93,7 +93,7 @@ void PrintUsage()
#define _DONE 2
#define _ERROR 3
//<<FIXME>> this func is a mess
int getargs(HRABBITVM v,int argc, char* argv[],SQInteger *retval)
int getargs(HRABBITVM v,int argc, char* argv[],int64_t *retval)
{
int i;
int compiles_only = 0;
@ -236,10 +236,10 @@ void Interactive(HRABBITVM v)
#define MAXINPUT 1024
SQChar buffer[MAXINPUT];
SQInteger blocks =0;
SQInteger string=0;
SQInteger retval=0;
SQInteger done=0;
int64_t blocks =0;
int64_t string=0;
int64_t retval=0;
int64_t done=0;
PrintVersionInfos();
sq_pushroottable(v);
@ -252,7 +252,7 @@ void Interactive(HRABBITVM v)
while (!done)
{
SQInteger i = 0;
int64_t i = 0;
scprintf(_SC("\nrabbit> "));
for(;;) {
int c;
@ -292,7 +292,7 @@ void Interactive(HRABBITVM v)
}
i=scstrlen(buffer);
if(i>0){
SQInteger oldtop=sq_gettop(v);
int64_t oldtop=sq_gettop(v);
if(SQ_SUCCEEDED(sq_compilebuffer(v,buffer,i,_SC("interactive console"),SQTrue))){
sq_pushroottable(v);
if(SQ_SUCCEEDED(sq_call(v,1,retval,SQTrue)) && retval){
@ -316,7 +316,7 @@ void Interactive(HRABBITVM v)
int main(int argc, char* argv[])
{
HRABBITVM v;
SQInteger retval = 0;
int64_t retval = 0;
#if defined(_MSC_VER) && defined(_DEBUG)
_CrtSetAllocHook(MemAllocHook);
#endif

View File

@ -36,7 +36,7 @@ void errorfunc(HSQUIRRELVM v,const SQChar *s,...)
void call_foo(HSQUIRRELVM v, int n,float f,const SQChar *s)
{
SQInteger top = sq_gettop(v); //saves the stack size before the call
int64_t top = sq_gettop(v); //saves the stack size before the call
sq_pushroottable(v); //pushes the global table
sq_pushstring(v,_SC("foo"),-1);
if(SQ_SUCCEEDED(sq_get(v,-2))) { //gets the field 'foo' from the global table

View File

@ -44,7 +44,8 @@ def configure(target, my_module):
my_module.add_depend([
'z',
'm',
'c'
'c',
'etk-base',
])
my_module.add_header_file([
'rabbit/sqclass.hpp',

View File

@ -15,12 +15,12 @@ void sqstd_printcallstack(HRABBITVM v)
SQPRINTFUNCTION pf = sq_geterrorfunc(v);
if(pf) {
SQStackInfos si;
SQInteger i;
SQFloat f;
int64_t i;
float_t f;
const SQChar *s;
SQInteger level=1; //1 is to skip this function that is level 0
int64_t level=1; //1 is to skip this function that is level 0
const SQChar *name=0;
SQInteger seq=0;
int64_t seq=0;
pf(v,_SC("\nCALLSTACK\n"));
while(SQ_SUCCEEDED(sq_stackinfos(v,level,&si)))
{
@ -103,7 +103,7 @@ void sqstd_printcallstack(HRABBITVM v)
}
}
static SQInteger _sqstd_aux_printerror(HRABBITVM v)
static int64_t _sqstd_aux_printerror(HRABBITVM v)
{
SQPRINTFUNCTION pf = sq_geterrorfunc(v);
if(pf) {
@ -121,7 +121,7 @@ static SQInteger _sqstd_aux_printerror(HRABBITVM v)
return 0;
}
void _sqstd_compiler_error(HRABBITVM v,const SQChar *sErr,const SQChar *sSource,SQInteger line,SQInteger column)
void _sqstd_compiler_error(HRABBITVM v,const SQChar *sErr,const SQChar *sSource,int64_t line,int64_t column)
{
SQPRINTFUNCTION pf = sq_geterrorfunc(v);
if(pf) {

View File

@ -7,7 +7,7 @@
#include <rabbit-std/sqstdstream.hpp>
#include <rabbit-std/sqstdblobimpl.hpp>
#define SQSTD_BLOB_TYPE_TAG ((SQUnsignedInteger)(SQSTD_STREAM_TYPE_TAG | 0x00000002))
#define SQSTD_BLOB_TYPE_TAG ((uint64_t)(SQSTD_STREAM_TYPE_TAG | 0x00000002))
//Blob
@ -20,10 +20,10 @@
return sq_throwerror(v,_SC("the blob is invalid"));
static SQInteger _blob_resize(HRABBITVM v)
static int64_t _blob_resize(HRABBITVM v)
{
SETUP_BLOB(v);
SQInteger size;
int64_t size;
sq_getinteger(v,2,&size);
if(!self->Resize(size))
return sq_throwerror(v,_SC("resize failed"));
@ -43,32 +43,32 @@ static void __swap_word(unsigned short *n)
*n=(unsigned short)((*n>>8)&0x00FF)| ((*n<<8)&0xFF00);
}
static SQInteger _blob_swap4(HRABBITVM v)
static int64_t _blob_swap4(HRABBITVM v)
{
SETUP_BLOB(v);
SQInteger num=(self->Len()-(self->Len()%4))>>2;
int64_t num=(self->Len()-(self->Len()%4))>>2;
unsigned int *t=(unsigned int *)self->GetBuf();
for(SQInteger i = 0; i < num; i++) {
for(int64_t i = 0; i < num; i++) {
__swap_dword(&t[i]);
}
return 0;
}
static SQInteger _blob_swap2(HRABBITVM v)
static int64_t _blob_swap2(HRABBITVM v)
{
SETUP_BLOB(v);
SQInteger num=(self->Len()-(self->Len()%2))>>1;
int64_t num=(self->Len()-(self->Len()%2))>>1;
unsigned short *t = (unsigned short *)self->GetBuf();
for(SQInteger i = 0; i < num; i++) {
for(int64_t i = 0; i < num; i++) {
__swap_word(&t[i]);
}
return 0;
}
static SQInteger _blob__set(HRABBITVM v)
static int64_t _blob__set(HRABBITVM v)
{
SETUP_BLOB(v);
SQInteger idx,val;
int64_t idx,val;
sq_getinteger(v,2,&idx);
sq_getinteger(v,3,&val);
if(idx < 0 || idx >= self->Len())
@ -78,10 +78,10 @@ static SQInteger _blob__set(HRABBITVM v)
return 1;
}
static SQInteger _blob__get(HRABBITVM v)
static int64_t _blob__get(HRABBITVM v)
{
SETUP_BLOB(v);
SQInteger idx;
int64_t idx;
if ((sq_gettype(v, 2) & SQOBJECT_NUMERIC) == 0)
{
@ -95,14 +95,14 @@ static SQInteger _blob__get(HRABBITVM v)
return 1;
}
static SQInteger _blob__nexti(HRABBITVM v)
static int64_t _blob__nexti(HRABBITVM v)
{
SETUP_BLOB(v);
if(sq_gettype(v,2) == OT_NULL) {
sq_pushinteger(v, 0);
return 1;
}
SQInteger idx;
int64_t idx;
if(SQ_SUCCEEDED(sq_getinteger(v, 2, &idx))) {
if(idx+1 < self->Len()) {
sq_pushinteger(v, idx+1);
@ -114,13 +114,13 @@ static SQInteger _blob__nexti(HRABBITVM v)
return sq_throwerror(v,_SC("internal error (_nexti) wrong argument type"));
}
static SQInteger _blob__typeof(HRABBITVM v)
static int64_t _blob__typeof(HRABBITVM v)
{
sq_pushstring(v,_SC("blob"),-1);
return 1;
}
static SQInteger _blob_releasehook(SQUserPointer p, SQInteger SQ_UNUSED_ARG(size))
static int64_t _blob_releasehook(SQUserPointer p, int64_t SQ_UNUSED_ARG(size))
{
SQBlob *self = (SQBlob*)p;
self->~SQBlob();
@ -128,10 +128,10 @@ static SQInteger _blob_releasehook(SQUserPointer p, SQInteger SQ_UNUSED_ARG(size
return 1;
}
static SQInteger _blob_constructor(HRABBITVM v)
static int64_t _blob_constructor(HRABBITVM v)
{
SQInteger nparam = sq_gettop(v);
SQInteger size = 0;
int64_t nparam = sq_gettop(v);
int64_t size = 0;
if(nparam == 2) {
sq_getinteger(v, 2, &size);
}
@ -148,7 +148,7 @@ static SQInteger _blob_constructor(HRABBITVM v)
return 0;
}
static SQInteger _blob__cloned(HRABBITVM v)
static int64_t _blob__cloned(HRABBITVM v)
{
SQBlob *other = NULL;
{
@ -185,44 +185,44 @@ static const SQRegFunction _blob_methods[] = {
//GLOBAL FUNCTIONS
static SQInteger _g_blob_casti2f(HRABBITVM v)
static int64_t _g_blob_casti2f(HRABBITVM v)
{
SQInteger i;
int64_t i;
sq_getinteger(v,2,&i);
sq_pushfloat(v,*((const SQFloat *)&i));
sq_pushfloat(v,*((const float_t *)&i));
return 1;
}
static SQInteger _g_blob_castf2i(HRABBITVM v)
static int64_t _g_blob_castf2i(HRABBITVM v)
{
SQFloat f;
float_t f;
sq_getfloat(v,2,&f);
sq_pushinteger(v,*((const SQInteger *)&f));
sq_pushinteger(v,*((const int64_t *)&f));
return 1;
}
static SQInteger _g_blob_swap2(HRABBITVM v)
static int64_t _g_blob_swap2(HRABBITVM v)
{
SQInteger i;
int64_t i;
sq_getinteger(v,2,&i);
short s=(short)i;
sq_pushinteger(v,(s<<8)|((s>>8)&0x00FF));
return 1;
}
static SQInteger _g_blob_swap4(HRABBITVM v)
static int64_t _g_blob_swap4(HRABBITVM v)
{
SQInteger i;
int64_t i;
sq_getinteger(v,2,&i);
unsigned int t4 = (unsigned int)i;
__swap_dword(&t4);
sq_pushinteger(v,(SQInteger)t4);
sq_pushinteger(v,(int64_t)t4);
return 1;
}
static SQInteger _g_blob_swapfloat(HRABBITVM v)
static int64_t _g_blob_swapfloat(HRABBITVM v)
{
SQFloat f;
float_t f;
sq_getfloat(v,2,&f);
__swap_dword((unsigned int *)&f);
sq_pushfloat(v,f);
@ -239,7 +239,7 @@ static const SQRegFunction bloblib_funcs[]={
{NULL,(SQFUNCTION)0,0,NULL}
};
SQRESULT sqstd_getblob(HRABBITVM v,SQInteger idx,SQUserPointer *ptr)
SQRESULT sqstd_getblob(HRABBITVM v,int64_t idx,SQUserPointer *ptr)
{
SQBlob *blob;
if(SQ_FAILED(sq_getinstanceup(v,idx,(SQUserPointer *)&blob,(SQUserPointer)SQSTD_BLOB_TYPE_TAG)))
@ -248,7 +248,7 @@ SQRESULT sqstd_getblob(HRABBITVM v,SQInteger idx,SQUserPointer *ptr)
return SQ_OK;
}
SQInteger sqstd_getblobsize(HRABBITVM v,SQInteger idx)
int64_t sqstd_getblobsize(HRABBITVM v,int64_t idx)
{
SQBlob *blob;
if(SQ_FAILED(sq_getinstanceup(v,idx,(SQUserPointer *)&blob,(SQUserPointer)SQSTD_BLOB_TYPE_TAG)))
@ -256,9 +256,9 @@ SQInteger sqstd_getblobsize(HRABBITVM v,SQInteger idx)
return blob->Len();
}
SQUserPointer sqstd_createblob(HRABBITVM v, SQInteger size)
SQUserPointer sqstd_createblob(HRABBITVM v, int64_t size)
{
SQInteger top = sq_gettop(v);
int64_t top = sq_gettop(v);
sq_pushregistrytable(v);
sq_pushstring(v,_SC("std_blob"),-1);
if(SQ_SUCCEEDED(sq_get(v,-2))) {

View File

@ -7,9 +7,9 @@
*/
#pragma once
RABBIT_API SQUserPointer sqstd_createblob(HRABBITVM v, SQInteger size);
RABBIT_API SQRESULT sqstd_getblob(HRABBITVM v,SQInteger idx,SQUserPointer *ptr);
RABBIT_API SQInteger sqstd_getblobsize(HRABBITVM v,SQInteger idx);
RABBIT_API SQUserPointer sqstd_createblob(HRABBITVM v, int64_t size);
RABBIT_API SQRESULT sqstd_getblob(HRABBITVM v,int64_t idx,SQUserPointer *ptr);
RABBIT_API int64_t sqstd_getblobsize(HRABBITVM v,int64_t idx);
RABBIT_API SQRESULT sqstd_register_bloblib(HRABBITVM v);

View File

@ -9,7 +9,7 @@
struct SQBlob : public SQStream
{
SQBlob(SQInteger size) {
SQBlob(int64_t size) {
_size = size;
_allocated = size;
_buf = (unsigned char *)sq_malloc(size);
@ -20,7 +20,7 @@ struct SQBlob : public SQStream
virtual ~SQBlob() {
sq_free(_buf, _allocated);
}
SQInteger Write(void *buffer, SQInteger size) {
int64_t Write(void *buffer, int64_t size) {
if(!CanAdvance(size)) {
GrowBufOf(_ptr + size - _size);
}
@ -28,8 +28,8 @@ struct SQBlob : public SQStream
_ptr += size;
return size;
}
SQInteger Read(void *buffer,SQInteger size) {
SQInteger n = size;
int64_t Read(void *buffer,int64_t size) {
int64_t n = size;
if(!CanAdvance(size)) {
if((_size - _ptr) > 0)
n = _size - _ptr;
@ -39,7 +39,7 @@ struct SQBlob : public SQStream
_ptr += n;
return n;
}
bool Resize(SQInteger n) {
bool Resize(int64_t n) {
if(!_owns) return false;
if(n != _allocated) {
unsigned char *newbuf = (unsigned char *)sq_malloc(n);
@ -58,7 +58,7 @@ struct SQBlob : public SQStream
}
return true;
}
bool GrowBufOf(SQInteger n)
bool GrowBufOf(int64_t n)
{
bool ret = true;
if(_size + n > _allocated) {
@ -70,11 +70,11 @@ struct SQBlob : public SQStream
_size = _size + n;
return ret;
}
bool CanAdvance(SQInteger n) {
bool CanAdvance(int64_t n) {
if(_ptr+n>_size)return false;
return true;
}
SQInteger Seek(SQInteger offset, SQInteger origin) {
int64_t Seek(int64_t offset, int64_t origin) {
switch(origin) {
case SQ_SEEK_SET:
if(offset > _size || offset < 0) return -1;
@ -98,14 +98,14 @@ struct SQBlob : public SQStream
bool EOS() {
return _ptr == _size;
}
SQInteger Flush() { return 0; }
SQInteger Tell() { return _ptr; }
SQInteger Len() { return _size; }
int64_t Flush() { return 0; }
int64_t Tell() { return _ptr; }
int64_t Len() { return _size; }
SQUserPointer GetBuf(){ return _buf; }
private:
SQInteger _size;
SQInteger _allocated;
SQInteger _ptr;
int64_t _size;
int64_t _allocated;
int64_t _ptr;
unsigned char *_buf;
bool _owns;
};

View File

@ -12,7 +12,7 @@
#include <rabbit-std/sqstdio.hpp>
#include <rabbit-std/sqstdstream.hpp>
#define SQSTD_FILE_TYPE_TAG ((SQUnsignedInteger)(SQSTD_STREAM_TYPE_TAG | 0x00000001))
#define SQSTD_FILE_TYPE_TAG ((uint64_t)(SQSTD_STREAM_TYPE_TAG | 0x00000001))
//basic API
SQFILE sqstd_fopen(const SQChar *filename ,const SQChar *mode)
{
@ -23,20 +23,20 @@ SQFILE sqstd_fopen(const SQChar *filename ,const SQChar *mode)
#endif
}
SQInteger sqstd_fread(void* buffer, SQInteger size, SQInteger count, SQFILE file)
int64_t sqstd_fread(void* buffer, int64_t size, int64_t count, SQFILE file)
{
SQInteger ret = (SQInteger)fread(buffer,size,count,(FILE *)file);
int64_t ret = (int64_t)fread(buffer,size,count,(FILE *)file);
return ret;
}
SQInteger sqstd_fwrite(const SQUserPointer buffer, SQInteger size, SQInteger count, SQFILE file)
int64_t sqstd_fwrite(const SQUserPointer buffer, int64_t size, int64_t count, SQFILE file)
{
return (SQInteger)fwrite(buffer,size,count,(FILE *)file);
return (int64_t)fwrite(buffer,size,count,(FILE *)file);
}
SQInteger sqstd_fseek(SQFILE file, SQInteger offset, SQInteger origin)
int64_t sqstd_fseek(SQFILE file, int64_t offset, int64_t origin)
{
SQInteger realorigin;
int64_t realorigin;
switch(origin) {
case SQ_SEEK_CUR: realorigin = SEEK_CUR; break;
case SQ_SEEK_END: realorigin = SEEK_END; break;
@ -46,22 +46,22 @@ SQInteger sqstd_fseek(SQFILE file, SQInteger offset, SQInteger origin)
return fseek((FILE *)file,(long)offset,(int)realorigin);
}
SQInteger sqstd_ftell(SQFILE file)
int64_t sqstd_ftell(SQFILE file)
{
return ftell((FILE *)file);
}
SQInteger sqstd_fflush(SQFILE file)
int64_t sqstd_fflush(SQFILE file)
{
return fflush((FILE *)file);
}
SQInteger sqstd_fclose(SQFILE file)
int64_t sqstd_fclose(SQFILE file)
{
return fclose((FILE *)file);
}
SQInteger sqstd_feof(SQFILE file)
int64_t sqstd_feof(SQFILE file)
{
return feof((FILE *)file);
}
@ -86,26 +86,26 @@ struct SQFile : public SQStream {
_owns = false;
}
}
SQInteger Read(void *buffer,SQInteger size) {
int64_t Read(void *buffer,int64_t size) {
return sqstd_fread(buffer,1,size,_handle);
}
SQInteger Write(void *buffer,SQInteger size) {
int64_t Write(void *buffer,int64_t size) {
return sqstd_fwrite(buffer,1,size,_handle);
}
SQInteger Flush() {
int64_t Flush() {
return sqstd_fflush(_handle);
}
SQInteger Tell() {
int64_t Tell() {
return sqstd_ftell(_handle);
}
SQInteger Len() {
SQInteger prevpos=Tell();
int64_t Len() {
int64_t prevpos=Tell();
Seek(0,SQ_SEEK_END);
SQInteger size=Tell();
int64_t size=Tell();
Seek(prevpos,SQ_SEEK_SET);
return size;
}
SQInteger Seek(SQInteger offset, SQInteger origin) {
int64_t Seek(int64_t offset, int64_t origin) {
return sqstd_fseek(_handle,offset,origin);
}
bool IsValid() { return _handle?true:false; }
@ -116,13 +116,13 @@ private:
bool _owns;
};
static SQInteger _file__typeof(HRABBITVM v)
static int64_t _file__typeof(HRABBITVM v)
{
sq_pushstring(v,_SC("file"),-1);
return 1;
}
static SQInteger _file_releasehook(SQUserPointer p, SQInteger SQ_UNUSED_ARG(size))
static int64_t _file_releasehook(SQUserPointer p, int64_t SQ_UNUSED_ARG(size))
{
SQFile *self = (SQFile*)p;
self->~SQFile();
@ -130,7 +130,7 @@ static SQInteger _file_releasehook(SQUserPointer p, SQInteger SQ_UNUSED_ARG(size
return 1;
}
static SQInteger _file_constructor(HRABBITVM v)
static int64_t _file_constructor(HRABBITVM v)
{
const SQChar *filename,*mode;
bool owns = true;
@ -158,7 +158,7 @@ static SQInteger _file_constructor(HRABBITVM v)
return 0;
}
static SQInteger _file_close(HRABBITVM v)
static int64_t _file_close(HRABBITVM v)
{
SQFile *self = NULL;
if(SQ_SUCCEEDED(sq_getinstanceup(v,1,(SQUserPointer*)&self,(SQUserPointer)SQSTD_FILE_TYPE_TAG))
@ -182,7 +182,7 @@ static const SQRegFunction _file_methods[] = {
SQRESULT sqstd_createfile(HRABBITVM v, SQFILE file,SQBool own)
{
SQInteger top = sq_gettop(v);
int64_t top = sq_gettop(v);
sq_pushregistrytable(v);
sq_pushstring(v,_SC("std_file"),-1);
if(SQ_SUCCEEDED(sq_get(v,-2))) {
@ -204,7 +204,7 @@ SQRESULT sqstd_createfile(HRABBITVM v, SQFILE file,SQBool own)
return SQ_ERROR;
}
SQRESULT sqstd_getfile(HRABBITVM v, SQInteger idx, SQFILE *file)
SQRESULT sqstd_getfile(HRABBITVM v, int64_t idx, SQFILE *file)
{
SQFile *fileobj = NULL;
if(SQ_SUCCEEDED(sq_getinstanceup(v,idx,(SQUserPointer*)&fileobj,(SQUserPointer)SQSTD_FILE_TYPE_TAG))) {
@ -219,23 +219,23 @@ SQRESULT sqstd_getfile(HRABBITVM v, SQInteger idx, SQFILE *file)
#define IO_BUFFER_SIZE 2048
struct IOBuffer {
unsigned char buffer[IO_BUFFER_SIZE];
SQInteger size;
SQInteger ptr;
int64_t size;
int64_t ptr;
SQFILE file;
};
SQInteger _read_byte(IOBuffer *iobuffer)
int64_t _read_byte(IOBuffer *iobuffer)
{
if(iobuffer->ptr < iobuffer->size) {
SQInteger ret = iobuffer->buffer[iobuffer->ptr];
int64_t ret = iobuffer->buffer[iobuffer->ptr];
iobuffer->ptr++;
return ret;
}
else {
if( (iobuffer->size = sqstd_fread(iobuffer->buffer,1,IO_BUFFER_SIZE,iobuffer->file )) > 0 )
{
SQInteger ret = iobuffer->buffer[0];
int64_t ret = iobuffer->buffer[0];
iobuffer->ptr = 1;
return ret;
}
@ -244,11 +244,11 @@ SQInteger _read_byte(IOBuffer *iobuffer)
return 0;
}
SQInteger _read_two_bytes(IOBuffer *iobuffer)
int64_t _read_two_bytes(IOBuffer *iobuffer)
{
if(iobuffer->ptr < iobuffer->size) {
if(iobuffer->size < 2) return 0;
SQInteger ret = *((const wchar_t*)&iobuffer->buffer[iobuffer->ptr]);
int64_t ret = *((const wchar_t*)&iobuffer->buffer[iobuffer->ptr]);
iobuffer->ptr += 2;
return ret;
}
@ -256,7 +256,7 @@ SQInteger _read_two_bytes(IOBuffer *iobuffer)
if( (iobuffer->size = sqstd_fread(iobuffer->buffer,1,IO_BUFFER_SIZE,iobuffer->file )) > 0 )
{
if(iobuffer->size < 2) return 0;
SQInteger ret = *((const wchar_t*)&iobuffer->buffer[0]);
int64_t ret = *((const wchar_t*)&iobuffer->buffer[0]);
iobuffer->ptr = 2;
return ret;
}
@ -265,7 +265,7 @@ SQInteger _read_two_bytes(IOBuffer *iobuffer)
return 0;
}
static SQInteger _io_file_lexfeed_PLAIN(SQUserPointer iobuf)
static int64_t _io_file_lexfeed_PLAIN(SQUserPointer iobuf)
{
IOBuffer *iobuffer = (IOBuffer *)iobuf;
return _read_byte(iobuffer);
@ -273,14 +273,14 @@ static SQInteger _io_file_lexfeed_PLAIN(SQUserPointer iobuf)
}
#ifdef SQUNICODE
static SQInteger _io_file_lexfeed_UTF8(SQUserPointer iobuf)
static int64_t _io_file_lexfeed_UTF8(SQUserPointer iobuf)
{
IOBuffer *iobuffer = (IOBuffer *)iobuf;
#define READ(iobuf) \
if((inchar = (unsigned char)_read_byte(iobuf)) == 0) \
return 0;
static const SQInteger utf8_lengths[16] =
static const int64_t utf8_lengths[16] =
{
1,1,1,1,1,1,1,1, /* 0000 to 0111 : 1 byte (plain ASCII) */
0,0,0,0, /* 1000 to 1011 : not valid */
@ -290,18 +290,18 @@ static SQInteger _io_file_lexfeed_UTF8(SQUserPointer iobuf)
};
static const unsigned char byte_masks[5] = {0,0,0x1f,0x0f,0x07};
unsigned char inchar;
SQInteger c = 0;
int64_t c = 0;
READ(iobuffer);
c = inchar;
//
if(c >= 0x80) {
SQInteger tmp;
SQInteger codelen = utf8_lengths[c>>4];
int64_t tmp;
int64_t codelen = utf8_lengths[c>>4];
if(codelen == 0)
return 0;
//"invalid UTF-8 stream";
tmp = c&byte_masks[codelen];
for(SQInteger n = 0; n < codelen-1; n++) {
for(int64_t n = 0; n < codelen-1; n++) {
tmp<<=6;
READ(iobuffer);
tmp |= inchar & 0x3F;
@ -312,18 +312,18 @@ static SQInteger _io_file_lexfeed_UTF8(SQUserPointer iobuf)
}
#endif
static SQInteger _io_file_lexfeed_UCS2_LE(SQUserPointer iobuf)
static int64_t _io_file_lexfeed_UCS2_LE(SQUserPointer iobuf)
{
SQInteger ret;
int64_t ret;
IOBuffer *iobuffer = (IOBuffer *)iobuf;
if( (ret = _read_two_bytes(iobuffer)) > 0 )
return ret;
return 0;
}
static SQInteger _io_file_lexfeed_UCS2_BE(SQUserPointer iobuf)
static int64_t _io_file_lexfeed_UCS2_BE(SQUserPointer iobuf)
{
SQInteger c;
int64_t c;
IOBuffer *iobuffer = (IOBuffer *)iobuf;
if( (c = _read_two_bytes(iobuffer)) > 0 ) {
c = ((c>>8)&0x00FF)| ((c<<8)&0xFF00);
@ -332,14 +332,14 @@ static SQInteger _io_file_lexfeed_UCS2_BE(SQUserPointer iobuf)
return 0;
}
SQInteger file_read(SQUserPointer file,SQUserPointer buf,SQInteger size)
int64_t file_read(SQUserPointer file,SQUserPointer buf,int64_t size)
{
SQInteger ret;
int64_t ret;
if( ( ret = sqstd_fread(buf,1,size,(SQFILE)file ))!=0 )return ret;
return -1;
}
SQInteger file_write(SQUserPointer file,SQUserPointer p,SQInteger size)
int64_t file_write(SQUserPointer file,SQUserPointer p,int64_t size)
{
return sqstd_fwrite(p,1,size,(SQFILE)file);
}
@ -348,7 +348,7 @@ SQRESULT sqstd_loadfile(HRABBITVM v,const SQChar *filename,SQBool printerror)
{
SQFILE file = sqstd_fopen(filename,_SC("rb"));
SQInteger ret;
int64_t ret;
unsigned short us;
unsigned char uc;
SQLEXREADFUNC func = _io_file_lexfeed_PLAIN;
@ -433,7 +433,7 @@ SQRESULT sqstd_writeclosuretofile(HRABBITVM v,const SQChar *filename)
return SQ_ERROR; //forward the error
}
SQInteger _g_io_loadfile(HRABBITVM v)
int64_t _g_io_loadfile(HRABBITVM v)
{
const SQChar *filename;
SQBool printerror = SQFalse;
@ -446,7 +446,7 @@ SQInteger _g_io_loadfile(HRABBITVM v)
return SQ_ERROR; //propagates the error
}
SQInteger _g_io_writeclosuretofile(HRABBITVM v)
int64_t _g_io_writeclosuretofile(HRABBITVM v)
{
const SQChar *filename;
sq_getstring(v,2,&filename);
@ -455,7 +455,7 @@ SQInteger _g_io_writeclosuretofile(HRABBITVM v)
return SQ_ERROR; //propagates the error
}
SQInteger _g_io_dofile(HRABBITVM v)
int64_t _g_io_dofile(HRABBITVM v)
{
const SQChar *filename;
SQBool printerror = SQFalse;
@ -479,7 +479,7 @@ static const SQRegFunction iolib_funcs[]={
SQRESULT sqstd_register_iolib(HRABBITVM v)
{
SQInteger top = sq_gettop(v);
int64_t top = sq_gettop(v);
//create delegate
declare_stream(v,_SC("file"),(SQUserPointer)SQSTD_FILE_TYPE_TAG,_SC("std_file"),_file_methods,iolib_funcs);
sq_pushstring(v,_SC("stdout"),-1);

View File

@ -11,12 +11,12 @@
struct SQStream {
virtual ~SQStream() {}
virtual SQInteger Read(void *buffer, SQInteger size) = 0;
virtual SQInteger Write(void *buffer, SQInteger size) = 0;
virtual SQInteger Flush() = 0;
virtual SQInteger Tell() = 0;
virtual SQInteger Len() = 0;
virtual SQInteger Seek(SQInteger offset, SQInteger origin) = 0;
virtual int64_t Read(void *buffer, int64_t size) = 0;
virtual int64_t Write(void *buffer, int64_t size) = 0;
virtual int64_t Flush() = 0;
virtual int64_t Tell() = 0;
virtual int64_t Len() = 0;
virtual int64_t Seek(int64_t offset, int64_t origin) = 0;
virtual bool IsValid() = 0;
virtual bool EOS() = 0;
};
@ -28,16 +28,16 @@ struct SQStream {
typedef void* SQFILE;
RABBIT_API SQFILE sqstd_fopen(const SQChar *,const SQChar *);
RABBIT_API SQInteger sqstd_fread(SQUserPointer, SQInteger, SQInteger, SQFILE);
RABBIT_API SQInteger sqstd_fwrite(const SQUserPointer, SQInteger, SQInteger, SQFILE);
RABBIT_API SQInteger sqstd_fseek(SQFILE , SQInteger , SQInteger);
RABBIT_API SQInteger sqstd_ftell(SQFILE);
RABBIT_API SQInteger sqstd_fflush(SQFILE);
RABBIT_API SQInteger sqstd_fclose(SQFILE);
RABBIT_API SQInteger sqstd_feof(SQFILE);
RABBIT_API int64_t sqstd_fread(SQUserPointer, int64_t, int64_t, SQFILE);
RABBIT_API int64_t sqstd_fwrite(const SQUserPointer, int64_t, int64_t, SQFILE);
RABBIT_API int64_t sqstd_fseek(SQFILE , int64_t , int64_t);
RABBIT_API int64_t sqstd_ftell(SQFILE);
RABBIT_API int64_t sqstd_fflush(SQFILE);
RABBIT_API int64_t sqstd_fclose(SQFILE);
RABBIT_API int64_t sqstd_feof(SQFILE);
RABBIT_API SQRESULT sqstd_createfile(HRABBITVM v, SQFILE file,SQBool own);
RABBIT_API SQRESULT sqstd_getfile(HRABBITVM v, SQInteger idx, SQFILE *file);
RABBIT_API SQRESULT sqstd_getfile(HRABBITVM v, int64_t idx, SQFILE *file);
//compiler helpers
RABBIT_API SQRESULT sqstd_loadfile(HRABBITVM v,const SQChar *filename,SQBool printerror);

View File

@ -11,41 +11,41 @@
#include <stdlib.h>
#include <rabbit-std/sqstdmath.hpp>
#define SINGLE_ARG_FUNC(_funcname) static SQInteger math_##_funcname(HRABBITVM v){ \
SQFloat f; \
#define SINGLE_ARG_FUNC(_funcname) static int64_t math_##_funcname(HRABBITVM v){ \
float_t f; \
sq_getfloat(v,2,&f); \
sq_pushfloat(v,(SQFloat)_funcname(f)); \
sq_pushfloat(v,(float_t)_funcname(f)); \
return 1; \
}
#define TWO_ARGS_FUNC(_funcname) static SQInteger math_##_funcname(HRABBITVM v){ \
SQFloat p1,p2; \
#define TWO_ARGS_FUNC(_funcname) static int64_t math_##_funcname(HRABBITVM v){ \
float_t p1,p2; \
sq_getfloat(v,2,&p1); \
sq_getfloat(v,3,&p2); \
sq_pushfloat(v,(SQFloat)_funcname(p1,p2)); \
sq_pushfloat(v,(float_t)_funcname(p1,p2)); \
return 1; \
}
static SQInteger math_srand(HRABBITVM v)
static int64_t math_srand(HRABBITVM v)
{
SQInteger i;
int64_t i;
if(SQ_FAILED(sq_getinteger(v,2,&i)))
return sq_throwerror(v,_SC("invalid param"));
srand((unsigned int)i);
return 0;
}
static SQInteger math_rand(HRABBITVM v)
static int64_t math_rand(HRABBITVM v)
{
sq_pushinteger(v,rand());
return 1;
}
static SQInteger math_abs(HRABBITVM v)
static int64_t math_abs(HRABBITVM v)
{
SQInteger n;
int64_t n;
sq_getinteger(v,2,&n);
sq_pushinteger(v,(SQInteger)abs((int)n));
sq_pushinteger(v,(int64_t)abs((int)n));
return 1;
}
@ -95,7 +95,7 @@ static const SQRegFunction mathlib_funcs[] = {
SQRESULT sqstd_register_mathlib(HRABBITVM v)
{
SQInteger i=0;
int64_t i=0;
while(mathlib_funcs[i].name!=0) {
sq_pushstring(v,mathlib_funcs[i].name,-1);
sq_newclosure(v,mathlib_funcs[i].f,0);
@ -108,7 +108,7 @@ SQRESULT sqstd_register_mathlib(HRABBITVM v)
sq_pushinteger(v,RAND_MAX);
sq_newslot(v,-3,SQFalse);
sq_pushstring(v,_SC("PI"),-1);
sq_pushfloat(v,(SQFloat)M_PI);
sq_pushfloat(v,(float_t)M_PI);
sq_newslot(v,-3,SQFalse);
return SQ_OK;
}

View File

@ -54,30 +54,30 @@ typedef int SQRexNodeType;
typedef struct tagSQRexNode{
SQRexNodeType type;
SQInteger left;
SQInteger right;
SQInteger next;
int64_t left;
int64_t right;
int64_t next;
}SQRexNode;
struct SQRex{
const SQChar *_eol;
const SQChar *_bol;
const SQChar *_p;
SQInteger _first;
SQInteger _op;
int64_t _first;
int64_t _op;
SQRexNode *_nodes;
SQInteger _nallocated;
SQInteger _nsize;
SQInteger _nsubexpr;
int64_t _nallocated;
int64_t _nsize;
int64_t _nsubexpr;
SQRexMatch *_matches;
SQInteger _currsubexp;
int64_t _currsubexp;
void *_jmpbuf;
const SQChar **_error;
};
static SQInteger sqstd_rex_list(SQRex *exp);
static int64_t sqstd_rex_list(SQRex *exp);
static SQInteger sqstd_rex_newnode(SQRex *exp, SQRexNodeType type)
static int64_t sqstd_rex_newnode(SQRex *exp, SQRexNodeType type)
{
SQRexNode n;
n.type = type;
@ -85,13 +85,13 @@ static SQInteger sqstd_rex_newnode(SQRex *exp, SQRexNodeType type)
if(type == OP_EXPR)
n.right = exp->_nsubexpr++;
if(exp->_nallocated < (exp->_nsize + 1)) {
SQInteger oldsize = exp->_nallocated;
int64_t oldsize = exp->_nallocated;
exp->_nallocated *= 2;
exp->_nodes = (SQRexNode *)sq_realloc(exp->_nodes, oldsize * sizeof(SQRexNode) ,exp->_nallocated * sizeof(SQRexNode));
}
exp->_nodes[exp->_nsize++] = n;
SQInteger newid = exp->_nsize - 1;
return (SQInteger)newid;
int64_t newid = exp->_nsize - 1;
return (int64_t)newid;
}
static void sqstd_rex_error(SQRex *exp,const SQChar *error)
@ -100,7 +100,7 @@ static void sqstd_rex_error(SQRex *exp,const SQChar *error)
longjmp(*((jmp_buf*)exp->_jmpbuf),-1);
}
static void sqstd_rex_expect(SQRex *exp, SQInteger n){
static void sqstd_rex_expect(SQRex *exp, int64_t n){
if((*exp->_p) != n)
sqstd_rex_error(exp, _SC("expected paren"));
exp->_p++;
@ -122,14 +122,14 @@ static SQChar sqstd_rex_escapechar(SQRex *exp)
return (*exp->_p++);
}
static SQInteger sqstd_rex_charclass(SQRex *exp,SQInteger classid)
static int64_t sqstd_rex_charclass(SQRex *exp,int64_t classid)
{
SQInteger n = sqstd_rex_newnode(exp,OP_CCLASS);
int64_t n = sqstd_rex_newnode(exp,OP_CCLASS);
exp->_nodes[n].left = classid;
return n;
}
static SQInteger sqstd_rex_charnode(SQRex *exp,SQBool isclass)
static int64_t sqstd_rex_charnode(SQRex *exp,SQBool isclass)
{
SQChar t;
if(*exp->_p == SQREX_SYMBOL_ESCAPE_CHAR) {
@ -155,7 +155,7 @@ static SQInteger sqstd_rex_charnode(SQRex *exp,SQBool isclass)
exp->_p++; //points to the next char to be parsed
if ((!cb) || (!ce)) sqstd_rex_error(exp,_SC("balanced chars expected"));
if ( cb == ce ) sqstd_rex_error(exp,_SC("open/close char can't be the same"));
SQInteger node = sqstd_rex_newnode(exp,OP_MB);
int64_t node = sqstd_rex_newnode(exp,OP_MB);
exp->_nodes[node].left = cb;
exp->_nodes[node].right = ce;
return node;
@ -166,7 +166,7 @@ static SQInteger sqstd_rex_charnode(SQRex *exp,SQBool isclass)
case 'b':
case 'B':
if(!isclass) {
SQInteger node = sqstd_rex_newnode(exp,OP_WB);
int64_t node = sqstd_rex_newnode(exp,OP_WB);
exp->_nodes[node].left = *exp->_p;
exp->_p++;
return node;
@ -183,10 +183,10 @@ static SQInteger sqstd_rex_charnode(SQRex *exp,SQBool isclass)
t = *exp->_p; exp->_p++;
return sqstd_rex_newnode(exp,t);
}
static SQInteger sqstd_rex_class(SQRex *exp)
static int64_t sqstd_rex_class(SQRex *exp)
{
SQInteger ret = -1;
SQInteger first = -1,chain;
int64_t ret = -1;
int64_t first = -1,chain;
if(*exp->_p == SQREX_SYMBOL_BEGINNING_OF_STRING){
ret = sqstd_rex_newnode(exp,OP_NCLASS);
exp->_p++;
@ -196,13 +196,13 @@ static SQInteger sqstd_rex_class(SQRex *exp)
chain = ret;
while(*exp->_p != ']' && exp->_p != exp->_eol) {
if(*exp->_p == '-' && first != -1){
SQInteger r;
int64_t r;
if(*exp->_p++ == ']') sqstd_rex_error(exp,_SC("unfinished range"));
r = sqstd_rex_newnode(exp,OP_RANGE);
if(exp->_nodes[first].type>*exp->_p) sqstd_rex_error(exp,_SC("invalid range"));
if(exp->_nodes[first].type == OP_CCLASS) sqstd_rex_error(exp,_SC("cannot use character classes in ranges"));
exp->_nodes[r].left = exp->_nodes[first].type;
SQInteger t = sqstd_rex_escapechar(exp);
int64_t t = sqstd_rex_escapechar(exp);
exp->_nodes[r].right = t;
exp->_nodes[chain].next = r;
chain = r;
@ -210,7 +210,7 @@ static SQInteger sqstd_rex_class(SQRex *exp)
}
else{
if(first!=-1){
SQInteger c = first;
int64_t c = first;
exp->_nodes[chain].next = c;
chain = c;
first = sqstd_rex_charnode(exp,SQTrue);
@ -221,7 +221,7 @@ static SQInteger sqstd_rex_class(SQRex *exp)
}
}
if(first!=-1){
SQInteger c = first;
int64_t c = first;
exp->_nodes[chain].next = c;
}
/* hack? */
@ -230,10 +230,10 @@ static SQInteger sqstd_rex_class(SQRex *exp)
return ret;
}
static SQInteger sqstd_rex_parsenumber(SQRex *exp)
static int64_t sqstd_rex_parsenumber(SQRex *exp)
{
SQInteger ret = *exp->_p-'0';
SQInteger positions = 10;
int64_t ret = *exp->_p-'0';
int64_t positions = 10;
exp->_p++;
while(isdigit(*exp->_p)) {
ret = ret*10+(*exp->_p++-'0');
@ -243,13 +243,13 @@ static SQInteger sqstd_rex_parsenumber(SQRex *exp)
return ret;
}
static SQInteger sqstd_rex_element(SQRex *exp)
static int64_t sqstd_rex_element(SQRex *exp)
{
SQInteger ret = -1;
int64_t ret = -1;
switch(*exp->_p)
{
case '(': {
SQInteger expr;
int64_t expr;
exp->_p++;
@ -260,7 +260,7 @@ static SQInteger sqstd_rex_element(SQRex *exp)
}
else
expr = sqstd_rex_newnode(exp,OP_EXPR);
SQInteger newn = sqstd_rex_list(exp);
int64_t newn = sqstd_rex_list(exp);
exp->_nodes[expr].left = newn;
ret = expr;
sqstd_rex_expect(exp,')');
@ -311,23 +311,23 @@ static SQInteger sqstd_rex_element(SQRex *exp)
}
if(isgreedy) {
SQInteger nnode = sqstd_rex_newnode(exp,OP_GREEDY);
int64_t nnode = sqstd_rex_newnode(exp,OP_GREEDY);
exp->_nodes[nnode].left = ret;
exp->_nodes[nnode].right = ((p0)<<16)|p1;
ret = nnode;
}
if((*exp->_p != SQREX_SYMBOL_BRANCH) && (*exp->_p != ')') && (*exp->_p != SQREX_SYMBOL_GREEDY_ZERO_OR_MORE) && (*exp->_p != SQREX_SYMBOL_GREEDY_ONE_OR_MORE) && (*exp->_p != '\0')) {
SQInteger nnode = sqstd_rex_element(exp);
int64_t nnode = sqstd_rex_element(exp);
exp->_nodes[ret].next = nnode;
}
return ret;
}
static SQInteger sqstd_rex_list(SQRex *exp)
static int64_t sqstd_rex_list(SQRex *exp)
{
SQInteger ret=-1,e;
int64_t ret=-1,e;
if(*exp->_p == SQREX_SYMBOL_BEGINNING_OF_STRING) {
exp->_p++;
ret = sqstd_rex_newnode(exp,OP_BOL);
@ -339,7 +339,7 @@ static SQInteger sqstd_rex_list(SQRex *exp)
else ret = e;
if(*exp->_p == SQREX_SYMBOL_BRANCH) {
SQInteger temp,tright;
int64_t temp,tright;
exp->_p++;
temp = sqstd_rex_newnode(exp,OP_OR);
exp->_nodes[temp].left = ret;
@ -350,7 +350,7 @@ static SQInteger sqstd_rex_list(SQRex *exp)
return ret;
}
static SQBool sqstd_rex_matchcclass(SQInteger cclass,SQChar c)
static SQBool sqstd_rex_matchcclass(int64_t cclass,SQChar c)
{
switch(cclass) {
case 'a': return isalpha(c)?SQTrue:SQFalse;
@ -398,7 +398,7 @@ static const SQChar *sqstd_rex_matchnode(SQRex* exp,SQRexNode *node,const SQChar
case OP_GREEDY: {
//SQRexNode *greedystop = (node->next != -1) ? &exp->_nodes[node->next] : NULL;
SQRexNode *greedystop = NULL;
SQInteger p0 = (node->right >> 16)&0x0000FFFF, p1 = node->right&0x0000FFFF, nmaches = 0;
int64_t p0 = (node->right >> 16)&0x0000FFFF, p1 = node->right&0x0000FFFF, nmaches = 0;
const SQChar *s=str, *good = str;
if(node->next != -1) {
@ -469,13 +469,13 @@ static const SQChar *sqstd_rex_matchnode(SQRex* exp,SQRexNode *node,const SQChar
case OP_NOCAPEXPR:{
SQRexNode *n = &exp->_nodes[node->left];
const SQChar *cur = str;
SQInteger capture = -1;
int64_t capture = -1;
if(node->type != OP_NOCAPEXPR && node->right == exp->_currsubexp) {
capture = exp->_currsubexp;
exp->_matches[capture].begin = cur;
exp->_currsubexp++;
}
SQInteger tempcap = exp->_currsubexp;
int64_t tempcap = exp->_currsubexp;
do {
SQRexNode *subnext = NULL;
if(n->next != -1) {
@ -533,10 +533,10 @@ static const SQChar *sqstd_rex_matchnode(SQRex* exp,SQRexNode *node,const SQChar
return NULL;
case OP_MB:
{
SQInteger cb = node->left; //char that opens a balanced expression
int64_t cb = node->left; //char that opens a balanced expression
if(*str != cb) return NULL; // string doesnt start with open char
SQInteger ce = node->right; //char that closes a balanced expression
SQInteger cont = 1;
int64_t ce = node->right; //char that closes a balanced expression
int64_t cont = 1;
const SQChar *streol = exp->_eol;
while (++str < streol) {
if (*str == ce) {
@ -563,7 +563,7 @@ SQRex *sqstd_rex_compile(const SQChar *pattern,const SQChar **error)
SQRex * volatile exp = (SQRex *)sq_malloc(sizeof(SQRex)); // "volatile" is needed for setjmp()
exp->_eol = exp->_bol = NULL;
exp->_p = pattern;
exp->_nallocated = (SQInteger)scstrlen(pattern) * sizeof(SQChar);
exp->_nallocated = (int64_t)scstrlen(pattern) * sizeof(SQChar);
exp->_nodes = (SQRexNode *)sq_malloc(exp->_nallocated * sizeof(SQRexNode));
exp->_nsize = 0;
exp->_matches = 0;
@ -572,23 +572,23 @@ SQRex *sqstd_rex_compile(const SQChar *pattern,const SQChar **error)
exp->_error = error;
exp->_jmpbuf = sq_malloc(sizeof(jmp_buf));
if(setjmp(*((jmp_buf*)exp->_jmpbuf)) == 0) {
SQInteger res = sqstd_rex_list(exp);
int64_t res = sqstd_rex_list(exp);
exp->_nodes[exp->_first].left = res;
if(*exp->_p!='\0')
sqstd_rex_error(exp,_SC("unexpected character"));
#ifdef _DEBUG
{
SQInteger nsize,i;
int64_t nsize,i;
SQRexNode *t;
nsize = exp->_nsize;
t = &exp->_nodes[0];
scprintf(_SC("\n"));
for(i = 0;i < nsize; i++) {
if(exp->_nodes[i].type>MAX_CHAR)
scprintf(_SC("[%02d] %10s "), (SQInt32)i,g_nnames[exp->_nodes[i].type-MAX_CHAR]);
scprintf(_SC("[%02d] %10s "), (int32_t)i,g_nnames[exp->_nodes[i].type-MAX_CHAR]);
else
scprintf(_SC("[%02d] %10c "), (SQInt32)i,exp->_nodes[i].type);
scprintf(_SC("left %02d right %02d next %02d\n"), (SQInt32)exp->_nodes[i].left, (SQInt32)exp->_nodes[i].right, (SQInt32)exp->_nodes[i].next);
scprintf(_SC("[%02d] %10c "), (int32_t)i,exp->_nodes[i].type);
scprintf(_SC("left %02d right %02d next %02d\n"), (int32_t)exp->_nodes[i].left, (int32_t)exp->_nodes[i].right, (int32_t)exp->_nodes[i].next);
}
scprintf(_SC("\n"));
}
@ -628,7 +628,7 @@ SQBool sqstd_rex_match(SQRex* exp,const SQChar* text)
SQBool sqstd_rex_searchrange(SQRex* exp,const SQChar* text_begin,const SQChar* text_end,const SQChar** out_begin, const SQChar** out_end)
{
const SQChar *cur = NULL;
SQInteger node = exp->_first;
int64_t node = exp->_first;
if(text_begin >= text_end) return SQFalse;
exp->_bol = text_begin;
exp->_eol = text_end;
@ -659,12 +659,12 @@ SQBool sqstd_rex_search(SQRex* exp,const SQChar* text, const SQChar** out_begin,
return sqstd_rex_searchrange(exp,text,text + scstrlen(text),out_begin,out_end);
}
SQInteger sqstd_rex_getsubexpcount(SQRex* exp)
int64_t sqstd_rex_getsubexpcount(SQRex* exp)
{
return exp->_nsubexpr;
}
SQBool sqstd_rex_getsubexp(SQRex* exp, SQInteger n, SQRexMatch *subexp)
SQBool sqstd_rex_getsubexp(SQRex* exp, int64_t n, SQRexMatch *subexp)
{
if( n<0 || n >= exp->_nsubexpr) return SQFalse;
*subexp = exp->_matches[n];

View File

@ -18,16 +18,16 @@
#define SETUP_STREAM(v) \
SQStream *self = NULL; \
if(SQ_FAILED(sq_getinstanceup(v,1,(SQUserPointer*)&self,(SQUserPointer)((SQUnsignedInteger)SQSTD_STREAM_TYPE_TAG)))) \
if(SQ_FAILED(sq_getinstanceup(v,1,(SQUserPointer*)&self,(SQUserPointer)((uint64_t)SQSTD_STREAM_TYPE_TAG)))) \
return sq_throwerror(v,_SC("invalid type tag")); \
if(!self || !self->IsValid()) \
return sq_throwerror(v,_SC("the stream is invalid"));
SQInteger _stream_readblob(HRABBITVM v)
int64_t _stream_readblob(HRABBITVM v)
{
SETUP_STREAM(v);
SQUserPointer data,blobp;
SQInteger size,res;
int64_t size,res;
sq_getinteger(v,2,&size);
if(size > self->Len()) {
size = self->Len();
@ -44,20 +44,20 @@ SQInteger _stream_readblob(HRABBITVM v)
#define SAFE_READN(ptr,len) { \
if(self->Read(ptr,len) != len) return sq_throwerror(v,_SC("io error")); \
}
SQInteger _stream_readn(HRABBITVM v)
int64_t _stream_readn(HRABBITVM v)
{
SETUP_STREAM(v);
SQInteger format;
int64_t format;
sq_getinteger(v, 2, &format);
switch(format) {
case 'l': {
SQInteger i;
int64_t i;
SAFE_READN(&i, sizeof(i));
sq_pushinteger(v, i);
}
break;
case 'i': {
SQInt32 i;
int32_t i;
SAFE_READN(&i, sizeof(i));
sq_pushinteger(v, i);
}
@ -95,7 +95,7 @@ SQInteger _stream_readn(HRABBITVM v)
case 'd': {
double d;
SAFE_READN(&d, sizeof(double));
sq_pushfloat(v, (SQFloat)d);
sq_pushfloat(v, (float_t)d);
}
break;
default:
@ -104,10 +104,10 @@ SQInteger _stream_readn(HRABBITVM v)
return 1;
}
SQInteger _stream_writeblob(HRABBITVM v)
int64_t _stream_writeblob(HRABBITVM v)
{
SQUserPointer data;
SQInteger size;
int64_t size;
SETUP_STREAM(v);
if(SQ_FAILED(sqstd_getblob(v,2,&data)))
return sq_throwerror(v,_SC("invalid parameter"));
@ -118,25 +118,25 @@ SQInteger _stream_writeblob(HRABBITVM v)
return 1;
}
SQInteger _stream_writen(HRABBITVM v)
int64_t _stream_writen(HRABBITVM v)
{
SETUP_STREAM(v);
SQInteger format, ti;
SQFloat tf;
int64_t format, ti;
float_t tf;
sq_getinteger(v, 3, &format);
switch(format) {
case 'l': {
SQInteger i;
int64_t i;
sq_getinteger(v, 2, &ti);
i = ti;
self->Write(&i, sizeof(SQInteger));
self->Write(&i, sizeof(int64_t));
}
break;
case 'i': {
SQInt32 i;
int32_t i;
sq_getinteger(v, 2, &ti);
i = (SQInt32)ti;
self->Write(&i, sizeof(SQInt32));
i = (int32_t)ti;
self->Write(&i, sizeof(int32_t));
}
break;
case 's': {
@ -187,13 +187,13 @@ SQInteger _stream_writen(HRABBITVM v)
return 0;
}
SQInteger _stream_seek(HRABBITVM v)
int64_t _stream_seek(HRABBITVM v)
{
SETUP_STREAM(v);
SQInteger offset, origin = SQ_SEEK_SET;
int64_t offset, origin = SQ_SEEK_SET;
sq_getinteger(v, 2, &offset);
if(sq_gettop(v) > 2) {
SQInteger t;
int64_t t;
sq_getinteger(v, 3, &t);
switch(t) {
case 'b': origin = SQ_SEEK_SET; break;
@ -206,21 +206,21 @@ SQInteger _stream_seek(HRABBITVM v)
return 1;
}
SQInteger _stream_tell(HRABBITVM v)
int64_t _stream_tell(HRABBITVM v)
{
SETUP_STREAM(v);
sq_pushinteger(v, self->Tell());
return 1;
}
SQInteger _stream_len(HRABBITVM v)
int64_t _stream_len(HRABBITVM v)
{
SETUP_STREAM(v);
sq_pushinteger(v, self->Len());
return 1;
}
SQInteger _stream_flush(HRABBITVM v)
int64_t _stream_flush(HRABBITVM v)
{
SETUP_STREAM(v);
if(!self->Flush())
@ -230,7 +230,7 @@ SQInteger _stream_flush(HRABBITVM v)
return 1;
}
SQInteger _stream_eos(HRABBITVM v)
int64_t _stream_eos(HRABBITVM v)
{
SETUP_STREAM(v);
if(self->EOS())
@ -240,7 +240,7 @@ SQInteger _stream_eos(HRABBITVM v)
return 1;
}
SQInteger _stream__cloned(HRABBITVM v)
int64_t _stream__cloned(HRABBITVM v)
{
return sq_throwerror(v,_SC("this object cannot be cloned"));
}
@ -266,8 +266,8 @@ void init_streamclass(HRABBITVM v)
if(SQ_FAILED(sq_get(v,-2))) {
sq_pushstring(v,_SC("std_stream"),-1);
sq_newclass(v,SQFalse);
sq_settypetag(v,-1,(SQUserPointer)((SQUnsignedInteger)SQSTD_STREAM_TYPE_TAG));
SQInteger i = 0;
sq_settypetag(v,-1,(SQUserPointer)((uint64_t)SQSTD_STREAM_TYPE_TAG));
int64_t i = 0;
while(_stream_methods[i].name != 0) {
const SQRegFunction &f = _stream_methods[i];
sq_pushstring(v,f.name,-1);
@ -294,7 +294,7 @@ SQRESULT declare_stream(HRABBITVM v,const SQChar* name,SQUserPointer typetag,con
{
if(sq_gettype(v,-1) != OT_TABLE)
return sq_throwerror(v,_SC("table expected"));
SQInteger top = sq_gettop(v);
int64_t top = sq_gettop(v);
//create delegate
init_streamclass(v);
sq_pushregistrytable(v);
@ -303,7 +303,7 @@ SQRESULT declare_stream(HRABBITVM v,const SQChar* name,SQUserPointer typetag,con
if(SQ_SUCCEEDED(sq_get(v,-3))) {
sq_newclass(v,SQTrue);
sq_settypetag(v,-1,typetag);
SQInteger i = 0;
int64_t i = 0;
while(methods[i].name != 0) {
const SQRegFunction &f = methods[i];
sq_pushstring(v,f.name,-1);

View File

@ -7,16 +7,16 @@
*/
#pragma once
SQInteger _stream_readblob(HRABBITVM v);
SQInteger _stream_readline(HRABBITVM v);
SQInteger _stream_readn(HRABBITVM v);
SQInteger _stream_writeblob(HRABBITVM v);
SQInteger _stream_writen(HRABBITVM v);
SQInteger _stream_seek(HRABBITVM v);
SQInteger _stream_tell(HRABBITVM v);
SQInteger _stream_len(HRABBITVM v);
SQInteger _stream_eos(HRABBITVM v);
SQInteger _stream_flush(HRABBITVM v);
int64_t _stream_readblob(HRABBITVM v);
int64_t _stream_readline(HRABBITVM v);
int64_t _stream_readn(HRABBITVM v);
int64_t _stream_writeblob(HRABBITVM v);
int64_t _stream_writen(HRABBITVM v);
int64_t _stream_seek(HRABBITVM v);
int64_t _stream_tell(HRABBITVM v);
int64_t _stream_len(HRABBITVM v);
int64_t _stream_eos(HRABBITVM v);
int64_t _stream_flush(HRABBITVM v);
#define _DECL_STREAM_FUNC(name,nparams,typecheck) {_SC(#name),_stream_##name,nparams,typecheck}
SQRESULT declare_stream(HRABBITVM v,const SQChar* name,SQUserPointer typetag,const SQChar* reg_name,const SQRegFunction *methods,const SQRegFunction *globals);

View File

@ -26,12 +26,12 @@ static SQBool isfmtchr(SQChar ch)
return SQFalse;
}
static SQInteger validate_format(HRABBITVM v, SQChar *fmt, const SQChar *src, SQInteger n,SQInteger &width)
static int64_t validate_format(HRABBITVM v, SQChar *fmt, const SQChar *src, int64_t n,int64_t &width)
{
SQChar *dummy;
SQChar swidth[MAX_WFORMAT_LEN];
SQInteger wc = 0;
SQInteger start = n;
int64_t wc = 0;
int64_t start = n;
fmt[0] = '%';
while (isfmtchr(src[n])) n++;
while (scisdigit(src[n])) {
@ -71,7 +71,7 @@ static SQInteger validate_format(HRABBITVM v, SQChar *fmt, const SQChar *src, SQ
return n;
}
SQRESULT sqstd_format(HRABBITVM v,SQInteger nformatstringidx,SQInteger *outlen,SQChar **output)
SQRESULT sqstd_format(HRABBITVM v,int64_t nformatstringidx,int64_t *outlen,SQChar **output)
{
const SQChar *format;
SQChar *dest;
@ -80,10 +80,10 @@ SQRESULT sqstd_format(HRABBITVM v,SQInteger nformatstringidx,SQInteger *outlen,S
if (SQ_FAILED(res)) {
return res; // propagate the error
}
SQInteger format_size = sq_getsize(v,nformatstringidx);
SQInteger allocated = (format_size+2)*sizeof(SQChar);
int64_t format_size = sq_getsize(v,nformatstringidx);
int64_t allocated = (format_size+2)*sizeof(SQChar);
dest = sq_getscratchpad(v,allocated);
SQInteger n = 0,i = 0, nparam = nformatstringidx+1, w = 0;
int64_t n = 0,i = 0, nparam = nformatstringidx+1, w = 0;
//while(format[n] != '\0')
while(n < format_size)
{
@ -102,11 +102,11 @@ SQRESULT sqstd_format(HRABBITVM v,SQInteger nformatstringidx,SQInteger *outlen,S
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;
SQInteger valtype = 0;
int64_t addlen = 0;
int64_t valtype = 0;
const SQChar *ts = NULL;
SQInteger ti = 0;
SQFloat tf = 0;
int64_t ti = 0;
float_t tf = 0;
switch(format[n]) {
case 's':
if(SQ_FAILED(sq_getstring(v,nparam,&ts)))
@ -118,7 +118,7 @@ SQRESULT sqstd_format(HRABBITVM v,SQInteger nformatstringidx,SQInteger *outlen,S
#ifdef _SQ64
{
size_t flen = scstrlen(fmt);
SQInteger fpos = flen - 1;
int64_t fpos = flen - 1;
SQChar f = fmt[fpos];
const SQChar *prec = (const SQChar *)_PRINT_INT_PREC;
while(*prec != _SC('\0')) {
@ -160,10 +160,10 @@ SQRESULT sqstd_format(HRABBITVM v,SQInteger nformatstringidx,SQInteger *outlen,S
return SQ_OK;
}
static SQInteger _string_printf(HRABBITVM v)
static int64_t _string_printf(HRABBITVM v)
{
SQChar *dest = NULL;
SQInteger length = 0;
int64_t length = 0;
if(SQ_FAILED(sqstd_format(v,2,&length,&dest)))
return -1;
@ -173,10 +173,10 @@ static SQInteger _string_printf(HRABBITVM v)
return 0;
}
static SQInteger _string_format(HRABBITVM v)
static int64_t _string_format(HRABBITVM v)
{
SQChar *dest = NULL;
SQInteger length = 0;
int64_t length = 0;
if(SQ_FAILED(sqstd_format(v,2,&length,&dest)))
return -1;
sq_pushstring(v,dest,length);
@ -190,7 +190,7 @@ static void __strip_l(const SQChar *str,const SQChar **start)
*start = t;
}
static void __strip_r(const SQChar *str,SQInteger len,const SQChar **end)
static void __strip_r(const SQChar *str,int64_t len,const SQChar **end)
{
if(len == 0) {
*end = str;
@ -201,18 +201,18 @@ static void __strip_r(const SQChar *str,SQInteger len,const SQChar **end)
*end = t + 1;
}
static SQInteger _string_strip(HRABBITVM v)
static int64_t _string_strip(HRABBITVM v)
{
const SQChar *str,*start,*end;
sq_getstring(v,2,&str);
SQInteger len = sq_getsize(v,2);
int64_t len = sq_getsize(v,2);
__strip_l(str,&start);
__strip_r(str,len,&end);
sq_pushstring(v,start,end - start);
return 1;
}
static SQInteger _string_lstrip(HRABBITVM v)
static int64_t _string_lstrip(HRABBITVM v)
{
const SQChar *str,*start;
sq_getstring(v,2,&str);
@ -221,25 +221,25 @@ static SQInteger _string_lstrip(HRABBITVM v)
return 1;
}
static SQInteger _string_rstrip(HRABBITVM v)
static int64_t _string_rstrip(HRABBITVM v)
{
const SQChar *str,*end;
sq_getstring(v,2,&str);
SQInteger len = sq_getsize(v,2);
int64_t len = sq_getsize(v,2);
__strip_r(str,len,&end);
sq_pushstring(v,str,end - str);
return 1;
}
static SQInteger _string_split(HRABBITVM v)
static int64_t _string_split(HRABBITVM v)
{
const SQChar *str,*seps;
SQChar *stemp;
sq_getstring(v,2,&str);
sq_getstring(v,3,&seps);
SQInteger sepsize = sq_getsize(v,3);
int64_t sepsize = sq_getsize(v,3);
if(sepsize == 0) return sq_throwerror(v,_SC("empty separators string"));
SQInteger memsize = (sq_getsize(v,2)+1)*sizeof(SQChar);
int64_t memsize = (sq_getsize(v,2)+1)*sizeof(SQChar);
stemp = sq_getscratchpad(v,memsize);
memcpy(stemp,str,memsize);
SQChar *start = stemp;
@ -248,7 +248,7 @@ static SQInteger _string_split(HRABBITVM v)
while(*end != '\0')
{
SQChar cur = *end;
for(SQInteger i = 0; i < sepsize; i++)
for(int64_t i = 0; i < sepsize; i++)
{
if(cur == seps[i])
{
@ -269,11 +269,11 @@ static SQInteger _string_split(HRABBITVM v)
return 1;
}
static SQInteger _string_escape(HRABBITVM v)
static int64_t _string_escape(HRABBITVM v)
{
const SQChar *str;
SQChar *dest,*resstr;
SQInteger size;
int64_t size;
sq_getstring(v,2,&str);
size = sq_getsize(v,2);
if(size == 0) {
@ -283,20 +283,20 @@ static SQInteger _string_escape(HRABBITVM v)
#ifdef SQUNICODE
#if WCHAR_SIZE == 2
const SQChar *escpat = _SC("\\x%04x");
const SQInteger maxescsize = 6;
const int64_t maxescsize = 6;
#else //WCHAR_SIZE == 4
const SQChar *escpat = _SC("\\x%08x");
const SQInteger maxescsize = 10;
const int64_t maxescsize = 10;
#endif
#else
const SQChar *escpat = _SC("\\x%02x");
const SQInteger maxescsize = 4;
const int64_t maxescsize = 4;
#endif
SQInteger destcharsize = (size * maxescsize); //assumes every char could be escaped
int64_t destcharsize = (size * maxescsize); //assumes every char could be escaped
resstr = dest = (SQChar *)sq_getscratchpad(v,destcharsize * sizeof(SQChar));
SQChar c;
SQChar escch;
SQInteger escaped = 0;
int64_t escaped = 0;
for(int n = 0; n < size; n++){
c = *str++;
escch = 0;
@ -339,13 +339,13 @@ static SQInteger _string_escape(HRABBITVM v)
return 1;
}
static SQInteger _string_startswith(HRABBITVM v)
static int64_t _string_startswith(HRABBITVM v)
{
const SQChar *str,*cmp;
sq_getstring(v,2,&str);
sq_getstring(v,3,&cmp);
SQInteger len = sq_getsize(v,2);
SQInteger cmplen = sq_getsize(v,3);
int64_t len = sq_getsize(v,2);
int64_t cmplen = sq_getsize(v,3);
SQBool ret = SQFalse;
if(cmplen <= len) {
ret = memcmp(str,cmp,sq_rsl(cmplen)) == 0 ? SQTrue : SQFalse;
@ -354,13 +354,13 @@ static SQInteger _string_startswith(HRABBITVM v)
return 1;
}
static SQInteger _string_endswith(HRABBITVM v)
static int64_t _string_endswith(HRABBITVM v)
{
const SQChar *str,*cmp;
sq_getstring(v,2,&str);
sq_getstring(v,3,&cmp);
SQInteger len = sq_getsize(v,2);
SQInteger cmplen = sq_getsize(v,3);
int64_t len = sq_getsize(v,2);
int64_t cmplen = sq_getsize(v,3);
SQBool ret = SQFalse;
if(cmplen <= len) {
ret = memcmp(&str[len - cmplen],cmp,sq_rsl(cmplen)) == 0 ? SQTrue : SQFalse;
@ -373,14 +373,14 @@ static SQInteger _string_endswith(HRABBITVM v)
SQRex *self = NULL; \
sq_getinstanceup(v,1,(SQUserPointer *)&self,0);
static SQInteger _rexobj_releasehook(SQUserPointer p, SQInteger SQ_UNUSED_ARG(size))
static int64_t _rexobj_releasehook(SQUserPointer p, int64_t SQ_UNUSED_ARG(size))
{
SQRex *self = ((SQRex *)p);
sqstd_rex_free(self);
return 1;
}
static SQInteger _regexp_match(HRABBITVM v)
static int64_t _regexp_match(HRABBITVM v)
{
SETUP_REX(v);
const SQChar *str;
@ -405,11 +405,11 @@ static void _addrexmatch(HRABBITVM v,const SQChar *str,const SQChar *begin,const
sq_rawset(v,-3);
}
static SQInteger _regexp_search(HRABBITVM v)
static int64_t _regexp_search(HRABBITVM v)
{
SETUP_REX(v);
const SQChar *str,*begin,*end;
SQInteger start = 0;
int64_t start = 0;
sq_getstring(v,2,&str);
if(sq_gettop(v) > 2) sq_getinteger(v,3,&start);
if(sqstd_rex_search(self,str+start,&begin,&end) == SQTrue) {
@ -419,18 +419,18 @@ static SQInteger _regexp_search(HRABBITVM v)
return 0;
}
static SQInteger _regexp_capture(HRABBITVM v)
static int64_t _regexp_capture(HRABBITVM v)
{
SETUP_REX(v);
const SQChar *str,*begin,*end;
SQInteger start = 0;
int64_t start = 0;
sq_getstring(v,2,&str);
if(sq_gettop(v) > 2) sq_getinteger(v,3,&start);
if(sqstd_rex_search(self,str+start,&begin,&end) == SQTrue) {
SQInteger n = sqstd_rex_getsubexpcount(self);
int64_t n = sqstd_rex_getsubexpcount(self);
SQRexMatch match;
sq_newarray(v,0);
for(SQInteger i = 0;i < n; i++) {
for(int64_t i = 0;i < n; i++) {
sqstd_rex_getsubexp(self,i,&match);
if(match.len > 0)
_addrexmatch(v,str,match.begin,match.begin+match.len);
@ -443,14 +443,14 @@ static SQInteger _regexp_capture(HRABBITVM v)
return 0;
}
static SQInteger _regexp_subexpcount(HRABBITVM v)
static int64_t _regexp_subexpcount(HRABBITVM v)
{
SETUP_REX(v);
sq_pushinteger(v,sqstd_rex_getsubexpcount(self));
return 1;
}
static SQInteger _regexp_constructor(HRABBITVM v)
static int64_t _regexp_constructor(HRABBITVM v)
{
const SQChar *error,*pattern;
sq_getstring(v,2,&pattern);
@ -461,7 +461,7 @@ static SQInteger _regexp_constructor(HRABBITVM v)
return 0;
}
static SQInteger _regexp__typeof(HRABBITVM v)
static int64_t _regexp__typeof(HRABBITVM v)
{
sq_pushstring(v,_SC("regexp"),-1);
return 1;
@ -495,11 +495,11 @@ static const SQRegFunction stringlib_funcs[]={
#undef _DECL_FUNC
SQInteger sqstd_register_stringlib(HRABBITVM v)
int64_t sqstd_register_stringlib(HRABBITVM v)
{
sq_pushstring(v,_SC("regexp"),-1);
sq_newclass(v,SQFalse);
SQInteger i = 0;
int64_t i = 0;
while(rexobj_funcs[i].name != 0) {
const SQRegFunction &f = rexobj_funcs[i];
sq_pushstring(v,f.name,-1);

View File

@ -12,7 +12,7 @@ typedef struct SQRex SQRex;
typedef struct {
const SQChar *begin;
SQInteger len;
int64_t len;
} SQRexMatch;
RABBIT_API SQRex *sqstd_rex_compile(const SQChar *pattern,const SQChar **error);
@ -20,10 +20,10 @@ RABBIT_API void sqstd_rex_free(SQRex *exp);
RABBIT_API SQBool sqstd_rex_match(SQRex* exp,const SQChar* text);
RABBIT_API SQBool sqstd_rex_search(SQRex* exp,const SQChar* text, const SQChar** out_begin, const SQChar** out_end);
RABBIT_API SQBool sqstd_rex_searchrange(SQRex* exp,const SQChar* text_begin,const SQChar* text_end,const SQChar** out_begin, const SQChar** out_end);
RABBIT_API SQInteger sqstd_rex_getsubexpcount(SQRex* exp);
RABBIT_API SQBool sqstd_rex_getsubexp(SQRex* exp, SQInteger n, SQRexMatch *subexp);
RABBIT_API int64_t sqstd_rex_getsubexpcount(SQRex* exp);
RABBIT_API SQBool sqstd_rex_getsubexp(SQRex* exp, int64_t n, SQRexMatch *subexp);
RABBIT_API SQRESULT sqstd_format(HRABBITVM v,SQInteger nformatstringidx,SQInteger *outlen,SQChar **output);
RABBIT_API SQRESULT sqstd_format(HRABBITVM v,int64_t nformatstringidx,int64_t *outlen,SQChar **output);
RABBIT_API SQRESULT sqstd_register_stringlib(HRABBITVM v);

View File

@ -27,7 +27,7 @@
#define screname rename
#endif
static SQInteger _system_getenv(HRABBITVM v)
static int64_t _system_getenv(HRABBITVM v)
{
const SQChar *s;
if(SQ_SUCCEEDED(sq_getstring(v,2,&s))){
@ -38,7 +38,7 @@ static SQInteger _system_getenv(HRABBITVM v)
}
static SQInteger _system_system(HRABBITVM v)
static int64_t _system_system(HRABBITVM v)
{
const SQChar *s;
if(SQ_SUCCEEDED(sq_getstring(v,2,&s))){
@ -49,20 +49,20 @@ static SQInteger _system_system(HRABBITVM v)
}
static SQInteger _system_clock(HRABBITVM v)
static int64_t _system_clock(HRABBITVM v)
{
sq_pushfloat(v,((SQFloat)clock())/(SQFloat)CLOCKS_PER_SEC);
sq_pushfloat(v,((float_t)clock())/(float_t)CLOCKS_PER_SEC);
return 1;
}
static SQInteger _system_time(HRABBITVM v)
static int64_t _system_time(HRABBITVM v)
{
SQInteger t = (SQInteger)time(NULL);
int64_t t = (int64_t)time(NULL);
sq_pushinteger(v,t);
return 1;
}
static SQInteger _system_remove(HRABBITVM v)
static int64_t _system_remove(HRABBITVM v)
{
const SQChar *s;
sq_getstring(v,2,&s);
@ -71,7 +71,7 @@ static SQInteger _system_remove(HRABBITVM v)
return 0;
}
static SQInteger _system_rename(HRABBITVM v)
static int64_t _system_rename(HRABBITVM v)
{
const SQChar *oldn,*newn;
sq_getstring(v,2,&oldn);
@ -81,23 +81,23 @@ static SQInteger _system_rename(HRABBITVM v)
return 0;
}
static void _set_integer_slot(HRABBITVM v,const SQChar *name,SQInteger val)
static void _set_integer_slot(HRABBITVM v,const SQChar *name,int64_t val)
{
sq_pushstring(v,name,-1);
sq_pushinteger(v,val);
sq_rawset(v,-3);
}
static SQInteger _system_date(HRABBITVM v)
static int64_t _system_date(HRABBITVM v)
{
time_t t;
SQInteger it;
SQInteger format = 'l';
int64_t it;
int64_t format = 'l';
if(sq_gettop(v) > 1) {
sq_getinteger(v,2,&it);
t = it;
if(sq_gettop(v) > 2) {
sq_getinteger(v,3,(SQInteger*)&format);
sq_getinteger(v,3,(int64_t*)&format);
}
}
else {
@ -137,9 +137,9 @@ static const SQRegFunction systemlib_funcs[]={
};
#undef _DECL_FUNC
SQInteger sqstd_register_systemlib(HRABBITVM v)
int64_t sqstd_register_systemlib(HRABBITVM v)
{
SQInteger i=0;
int64_t i=0;
while(systemlib_funcs[i].name!=0)
{
sq_pushstring(v,systemlib_funcs[i].name,-1);

View File

@ -7,4 +7,4 @@
*/
#pragma once
RABBIT_API SQInteger sqstd_register_systemlib(HRABBITVM v);
RABBIT_API int64_t sqstd_register_systemlib(HRABBITVM v);

View File

@ -17,7 +17,7 @@ namespace rabbit {
~UserData() {
SetDelegate(NULL);
}
static UserData* Create(SQSharedState *ss, SQInteger size) {
static UserData* Create(SQSharedState *ss, int64_t size) {
UserData* ud = (UserData*)SQ_MALLOC(sq_aligning(sizeof(UserData))+size);
new (ud) UserData(ss);
ud->m_size = size;
@ -28,11 +28,11 @@ namespace rabbit {
if (m_hook) {
m_hook((SQUserPointer)sq_aligning(this + 1),m_size);
}
SQInteger tsize = m_size;
int64_t tsize = m_size;
this->~UserData();
SQ_FREE(this, sq_aligning(sizeof(UserData)) + tsize);
}
const SQInteger& getSize() const {
const int64_t& getSize() const {
return m_size;
}
const SQUserPointer& getTypeTag() const {
@ -48,7 +48,7 @@ namespace rabbit {
m_hook = _value;
}
protected:
SQInteger m_size;
int64_t m_size;
SQRELEASEHOOK m_hook;
SQUserPointer m_typetag;
};

View File

@ -11,10 +11,6 @@
#include _SQ_CONFIG_INCLUDE
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifndef RABBIT_API
#define RABBIT_API extern
#endif
@ -127,8 +123,8 @@ typedef union tagSQObjectValue
struct SQNativeClosure *pNativeClosure;
struct SQString *pString;
struct rabbit::UserData *pUserData;
SQInteger nInteger;
SQFloat fFloat;
int64_t nInteger;
float_t fFloat;
SQUserPointer pUserPointer;
struct SQFunctionProto *pFunctionProto;
struct SQRefCounted *pRefCounted;
@ -149,32 +145,32 @@ typedef struct tagSQObject
typedef struct tagSQMemberHandle{
SQBool _static;
SQInteger _index;
int64_t _index;
}SQMemberHandle;
typedef struct tagSQStackInfos{
const SQChar* funcname;
const SQChar* source;
SQInteger line;
int64_t line;
}SQStackInfos;
typedef struct SQVM* HRABBITVM;
typedef SQObject HSQOBJECT;
typedef SQMemberHandle HSQMEMBERHANDLE;
typedef SQInteger (*SQFUNCTION)(HRABBITVM);
typedef SQInteger (*SQRELEASEHOOK)(SQUserPointer,SQInteger size);
typedef void (*SQCOMPILERERROR)(HRABBITVM,const SQChar * /*desc*/,const SQChar * /*source*/,SQInteger /*line*/,SQInteger /*column*/);
typedef int64_t (*SQFUNCTION)(HRABBITVM);
typedef int64_t (*SQRELEASEHOOK)(SQUserPointer,int64_t size);
typedef void (*SQCOMPILERERROR)(HRABBITVM,const SQChar * /*desc*/,const SQChar * /*source*/,int64_t /*line*/,int64_t /*column*/);
typedef void (*SQPRINTFUNCTION)(HRABBITVM,const SQChar * ,...);
typedef void (*SQDEBUGHOOK)(HRABBITVM /*v*/, SQInteger /*type*/, const SQChar * /*sourcename*/, SQInteger /*line*/, const SQChar * /*funcname*/);
typedef SQInteger (*SQWRITEFUNC)(SQUserPointer,SQUserPointer,SQInteger);
typedef SQInteger (*SQREADFUNC)(SQUserPointer,SQUserPointer,SQInteger);
typedef void (*SQDEBUGHOOK)(HRABBITVM /*v*/, int64_t /*type*/, const SQChar * /*sourcename*/, int64_t /*line*/, const SQChar * /*funcname*/);
typedef int64_t (*SQWRITEFUNC)(SQUserPointer,SQUserPointer,int64_t);
typedef int64_t (*SQREADFUNC)(SQUserPointer,SQUserPointer,int64_t);
typedef SQInteger (*SQLEXREADFUNC)(SQUserPointer);
typedef int64_t (*SQLEXREADFUNC)(SQUserPointer);
typedef struct tagSQRegFunction{
const SQChar *name;
SQFUNCTION f;
SQInteger nparamscheck;
int64_t nparamscheck;
const SQChar *typemask;
}SQRegFunction;
@ -182,12 +178,12 @@ typedef struct tagSQFunctionInfo {
SQUserPointer funcid;
const SQChar *name;
const SQChar *source;
SQInteger line;
int64_t line;
}SQFunctionInfo;
/*vm*/
RABBIT_API HRABBITVM sq_open(SQInteger initialstacksize);
RABBIT_API HRABBITVM sq_newthread(HRABBITVM friendvm, SQInteger initialstacksize);
RABBIT_API HRABBITVM sq_open(int64_t initialstacksize);
RABBIT_API HRABBITVM sq_newthread(HRABBITVM friendvm, int64_t initialstacksize);
RABBIT_API void sq_seterrorhandler(HRABBITVM v);
RABBIT_API void sq_close(HRABBITVM v);
RABBIT_API void sq_setforeignptr(HRABBITVM v,SQUserPointer p);
@ -203,82 +199,82 @@ RABBIT_API SQPRINTFUNCTION sq_getprintfunc(HRABBITVM v);
RABBIT_API SQPRINTFUNCTION sq_geterrorfunc(HRABBITVM v);
RABBIT_API SQRESULT sq_suspendvm(HRABBITVM v);
RABBIT_API SQRESULT sq_wakeupvm(HRABBITVM v,SQBool resumedret,SQBool retval,SQBool raiseerror,SQBool throwerror);
RABBIT_API SQInteger sq_getvmstate(HRABBITVM v);
RABBIT_API SQInteger sq_getversion();
RABBIT_API int64_t sq_getvmstate(HRABBITVM v);
RABBIT_API int64_t sq_getversion();
/*compiler*/
RABBIT_API SQRESULT sq_compile(HRABBITVM v,SQLEXREADFUNC read,SQUserPointer p,const SQChar *sourcename,SQBool raiseerror);
RABBIT_API SQRESULT sq_compilebuffer(HRABBITVM v,const SQChar *s,SQInteger size,const SQChar *sourcename,SQBool raiseerror);
RABBIT_API SQRESULT sq_compilebuffer(HRABBITVM v,const SQChar *s,int64_t size,const SQChar *sourcename,SQBool raiseerror);
RABBIT_API void sq_enabledebuginfo(HRABBITVM v, SQBool enable);
RABBIT_API void sq_notifyallexceptions(HRABBITVM v, SQBool enable);
RABBIT_API void sq_setcompilererrorhandler(HRABBITVM v,SQCOMPILERERROR f);
/*stack operations*/
RABBIT_API void sq_push(HRABBITVM v,SQInteger idx);
RABBIT_API void sq_pop(HRABBITVM v,SQInteger nelemstopop);
RABBIT_API void sq_push(HRABBITVM v,int64_t idx);
RABBIT_API void sq_pop(HRABBITVM v,int64_t nelemstopop);
RABBIT_API void sq_poptop(HRABBITVM v);
RABBIT_API void sq_remove(HRABBITVM v,SQInteger idx);
RABBIT_API SQInteger sq_gettop(HRABBITVM v);
RABBIT_API void sq_settop(HRABBITVM v,SQInteger newtop);
RABBIT_API SQRESULT sq_reservestack(HRABBITVM v,SQInteger nsize);
RABBIT_API SQInteger sq_cmp(HRABBITVM v);
RABBIT_API void sq_move(HRABBITVM dest,HRABBITVM src,SQInteger idx);
RABBIT_API void sq_remove(HRABBITVM v,int64_t idx);
RABBIT_API int64_t sq_gettop(HRABBITVM v);
RABBIT_API void sq_settop(HRABBITVM v,int64_t newtop);
RABBIT_API SQRESULT sq_reservestack(HRABBITVM v,int64_t nsize);
RABBIT_API int64_t sq_cmp(HRABBITVM v);
RABBIT_API void sq_move(HRABBITVM dest,HRABBITVM src,int64_t idx);
/*object creation handling*/
RABBIT_API SQUserPointer sq_newuserdata(HRABBITVM v,SQUnsignedInteger size);
RABBIT_API SQUserPointer sq_newuserdata(HRABBITVM v,uint64_t size);
RABBIT_API void sq_newtable(HRABBITVM v);
RABBIT_API void sq_newtableex(HRABBITVM v,SQInteger initialcapacity);
RABBIT_API void sq_newarray(HRABBITVM v,SQInteger size);
RABBIT_API void sq_newclosure(HRABBITVM v,SQFUNCTION func,SQUnsignedInteger nfreevars);
RABBIT_API SQRESULT sq_setparamscheck(HRABBITVM v,SQInteger nparamscheck,const SQChar *typemask);
RABBIT_API SQRESULT sq_bindenv(HRABBITVM v,SQInteger idx);
RABBIT_API SQRESULT sq_setclosureroot(HRABBITVM v,SQInteger idx);
RABBIT_API SQRESULT sq_getclosureroot(HRABBITVM v,SQInteger idx);
RABBIT_API void sq_pushstring(HRABBITVM v,const SQChar *s,SQInteger len);
RABBIT_API void sq_pushfloat(HRABBITVM v,SQFloat f);
RABBIT_API void sq_pushinteger(HRABBITVM v,SQInteger n);
RABBIT_API void sq_newtableex(HRABBITVM v,int64_t initialcapacity);
RABBIT_API void sq_newarray(HRABBITVM v,int64_t size);
RABBIT_API void sq_newclosure(HRABBITVM v,SQFUNCTION func,uint64_t nfreevars);
RABBIT_API SQRESULT sq_setparamscheck(HRABBITVM v,int64_t nparamscheck,const SQChar *typemask);
RABBIT_API SQRESULT sq_bindenv(HRABBITVM v,int64_t idx);
RABBIT_API SQRESULT sq_setclosureroot(HRABBITVM v,int64_t idx);
RABBIT_API SQRESULT sq_getclosureroot(HRABBITVM v,int64_t idx);
RABBIT_API void sq_pushstring(HRABBITVM v,const SQChar *s,int64_t len);
RABBIT_API void sq_pushfloat(HRABBITVM v,float_t f);
RABBIT_API void sq_pushinteger(HRABBITVM v,int64_t n);
RABBIT_API void sq_pushbool(HRABBITVM v,SQBool b);
RABBIT_API void sq_pushuserpointer(HRABBITVM v,SQUserPointer p);
RABBIT_API void sq_pushnull(HRABBITVM v);
RABBIT_API void sq_pushthread(HRABBITVM v, HRABBITVM thread);
RABBIT_API SQObjectType sq_gettype(HRABBITVM v,SQInteger idx);
RABBIT_API SQRESULT sq_typeof(HRABBITVM v,SQInteger idx);
RABBIT_API SQInteger sq_getsize(HRABBITVM v,SQInteger idx);
RABBIT_API SQHash sq_gethash(HRABBITVM v, SQInteger idx);
RABBIT_API SQRESULT sq_getbase(HRABBITVM v,SQInteger idx);
RABBIT_API SQObjectType sq_gettype(HRABBITVM v,int64_t idx);
RABBIT_API SQRESULT sq_typeof(HRABBITVM v,int64_t idx);
RABBIT_API int64_t sq_getsize(HRABBITVM v,int64_t idx);
RABBIT_API SQHash sq_gethash(HRABBITVM v, int64_t idx);
RABBIT_API SQRESULT sq_getbase(HRABBITVM v,int64_t idx);
RABBIT_API SQBool sq_instanceof(HRABBITVM v);
RABBIT_API SQRESULT sq_tostring(HRABBITVM v,SQInteger idx);
RABBIT_API void sq_tobool(HRABBITVM v, SQInteger idx, SQBool *b);
RABBIT_API SQRESULT sq_getstringandsize(HRABBITVM v,SQInteger idx,const SQChar **c,SQInteger *size);
RABBIT_API SQRESULT sq_getstring(HRABBITVM v,SQInteger idx,const SQChar **c);
RABBIT_API SQRESULT sq_getinteger(HRABBITVM v,SQInteger idx,SQInteger *i);
RABBIT_API SQRESULT sq_getfloat(HRABBITVM v,SQInteger idx,SQFloat *f);
RABBIT_API SQRESULT sq_getbool(HRABBITVM v,SQInteger idx,SQBool *b);
RABBIT_API SQRESULT sq_getthread(HRABBITVM v,SQInteger idx,HRABBITVM *thread);
RABBIT_API SQRESULT sq_getuserpointer(HRABBITVM v,SQInteger idx,SQUserPointer *p);
RABBIT_API SQRESULT sq_getuserdata(HRABBITVM v,SQInteger idx,SQUserPointer *p,SQUserPointer *typetag);
RABBIT_API SQRESULT sq_settypetag(HRABBITVM v,SQInteger idx,SQUserPointer typetag);
RABBIT_API SQRESULT sq_gettypetag(HRABBITVM v,SQInteger idx,SQUserPointer *typetag);
RABBIT_API void sq_setreleasehook(HRABBITVM v,SQInteger idx,SQRELEASEHOOK hook);
RABBIT_API SQRELEASEHOOK sq_getreleasehook(HRABBITVM v,SQInteger idx);
RABBIT_API SQChar *sq_getscratchpad(HRABBITVM v,SQInteger minsize);
RABBIT_API SQRESULT sq_getfunctioninfo(HRABBITVM v,SQInteger level,SQFunctionInfo *fi);
RABBIT_API SQRESULT sq_getclosureinfo(HRABBITVM v,SQInteger idx,SQUnsignedInteger *nparams,SQUnsignedInteger *nfreevars);
RABBIT_API SQRESULT sq_getclosurename(HRABBITVM v,SQInteger idx);
RABBIT_API SQRESULT sq_setnativeclosurename(HRABBITVM v,SQInteger idx,const SQChar *name);
RABBIT_API SQRESULT sq_setinstanceup(HRABBITVM v, SQInteger idx, SQUserPointer p);
RABBIT_API SQRESULT sq_getinstanceup(HRABBITVM v, SQInteger idx, SQUserPointer *p,SQUserPointer typetag);
RABBIT_API SQRESULT sq_setclassudsize(HRABBITVM v, SQInteger idx, SQInteger udsize);
RABBIT_API SQRESULT sq_tostring(HRABBITVM v,int64_t idx);
RABBIT_API void sq_tobool(HRABBITVM v, int64_t idx, SQBool *b);
RABBIT_API SQRESULT sq_getstringandsize(HRABBITVM v,int64_t idx,const SQChar **c,int64_t *size);
RABBIT_API SQRESULT sq_getstring(HRABBITVM v,int64_t idx,const SQChar **c);
RABBIT_API SQRESULT sq_getinteger(HRABBITVM v,int64_t idx,int64_t *i);
RABBIT_API SQRESULT sq_getfloat(HRABBITVM v,int64_t idx,float_t *f);
RABBIT_API SQRESULT sq_getbool(HRABBITVM v,int64_t idx,SQBool *b);
RABBIT_API SQRESULT sq_getthread(HRABBITVM v,int64_t idx,HRABBITVM *thread);
RABBIT_API SQRESULT sq_getuserpointer(HRABBITVM v,int64_t idx,SQUserPointer *p);
RABBIT_API SQRESULT sq_getuserdata(HRABBITVM v,int64_t idx,SQUserPointer *p,SQUserPointer *typetag);
RABBIT_API SQRESULT sq_settypetag(HRABBITVM v,int64_t idx,SQUserPointer typetag);
RABBIT_API SQRESULT sq_gettypetag(HRABBITVM v,int64_t idx,SQUserPointer *typetag);
RABBIT_API void sq_setreleasehook(HRABBITVM v,int64_t idx,SQRELEASEHOOK hook);
RABBIT_API SQRELEASEHOOK sq_getreleasehook(HRABBITVM v,int64_t idx);
RABBIT_API SQChar *sq_getscratchpad(HRABBITVM v,int64_t minsize);
RABBIT_API SQRESULT sq_getfunctioninfo(HRABBITVM v,int64_t level,SQFunctionInfo *fi);
RABBIT_API SQRESULT sq_getclosureinfo(HRABBITVM v,int64_t idx,uint64_t *nparams,uint64_t *nfreevars);
RABBIT_API SQRESULT sq_getclosurename(HRABBITVM v,int64_t idx);
RABBIT_API SQRESULT sq_setnativeclosurename(HRABBITVM v,int64_t idx,const SQChar *name);
RABBIT_API SQRESULT sq_setinstanceup(HRABBITVM v, int64_t idx, SQUserPointer p);
RABBIT_API SQRESULT sq_getinstanceup(HRABBITVM v, int64_t idx, SQUserPointer *p,SQUserPointer typetag);
RABBIT_API SQRESULT sq_setclassudsize(HRABBITVM v, int64_t idx, int64_t udsize);
RABBIT_API SQRESULT sq_newclass(HRABBITVM v,SQBool hasbase);
RABBIT_API SQRESULT sq_createinstance(HRABBITVM v,SQInteger idx);
RABBIT_API SQRESULT sq_setattributes(HRABBITVM v,SQInteger idx);
RABBIT_API SQRESULT sq_getattributes(HRABBITVM v,SQInteger idx);
RABBIT_API SQRESULT sq_getclass(HRABBITVM v,SQInteger idx);
RABBIT_API void sq_weakref(HRABBITVM v,SQInteger idx);
RABBIT_API SQRESULT sq_createinstance(HRABBITVM v,int64_t idx);
RABBIT_API SQRESULT sq_setattributes(HRABBITVM v,int64_t idx);
RABBIT_API SQRESULT sq_getattributes(HRABBITVM v,int64_t idx);
RABBIT_API SQRESULT sq_getclass(HRABBITVM v,int64_t idx);
RABBIT_API void sq_weakref(HRABBITVM v,int64_t idx);
RABBIT_API SQRESULT sq_getdefaultdelegate(HRABBITVM v,SQObjectType t);
RABBIT_API SQRESULT sq_getmemberhandle(HRABBITVM v,SQInteger idx,HSQMEMBERHANDLE *handle);
RABBIT_API SQRESULT sq_getbyhandle(HRABBITVM v,SQInteger idx,const HSQMEMBERHANDLE *handle);
RABBIT_API SQRESULT sq_setbyhandle(HRABBITVM v,SQInteger idx,const HSQMEMBERHANDLE *handle);
RABBIT_API SQRESULT sq_getmemberhandle(HRABBITVM v,int64_t idx,HSQMEMBERHANDLE *handle);
RABBIT_API SQRESULT sq_getbyhandle(HRABBITVM v,int64_t idx,const HSQMEMBERHANDLE *handle);
RABBIT_API SQRESULT sq_setbyhandle(HRABBITVM v,int64_t idx,const HSQMEMBERHANDLE *handle);
/*object manipulation*/
RABBIT_API void sq_pushroottable(HRABBITVM v);
@ -286,59 +282,59 @@ RABBIT_API void sq_pushregistrytable(HRABBITVM v);
RABBIT_API void sq_pushconsttable(HRABBITVM v);
RABBIT_API SQRESULT sq_setroottable(HRABBITVM v);
RABBIT_API SQRESULT sq_setconsttable(HRABBITVM v);
RABBIT_API SQRESULT sq_newslot(HRABBITVM v, SQInteger idx, SQBool bstatic);
RABBIT_API SQRESULT sq_deleteslot(HRABBITVM v,SQInteger idx,SQBool pushval);
RABBIT_API SQRESULT sq_set(HRABBITVM v,SQInteger idx);
RABBIT_API SQRESULT sq_get(HRABBITVM v,SQInteger idx);
RABBIT_API SQRESULT sq_rawget(HRABBITVM v,SQInteger idx);
RABBIT_API SQRESULT sq_rawset(HRABBITVM v,SQInteger idx);
RABBIT_API SQRESULT sq_rawdeleteslot(HRABBITVM v,SQInteger idx,SQBool pushval);
RABBIT_API SQRESULT sq_newmember(HRABBITVM v,SQInteger idx,SQBool bstatic);
RABBIT_API SQRESULT sq_rawnewmember(HRABBITVM v,SQInteger idx,SQBool bstatic);
RABBIT_API SQRESULT sq_arrayappend(HRABBITVM v,SQInteger idx);
RABBIT_API SQRESULT sq_arraypop(HRABBITVM v,SQInteger idx,SQBool pushval);
RABBIT_API SQRESULT sq_arrayresize(HRABBITVM v,SQInteger idx,SQInteger newsize);
RABBIT_API SQRESULT sq_arrayreverse(HRABBITVM v,SQInteger idx);
RABBIT_API SQRESULT sq_arrayremove(HRABBITVM v,SQInteger idx,SQInteger itemidx);
RABBIT_API SQRESULT sq_arrayinsert(HRABBITVM v,SQInteger idx,SQInteger destpos);
RABBIT_API SQRESULT sq_setdelegate(HRABBITVM v,SQInteger idx);
RABBIT_API SQRESULT sq_getdelegate(HRABBITVM v,SQInteger idx);
RABBIT_API SQRESULT sq_clone(HRABBITVM v,SQInteger idx);
RABBIT_API SQRESULT sq_setfreevariable(HRABBITVM v,SQInteger idx,SQUnsignedInteger nval);
RABBIT_API SQRESULT sq_next(HRABBITVM v,SQInteger idx);
RABBIT_API SQRESULT sq_getweakrefval(HRABBITVM v,SQInteger idx);
RABBIT_API SQRESULT sq_clear(HRABBITVM v,SQInteger idx);
RABBIT_API SQRESULT sq_newslot(HRABBITVM v, int64_t idx, SQBool bstatic);
RABBIT_API SQRESULT sq_deleteslot(HRABBITVM v,int64_t idx,SQBool pushval);
RABBIT_API SQRESULT sq_set(HRABBITVM v,int64_t idx);
RABBIT_API SQRESULT sq_get(HRABBITVM v,int64_t idx);
RABBIT_API SQRESULT sq_rawget(HRABBITVM v,int64_t idx);
RABBIT_API SQRESULT sq_rawset(HRABBITVM v,int64_t idx);
RABBIT_API SQRESULT sq_rawdeleteslot(HRABBITVM v,int64_t idx,SQBool pushval);
RABBIT_API SQRESULT sq_newmember(HRABBITVM v,int64_t idx,SQBool bstatic);
RABBIT_API SQRESULT sq_rawnewmember(HRABBITVM v,int64_t idx,SQBool bstatic);
RABBIT_API SQRESULT sq_arrayappend(HRABBITVM v,int64_t idx);
RABBIT_API SQRESULT sq_arraypop(HRABBITVM v,int64_t idx,SQBool pushval);
RABBIT_API SQRESULT sq_arrayresize(HRABBITVM v,int64_t idx,int64_t newsize);
RABBIT_API SQRESULT sq_arrayreverse(HRABBITVM v,int64_t idx);
RABBIT_API SQRESULT sq_arrayremove(HRABBITVM v,int64_t idx,int64_t itemidx);
RABBIT_API SQRESULT sq_arrayinsert(HRABBITVM v,int64_t idx,int64_t destpos);
RABBIT_API SQRESULT sq_setdelegate(HRABBITVM v,int64_t idx);
RABBIT_API SQRESULT sq_getdelegate(HRABBITVM v,int64_t idx);
RABBIT_API SQRESULT sq_clone(HRABBITVM v,int64_t idx);
RABBIT_API SQRESULT sq_setfreevariable(HRABBITVM v,int64_t idx,uint64_t nval);
RABBIT_API SQRESULT sq_next(HRABBITVM v,int64_t idx);
RABBIT_API SQRESULT sq_getweakrefval(HRABBITVM v,int64_t idx);
RABBIT_API SQRESULT sq_clear(HRABBITVM v,int64_t idx);
/*calls*/
RABBIT_API SQRESULT sq_call(HRABBITVM v,SQInteger params,SQBool retval,SQBool raiseerror);
RABBIT_API SQRESULT sq_call(HRABBITVM v,int64_t params,SQBool retval,SQBool raiseerror);
RABBIT_API SQRESULT sq_resume(HRABBITVM v,SQBool retval,SQBool raiseerror);
RABBIT_API const SQChar *sq_getlocal(HRABBITVM v,SQUnsignedInteger level,SQUnsignedInteger idx);
RABBIT_API const SQChar *sq_getlocal(HRABBITVM v,uint64_t level,uint64_t idx);
RABBIT_API SQRESULT sq_getcallee(HRABBITVM v);
RABBIT_API const SQChar *sq_getfreevariable(HRABBITVM v,SQInteger idx,SQUnsignedInteger nval);
RABBIT_API const SQChar *sq_getfreevariable(HRABBITVM v,int64_t idx,uint64_t nval);
RABBIT_API SQRESULT sq_throwerror(HRABBITVM v,const SQChar *err);
RABBIT_API SQRESULT sq_throwobject(HRABBITVM v);
RABBIT_API void sq_reseterror(HRABBITVM v);
RABBIT_API void sq_getlasterror(HRABBITVM v);
RABBIT_API SQRESULT sq_tailcall(HRABBITVM v, SQInteger nparams);
RABBIT_API SQRESULT sq_tailcall(HRABBITVM v, int64_t nparams);
/*raw object handling*/
RABBIT_API SQRESULT sq_getstackobj(HRABBITVM v,SQInteger idx,HSQOBJECT *po);
RABBIT_API SQRESULT sq_getstackobj(HRABBITVM v,int64_t idx,HSQOBJECT *po);
RABBIT_API void sq_pushobject(HRABBITVM v,HSQOBJECT obj);
RABBIT_API void sq_addref(HRABBITVM v,HSQOBJECT *po);
RABBIT_API SQBool sq_release(HRABBITVM v,HSQOBJECT *po);
RABBIT_API SQUnsignedInteger sq_getrefcount(HRABBITVM v,HSQOBJECT *po);
RABBIT_API uint64_t sq_getrefcount(HRABBITVM v,HSQOBJECT *po);
RABBIT_API void sq_resetobject(HSQOBJECT *po);
RABBIT_API const SQChar *sq_objtostring(const HSQOBJECT *o);
RABBIT_API SQBool sq_objtobool(const HSQOBJECT *o);
RABBIT_API SQInteger sq_objtointeger(const HSQOBJECT *o);
RABBIT_API SQFloat sq_objtofloat(const HSQOBJECT *o);
RABBIT_API int64_t sq_objtointeger(const HSQOBJECT *o);
RABBIT_API float_t sq_objtofloat(const HSQOBJECT *o);
RABBIT_API SQUserPointer sq_objtouserpointer(const HSQOBJECT *o);
RABBIT_API SQRESULT sq_getobjtypetag(const HSQOBJECT *o,SQUserPointer * typetag);
RABBIT_API SQUnsignedInteger sq_getvmrefcount(HRABBITVM v, const HSQOBJECT *po);
RABBIT_API uint64_t sq_getvmrefcount(HRABBITVM v, const HSQOBJECT *po);
/*GC*/
RABBIT_API SQInteger sq_collectgarbage(HRABBITVM v);
RABBIT_API int64_t sq_collectgarbage(HRABBITVM v);
RABBIT_API SQRESULT sq_resurrectunreachable(HRABBITVM v);
/*serialization*/
@ -346,12 +342,12 @@ RABBIT_API SQRESULT sq_writeclosure(HRABBITVM vm,SQWRITEFUNC writef,SQUserPointe
RABBIT_API SQRESULT sq_readclosure(HRABBITVM vm,SQREADFUNC readf,SQUserPointer up);
/*mem allocation*/
RABBIT_API void *sq_malloc(SQUnsignedInteger size);
RABBIT_API void *sq_realloc(void* p,SQUnsignedInteger oldsize,SQUnsignedInteger newsize);
RABBIT_API void sq_free(void *p,SQUnsignedInteger size);
RABBIT_API void *sq_malloc(uint64_t size);
RABBIT_API void *sq_realloc(void* p,uint64_t oldsize,uint64_t newsize);
RABBIT_API void sq_free(void *p,uint64_t size);
/*debug*/
RABBIT_API SQRESULT sq_stackinfos(HRABBITVM v,SQInteger level,SQStackInfos *si);
RABBIT_API SQRESULT sq_stackinfos(HRABBITVM v,int64_t level,SQStackInfos *si);
RABBIT_API void sq_setdebughook(HRABBITVM v);
RABBIT_API void sq_setnativedebughook(HRABBITVM v,SQDEBUGHOOK hook);
@ -391,7 +387,3 @@ RABBIT_API void sq_setnativedebughook(HRABBITVM v,SQDEBUGHOOK hook);
# define SQ_UNUSED_ARG(x) x
#endif
#ifdef __cplusplus
} /*extern "C"*/
#endif

View File

@ -17,7 +17,7 @@
#include <rabbit/sqfuncstate.hpp>
#include <rabbit/sqclass.hpp>
static bool sq_aux_gettypedarg(HRABBITVM v,SQInteger idx,SQObjectType type,SQObjectPtr **o)
static bool sq_aux_gettypedarg(HRABBITVM v,int64_t idx,SQObjectType type,SQObjectPtr **o)
{
*o = &stack_get(v,idx);
if(sq_type(**o) != type){
@ -36,14 +36,14 @@ static bool sq_aux_gettypedarg(HRABBITVM v,SQInteger idx,SQObjectType type,SQObj
}
SQInteger sq_aux_invalidtype(HRABBITVM v,SQObjectType type)
int64_t sq_aux_invalidtype(HRABBITVM v,SQObjectType type)
{
SQUnsignedInteger buf_size = 100 *sizeof(SQChar);
uint64_t buf_size = 100 *sizeof(SQChar);
scsprintf(_ss(v)->GetScratchPad(buf_size), buf_size, _SC("unexpected type %s"), IdType2Name(type));
return sq_throwerror(v, _ss(v)->GetScratchPad(-1));
}
HRABBITVM sq_open(SQInteger initialstacksize)
HRABBITVM sq_open(int64_t initialstacksize)
{
SQSharedState *ss;
SQVM *v;
@ -61,7 +61,7 @@ HRABBITVM sq_open(SQInteger initialstacksize)
return v;
}
HRABBITVM sq_newthread(HRABBITVM friendvm, SQInteger initialstacksize)
HRABBITVM sq_newthread(HRABBITVM friendvm, int64_t initialstacksize)
{
SQSharedState *ss;
SQVM *v;
@ -79,7 +79,7 @@ HRABBITVM sq_newthread(HRABBITVM friendvm, SQInteger initialstacksize)
}
}
SQInteger sq_getvmstate(HRABBITVM v)
int64_t sq_getvmstate(HRABBITVM v)
{
if(v->_suspended)
return SQ_VMSTATE_SUSPENDED;
@ -123,7 +123,7 @@ void sq_close(HRABBITVM v)
sq_delete(ss, SQSharedState);
}
SQInteger sq_getversion()
int64_t sq_getversion()
{
return RABBIT_VERSION_NUMBER;
}
@ -158,7 +158,7 @@ void sq_addref(HRABBITVM v,HSQOBJECT *po)
__AddRef(po->_type,po->_unVal);
}
SQUnsignedInteger sq_getrefcount(HRABBITVM v,HSQOBJECT *po)
uint64_t sq_getrefcount(HRABBITVM v,HSQOBJECT *po)
{
if(!ISREFCOUNTED(sq_type(*po))) return 0;
return po->_unVal.pRefCounted->_uiRef;
@ -172,7 +172,7 @@ SQBool sq_release(HRABBITVM v,HSQOBJECT *po)
return ret; //the ret val doesn't work(and cannot be fixed)
}
SQUnsignedInteger sq_getvmrefcount(HRABBITVM SQ_UNUSED_ARG(v), const HSQOBJECT *po)
uint64_t sq_getvmrefcount(HRABBITVM SQ_UNUSED_ARG(v), const HSQOBJECT *po)
{
if (!ISREFCOUNTED(sq_type(*po))) return 0;
return po->_unVal.pRefCounted->_uiRef;
@ -186,7 +186,7 @@ const SQChar *sq_objtostring(const HSQOBJECT *o)
return NULL;
}
SQInteger sq_objtointeger(const HSQOBJECT *o)
int64_t sq_objtointeger(const HSQOBJECT *o)
{
if(sq_isnumeric(*o)) {
return tointeger(*o);
@ -194,7 +194,7 @@ SQInteger sq_objtointeger(const HSQOBJECT *o)
return 0;
}
SQFloat sq_objtofloat(const HSQOBJECT *o)
float_t sq_objtofloat(const HSQOBJECT *o)
{
if(sq_isnumeric(*o)) {
return tofloat(*o);
@ -223,14 +223,14 @@ void sq_pushnull(HRABBITVM v)
v->PushNull();
}
void sq_pushstring(HRABBITVM v,const SQChar *s,SQInteger len)
void sq_pushstring(HRABBITVM v,const SQChar *s,int64_t len)
{
if(s)
v->Push(SQObjectPtr(SQString::Create(_ss(v), s, len)));
else v->PushNull();
}
void sq_pushinteger(HRABBITVM v,SQInteger n)
void sq_pushinteger(HRABBITVM v,int64_t n)
{
v->Push(n);
}
@ -240,7 +240,7 @@ void sq_pushbool(HRABBITVM v,SQBool b)
v->Push(b?true:false);
}
void sq_pushfloat(HRABBITVM v,SQFloat n)
void sq_pushfloat(HRABBITVM v,float_t n)
{
v->Push(n);
}
@ -255,7 +255,7 @@ void sq_pushthread(HRABBITVM v, HRABBITVM thread)
v->Push(thread);
}
SQUserPointer sq_newuserdata(HRABBITVM v,SQUnsignedInteger size)
SQUserPointer sq_newuserdata(HRABBITVM v,uint64_t size)
{
rabbit::UserData *ud = rabbit::UserData::Create(_ss(v), size + SQ_ALIGNMENT);
v->Push(ud);
@ -267,12 +267,12 @@ void sq_newtable(HRABBITVM v)
v->Push(SQTable::Create(_ss(v), 0));
}
void sq_newtableex(HRABBITVM v,SQInteger initialcapacity)
void sq_newtableex(HRABBITVM v,int64_t initialcapacity)
{
v->Push(SQTable::Create(_ss(v), initialcapacity));
}
void sq_newarray(HRABBITVM v,SQInteger size)
void sq_newarray(HRABBITVM v,int64_t size)
{
v->Push(SQArray::Create(_ss(v), size));
}
@ -301,7 +301,7 @@ SQBool sq_instanceof(HRABBITVM v)
return _instance(inst)->InstanceOf(_class(cl))?SQTrue:SQFalse;
}
SQRESULT sq_arrayappend(HRABBITVM v,SQInteger idx)
SQRESULT sq_arrayappend(HRABBITVM v,int64_t idx)
{
sq_aux_paramscheck(v,2);
SQObjectPtr *arr;
@ -311,7 +311,7 @@ SQRESULT sq_arrayappend(HRABBITVM v,SQInteger idx)
return SQ_OK;
}
SQRESULT sq_arraypop(HRABBITVM v,SQInteger idx,SQBool pushval)
SQRESULT sq_arraypop(HRABBITVM v,int64_t idx,SQBool pushval)
{
sq_aux_paramscheck(v, 1);
SQObjectPtr *arr;
@ -324,7 +324,7 @@ SQRESULT sq_arraypop(HRABBITVM v,SQInteger idx,SQBool pushval)
return sq_throwerror(v, _SC("empty array"));
}
SQRESULT sq_arrayresize(HRABBITVM v,SQInteger idx,SQInteger newsize)
SQRESULT sq_arrayresize(HRABBITVM v,int64_t idx,int64_t newsize)
{
sq_aux_paramscheck(v,1);
SQObjectPtr *arr;
@ -337,7 +337,7 @@ SQRESULT sq_arrayresize(HRABBITVM v,SQInteger idx,SQInteger newsize)
}
SQRESULT sq_arrayreverse(HRABBITVM v,SQInteger idx)
SQRESULT sq_arrayreverse(HRABBITVM v,int64_t idx)
{
sq_aux_paramscheck(v, 1);
SQObjectPtr *o;
@ -345,9 +345,9 @@ SQRESULT sq_arrayreverse(HRABBITVM v,SQInteger idx)
SQArray *arr = _array(*o);
if(arr->Size() > 0) {
SQObjectPtr t;
SQInteger size = arr->Size();
SQInteger n = size >> 1; size -= 1;
for(SQInteger i = 0; i < n; i++) {
int64_t size = arr->Size();
int64_t n = size >> 1; size -= 1;
for(int64_t i = 0; i < n; i++) {
t = arr->_values[i];
arr->_values[i] = arr->_values[size-i];
arr->_values[size-i] = t;
@ -357,7 +357,7 @@ SQRESULT sq_arrayreverse(HRABBITVM v,SQInteger idx)
return SQ_OK;
}
SQRESULT sq_arrayremove(HRABBITVM v,SQInteger idx,SQInteger itemidx)
SQRESULT sq_arrayremove(HRABBITVM v,int64_t idx,int64_t itemidx)
{
sq_aux_paramscheck(v, 1);
SQObjectPtr *arr;
@ -365,7 +365,7 @@ SQRESULT sq_arrayremove(HRABBITVM v,SQInteger idx,SQInteger itemidx)
return _array(*arr)->Remove(itemidx) ? SQ_OK : sq_throwerror(v,_SC("index out of range"));
}
SQRESULT sq_arrayinsert(HRABBITVM v,SQInteger idx,SQInteger destpos)
SQRESULT sq_arrayinsert(HRABBITVM v,int64_t idx,int64_t destpos)
{
sq_aux_paramscheck(v, 1);
SQObjectPtr *arr;
@ -375,38 +375,38 @@ SQRESULT sq_arrayinsert(HRABBITVM v,SQInteger idx,SQInteger destpos)
return ret;
}
void sq_newclosure(HRABBITVM v,SQFUNCTION func,SQUnsignedInteger nfreevars)
void sq_newclosure(HRABBITVM v,SQFUNCTION func,uint64_t nfreevars)
{
SQNativeClosure *nc = SQNativeClosure::Create(_ss(v), func,nfreevars);
nc->_nparamscheck = 0;
for(SQUnsignedInteger i = 0; i < nfreevars; i++) {
for(uint64_t i = 0; i < nfreevars; i++) {
nc->_outervalues[i] = v->Top();
v->Pop();
}
v->Push(SQObjectPtr(nc));
}
SQRESULT sq_getclosureinfo(HRABBITVM v,SQInteger idx,SQUnsignedInteger *nparams,SQUnsignedInteger *nfreevars)
SQRESULT sq_getclosureinfo(HRABBITVM v,int64_t idx,uint64_t *nparams,uint64_t *nfreevars)
{
SQObject o = stack_get(v, idx);
if(sq_type(o) == OT_CLOSURE) {
SQClosure *c = _closure(o);
SQFunctionProto *proto = c->_function;
*nparams = (SQUnsignedInteger)proto->_nparameters;
*nfreevars = (SQUnsignedInteger)proto->_noutervalues;
*nparams = (uint64_t)proto->_nparameters;
*nfreevars = (uint64_t)proto->_noutervalues;
return SQ_OK;
}
else if(sq_type(o) == OT_NATIVECLOSURE)
{
SQNativeClosure *c = _nativeclosure(o);
*nparams = (SQUnsignedInteger)c->_nparamscheck;
*nparams = (uint64_t)c->_nparamscheck;
*nfreevars = c->_noutervalues;
return SQ_OK;
}
return sq_throwerror(v,_SC("the object is not a closure"));
}
SQRESULT sq_setnativeclosurename(HRABBITVM v,SQInteger idx,const SQChar *name)
SQRESULT sq_setnativeclosurename(HRABBITVM v,int64_t idx,const SQChar *name)
{
SQObject o = stack_get(v, idx);
if(sq_isnativeclosure(o)) {
@ -417,7 +417,7 @@ SQRESULT sq_setnativeclosurename(HRABBITVM v,SQInteger idx,const SQChar *name)
return sq_throwerror(v,_SC("the object is not a nativeclosure"));
}
SQRESULT sq_setparamscheck(HRABBITVM v,SQInteger nparamscheck,const SQChar *typemask)
SQRESULT sq_setparamscheck(HRABBITVM v,int64_t nparamscheck,const SQChar *typemask)
{
SQObject o = stack_get(v, -1);
if(!sq_isnativeclosure(o))
@ -439,7 +439,7 @@ SQRESULT sq_setparamscheck(HRABBITVM v,SQInteger nparamscheck,const SQChar *type
return SQ_OK;
}
SQRESULT sq_bindenv(HRABBITVM v,SQInteger idx)
SQRESULT sq_bindenv(HRABBITVM v,int64_t idx)
{
SQObjectPtr &o = stack_get(v,idx);
if(!sq_isnativeclosure(o) &&
@ -476,7 +476,7 @@ SQRESULT sq_bindenv(HRABBITVM v,SQInteger idx)
return SQ_OK;
}
SQRESULT sq_getclosurename(HRABBITVM v,SQInteger idx)
SQRESULT sq_getclosurename(HRABBITVM v,int64_t idx)
{
SQObjectPtr &o = stack_get(v,idx);
if(!sq_isnativeclosure(o) &&
@ -492,7 +492,7 @@ SQRESULT sq_getclosurename(HRABBITVM v,SQInteger idx)
return SQ_OK;
}
SQRESULT sq_setclosureroot(HRABBITVM v,SQInteger idx)
SQRESULT sq_setclosureroot(HRABBITVM v,int64_t idx)
{
SQObjectPtr &c = stack_get(v,idx);
SQObject o = stack_get(v, -1);
@ -505,7 +505,7 @@ SQRESULT sq_setclosureroot(HRABBITVM v,SQInteger idx)
return sq_throwerror(v, _SC("invalid type"));
}
SQRESULT sq_getclosureroot(HRABBITVM v,SQInteger idx)
SQRESULT sq_getclosureroot(HRABBITVM v,int64_t idx)
{
SQObjectPtr &c = stack_get(v,idx);
if(!sq_isclosure(c)) return sq_throwerror(v, _SC("closure expected"));
@ -513,7 +513,7 @@ SQRESULT sq_getclosureroot(HRABBITVM v,SQInteger idx)
return SQ_OK;
}
SQRESULT sq_clear(HRABBITVM v,SQInteger idx)
SQRESULT sq_clear(HRABBITVM v,int64_t idx)
{
SQObject &o=stack_get(v,idx);
switch(sq_type(o)) {
@ -604,17 +604,17 @@ SQRELEASEHOOK sq_getsharedreleasehook(HRABBITVM v)
return _ss(v)->_releasehook;
}
void sq_push(HRABBITVM v,SQInteger idx)
void sq_push(HRABBITVM v,int64_t idx)
{
v->Push(stack_get(v, idx));
}
SQObjectType sq_gettype(HRABBITVM v,SQInteger idx)
SQObjectType sq_gettype(HRABBITVM v,int64_t idx)
{
return sq_type(stack_get(v, idx));
}
SQRESULT sq_typeof(HRABBITVM v,SQInteger idx)
SQRESULT sq_typeof(HRABBITVM v,int64_t idx)
{
SQObjectPtr &o = stack_get(v, idx);
SQObjectPtr res;
@ -625,7 +625,7 @@ SQRESULT sq_typeof(HRABBITVM v,SQInteger idx)
return SQ_OK;
}
SQRESULT sq_tostring(HRABBITVM v,SQInteger idx)
SQRESULT sq_tostring(HRABBITVM v,int64_t idx)
{
SQObjectPtr &o = stack_get(v, idx);
SQObjectPtr res;
@ -636,13 +636,13 @@ SQRESULT sq_tostring(HRABBITVM v,SQInteger idx)
return SQ_OK;
}
void sq_tobool(HRABBITVM v, SQInteger idx, SQBool *b)
void sq_tobool(HRABBITVM v, int64_t idx, SQBool *b)
{
SQObjectPtr &o = stack_get(v, idx);
*b = SQVM::IsFalse(o)?SQFalse:SQTrue;
}
SQRESULT sq_getinteger(HRABBITVM v,SQInteger idx,SQInteger *i)
SQRESULT sq_getinteger(HRABBITVM v,int64_t idx,int64_t *i)
{
SQObjectPtr &o = stack_get(v, idx);
if(sq_isnumeric(o)) {
@ -656,7 +656,7 @@ SQRESULT sq_getinteger(HRABBITVM v,SQInteger idx,SQInteger *i)
return SQ_ERROR;
}
SQRESULT sq_getfloat(HRABBITVM v,SQInteger idx,SQFloat *f)
SQRESULT sq_getfloat(HRABBITVM v,int64_t idx,float_t *f)
{
SQObjectPtr &o = stack_get(v, idx);
if(sq_isnumeric(o)) {
@ -666,7 +666,7 @@ SQRESULT sq_getfloat(HRABBITVM v,SQInteger idx,SQFloat *f)
return SQ_ERROR;
}
SQRESULT sq_getbool(HRABBITVM v,SQInteger idx,SQBool *b)
SQRESULT sq_getbool(HRABBITVM v,int64_t idx,SQBool *b)
{
SQObjectPtr &o = stack_get(v, idx);
if(sq_isbool(o)) {
@ -676,7 +676,7 @@ SQRESULT sq_getbool(HRABBITVM v,SQInteger idx,SQBool *b)
return SQ_ERROR;
}
SQRESULT sq_getstringandsize(HRABBITVM v,SQInteger idx,const SQChar **c,SQInteger *size)
SQRESULT sq_getstringandsize(HRABBITVM v,int64_t idx,const SQChar **c,int64_t *size)
{
SQObjectPtr *o = NULL;
_GETSAFE_OBJ(v, idx, OT_STRING,o);
@ -685,7 +685,7 @@ SQRESULT sq_getstringandsize(HRABBITVM v,SQInteger idx,const SQChar **c,SQIntege
return SQ_OK;
}
SQRESULT sq_getstring(HRABBITVM v,SQInteger idx,const SQChar **c)
SQRESULT sq_getstring(HRABBITVM v,int64_t idx,const SQChar **c)
{
SQObjectPtr *o = NULL;
_GETSAFE_OBJ(v, idx, OT_STRING,o);
@ -693,7 +693,7 @@ SQRESULT sq_getstring(HRABBITVM v,SQInteger idx,const SQChar **c)
return SQ_OK;
}
SQRESULT sq_getthread(HRABBITVM v,SQInteger idx,HRABBITVM *thread)
SQRESULT sq_getthread(HRABBITVM v,int64_t idx,HRABBITVM *thread)
{
SQObjectPtr *o = NULL;
_GETSAFE_OBJ(v, idx, OT_THREAD,o);
@ -701,7 +701,7 @@ SQRESULT sq_getthread(HRABBITVM v,SQInteger idx,HRABBITVM *thread)
return SQ_OK;
}
SQRESULT sq_clone(HRABBITVM v,SQInteger idx)
SQRESULT sq_clone(HRABBITVM v,int64_t idx)
{
SQObjectPtr &o = stack_get(v,idx);
v->PushNull();
@ -712,7 +712,7 @@ SQRESULT sq_clone(HRABBITVM v,SQInteger idx)
return SQ_OK;
}
SQInteger sq_getsize(HRABBITVM v, SQInteger idx)
int64_t sq_getsize(HRABBITVM v, int64_t idx)
{
SQObjectPtr &o = stack_get(v, idx);
SQObjectType type = sq_type(o);
@ -728,13 +728,13 @@ SQInteger sq_getsize(HRABBITVM v, SQInteger idx)
}
}
SQHash sq_gethash(HRABBITVM v, SQInteger idx)
SQHash sq_gethash(HRABBITVM v, int64_t idx)
{
SQObjectPtr &o = stack_get(v, idx);
return HashObj(o);
}
SQRESULT sq_getuserdata(HRABBITVM v,SQInteger idx,SQUserPointer *p,SQUserPointer *typetag)
SQRESULT sq_getuserdata(HRABBITVM v,int64_t idx,SQUserPointer *p,SQUserPointer *typetag)
{
SQObjectPtr *o = NULL;
_GETSAFE_OBJ(v, idx, OT_USERDATA,o);
@ -745,7 +745,7 @@ SQRESULT sq_getuserdata(HRABBITVM v,SQInteger idx,SQUserPointer *p,SQUserPointer
return SQ_OK;
}
SQRESULT sq_settypetag(HRABBITVM v,SQInteger idx,SQUserPointer typetag)
SQRESULT sq_settypetag(HRABBITVM v,int64_t idx,SQUserPointer typetag)
{
SQObjectPtr &o = stack_get(v,idx);
switch(sq_type(o)) {
@ -772,7 +772,7 @@ SQRESULT sq_getobjtypetag(const HSQOBJECT *o,SQUserPointer * typetag)
return SQ_OK;
}
SQRESULT sq_gettypetag(HRABBITVM v,SQInteger idx,SQUserPointer *typetag)
SQRESULT sq_gettypetag(HRABBITVM v,int64_t idx,SQUserPointer *typetag)
{
SQObjectPtr &o = stack_get(v,idx);
if (SQ_FAILED(sq_getobjtypetag(&o, typetag)))
@ -780,7 +780,7 @@ SQRESULT sq_gettypetag(HRABBITVM v,SQInteger idx,SQUserPointer *typetag)
return SQ_OK;
}
SQRESULT sq_getuserpointer(HRABBITVM v, SQInteger idx, SQUserPointer *p)
SQRESULT sq_getuserpointer(HRABBITVM v, int64_t idx, SQUserPointer *p)
{
SQObjectPtr *o = NULL;
_GETSAFE_OBJ(v, idx, OT_USERPOINTER,o);
@ -788,7 +788,7 @@ SQRESULT sq_getuserpointer(HRABBITVM v, SQInteger idx, SQUserPointer *p)
return SQ_OK;
}
SQRESULT sq_setinstanceup(HRABBITVM v, SQInteger idx, SQUserPointer p)
SQRESULT sq_setinstanceup(HRABBITVM v, int64_t idx, SQUserPointer p)
{
SQObjectPtr &o = stack_get(v,idx);
if(sq_type(o) != OT_INSTANCE) return sq_throwerror(v,_SC("the object is not a class instance"));
@ -796,7 +796,7 @@ SQRESULT sq_setinstanceup(HRABBITVM v, SQInteger idx, SQUserPointer p)
return SQ_OK;
}
SQRESULT sq_setclassudsize(HRABBITVM v, SQInteger idx, SQInteger udsize)
SQRESULT sq_setclassudsize(HRABBITVM v, int64_t idx, int64_t udsize)
{
SQObjectPtr &o = stack_get(v,idx);
if(sq_type(o) != OT_CLASS) return sq_throwerror(v,_SC("the object is not a class"));
@ -806,7 +806,7 @@ SQRESULT sq_setclassudsize(HRABBITVM v, SQInteger idx, SQInteger udsize)
}
SQRESULT sq_getinstanceup(HRABBITVM v, SQInteger idx, SQUserPointer *p,SQUserPointer typetag)
SQRESULT sq_getinstanceup(HRABBITVM v, int64_t idx, SQUserPointer *p,SQUserPointer typetag)
{
SQObjectPtr &o = stack_get(v,idx);
if(sq_type(o) != OT_INSTANCE) return sq_throwerror(v,_SC("the object is not a class instance"));
@ -823,21 +823,21 @@ SQRESULT sq_getinstanceup(HRABBITVM v, SQInteger idx, SQUserPointer *p,SQUserPoi
return SQ_OK;
}
SQInteger sq_gettop(HRABBITVM v)
int64_t sq_gettop(HRABBITVM v)
{
return (v->_top) - v->_stackbase;
}
void sq_settop(HRABBITVM v, SQInteger newtop)
void sq_settop(HRABBITVM v, int64_t newtop)
{
SQInteger top = sq_gettop(v);
int64_t top = sq_gettop(v);
if(top > newtop)
sq_pop(v, top - newtop);
else
while(top++ < newtop) sq_pushnull(v);
}
void sq_pop(HRABBITVM v, SQInteger nelemstopop)
void sq_pop(HRABBITVM v, int64_t nelemstopop)
{
assert(v->_top >= nelemstopop);
v->Pop(nelemstopop);
@ -850,19 +850,19 @@ void sq_poptop(HRABBITVM v)
}
void sq_remove(HRABBITVM v, SQInteger idx)
void sq_remove(HRABBITVM v, int64_t idx)
{
v->Remove(idx);
}
SQInteger sq_cmp(HRABBITVM v)
int64_t sq_cmp(HRABBITVM v)
{
SQInteger res;
int64_t res;
v->ObjCmp(stack_get(v, -1), stack_get(v, -2),res);
return res;
}
SQRESULT sq_newslot(HRABBITVM v, SQInteger idx, SQBool bstatic)
SQRESULT sq_newslot(HRABBITVM v, int64_t idx, SQBool bstatic)
{
sq_aux_paramscheck(v, 3);
SQObjectPtr &self = stack_get(v, idx);
@ -875,7 +875,7 @@ SQRESULT sq_newslot(HRABBITVM v, SQInteger idx, SQBool bstatic)
return SQ_OK;
}
SQRESULT sq_deleteslot(HRABBITVM v,SQInteger idx,SQBool pushval)
SQRESULT sq_deleteslot(HRABBITVM v,int64_t idx,SQBool pushval)
{
sq_aux_paramscheck(v, 2);
SQObjectPtr *self;
@ -892,7 +892,7 @@ SQRESULT sq_deleteslot(HRABBITVM v,SQInteger idx,SQBool pushval)
return SQ_OK;
}
SQRESULT sq_set(HRABBITVM v,SQInteger idx)
SQRESULT sq_set(HRABBITVM v,int64_t idx)
{
SQObjectPtr &self = stack_get(v, idx);
if(v->Set(self, v->GetUp(-2), v->GetUp(-1),DONT_FALL_BACK)) {
@ -902,7 +902,7 @@ SQRESULT sq_set(HRABBITVM v,SQInteger idx)
return SQ_ERROR;
}
SQRESULT sq_rawset(HRABBITVM v,SQInteger idx)
SQRESULT sq_rawset(HRABBITVM v,int64_t idx)
{
SQObjectPtr &self = stack_get(v, idx);
SQObjectPtr &key = v->GetUp(-2);
@ -940,7 +940,7 @@ SQRESULT sq_rawset(HRABBITVM v,SQInteger idx)
v->Raise_IdxError(v->GetUp(-2));return SQ_ERROR;
}
SQRESULT sq_newmember(HRABBITVM v,SQInteger idx,SQBool bstatic)
SQRESULT sq_newmember(HRABBITVM v,int64_t idx,SQBool bstatic)
{
SQObjectPtr &self = stack_get(v, idx);
if(sq_type(self) != OT_CLASS) return sq_throwerror(v, _SC("new member only works with classes"));
@ -954,7 +954,7 @@ SQRESULT sq_newmember(HRABBITVM v,SQInteger idx,SQBool bstatic)
return SQ_OK;
}
SQRESULT sq_rawnewmember(HRABBITVM v,SQInteger idx,SQBool bstatic)
SQRESULT sq_rawnewmember(HRABBITVM v,int64_t idx,SQBool bstatic)
{
SQObjectPtr &self = stack_get(v, idx);
if(sq_type(self) != OT_CLASS) return sq_throwerror(v, _SC("new member only works with classes"));
@ -968,7 +968,7 @@ SQRESULT sq_rawnewmember(HRABBITVM v,SQInteger idx,SQBool bstatic)
return SQ_OK;
}
SQRESULT sq_setdelegate(HRABBITVM v,SQInteger idx)
SQRESULT sq_setdelegate(HRABBITVM v,int64_t idx)
{
SQObjectPtr &self = stack_get(v, idx);
SQObjectPtr &mt = v->GetUp(-1);
@ -999,7 +999,7 @@ SQRESULT sq_setdelegate(HRABBITVM v,SQInteger idx)
return SQ_OK;
}
SQRESULT sq_rawdeleteslot(HRABBITVM v,SQInteger idx,SQBool pushval)
SQRESULT sq_rawdeleteslot(HRABBITVM v,int64_t idx,SQBool pushval)
{
sq_aux_paramscheck(v, 2);
SQObjectPtr *self;
@ -1016,7 +1016,7 @@ SQRESULT sq_rawdeleteslot(HRABBITVM v,SQInteger idx,SQBool pushval)
return SQ_OK;
}
SQRESULT sq_getdelegate(HRABBITVM v,SQInteger idx)
SQRESULT sq_getdelegate(HRABBITVM v,int64_t idx)
{
SQObjectPtr &self=stack_get(v,idx);
switch(sq_type(self)){
@ -1034,7 +1034,7 @@ SQRESULT sq_getdelegate(HRABBITVM v,SQInteger idx)
}
SQRESULT sq_get(HRABBITVM v,SQInteger idx)
SQRESULT sq_get(HRABBITVM v,int64_t idx)
{
SQObjectPtr &self=stack_get(v,idx);
SQObjectPtr &obj = v->GetUp(-1);
@ -1044,7 +1044,7 @@ SQRESULT sq_get(HRABBITVM v,SQInteger idx)
return SQ_ERROR;
}
SQRESULT sq_rawget(HRABBITVM v,SQInteger idx)
SQRESULT sq_rawget(HRABBITVM v,int64_t idx)
{
SQObjectPtr &self=stack_get(v,idx);
SQObjectPtr &obj = v->GetUp(-1);
@ -1081,19 +1081,19 @@ SQRESULT sq_rawget(HRABBITVM v,SQInteger idx)
return sq_throwerror(v,_SC("the index doesn't exist"));
}
SQRESULT sq_getstackobj(HRABBITVM v,SQInteger idx,HSQOBJECT *po)
SQRESULT sq_getstackobj(HRABBITVM v,int64_t idx,HSQOBJECT *po)
{
*po=stack_get(v,idx);
return SQ_OK;
}
const SQChar *sq_getlocal(HRABBITVM v,SQUnsignedInteger level,SQUnsignedInteger idx)
const SQChar *sq_getlocal(HRABBITVM v,uint64_t level,uint64_t idx)
{
SQUnsignedInteger cstksize=v->_callsstacksize;
SQUnsignedInteger lvl=(cstksize-level)-1;
SQInteger stackbase=v->_stackbase;
uint64_t cstksize=v->_callsstacksize;
uint64_t lvl=(cstksize-level)-1;
int64_t stackbase=v->_stackbase;
if(lvl<cstksize){
for(SQUnsignedInteger i=0;i<level;i++){
for(uint64_t i=0;i<level;i++){
SQVM::CallInfo &ci=v->_callsstack[(cstksize-i)-1];
stackbase-=ci._prevstkbase;
}
@ -1102,12 +1102,12 @@ const SQChar *sq_getlocal(HRABBITVM v,SQUnsignedInteger level,SQUnsignedInteger
return NULL;
SQClosure *c=_closure(ci._closure);
SQFunctionProto *func=c->_function;
if(func->_noutervalues > (SQInteger)idx) {
if(func->_noutervalues > (int64_t)idx) {
v->Push(*_outer(c->_outervalues[idx])->_valptr);
return _stringval(func->_outervalues[idx]._name);
}
idx -= func->_noutervalues;
return func->GetLocal(v,stackbase,idx,(SQInteger)(ci._ip-func->_instructions)-1);
return func->GetLocal(v,stackbase,idx,(int64_t)(ci._ip-func->_instructions)-1);
}
return NULL;
}
@ -1146,9 +1146,9 @@ void sq_getlasterror(HRABBITVM v)
v->Push(v->_lasterror);
}
SQRESULT sq_reservestack(HRABBITVM v,SQInteger nsize)
SQRESULT sq_reservestack(HRABBITVM v,int64_t nsize)
{
if (((SQUnsignedInteger)v->_top + nsize) > v->_stack.size()) {
if (((uint64_t)v->_top + nsize) > v->_stack.size()) {
if(v->_nmetamethodscall) {
return sq_throwerror(v,_SC("cannot resize stack while in a metamethod"));
}
@ -1171,7 +1171,7 @@ SQRESULT sq_resume(HRABBITVM v,SQBool retval,SQBool raiseerror)
return sq_throwerror(v,_SC("only generators can be resumed"));
}
SQRESULT sq_call(HRABBITVM v,SQInteger params,SQBool retval,SQBool raiseerror)
SQRESULT sq_call(HRABBITVM v,int64_t params,SQBool retval,SQBool raiseerror)
{
SQObjectPtr res;
if(v->Call(v->GetUp(-(params+1)),params,v->_top-params,res,raiseerror?true:false)){
@ -1193,7 +1193,7 @@ SQRESULT sq_call(HRABBITVM v,SQInteger params,SQBool retval,SQBool raiseerror)
return sq_throwerror(v,_SC("call failed"));
}
SQRESULT sq_tailcall(HRABBITVM v, SQInteger nparams)
SQRESULT sq_tailcall(HRABBITVM v, int64_t nparams)
{
SQObjectPtr &res = v->GetUp(-(nparams + 1));
if (sq_type(res) != OT_CLOSURE) {
@ -1205,7 +1205,7 @@ SQRESULT sq_tailcall(HRABBITVM v, SQInteger nparams)
return sq_throwerror(v, _SC("generators cannot be tail called"));
}
SQInteger stackbase = (v->_top - nparams) - v->_stackbase;
int64_t stackbase = (v->_top - nparams) - v->_stackbase;
if (!v->TailCall(clo, stackbase, nparams)) {
return SQ_ERROR;
}
@ -1222,7 +1222,7 @@ SQRESULT sq_wakeupvm(HRABBITVM v,SQBool wakeupret,SQBool retval,SQBool raiseerro
SQObjectPtr ret;
if(!v->_suspended)
return sq_throwerror(v,_SC("cannot resume a vm that is not running any code"));
SQInteger target = v->_suspended_target;
int64_t target = v->_suspended_target;
if(wakeupret) {
if(target != -1) {
v->GetAt(v->_stackbase+v->_suspended_target)=v->GetUp(-1); //retval
@ -1239,7 +1239,7 @@ SQRESULT sq_wakeupvm(HRABBITVM v,SQBool wakeupret,SQBool retval,SQBool raiseerro
return SQ_OK;
}
void sq_setreleasehook(HRABBITVM v,SQInteger idx,SQRELEASEHOOK hook)
void sq_setreleasehook(HRABBITVM v,int64_t idx,SQRELEASEHOOK hook)
{
SQObjectPtr &ud=stack_get(v,idx);
switch(sq_type(ud) ) {
@ -1257,7 +1257,7 @@ void sq_setreleasehook(HRABBITVM v,SQInteger idx,SQRELEASEHOOK hook)
}
}
SQRELEASEHOOK sq_getreleasehook(HRABBITVM v,SQInteger idx)
SQRELEASEHOOK sq_getreleasehook(HRABBITVM v,int64_t idx)
{
SQObjectPtr &ud=stack_get(v,idx);
switch(sq_type(ud) ) {
@ -1309,7 +1309,7 @@ SQRESULT sq_readclosure(HRABBITVM v,SQREADFUNC r,SQUserPointer up)
return SQ_OK;
}
SQChar *sq_getscratchpad(HRABBITVM v,SQInteger minsize)
SQChar *sq_getscratchpad(HRABBITVM v,int64_t minsize)
{
return _ss(v)->GetScratchPad(minsize);
}
@ -1320,7 +1320,7 @@ SQRESULT sq_resurrectunreachable(HRABBITVM v)
}
// TODO: Remove this...
SQInteger sq_collectgarbage(HRABBITVM v)
int64_t sq_collectgarbage(HRABBITVM v)
{
return -1;
}
@ -1335,7 +1335,7 @@ SQRESULT sq_getcallee(HRABBITVM v)
return sq_throwerror(v,_SC("no closure in the calls stack"));
}
const SQChar *sq_getfreevariable(HRABBITVM v,SQInteger idx,SQUnsignedInteger nval)
const SQChar *sq_getfreevariable(HRABBITVM v,int64_t idx,uint64_t nval)
{
SQObjectPtr &self=stack_get(v,idx);
const SQChar *name = NULL;
@ -1344,7 +1344,7 @@ const SQChar *sq_getfreevariable(HRABBITVM v,SQInteger idx,SQUnsignedInteger nva
case OT_CLOSURE:{
SQClosure *clo = _closure(self);
SQFunctionProto *fp = clo->_function;
if(((SQUnsignedInteger)fp->_noutervalues) > nval) {
if(((uint64_t)fp->_noutervalues) > nval) {
v->Push(*(_outer(clo->_outervalues[nval])->_valptr));
SQOuterVar &ov = fp->_outervalues[nval];
name = _stringval(ov._name);
@ -1364,14 +1364,14 @@ const SQChar *sq_getfreevariable(HRABBITVM v,SQInteger idx,SQUnsignedInteger nva
return name;
}
SQRESULT sq_setfreevariable(HRABBITVM v,SQInteger idx,SQUnsignedInteger nval)
SQRESULT sq_setfreevariable(HRABBITVM v,int64_t idx,uint64_t nval)
{
SQObjectPtr &self=stack_get(v,idx);
switch(sq_type(self))
{
case OT_CLOSURE:{
SQFunctionProto *fp = _closure(self)->_function;
if(((SQUnsignedInteger)fp->_noutervalues) > nval){
if(((uint64_t)fp->_noutervalues) > nval){
*(_outer(_closure(self)->_outervalues[nval])->_valptr) = stack_get(v,-1);
}
else return sq_throwerror(v,_SC("invalid free var index"));
@ -1390,7 +1390,7 @@ SQRESULT sq_setfreevariable(HRABBITVM v,SQInteger idx,SQUnsignedInteger nval)
return SQ_OK;
}
SQRESULT sq_setattributes(HRABBITVM v,SQInteger idx)
SQRESULT sq_setattributes(HRABBITVM v,int64_t idx)
{
SQObjectPtr *o = NULL;
_GETSAFE_OBJ(v, idx, OT_CLASS,o);
@ -1412,7 +1412,7 @@ SQRESULT sq_setattributes(HRABBITVM v,SQInteger idx)
return sq_throwerror(v,_SC("wrong index"));
}
SQRESULT sq_getattributes(HRABBITVM v,SQInteger idx)
SQRESULT sq_getattributes(HRABBITVM v,int64_t idx)
{
SQObjectPtr *o = NULL;
_GETSAFE_OBJ(v, idx, OT_CLASS,o);
@ -1432,7 +1432,7 @@ SQRESULT sq_getattributes(HRABBITVM v,SQInteger idx)
return sq_throwerror(v,_SC("wrong index"));
}
SQRESULT sq_getmemberhandle(HRABBITVM v,SQInteger idx,HSQMEMBERHANDLE *handle)
SQRESULT sq_getmemberhandle(HRABBITVM v,int64_t idx,HSQMEMBERHANDLE *handle)
{
SQObjectPtr *o = NULL;
_GETSAFE_OBJ(v, idx, OT_CLASS,o);
@ -1479,7 +1479,7 @@ SQRESULT _getmemberbyhandle(HRABBITVM v,SQObjectPtr &self,const HSQMEMBERHANDLE
return SQ_OK;
}
SQRESULT sq_getbyhandle(HRABBITVM v,SQInteger idx,const HSQMEMBERHANDLE *handle)
SQRESULT sq_getbyhandle(HRABBITVM v,int64_t idx,const HSQMEMBERHANDLE *handle)
{
SQObjectPtr &self = stack_get(v,idx);
SQObjectPtr *val = NULL;
@ -1490,7 +1490,7 @@ SQRESULT sq_getbyhandle(HRABBITVM v,SQInteger idx,const HSQMEMBERHANDLE *handle)
return SQ_OK;
}
SQRESULT sq_setbyhandle(HRABBITVM v,SQInteger idx,const HSQMEMBERHANDLE *handle)
SQRESULT sq_setbyhandle(HRABBITVM v,int64_t idx,const HSQMEMBERHANDLE *handle)
{
SQObjectPtr &self = stack_get(v,idx);
SQObjectPtr &newval = stack_get(v,-1);
@ -1503,7 +1503,7 @@ SQRESULT sq_setbyhandle(HRABBITVM v,SQInteger idx,const HSQMEMBERHANDLE *handle)
return SQ_OK;
}
SQRESULT sq_getbase(HRABBITVM v,SQInteger idx)
SQRESULT sq_getbase(HRABBITVM v,int64_t idx)
{
SQObjectPtr *o = NULL;
_GETSAFE_OBJ(v, idx, OT_CLASS,o);
@ -1514,7 +1514,7 @@ SQRESULT sq_getbase(HRABBITVM v,SQInteger idx)
return SQ_OK;
}
SQRESULT sq_getclass(HRABBITVM v,SQInteger idx)
SQRESULT sq_getclass(HRABBITVM v,int64_t idx)
{
SQObjectPtr *o = NULL;
_GETSAFE_OBJ(v, idx, OT_INSTANCE,o);
@ -1522,7 +1522,7 @@ SQRESULT sq_getclass(HRABBITVM v,SQInteger idx)
return SQ_OK;
}
SQRESULT sq_createinstance(HRABBITVM v,SQInteger idx)
SQRESULT sq_createinstance(HRABBITVM v,int64_t idx)
{
SQObjectPtr *o = NULL;
_GETSAFE_OBJ(v, idx, OT_CLASS,o);
@ -1530,7 +1530,7 @@ SQRESULT sq_createinstance(HRABBITVM v,SQInteger idx)
return SQ_OK;
}
void sq_weakref(HRABBITVM v,SQInteger idx)
void sq_weakref(HRABBITVM v,int64_t idx)
{
SQObject &o=stack_get(v,idx);
if(ISREFCOUNTED(sq_type(o))) {
@ -1540,7 +1540,7 @@ void sq_weakref(HRABBITVM v,SQInteger idx)
v->Push(o);
}
SQRESULT sq_getweakrefval(HRABBITVM v,SQInteger idx)
SQRESULT sq_getweakrefval(HRABBITVM v,int64_t idx)
{
SQObjectPtr &o = stack_get(v,idx);
if(sq_type(o) != OT_WEAKREF) {
@ -1569,7 +1569,7 @@ SQRESULT sq_getdefaultdelegate(HRABBITVM v,SQObjectType t)
return SQ_OK;
}
SQRESULT sq_next(HRABBITVM v,SQInteger idx)
SQRESULT sq_next(HRABBITVM v,int64_t idx)
{
SQObjectPtr o=stack_get(v,idx),&refpos = stack_get(v,-1),realkey,val;
if(sq_type(o) == OT_GENERATOR) {
@ -1588,11 +1588,11 @@ SQRESULT sq_next(HRABBITVM v,SQInteger idx)
struct BufState{
const SQChar *buf;
SQInteger ptr;
SQInteger size;
int64_t ptr;
int64_t size;
};
SQInteger buf_lexfeed(SQUserPointer file)
int64_t buf_lexfeed(SQUserPointer file)
{
BufState *buf=(BufState*)file;
if(buf->size<(buf->ptr+1))
@ -1600,7 +1600,7 @@ SQInteger buf_lexfeed(SQUserPointer file)
return buf->buf[buf->ptr++];
}
SQRESULT sq_compilebuffer(HRABBITVM v,const SQChar *s,SQInteger size,const SQChar *sourcename,SQBool raiseerror) {
SQRESULT sq_compilebuffer(HRABBITVM v,const SQChar *s,int64_t size,const SQChar *sourcename,SQBool raiseerror) {
BufState buf;
buf.buf = s;
buf.size = size;
@ -1608,7 +1608,7 @@ SQRESULT sq_compilebuffer(HRABBITVM v,const SQChar *s,SQInteger size,const SQCha
return sq_compile(v, buf_lexfeed, &buf, sourcename, raiseerror);
}
void sq_move(HRABBITVM dest,HRABBITVM src,SQInteger idx)
void sq_move(HRABBITVM dest,HRABBITVM src,int64_t idx)
{
dest->Push(stack_get(src,idx));
}
@ -1629,17 +1629,17 @@ SQPRINTFUNCTION sq_geterrorfunc(HRABBITVM v)
return _ss(v)->_errorfunc;
}
void *sq_malloc(SQUnsignedInteger size)
void *sq_malloc(uint64_t size)
{
return SQ_MALLOC(size);
}
void *sq_realloc(void* p,SQUnsignedInteger oldsize,SQUnsignedInteger newsize)
void *sq_realloc(void* p,uint64_t oldsize,uint64_t newsize)
{
return SQ_REALLOC(p,oldsize,newsize);
}
void sq_free(void *p,SQUnsignedInteger size)
void sq_free(void *p,uint64_t size)
{
SQ_FREE(p,size);
}

View File

@ -7,17 +7,17 @@
*/
#pragma once
struct SQArray : public CHAINABLE_OBJ
struct SQArray : public SQRefCounted
{
private:
SQArray(SQSharedState *ss,SQInteger nsize) {
SQArray(SQSharedState *ss,int64_t nsize) {
_values.resize(nsize);
}
~SQArray()
{
}
public:
static SQArray* Create(SQSharedState *ss,SQInteger nInitialSize){
static SQArray* Create(SQSharedState *ss,int64_t nInitialSize){
SQArray *newarray=(SQArray*)SQ_MALLOC(sizeof(SQArray));
new (newarray) SQArray(ss,nInitialSize);
return newarray;
@ -25,29 +25,29 @@ public:
void Finalize(){
_values.resize(0);
}
bool Get(const SQInteger nidx,SQObjectPtr &val)
bool Get(const int64_t nidx,SQObjectPtr &val)
{
if(nidx>=0 && nidx<(SQInteger)_values.size()){
if(nidx>=0 && nidx<(int64_t)_values.size()){
SQObjectPtr &o = _values[nidx];
val = _realval(o);
return true;
}
else return false;
}
bool Set(const SQInteger nidx,const SQObjectPtr &val)
bool Set(const int64_t nidx,const SQObjectPtr &val)
{
if(nidx>=0 && nidx<(SQInteger)_values.size()){
if(nidx>=0 && nidx<(int64_t)_values.size()){
_values[nidx]=val;
return true;
}
else return false;
}
SQInteger Next(const SQObjectPtr &refpos,SQObjectPtr &outkey,SQObjectPtr &outval)
int64_t Next(const SQObjectPtr &refpos,SQObjectPtr &outkey,SQObjectPtr &outval)
{
SQUnsignedInteger idx=TranslateIndex(refpos);
uint64_t idx=TranslateIndex(refpos);
while(idx<_values.size()){
//first found
outkey=(SQInteger)idx;
outkey=(int64_t)idx;
SQObjectPtr &o = _values[idx];
outval = _realval(o);
//return idx for the next iteration
@ -57,20 +57,20 @@ public:
return -1;
}
SQArray *Clone(){SQArray *anew=Create(NULL,0); anew->_values.copy(_values); return anew; }
SQInteger Size() const {return _values.size();}
void Resize(SQInteger size)
int64_t Size() const {return _values.size();}
void Resize(int64_t size)
{
SQObjectPtr _null;
Resize(size,_null);
}
void Resize(SQInteger size,SQObjectPtr &fill) { _values.resize(size,fill); ShrinkIfNeeded(); }
void Reserve(SQInteger size) { _values.reserve(size); }
void Resize(int64_t size,SQObjectPtr &fill) { _values.resize(size,fill); ShrinkIfNeeded(); }
void Reserve(int64_t size) { _values.reserve(size); }
void Append(const SQObject &o){_values.push_back(o);}
void Extend(const SQArray *a);
SQObjectPtr &Top(){return _values.top();}
void Pop(){_values.pop_back(); ShrinkIfNeeded(); }
bool Insert(SQInteger idx,const SQObject &val){
if(idx < 0 || idx > (SQInteger)_values.size())
bool Insert(int64_t idx,const SQObject &val){
if(idx < 0 || idx > (int64_t)_values.size())
return false;
_values.insert(idx,val);
return true;
@ -79,8 +79,8 @@ public:
if(_values.size() <= _values.capacity()>>2) //shrink the array
_values.shrinktofit();
}
bool Remove(SQInteger idx){
if(idx < 0 || idx >= (SQInteger)_values.size())
bool Remove(int64_t idx){
if(idx < 0 || idx >= (int64_t)_values.size())
return false;
_values.remove(idx);
ShrinkIfNeeded();

View File

@ -17,7 +17,7 @@
#include <stdarg.h>
#include <ctype.h>
static bool str2num(const SQChar *s,SQObjectPtr &res,SQInteger base)
static bool str2num(const SQChar *s,SQObjectPtr &res,int64_t base)
{
SQChar *end;
const SQChar *e = s;
@ -33,37 +33,37 @@ static bool str2num(const SQChar *s,SQObjectPtr &res,SQInteger base)
e++;
}
if(isfloat){
SQFloat r = SQFloat(scstrtod(s,&end));
float_t r = float_t(scstrtod(s,&end));
if(s == end) return false;
res = r;
}
else{
SQInteger r = SQInteger(scstrtol(s,&end,(int)base));
int64_t r = int64_t(scstrtol(s,&end,(int)base));
if(s == end) return false;
res = r;
}
return true;
}
static SQInteger base_dummy(HRABBITVM SQ_UNUSED_ARG(v))
static int64_t base_dummy(HRABBITVM SQ_UNUSED_ARG(v))
{
return 0;
}
static SQInteger base_getroottable(HRABBITVM v)
static int64_t base_getroottable(HRABBITVM v)
{
v->Push(v->_roottable);
return 1;
}
static SQInteger base_getconsttable(HRABBITVM v)
static int64_t base_getconsttable(HRABBITVM v)
{
v->Push(_ss(v)->_consts);
return 1;
}
static SQInteger base_setroottable(HRABBITVM v)
static int64_t base_setroottable(HRABBITVM v)
{
SQObjectPtr o = v->_roottable;
if(SQ_FAILED(sq_setroottable(v))) return SQ_ERROR;
@ -71,7 +71,7 @@ static SQInteger base_setroottable(HRABBITVM v)
return 1;
}
static SQInteger base_setconsttable(HRABBITVM v)
static int64_t base_setconsttable(HRABBITVM v)
{
SQObjectPtr o = _ss(v)->_consts;
if(SQ_FAILED(sq_setconsttable(v))) return SQ_ERROR;
@ -79,19 +79,19 @@ static SQInteger base_setconsttable(HRABBITVM v)
return 1;
}
static SQInteger base_seterrorhandler(HRABBITVM v)
static int64_t base_seterrorhandler(HRABBITVM v)
{
sq_seterrorhandler(v);
return 0;
}
static SQInteger base_setdebughook(HRABBITVM v)
static int64_t base_setdebughook(HRABBITVM v)
{
sq_setdebughook(v);
return 0;
}
static SQInteger base_enabledebuginfo(HRABBITVM v)
static int64_t base_enabledebuginfo(HRABBITVM v)
{
SQObjectPtr &o=stack_get(v,2);
@ -99,10 +99,10 @@ static SQInteger base_enabledebuginfo(HRABBITVM v)
return 0;
}
static SQInteger __getcallstackinfos(HRABBITVM v,SQInteger level)
static int64_t __getcallstackinfos(HRABBITVM v,int64_t level)
{
SQStackInfos si;
SQInteger seq = 0;
int64_t seq = 0;
const SQChar *name = NULL;
if (SQ_SUCCEEDED(sq_stackinfos(v, level, &si)))
@ -137,17 +137,17 @@ static SQInteger __getcallstackinfos(HRABBITVM v,SQInteger level)
return 0;
}
static SQInteger base_getstackinfos(HRABBITVM v)
static int64_t base_getstackinfos(HRABBITVM v)
{
SQInteger level;
int64_t level;
sq_getinteger(v, -1, &level);
return __getcallstackinfos(v,level);
}
static SQInteger base_assert(HRABBITVM v)
static int64_t base_assert(HRABBITVM v)
{
if(SQVM::IsFalse(stack_get(v,2))){
SQInteger top = sq_gettop(v);
int64_t top = sq_gettop(v);
if (top>2 && SQ_SUCCEEDED(sq_tostring(v,3))) {
const SQChar *str = 0;
if (SQ_SUCCEEDED(sq_getstring(v,-1,&str))) {
@ -159,9 +159,9 @@ static SQInteger base_assert(HRABBITVM v)
return 0;
}
static SQInteger get_slice_params(HRABBITVM v,SQInteger &sidx,SQInteger &eidx,SQObjectPtr &o)
static int64_t get_slice_params(HRABBITVM v,int64_t &sidx,int64_t &eidx,SQObjectPtr &o)
{
SQInteger top = sq_gettop(v);
int64_t top = sq_gettop(v);
sidx=0;
eidx=0;
o=stack_get(v,1);
@ -183,7 +183,7 @@ static SQInteger get_slice_params(HRABBITVM v,SQInteger &sidx,SQInteger &eidx,SQ
return 1;
}
static SQInteger base_print(HRABBITVM v)
static int64_t base_print(HRABBITVM v)
{
const SQChar *str;
if(SQ_SUCCEEDED(sq_tostring(v,2)))
@ -196,7 +196,7 @@ static SQInteger base_print(HRABBITVM v)
return SQ_ERROR;
}
static SQInteger base_error(HRABBITVM v)
static int64_t base_error(HRABBITVM v)
{
const SQChar *str;
if(SQ_SUCCEEDED(sq_tostring(v,2)))
@ -209,11 +209,11 @@ static SQInteger base_error(HRABBITVM v)
return SQ_ERROR;
}
static SQInteger base_compilestring(HRABBITVM v)
static int64_t base_compilestring(HRABBITVM v)
{
SQInteger nargs=sq_gettop(v);
int64_t nargs=sq_gettop(v);
const SQChar *src=NULL,*name=_SC("unnamedbuffer");
SQInteger size;
int64_t size;
sq_getstring(v,2,&src);
size=sq_getsize(v,2);
if(nargs>2){
@ -225,21 +225,21 @@ static SQInteger base_compilestring(HRABBITVM v)
return SQ_ERROR;
}
static SQInteger base_newthread(HRABBITVM v)
static int64_t base_newthread(HRABBITVM v)
{
SQObjectPtr &func = stack_get(v,2);
SQInteger stksize = (_closure(func)->_function->_stacksize << 1) +2;
int64_t stksize = (_closure(func)->_function->_stacksize << 1) +2;
HRABBITVM newv = sq_newthread(v, (stksize < MIN_STACK_OVERHEAD + 2)? MIN_STACK_OVERHEAD + 2 : stksize);
sq_move(newv,v,-2);
return 1;
}
static SQInteger base_suspend(HRABBITVM v)
static int64_t base_suspend(HRABBITVM v)
{
return sq_suspendvm(v);
}
static SQInteger base_array(HRABBITVM v)
static int64_t base_array(HRABBITVM v)
{
SQArray *a;
SQObject &size = stack_get(v,2);
@ -254,14 +254,14 @@ static SQInteger base_array(HRABBITVM v)
return 1;
}
static SQInteger base_type(HRABBITVM v)
static int64_t base_type(HRABBITVM v)
{
SQObjectPtr &o = stack_get(v,2);
v->Push(SQString::Create(_ss(v),GetTypeName(o),-1));
return 1;
}
static SQInteger base_callee(HRABBITVM v)
static int64_t base_callee(HRABBITVM v)
{
if(v->_callsstacksize > 1)
{
@ -296,7 +296,7 @@ static const SQRegFunction base_funcs[]={
void sq_base_register(HRABBITVM v)
{
SQInteger i=0;
int64_t i=0;
sq_pushroottable(v);
while(base_funcs[i].name!=0) {
sq_pushstring(v,base_funcs[i].name,-1);
@ -317,21 +317,21 @@ void sq_base_register(HRABBITVM v)
sq_pushinteger(v,sizeof(SQChar));
sq_newslot(v,-3, SQFalse);
sq_pushstring(v,_SC("_intsize_"),-1);
sq_pushinteger(v,sizeof(SQInteger));
sq_pushinteger(v,sizeof(int64_t));
sq_newslot(v,-3, SQFalse);
sq_pushstring(v,_SC("_floatsize_"),-1);
sq_pushinteger(v,sizeof(SQFloat));
sq_pushinteger(v,sizeof(float_t));
sq_newslot(v,-3, SQFalse);
sq_pop(v,1);
}
static SQInteger default_delegate_len(HRABBITVM v)
static int64_t default_delegate_len(HRABBITVM v)
{
v->Push(SQInteger(sq_getsize(v,1)));
v->Push(int64_t(sq_getsize(v,1)));
return 1;
}
static SQInteger default_delegate_tofloat(HRABBITVM v)
static int64_t default_delegate_tofloat(HRABBITVM v)
{
SQObjectPtr &o=stack_get(v,1);
switch(sq_type(o)){
@ -347,7 +347,7 @@ static SQInteger default_delegate_tofloat(HRABBITVM v)
v->Push(SQObjectPtr(tofloat(o)));
break;
case OT_BOOL:
v->Push(SQObjectPtr((SQFloat)(_integer(o)?1:0)));
v->Push(SQObjectPtr((float_t)(_integer(o)?1:0)));
break;
default:
v->PushNull();
@ -356,10 +356,10 @@ static SQInteger default_delegate_tofloat(HRABBITVM v)
return 1;
}
static SQInteger default_delegate_tointeger(HRABBITVM v)
static int64_t default_delegate_tointeger(HRABBITVM v)
{
SQObjectPtr &o=stack_get(v,1);
SQInteger base = 10;
int64_t base = 10;
if(sq_gettop(v) > 1) {
sq_getinteger(v,2,&base);
}
@ -376,7 +376,7 @@ static SQInteger default_delegate_tointeger(HRABBITVM v)
v->Push(SQObjectPtr(tointeger(o)));
break;
case OT_BOOL:
v->Push(SQObjectPtr(_integer(o)?(SQInteger)1:(SQInteger)0));
v->Push(SQObjectPtr(_integer(o)?(int64_t)1:(int64_t)0));
break;
default:
v->PushNull();
@ -385,26 +385,26 @@ static SQInteger default_delegate_tointeger(HRABBITVM v)
return 1;
}
static SQInteger default_delegate_tostring(HRABBITVM v)
static int64_t default_delegate_tostring(HRABBITVM v)
{
if(SQ_FAILED(sq_tostring(v,1)))
return SQ_ERROR;
return 1;
}
static SQInteger obj_delegate_weakref(HRABBITVM v)
static int64_t obj_delegate_weakref(HRABBITVM v)
{
sq_weakref(v,1);
return 1;
}
static SQInteger obj_clear(HRABBITVM v)
static int64_t obj_clear(HRABBITVM v)
{
return SQ_SUCCEEDED(sq_clear(v,-1)) ? 1 : SQ_ERROR;
}
static SQInteger number_delegate_tochar(HRABBITVM v)
static int64_t number_delegate_tochar(HRABBITVM v)
{
SQObject &o=stack_get(v,1);
SQChar c = (SQChar)tointeger(o);
@ -417,7 +417,7 @@ static SQInteger number_delegate_tochar(HRABBITVM v)
/////////////////////////////////////////////////////////////////
//TABLE DEFAULT DELEGATE
static SQInteger table_rawdelete(HRABBITVM v)
static int64_t table_rawdelete(HRABBITVM v)
{
if(SQ_FAILED(sq_rawdeleteslot(v,1,SQTrue)))
return SQ_ERROR;
@ -425,7 +425,7 @@ static SQInteger table_rawdelete(HRABBITVM v)
}
static SQInteger container_rawexists(HRABBITVM v)
static int64_t container_rawexists(HRABBITVM v)
{
if(SQ_SUCCEEDED(sq_rawget(v,-2))) {
sq_pushbool(v,SQTrue);
@ -435,18 +435,18 @@ static SQInteger container_rawexists(HRABBITVM v)
return 1;
}
static SQInteger container_rawset(HRABBITVM v)
static int64_t container_rawset(HRABBITVM v)
{
return SQ_SUCCEEDED(sq_rawset(v,-3)) ? 1 : SQ_ERROR;
}
static SQInteger container_rawget(HRABBITVM v)
static int64_t container_rawget(HRABBITVM v)
{
return SQ_SUCCEEDED(sq_rawget(v,-2))?1:SQ_ERROR;
}
static SQInteger table_setdelegate(HRABBITVM v)
static int64_t table_setdelegate(HRABBITVM v)
{
if(SQ_FAILED(sq_setdelegate(v,-2)))
return SQ_ERROR;
@ -454,21 +454,21 @@ static SQInteger table_setdelegate(HRABBITVM v)
return 1;
}
static SQInteger table_getdelegate(HRABBITVM v)
static int64_t table_getdelegate(HRABBITVM v)
{
return SQ_SUCCEEDED(sq_getdelegate(v,-1))?1:SQ_ERROR;
}
static SQInteger table_filter(HRABBITVM v)
static int64_t table_filter(HRABBITVM v)
{
SQObject &o = stack_get(v,1);
SQTable *tbl = _table(o);
SQObjectPtr ret = SQTable::Create(_ss(v),0);
SQObjectPtr itr, key, val;
SQInteger nitr;
int64_t nitr;
while((nitr = tbl->Next(false, itr, key, val)) != -1) {
itr = (SQInteger)nitr;
itr = (int64_t)nitr;
v->Push(o);
v->Push(key);
@ -504,29 +504,29 @@ const SQRegFunction SQSharedState::_table_default_delegate_funcz[]={
//ARRAY DEFAULT DELEGATE///////////////////////////////////////
static SQInteger array_append(HRABBITVM v)
static int64_t array_append(HRABBITVM v)
{
return SQ_SUCCEEDED(sq_arrayappend(v,-2)) ? 1 : SQ_ERROR;
}
static SQInteger array_extend(HRABBITVM v)
static int64_t array_extend(HRABBITVM v)
{
_array(stack_get(v,1))->Extend(_array(stack_get(v,2)));
sq_pop(v,1);
return 1;
}
static SQInteger array_reverse(HRABBITVM v)
static int64_t array_reverse(HRABBITVM v)
{
return SQ_SUCCEEDED(sq_arrayreverse(v,-1)) ? 1 : SQ_ERROR;
}
static SQInteger array_pop(HRABBITVM v)
static int64_t array_pop(HRABBITVM v)
{
return SQ_SUCCEEDED(sq_arraypop(v,1,SQTrue))?1:SQ_ERROR;
}
static SQInteger array_top(HRABBITVM v)
static int64_t array_top(HRABBITVM v)
{
SQObject &o=stack_get(v,1);
if(_array(o)->Size()>0){
@ -536,7 +536,7 @@ static SQInteger array_top(HRABBITVM v)
else return sq_throwerror(v,_SC("top() on a empty array"));
}
static SQInteger array_insert(HRABBITVM v)
static int64_t array_insert(HRABBITVM v)
{
SQObject &o=stack_get(v,1);
SQObject &idx=stack_get(v,2);
@ -547,7 +547,7 @@ static SQInteger array_insert(HRABBITVM v)
return 1;
}
static SQInteger array_remove(HRABBITVM v)
static int64_t array_remove(HRABBITVM v)
{
SQObject &o = stack_get(v, 1);
SQObject &idx = stack_get(v, 2);
@ -561,13 +561,13 @@ static SQInteger array_remove(HRABBITVM v)
return sq_throwerror(v, _SC("idx out of range"));
}
static SQInteger array_resize(HRABBITVM v)
static int64_t array_resize(HRABBITVM v)
{
SQObject &o = stack_get(v, 1);
SQObject &nsize = stack_get(v, 2);
SQObjectPtr fill;
if(sq_isnumeric(nsize)) {
SQInteger sz = tointeger(nsize);
int64_t sz = tointeger(nsize);
if (sz<0)
return sq_throwerror(v, _SC("resizing to negative length"));
@ -580,10 +580,10 @@ static SQInteger array_resize(HRABBITVM v)
return sq_throwerror(v, _SC("size must be a number"));
}
static SQInteger __map_array(SQArray *dest,SQArray *src,HRABBITVM v) {
static int64_t __map_array(SQArray *dest,SQArray *src,HRABBITVM v) {
SQObjectPtr temp;
SQInteger size = src->Size();
for(SQInteger n = 0; n < size; n++) {
int64_t size = src->Size();
for(int64_t n = 0; n < size; n++) {
src->Get(n,temp);
v->Push(src);
v->Push(temp);
@ -596,10 +596,10 @@ static SQInteger __map_array(SQArray *dest,SQArray *src,HRABBITVM v) {
return 0;
}
static SQInteger array_map(HRABBITVM v)
static int64_t array_map(HRABBITVM v)
{
SQObject &o = stack_get(v,1);
SQInteger size = _array(o)->Size();
int64_t size = _array(o)->Size();
SQObjectPtr ret = SQArray::Create(_ss(v),size);
if(SQ_FAILED(__map_array(_array(ret),_array(o),v)))
return SQ_ERROR;
@ -607,7 +607,7 @@ static SQInteger array_map(HRABBITVM v)
return 1;
}
static SQInteger array_apply(HRABBITVM v)
static int64_t array_apply(HRABBITVM v)
{
SQObject &o = stack_get(v,1);
if(SQ_FAILED(__map_array(_array(o),_array(o),v)))
@ -616,11 +616,11 @@ static SQInteger array_apply(HRABBITVM v)
return 1;
}
static SQInteger array_reduce(HRABBITVM v)
static int64_t array_reduce(HRABBITVM v)
{
SQObject &o = stack_get(v,1);
SQArray *a = _array(o);
SQInteger size = a->Size();
int64_t size = a->Size();
if(size == 0) {
return 0;
}
@ -628,7 +628,7 @@ static SQInteger array_reduce(HRABBITVM v)
a->Get(0,res);
if(size > 1) {
SQObjectPtr other;
for(SQInteger n = 1; n < size; n++) {
for(int64_t n = 1; n < size; n++) {
a->Get(n,other);
v->Push(o);
v->Push(res);
@ -644,14 +644,14 @@ static SQInteger array_reduce(HRABBITVM v)
return 1;
}
static SQInteger array_filter(HRABBITVM v)
static int64_t array_filter(HRABBITVM v)
{
SQObject &o = stack_get(v,1);
SQArray *a = _array(o);
SQObjectPtr ret = SQArray::Create(_ss(v),0);
SQInteger size = a->Size();
int64_t size = a->Size();
SQObjectPtr val;
for(SQInteger n = 0; n < size; n++) {
for(int64_t n = 0; n < size; n++) {
a->Get(n,val);
v->Push(o);
v->Push(n);
@ -668,14 +668,14 @@ static SQInteger array_filter(HRABBITVM v)
return 1;
}
static SQInteger array_find(HRABBITVM v)
static int64_t array_find(HRABBITVM v)
{
SQObject &o = stack_get(v,1);
SQObjectPtr &val = stack_get(v,2);
SQArray *a = _array(o);
SQInteger size = a->Size();
int64_t size = a->Size();
SQObjectPtr temp;
for(SQInteger n = 0; n < size; n++) {
for(int64_t n = 0; n < size; n++) {
bool res = false;
a->Get(n,temp);
if(SQVM::IsEqual(temp,val,res) && res) {
@ -687,13 +687,13 @@ static SQInteger array_find(HRABBITVM v)
}
static bool _sort_compare(HRABBITVM v,SQObjectPtr &a,SQObjectPtr &b,SQInteger func,SQInteger &ret)
static bool _sort_compare(HRABBITVM v,SQObjectPtr &a,SQObjectPtr &b,int64_t func,int64_t &ret)
{
if(func < 0) {
if(!v->ObjCmp(a,b,ret)) return false;
}
else {
SQInteger top = sq_gettop(v);
int64_t top = sq_gettop(v);
sq_push(v, func);
sq_pushroottable(v);
v->Push(a);
@ -713,12 +713,12 @@ static bool _sort_compare(HRABBITVM v,SQObjectPtr &a,SQObjectPtr &b,SQInteger fu
return true;
}
static bool _hsort_sift_down(HRABBITVM v,SQArray *arr, SQInteger root, SQInteger bottom, SQInteger func)
static bool _hsort_sift_down(HRABBITVM v,SQArray *arr, int64_t root, int64_t bottom, int64_t func)
{
SQInteger maxChild;
SQInteger done = 0;
SQInteger ret;
SQInteger root2;
int64_t maxChild;
int64_t done = 0;
int64_t ret;
int64_t root2;
while (((root2 = root * 2) <= bottom) && (!done))
{
if (root2 == bottom) {
@ -753,11 +753,11 @@ static bool _hsort_sift_down(HRABBITVM v,SQArray *arr, SQInteger root, SQInteger
return true;
}
static bool _hsort(HRABBITVM v,SQObjectPtr &arr, SQInteger SQ_UNUSED_ARG(l), SQInteger SQ_UNUSED_ARG(r),SQInteger func)
static bool _hsort(HRABBITVM v,SQObjectPtr &arr, int64_t SQ_UNUSED_ARG(l), int64_t SQ_UNUSED_ARG(r),int64_t func)
{
SQArray *a = _array(arr);
SQInteger i;
SQInteger array_size = a->Size();
int64_t i;
int64_t array_size = a->Size();
for (i = (array_size / 2); i >= 0; i--) {
if(!_hsort_sift_down(v,a, i, array_size - 1,func)) return false;
}
@ -770,9 +770,9 @@ static bool _hsort(HRABBITVM v,SQObjectPtr &arr, SQInteger SQ_UNUSED_ARG(l), SQI
return true;
}
static SQInteger array_sort(HRABBITVM v)
static int64_t array_sort(HRABBITVM v)
{
SQInteger func = -1;
int64_t func = -1;
SQObjectPtr &o = stack_get(v,1);
if(_array(o)->Size() > 1) {
if(sq_gettop(v) == 2) func = 2;
@ -784,20 +784,20 @@ static SQInteger array_sort(HRABBITVM v)
return 1;
}
static SQInteger array_slice(HRABBITVM v)
static int64_t array_slice(HRABBITVM v)
{
SQInteger sidx,eidx;
int64_t sidx,eidx;
SQObjectPtr o;
if(get_slice_params(v,sidx,eidx,o)==-1)return -1;
SQInteger alen = _array(o)->Size();
int64_t alen = _array(o)->Size();
if(sidx < 0)sidx = alen + sidx;
if(eidx < 0)eidx = alen + eidx;
if(eidx < sidx)return sq_throwerror(v,_SC("wrong indexes"));
if(eidx > alen || sidx < 0)return sq_throwerror(v, _SC("slice out of range"));
SQArray *arr=SQArray::Create(_ss(v),eidx-sidx);
SQObjectPtr t;
SQInteger count=0;
for(SQInteger i=sidx;i<eidx;i++){
int64_t count=0;
for(int64_t i=sidx;i<eidx;i++){
_array(o)->Get(i,t);
arr->Set(count++,t);
}
@ -831,12 +831,12 @@ const SQRegFunction SQSharedState::_array_default_delegate_funcz[]={
};
//STRING DEFAULT DELEGATE//////////////////////////
static SQInteger string_slice(HRABBITVM v)
static int64_t string_slice(HRABBITVM v)
{
SQInteger sidx,eidx;
int64_t sidx,eidx;
SQObjectPtr o;
if(SQ_FAILED(get_slice_params(v,sidx,eidx,o)))return -1;
SQInteger slen = _string(o)->_len;
int64_t slen = _string(o)->_len;
if(sidx < 0)sidx = slen + sidx;
if(eidx < 0)eidx = slen + eidx;
if(eidx < sidx) return sq_throwerror(v,_SC("wrong indexes"));
@ -845,16 +845,16 @@ static SQInteger string_slice(HRABBITVM v)
return 1;
}
static SQInteger string_find(HRABBITVM v)
static int64_t string_find(HRABBITVM v)
{
SQInteger top,start_idx=0;
int64_t top,start_idx=0;
const SQChar *str,*substr,*ret;
if(((top=sq_gettop(v))>1) && SQ_SUCCEEDED(sq_getstring(v,1,&str)) && SQ_SUCCEEDED(sq_getstring(v,2,&substr))){
if(top>2)sq_getinteger(v,3,&start_idx);
if((sq_getsize(v,1)>start_idx) && (start_idx>=0)){
ret=scstrstr(&str[start_idx],substr);
if(ret){
sq_pushinteger(v,(SQInteger)(ret-str));
sq_pushinteger(v,(int64_t)(ret-str));
return 1;
}
}
@ -863,21 +863,21 @@ static SQInteger string_find(HRABBITVM v)
return sq_throwerror(v,_SC("invalid param"));
}
#define STRING_TOFUNCZ(func) static SQInteger string_##func(HRABBITVM v) \
#define STRING_TOFUNCZ(func) static int64_t string_##func(HRABBITVM v) \
{\
SQInteger sidx,eidx; \
int64_t sidx,eidx; \
SQObjectPtr str; \
if(SQ_FAILED(get_slice_params(v,sidx,eidx,str)))return -1; \
SQInteger slen = _string(str)->_len; \
int64_t slen = _string(str)->_len; \
if(sidx < 0)sidx = slen + sidx; \
if(eidx < 0)eidx = slen + eidx; \
if(eidx < sidx) return sq_throwerror(v,_SC("wrong indexes")); \
if(eidx > slen || sidx < 0) return sq_throwerror(v,_SC("slice out of range")); \
SQInteger len=_string(str)->_len; \
int64_t len=_string(str)->_len; \
const SQChar *sthis=_stringval(str); \
SQChar *snew=(_ss(v)->GetScratchPad(sq_rsl(len))); \
memcpy(snew,sthis,sq_rsl(len));\
for(SQInteger i=sidx;i<eidx;i++) snew[i] = func(sthis[i]); \
for(int64_t i=sidx;i<eidx;i++) snew[i] = func(sthis[i]); \
v->Push(SQString::Create(_ss(v),snew,len)); \
return 1; \
}
@ -910,12 +910,12 @@ const SQRegFunction SQSharedState::_number_default_delegate_funcz[]={
};
//CLOSURE DEFAULT DELEGATE//////////////////////////
static SQInteger closure_pcall(HRABBITVM v)
static int64_t closure_pcall(HRABBITVM v)
{
return SQ_SUCCEEDED(sq_call(v,sq_gettop(v)-1,SQTrue,SQFalse))?1:SQ_ERROR;
}
static SQInteger closure_call(HRABBITVM v)
static int64_t closure_call(HRABBITVM v)
{
SQObjectPtr &c = stack_get(v, -1);
if (sq_type(c) == OT_CLOSURE && (_closure(c)->_function->_bgenerator == false))
@ -925,59 +925,59 @@ static SQInteger closure_call(HRABBITVM v)
return SQ_SUCCEEDED(sq_call(v, sq_gettop(v) - 1, SQTrue, SQTrue)) ? 1 : SQ_ERROR;
}
static SQInteger _closure_acall(HRABBITVM v,SQBool raiseerror)
static int64_t _closure_acall(HRABBITVM v,SQBool raiseerror)
{
SQArray *aparams=_array(stack_get(v,2));
SQInteger nparams=aparams->Size();
int64_t nparams=aparams->Size();
v->Push(stack_get(v,1));
for(SQInteger i=0;i<nparams;i++)v->Push(aparams->_values[i]);
for(int64_t i=0;i<nparams;i++)v->Push(aparams->_values[i]);
return SQ_SUCCEEDED(sq_call(v,nparams,SQTrue,raiseerror))?1:SQ_ERROR;
}
static SQInteger closure_acall(HRABBITVM v)
static int64_t closure_acall(HRABBITVM v)
{
return _closure_acall(v,SQTrue);
}
static SQInteger closure_pacall(HRABBITVM v)
static int64_t closure_pacall(HRABBITVM v)
{
return _closure_acall(v,SQFalse);
}
static SQInteger closure_bindenv(HRABBITVM v)
static int64_t closure_bindenv(HRABBITVM v)
{
if(SQ_FAILED(sq_bindenv(v,1)))
return SQ_ERROR;
return 1;
}
static SQInteger closure_getroot(HRABBITVM v)
static int64_t closure_getroot(HRABBITVM v)
{
if(SQ_FAILED(sq_getclosureroot(v,-1)))
return SQ_ERROR;
return 1;
}
static SQInteger closure_setroot(HRABBITVM v)
static int64_t closure_setroot(HRABBITVM v)
{
if(SQ_FAILED(sq_setclosureroot(v,-2)))
return SQ_ERROR;
return 1;
}
static SQInteger closure_getinfos(HRABBITVM v) {
static int64_t closure_getinfos(HRABBITVM v) {
SQObject o = stack_get(v,1);
SQTable *res = SQTable::Create(_ss(v),4);
if(sq_type(o) == OT_CLOSURE) {
SQFunctionProto *f = _closure(o)->_function;
SQInteger nparams = f->_nparameters + (f->_varparams?1:0);
int64_t nparams = f->_nparameters + (f->_varparams?1:0);
SQObjectPtr params = SQArray::Create(_ss(v),nparams);
SQObjectPtr defparams = SQArray::Create(_ss(v),f->_ndefaultparams);
for(SQInteger n = 0; n<f->_nparameters; n++) {
_array(params)->Set((SQInteger)n,f->_parameters[n]);
for(int64_t n = 0; n<f->_nparameters; n++) {
_array(params)->Set((int64_t)n,f->_parameters[n]);
}
for(SQInteger j = 0; j<f->_ndefaultparams; j++) {
_array(defparams)->Set((SQInteger)j,_closure(o)->_defaultparams[j]);
for(int64_t j = 0; j<f->_ndefaultparams; j++) {
_array(defparams)->Set((int64_t)j,_closure(o)->_defaultparams[j]);
}
if(f->_varparams) {
_array(params)->Set(nparams-1,SQString::Create(_ss(v),_SC("..."),-1));
@ -998,8 +998,8 @@ static SQInteger closure_getinfos(HRABBITVM v) {
if(nc->_typecheck.size() > 0) {
typecheck =
SQArray::Create(_ss(v), nc->_typecheck.size());
for(SQUnsignedInteger n = 0; n<nc->_typecheck.size(); n++) {
_array(typecheck)->Set((SQInteger)n,nc->_typecheck[n]);
for(uint64_t n = 0; n<nc->_typecheck.size(); n++) {
_array(typecheck)->Set((int64_t)n,nc->_typecheck[n]);
}
}
res->NewSlot(SQString::Create(_ss(v),_SC("typecheck"),-1),typecheck);
@ -1025,7 +1025,7 @@ const SQRegFunction SQSharedState::_closure_default_delegate_funcz[]={
};
//GENERATOR DEFAULT DELEGATE
static SQInteger generator_getstatus(HRABBITVM v)
static int64_t generator_getstatus(HRABBITVM v)
{
SQObject &o=stack_get(v,1);
switch(_generator(o)->_state){
@ -1044,13 +1044,13 @@ const SQRegFunction SQSharedState::_generator_default_delegate_funcz[]={
};
//THREAD DEFAULT DELEGATE
static SQInteger thread_call(HRABBITVM v)
static int64_t thread_call(HRABBITVM v)
{
SQObjectPtr o = stack_get(v,1);
if(sq_type(o) == OT_THREAD) {
SQInteger nparams = sq_gettop(v);
int64_t nparams = sq_gettop(v);
_thread(o)->Push(_thread(o)->_roottable);
for(SQInteger i = 2; i<(nparams+1); i++)
for(int64_t i = 2; i<(nparams+1); i++)
sq_move(_thread(o),v,i);
if(SQ_SUCCEEDED(sq_call(_thread(o),nparams,SQTrue,SQTrue))) {
sq_move(v,_thread(o),-1);
@ -1063,12 +1063,12 @@ static SQInteger thread_call(HRABBITVM v)
return sq_throwerror(v,_SC("wrong parameter"));
}
static SQInteger thread_wakeup(HRABBITVM v)
static int64_t thread_wakeup(HRABBITVM v)
{
SQObjectPtr o = stack_get(v,1);
if(sq_type(o) == OT_THREAD) {
SQVM *thread = _thread(o);
SQInteger state = sq_getvmstate(thread);
int64_t state = sq_getvmstate(thread);
if(state != SQ_VMSTATE_SUSPENDED) {
switch(state) {
case SQ_VMSTATE_IDLE:
@ -1080,7 +1080,7 @@ static SQInteger thread_wakeup(HRABBITVM v)
}
}
SQInteger wakeupret = sq_gettop(v)>1?SQTrue:SQFalse;
int64_t wakeupret = sq_gettop(v)>1?SQTrue:SQFalse;
if(wakeupret) {
sq_move(thread,v,2);
}
@ -1099,12 +1099,12 @@ static SQInteger thread_wakeup(HRABBITVM v)
return sq_throwerror(v,_SC("wrong parameter"));
}
static SQInteger thread_wakeupthrow(HRABBITVM v)
static int64_t thread_wakeupthrow(HRABBITVM v)
{
SQObjectPtr o = stack_get(v,1);
if(sq_type(o) == OT_THREAD) {
SQVM *thread = _thread(o);
SQInteger state = sq_getvmstate(thread);
int64_t state = sq_getvmstate(thread);
if(state != SQ_VMSTATE_SUSPENDED) {
switch(state) {
case SQ_VMSTATE_IDLE:
@ -1140,7 +1140,7 @@ static SQInteger thread_wakeupthrow(HRABBITVM v)
return sq_throwerror(v,_SC("wrong parameter"));
}
static SQInteger thread_getstatus(HRABBITVM v)
static int64_t thread_getstatus(HRABBITVM v)
{
SQObjectPtr &o = stack_get(v,1);
switch(sq_getvmstate(_thread(o))) {
@ -1159,13 +1159,13 @@ static SQInteger thread_getstatus(HRABBITVM v)
return 1;
}
static SQInteger thread_getstackinfos(HRABBITVM v)
static int64_t thread_getstackinfos(HRABBITVM v)
{
SQObjectPtr o = stack_get(v,1);
if(sq_type(o) == OT_THREAD) {
SQVM *thread = _thread(o);
SQInteger threadtop = sq_gettop(thread);
SQInteger level;
int64_t threadtop = sq_gettop(thread);
int64_t level;
sq_getinteger(v,-1,&level);
SQRESULT res = __getcallstackinfos(thread,level);
if(SQ_FAILED(res))
@ -1203,29 +1203,29 @@ const SQRegFunction SQSharedState::_thread_default_delegate_funcz[] = {
{NULL,(SQFUNCTION)0,0,NULL}
};
static SQInteger class_getattributes(HRABBITVM v)
static int64_t class_getattributes(HRABBITVM v)
{
return SQ_SUCCEEDED(sq_getattributes(v,-2))?1:SQ_ERROR;
}
static SQInteger class_setattributes(HRABBITVM v)
static int64_t class_setattributes(HRABBITVM v)
{
return SQ_SUCCEEDED(sq_setattributes(v,-3))?1:SQ_ERROR;
}
static SQInteger class_instance(HRABBITVM v)
static int64_t class_instance(HRABBITVM v)
{
return SQ_SUCCEEDED(sq_createinstance(v,-1))?1:SQ_ERROR;
}
static SQInteger class_getbase(HRABBITVM v)
static int64_t class_getbase(HRABBITVM v)
{
return SQ_SUCCEEDED(sq_getbase(v,-1))?1:SQ_ERROR;
}
static SQInteger class_newmember(HRABBITVM v)
static int64_t class_newmember(HRABBITVM v)
{
SQInteger top = sq_gettop(v);
int64_t top = sq_gettop(v);
SQBool bstatic = SQFalse;
if(top == 5)
{
@ -1239,9 +1239,9 @@ static SQInteger class_newmember(HRABBITVM v)
return SQ_SUCCEEDED(sq_newmember(v,-4,bstatic))?1:SQ_ERROR;
}
static SQInteger class_rawnewmember(HRABBITVM v)
static int64_t class_rawnewmember(HRABBITVM v)
{
SQInteger top = sq_gettop(v);
int64_t top = sq_gettop(v);
SQBool bstatic = SQFalse;
if(top == 5)
{
@ -1271,7 +1271,7 @@ const SQRegFunction SQSharedState::_class_default_delegate_funcz[] = {
};
static SQInteger instance_getclass(HRABBITVM v)
static int64_t instance_getclass(HRABBITVM v)
{
if(SQ_SUCCEEDED(sq_getclass(v,1)))
return 1;
@ -1288,7 +1288,7 @@ const SQRegFunction SQSharedState::_instance_default_delegate_funcz[] = {
{NULL,(SQFUNCTION)0,0,NULL}
};
static SQInteger weakref_ref(HRABBITVM v)
static int64_t weakref_ref(HRABBITVM v)
{
if(SQ_FAILED(sq_getweakrefval(v,1)))
return SQ_ERROR;

View File

@ -62,7 +62,7 @@ bool SQClass::NewSlot(SQSharedState *ss,const SQObjectPtr &key,const SQObjectPtr
return true;
}
if(belongs_to_static_table) {
SQInteger mmidx;
int64_t mmidx;
if((sq_type(val) == OT_CLOSURE || sq_type(val) == OT_NATIVECLOSURE) &&
(mmidx = ss->GetMetaMethodIdxByName(key)) != -1) {
_metamethods[mmidx] = val;
@ -78,7 +78,7 @@ bool SQClass::NewSlot(SQSharedState *ss,const SQObjectPtr &key,const SQObjectPtr
bool isconstructor;
SQVM::IsEqual(ss->_constructoridx, key, isconstructor);
if(isconstructor) {
_constructoridx = (SQInteger)_methods.size();
_constructoridx = (int64_t)_methods.size();
}
SQClassMember m;
m.val = theval;
@ -104,10 +104,10 @@ SQInstance *SQClass::CreateInstance()
return SQInstance::Create(NULL,this);
}
SQInteger SQClass::Next(const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval)
int64_t SQClass::Next(const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval)
{
SQObjectPtr oval;
SQInteger idx = _members->Next(false,refpos,outkey,oval);
int64_t idx = _members->Next(false,refpos,outkey,oval);
if(idx != -1) {
if(_ismethod(oval)) {
outval = _methods[_member_idx(oval)].val;
@ -152,23 +152,23 @@ void SQInstance::Init(SQSharedState *ss)
_delegate = _class->_members;
}
SQInstance::SQInstance(SQSharedState *ss, SQClass *c, SQInteger memsize)
SQInstance::SQInstance(SQSharedState *ss, SQClass *c, int64_t memsize)
{
_memsize = memsize;
_class = c;
SQUnsignedInteger nvalues = _class->_defaultvalues.size();
for(SQUnsignedInteger n = 0; n < nvalues; n++) {
uint64_t nvalues = _class->_defaultvalues.size();
for(uint64_t n = 0; n < nvalues; n++) {
new (&_values[n]) SQObjectPtr(_class->_defaultvalues[n].val);
}
Init(ss);
}
SQInstance::SQInstance(SQSharedState *ss, SQInstance *i, SQInteger memsize)
SQInstance::SQInstance(SQSharedState *ss, SQInstance *i, int64_t memsize)
{
_memsize = memsize;
_class = i->_class;
SQUnsignedInteger nvalues = _class->_defaultvalues.size();
for(SQUnsignedInteger n = 0; n < nvalues; n++) {
uint64_t nvalues = _class->_defaultvalues.size();
for(uint64_t n = 0; n < nvalues; n++) {
new (&_values[n]) SQObjectPtr(i->_values[n]);
}
Init(ss);
@ -176,7 +176,7 @@ SQInstance::SQInstance(SQSharedState *ss, SQInstance *i, SQInteger memsize)
void SQInstance::Finalize()
{
SQUnsignedInteger nvalues = _class->_defaultvalues.size();
uint64_t nvalues = _class->_defaultvalues.size();
__ObjRelease(_class);
_NULL_SQOBJECT_VECTOR(_values,nvalues);
}

View File

@ -25,8 +25,8 @@ typedef sqvector<SQClassMember> SQClassMemberVec;
#define _ismethod(o) (_integer(o)&MEMBER_TYPE_METHOD)
#define _isfield(o) (_integer(o)&MEMBER_TYPE_FIELD)
#define _make_method_idx(i) ((SQInteger)(MEMBER_TYPE_METHOD|i))
#define _make_field_idx(i) ((SQInteger)(MEMBER_TYPE_FIELD|i))
#define _make_method_idx(i) ((int64_t)(MEMBER_TYPE_METHOD|i))
#define _make_field_idx(i) ((int64_t)(MEMBER_TYPE_FIELD|i))
#define _member_type(o) (_integer(o)&0xFF000000)
#define _member_idx(o) (_integer(o)&0x00FFFFFF)
@ -70,7 +70,7 @@ public:
sq_delete(this, SQClass);
}
void Finalize();
SQInteger Next(const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval);
int64_t Next(const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval);
SQInstance *CreateInstance();
SQTable *_members;
SQClass *_base;
@ -81,8 +81,8 @@ public:
SQUserPointer _typetag;
SQRELEASEHOOK _hook;
bool _locked;
SQInteger _constructoridx;
SQInteger _udsize;
int64_t _constructoridx;
int64_t _udsize;
};
#define calcinstancesize(_theclass_) \
@ -91,12 +91,12 @@ public:
struct SQInstance : public SQDelegable
{
void Init(SQSharedState *ss);
SQInstance(SQSharedState *ss, SQClass *c, SQInteger memsize);
SQInstance(SQSharedState *ss, SQInstance *c, SQInteger memsize);
SQInstance(SQSharedState *ss, SQClass *c, int64_t memsize);
SQInstance(SQSharedState *ss, SQInstance *c, int64_t memsize);
public:
static SQInstance* Create(SQSharedState *ss,SQClass *theclass) {
SQInteger size = calcinstancesize(theclass);
int64_t size = calcinstancesize(theclass);
SQInstance *newinst = (SQInstance *)SQ_MALLOC(size);
new (newinst) SQInstance(ss, theclass,size);
if(theclass->_udsize) {
@ -106,7 +106,7 @@ public:
}
SQInstance *Clone(SQSharedState *ss)
{
SQInteger size = calcinstancesize(_class);
int64_t size = calcinstancesize(_class);
SQInstance *newinst = (SQInstance *)SQ_MALLOC(size);
new (newinst) SQInstance(ss, this,size);
if(_class->_udsize) {
@ -141,7 +141,7 @@ public:
if (_hook) { _hook(_userpointer,0);}
_uiRef--;
if(_uiRef > 0) return;
SQInteger size = _memsize;
int64_t size = _memsize;
this->~SQInstance();
SQ_FREE(this, size);
}
@ -152,7 +152,7 @@ public:
SQClass *_class;
SQUserPointer _userpointer;
SQRELEASEHOOK _hook;
SQInteger _memsize;
int64_t _memsize;
SQObjectPtr _values[1];
};

View File

@ -22,7 +22,7 @@ private:
}
public:
static SQClosure *Create(SQSharedState *ss,SQFunctionProto *func,SQWeakRef *root){
SQInteger size = _CALC_CLOSURE_SIZE(func);
int64_t size = _CALC_CLOSURE_SIZE(func);
SQClosure *nc=(SQClosure*)SQ_MALLOC(size);
new (nc) SQClosure(ss,func);
nc->_outervalues = (SQObjectPtr *)(nc + 1);
@ -35,7 +35,7 @@ public:
}
void Release(){
SQFunctionProto *f = _function;
SQInteger size = _CALC_CLOSURE_SIZE(f);
int64_t size = _CALC_CLOSURE_SIZE(f);
_DESTRUCT_VECTOR(SQObjectPtr,f->_noutervalues,_outervalues);
_DESTRUCT_VECTOR(SQObjectPtr,f->_ndefaultparams,_defaultparams);
__ObjRelease(_function);
@ -98,7 +98,7 @@ public:
}
SQObjectPtr *_valptr; /* pointer to value on stack, or _value below */
SQInteger _idx; /* idx in stack array, for relocation */
int64_t _idx; /* idx in stack array, for relocation */
SQObjectPtr _value; /* value of outer after stack frame is closed */
SQOuter *_next; /* pointer to next outer when frame is open */
};
@ -131,7 +131,7 @@ public:
sq_delete(this,SQGenerator);
}
bool Yield(SQVM *v,SQInteger target);
bool Yield(SQVM *v,int64_t target);
bool Resume(SQVM *v,SQObjectPtr &dest);
SQObjectPtr _closure;
SQObjectPtrVec _stack;
@ -150,9 +150,9 @@ private:
_env = NULL;
}
public:
static SQNativeClosure *Create(SQSharedState *ss,SQFUNCTION func,SQInteger nouters)
static SQNativeClosure *Create(SQSharedState *ss,SQFUNCTION func,int64_t nouters)
{
SQInteger size = _CALC_NATVIVECLOSURE_SIZE(nouters);
int64_t size = _CALC_NATVIVECLOSURE_SIZE(nouters);
SQNativeClosure *nc=(SQNativeClosure*)SQ_MALLOC(size);
new (nc) SQNativeClosure(ss,func);
nc->_outervalues = (SQObjectPtr *)(nc + 1);
@ -176,16 +176,16 @@ public:
__ObjRelease(_env);
}
void Release(){
SQInteger size = _CALC_NATVIVECLOSURE_SIZE(_noutervalues);
int64_t size = _CALC_NATVIVECLOSURE_SIZE(_noutervalues);
_DESTRUCT_VECTOR(SQObjectPtr,_noutervalues,_outervalues);
this->~SQNativeClosure();
sq_free(this,size);
}
SQInteger _nparamscheck;
int64_t _nparamscheck;
SQIntVec _typecheck;
SQObjectPtr *_outervalues;
SQUnsignedInteger _noutervalues;
uint64_t _noutervalues;
SQWeakRef *_env;
SQFUNCTION _function;
SQObjectPtr _name;

View File

@ -25,16 +25,16 @@
#define OUTER 5
struct SQExpState {
SQInteger etype; /* expr. type; one of EXPR, OBJECT, BASE, OUTER or LOCAL */
SQInteger epos; /* expr. location on stack; -1 for OBJECT and BASE */
int64_t etype; /* expr. type; one of EXPR, OBJECT, BASE, OUTER or LOCAL */
int64_t epos; /* expr. location on stack; -1 for OBJECT and BASE */
bool donot_get; /* signal not to deref the next value */
};
#define MAX_COMPILER_ERROR_LEN 256
struct SQScope {
SQInteger outers;
SQInteger stacksize;
int64_t outers;
int64_t stacksize;
};
#define BEGIN_SCOPE() SQScope __oldscope__ = _scope; \
@ -53,7 +53,7 @@ struct SQScope {
_scope = __oldscope__; \
}
#define END_SCOPE() { SQInteger oldouters = _fs->_outers;\
#define END_SCOPE() { int64_t oldouters = _fs->_outers;\
if(_fs->GetStackSize() != _scope.stacksize) { \
_fs->SetStackSize(_scope.stacksize); \
if(oldouters != _fs->_outers) { \
@ -63,8 +63,8 @@ struct SQScope {
_scope = __oldscope__; \
}
#define BEGIN_BREAKBLE_BLOCK() SQInteger __nbreaks__=_fs->_unresolvedbreaks.size(); \
SQInteger __ncontinues__=_fs->_unresolvedcontinues.size(); \
#define BEGIN_BREAKBLE_BLOCK() int64_t __nbreaks__=_fs->_unresolvedbreaks.size(); \
int64_t __ncontinues__=_fs->_unresolvedcontinues.size(); \
_fs->_breaktargets.push_back(0);_fs->_continuetargets.push_back(0);
#define END_BREAKBLE_BLOCK(continue_target) {__nbreaks__=_fs->_unresolvedbreaks.size()-__nbreaks__; \
@ -99,7 +99,7 @@ public:
longjmp(_errorjmp,1);
}
void Lex(){ _token = _lex.Lex();}
SQObject Expect(SQInteger tok)
SQObject Expect(int64_t tok)
{
if(_token != tok) {
@ -159,7 +159,7 @@ public:
}
}
void MoveIfCurrentTargetIsLocal() {
SQInteger trg = _fs->TopTarget();
int64_t trg = _fs->TopTarget();
if(_fs->IsLocal(trg)) {
trg = _fs->PopTarget(); //pops the target and moves it
_fs->AddInstruction(_OP_MOVE, _fs->PushTarget(), trg);
@ -177,7 +177,7 @@ public:
_fs->AddParameter(_fs->CreateString(_SC("vargv")));
_fs->_varparams = true;
_fs->_sourcename = _sourcename;
SQInteger stacksize = _fs->GetStackSize();
int64_t stacksize = _fs->GetStackSize();
if(setjmp(_errorjmp) == 0) {
Lex();
while(_token > 0){
@ -234,7 +234,7 @@ public:
}
Lex();
if(!IsEndOfStatement()) {
SQInteger retexp = _fs->GetCurrentPos()+1;
int64_t retexp = _fs->GetCurrentPos()+1;
CommaExpr();
if(op == _OP_RETURN && _fs->_traps > 0)
_fs->AddInstruction(_OP_POPTRAP, _fs->_traps, 0);
@ -321,24 +321,24 @@ public:
}
void EmitDerefOp(SQOpcode op)
{
SQInteger val = _fs->PopTarget();
SQInteger key = _fs->PopTarget();
SQInteger src = _fs->PopTarget();
int64_t val = _fs->PopTarget();
int64_t key = _fs->PopTarget();
int64_t src = _fs->PopTarget();
_fs->AddInstruction(op,_fs->PushTarget(),src,key,val);
}
void Emit2ArgsOP(SQOpcode op, SQInteger p3 = 0)
void Emit2ArgsOP(SQOpcode op, int64_t p3 = 0)
{
SQInteger p2 = _fs->PopTarget(); //src in OP_GET
SQInteger p1 = _fs->PopTarget(); //key in OP_GET
int64_t p2 = _fs->PopTarget(); //src in OP_GET
int64_t p1 = _fs->PopTarget(); //key in OP_GET
_fs->AddInstruction(op,_fs->PushTarget(), p1, p2, p3);
}
void EmitCompoundArith(SQInteger tok, SQInteger etype, SQInteger pos)
void EmitCompoundArith(int64_t tok, int64_t etype, int64_t pos)
{
/* Generate code depending on the expression type */
switch(etype) {
case LOCAL:{
SQInteger p2 = _fs->PopTarget(); //src in OP_GET
SQInteger p1 = _fs->PopTarget(); //key in OP_GET
int64_t p2 = _fs->PopTarget(); //src in OP_GET
int64_t p1 = _fs->PopTarget(); //key in OP_GET
_fs->PushTarget(p1);
//EmitCompArithLocal(tok, p1, p1, p2);
_fs->AddInstruction(ChooseArithOpByToken(tok),p1, p2, p1, 0);
@ -348,17 +348,17 @@ public:
case OBJECT:
case BASE:
{
SQInteger val = _fs->PopTarget();
SQInteger key = _fs->PopTarget();
SQInteger src = _fs->PopTarget();
int64_t val = _fs->PopTarget();
int64_t key = _fs->PopTarget();
int64_t src = _fs->PopTarget();
/* _OP_COMPARITH mixes dest obj and source val in the arg1 */
_fs->AddInstruction(_OP_COMPARITH, _fs->PushTarget(), (src<<16)|val, key, ChooseCompArithCharByToken(tok));
}
break;
case OUTER:
{
SQInteger val = _fs->TopTarget();
SQInteger tmp = _fs->PushTarget();
int64_t val = _fs->TopTarget();
int64_t tmp = _fs->PushTarget();
_fs->AddInstruction(_OP_GETOUTER, tmp, pos);
_fs->AddInstruction(ChooseArithOpByToken(tok), tmp, val, tmp, 0);
_fs->PopTarget();
@ -387,9 +387,9 @@ public:
case TK_MULEQ:
case TK_DIVEQ:
case TK_MODEQ:{
SQInteger op = _token;
SQInteger ds = _es.etype;
SQInteger pos = _es.epos;
int64_t op = _token;
int64_t ds = _es.etype;
int64_t pos = _es.epos;
if(ds == EXPR) Error(_SC("can't assign expression"));
else if(ds == BASE) Error(_SC("'base' cannot be modified"));
Lex(); Expression();
@ -405,8 +405,8 @@ public:
switch(ds) {
case LOCAL:
{
SQInteger src = _fs->PopTarget();
SQInteger dst = _fs->TopTarget();
int64_t src = _fs->PopTarget();
int64_t dst = _fs->TopTarget();
_fs->AddInstruction(_OP_MOVE, dst, src);
}
break;
@ -416,8 +416,8 @@ public:
break;
case OUTER:
{
SQInteger src = _fs->PopTarget();
SQInteger dst = _fs->PushTarget();
int64_t src = _fs->PopTarget();
int64_t dst = _fs->PushTarget();
_fs->AddInstruction(_OP_SETOUTER, dst, pos, src);
}
}
@ -435,17 +435,17 @@ public:
case _SC('?'): {
Lex();
_fs->AddInstruction(_OP_JZ, _fs->PopTarget());
SQInteger jzpos = _fs->GetCurrentPos();
SQInteger trg = _fs->PushTarget();
int64_t jzpos = _fs->GetCurrentPos();
int64_t trg = _fs->PushTarget();
Expression();
SQInteger first_exp = _fs->PopTarget();
int64_t first_exp = _fs->PopTarget();
if(trg != first_exp) _fs->AddInstruction(_OP_MOVE, trg, first_exp);
SQInteger endfirstexp = _fs->GetCurrentPos();
int64_t endfirstexp = _fs->GetCurrentPos();
_fs->AddInstruction(_OP_JMP, 0, 0);
Expect(_SC(':'));
SQInteger jmppos = _fs->GetCurrentPos();
int64_t jmppos = _fs->GetCurrentPos();
Expression();
SQInteger second_exp = _fs->PopTarget();
int64_t second_exp = _fs->PopTarget();
if(trg != second_exp) _fs->AddInstruction(_OP_MOVE, trg, second_exp);
_fs->SetIntructionParam(jmppos, 1, _fs->GetCurrentPos() - jmppos);
_fs->SetIntructionParam(jzpos, 1, endfirstexp - jzpos + 1);
@ -464,11 +464,11 @@ public:
(this->*f)();
_es = es;
}
template<typename T> void BIN_EXP(SQOpcode op, T f,SQInteger op3 = 0)
template<typename T> void BIN_EXP(SQOpcode op, T f,int64_t op3 = 0)
{
Lex();
INVOKE_EXP(f);
SQInteger op1 = _fs->PopTarget();SQInteger op2 = _fs->PopTarget();
int64_t op1 = _fs->PopTarget();int64_t op2 = _fs->PopTarget();
_fs->AddInstruction(op, _fs->PushTarget(), op1, op2, op3);
_es.etype = EXPR;
}
@ -476,14 +476,14 @@ public:
{
LogicalAndExp();
for(;;) if(_token == TK_OR) {
SQInteger first_exp = _fs->PopTarget();
SQInteger trg = _fs->PushTarget();
int64_t first_exp = _fs->PopTarget();
int64_t trg = _fs->PushTarget();
_fs->AddInstruction(_OP_OR, trg, 0, first_exp, 0);
SQInteger jpos = _fs->GetCurrentPos();
int64_t jpos = _fs->GetCurrentPos();
if(trg != first_exp) _fs->AddInstruction(_OP_MOVE, trg, first_exp);
Lex(); INVOKE_EXP(&SQCompiler::LogicalOrExp);
_fs->SnoozeOpt();
SQInteger second_exp = _fs->PopTarget();
int64_t second_exp = _fs->PopTarget();
if(trg != second_exp) _fs->AddInstruction(_OP_MOVE, trg, second_exp);
_fs->SnoozeOpt();
_fs->SetIntructionParam(jpos, 1, (_fs->GetCurrentPos() - jpos));
@ -496,14 +496,14 @@ public:
BitwiseOrExp();
for(;;) switch(_token) {
case TK_AND: {
SQInteger first_exp = _fs->PopTarget();
SQInteger trg = _fs->PushTarget();
int64_t first_exp = _fs->PopTarget();
int64_t trg = _fs->PushTarget();
_fs->AddInstruction(_OP_AND, trg, 0, first_exp, 0);
SQInteger jpos = _fs->GetCurrentPos();
int64_t jpos = _fs->GetCurrentPos();
if(trg != first_exp) _fs->AddInstruction(_OP_MOVE, trg, first_exp);
Lex(); INVOKE_EXP(&SQCompiler::LogicalAndExp);
_fs->SnoozeOpt();
SQInteger second_exp = _fs->PopTarget();
int64_t second_exp = _fs->PopTarget();
if(trg != second_exp) _fs->AddInstruction(_OP_MOVE, trg, second_exp);
_fs->SnoozeOpt();
_fs->SetIntructionParam(jpos, 1, (_fs->GetCurrentPos() - jpos));
@ -569,7 +569,7 @@ public:
default: return;
}
}
SQOpcode ChooseArithOpByToken(SQInteger tok)
SQOpcode ChooseArithOpByToken(int64_t tok)
{
switch(tok) {
case TK_PLUSEQ: case '+': return _OP_ADD;
@ -581,9 +581,9 @@ public:
}
return _OP_ADD;
}
SQInteger ChooseCompArithCharByToken(SQInteger tok)
int64_t ChooseCompArithCharByToken(int64_t tok)
{
SQInteger oper;
int64_t oper;
switch(tok){
case TK_MINUSEQ: oper = '-'; break;
case TK_PLUSEQ: oper = '+'; break;
@ -617,7 +617,7 @@ public:
//if 'pos' != -1 the previous variable is a local variable
void PrefixedExpr()
{
SQInteger pos = Factor();
int64_t pos = Factor();
for(;;) {
switch(_token) {
case _SC('.'):
@ -659,7 +659,7 @@ public:
case TK_PLUSPLUS:
{
if(IsEndOfStatement()) return;
SQInteger diff = (_token==TK_MINUSMINUS) ? -1 : 1;
int64_t diff = (_token==TK_MINUSMINUS) ? -1 : 1;
Lex();
switch(_es.etype)
{
@ -670,13 +670,13 @@ public:
Emit2ArgsOP(_OP_PINC, diff);
break;
case LOCAL: {
SQInteger src = _fs->PopTarget();
int64_t src = _fs->PopTarget();
_fs->AddInstruction(_OP_PINCL, _fs->PushTarget(), src, 0, diff);
}
break;
case OUTER: {
SQInteger tmp1 = _fs->PushTarget();
SQInteger tmp2 = _fs->PushTarget();
int64_t tmp1 = _fs->PushTarget();
int64_t tmp2 = _fs->PushTarget();
_fs->AddInstruction(_OP_GETOUTER, tmp2, _es.epos);
_fs->AddInstruction(_OP_PINCL, tmp1, tmp2, 0, diff);
_fs->AddInstruction(_OP_SETOUTER, tmp2, _es.epos, tmp2);
@ -689,10 +689,10 @@ public:
case _SC('('):
switch(_es.etype) {
case OBJECT: {
SQInteger key = _fs->PopTarget(); /* location of the key */
SQInteger table = _fs->PopTarget(); /* location of the object */
SQInteger closure = _fs->PushTarget(); /* location for the closure */
SQInteger ttarget = _fs->PushTarget(); /* location for 'this' pointer */
int64_t key = _fs->PopTarget(); /* location of the key */
int64_t table = _fs->PopTarget(); /* location of the object */
int64_t closure = _fs->PushTarget(); /* location for the closure */
int64_t ttarget = _fs->PushTarget(); /* location for 'this' pointer */
_fs->AddInstruction(_OP_PREPCALL, closure, key, table, ttarget);
}
break;
@ -715,7 +715,7 @@ public:
}
}
}
SQInteger Factor()
int64_t Factor()
{
//_es.etype = EXPR;
switch(_token)
@ -743,7 +743,7 @@ public:
case TK_CONSTRUCTOR: id = _fs->CreateString(_SC("constructor"),11); break;
}
SQInteger pos = -1;
int64_t pos = -1;
Lex();
if((pos = _fs->GetLocalVariable(id)) != -1) {
/* Handle a local variable (includes 'this') */
@ -828,13 +828,13 @@ public:
break;
case _SC('['): {
_fs->AddInstruction(_OP_NEWOBJ, _fs->PushTarget(),0,0,NOT_ARRAY);
SQInteger apos = _fs->GetCurrentPos(),key = 0;
int64_t apos = _fs->GetCurrentPos(),key = 0;
Lex();
while(_token != _SC(']')) {
Expression();
if(_token == _SC(',')) Lex();
SQInteger val = _fs->PopTarget();
SQInteger array = _fs->TopTarget();
int64_t val = _fs->PopTarget();
int64_t array = _fs->TopTarget();
_fs->AddInstruction(_OP_APPENDARRAY, array, val, AAT_STACK);
key++;
}
@ -879,7 +879,7 @@ public:
_es.etype = EXPR;
return -1;
}
void EmitLoadConstInt(SQInteger value,SQInteger target)
void EmitLoadConstInt(int64_t value,int64_t target)
{
if(target < 0) {
target = _fs->PushTarget();
@ -891,13 +891,13 @@ public:
_fs->AddInstruction(_OP_LOAD, target, _fs->GetNumericConstant(value));
}
}
void EmitLoadConstFloat(SQFloat value,SQInteger target)
void EmitLoadConstFloat(float_t value,int64_t target)
{
if(target < 0) {
target = _fs->PushTarget();
}
if(sizeof(SQFloat) == sizeof(SQInt32)) {
_fs->AddInstruction(_OP_LOADFLOAT, target,*((SQInt32 *)&value));
if(sizeof(float_t) == sizeof(int32_t)) {
_fs->AddInstruction(_OP_LOADFLOAT, target,*((int32_t *)&value));
}
else {
_fs->AddInstruction(_OP_LOAD, target, _fs->GetNumericConstant(value));
@ -906,7 +906,7 @@ public:
void UnaryOP(SQOpcode op)
{
PrefixedExpr();
SQInteger src = _fs->PopTarget();
int64_t src = _fs->PopTarget();
_fs->AddInstruction(op, _fs->PushTarget(), src);
}
bool NeedGet()
@ -925,7 +925,7 @@ public:
}
void FunctionCallArgs(bool rawcall = false)
{
SQInteger nargs = 1;//this
int64_t nargs = 1;//this
while(_token != _SC(')')) {
Expression();
MoveIfCurrentTargetIsLocal();
@ -940,14 +940,14 @@ public:
if (nargs < 3) Error(_SC("rawcall requires at least 2 parameters (callee and this)"));
nargs -= 2; //removes callee and this from count
}
for(SQInteger i = 0; i < (nargs - 1); i++) _fs->PopTarget();
SQInteger stackbase = _fs->PopTarget();
SQInteger closure = _fs->PopTarget();
for(int64_t i = 0; i < (nargs - 1); i++) _fs->PopTarget();
int64_t stackbase = _fs->PopTarget();
int64_t closure = _fs->PopTarget();
_fs->AddInstruction(_OP_CALL, _fs->PushTarget(), closure, stackbase, nargs);
}
void ParseTableOrClass(SQInteger separator,SQInteger terminator)
void ParseTableOrClass(int64_t separator,int64_t terminator)
{
SQInteger tpos = _fs->GetCurrentPos(),nkeys = 0;
int64_t tpos = _fs->GetCurrentPos(),nkeys = 0;
while(_token != terminator) {
bool hasattrs = false;
bool isstatic = false;
@ -966,7 +966,7 @@ public:
switch(_token) {
case TK_FUNCTION:
case TK_CONSTRUCTOR:{
SQInteger tk = _token;
int64_t tk = _token;
Lex();
SQObject id = tk == TK_FUNCTION ? Expect(TK_IDENTIFIER) : _fs->CreateString(_SC("constructor"));
Expect(_SC('('));
@ -991,13 +991,13 @@ public:
}
if(_token == separator) Lex();//optional comma/semicolon
nkeys++;
SQInteger val = _fs->PopTarget();
SQInteger key = _fs->PopTarget();
SQInteger attrs = hasattrs ? _fs->PopTarget():-1;
int64_t val = _fs->PopTarget();
int64_t key = _fs->PopTarget();
int64_t attrs = hasattrs ? _fs->PopTarget():-1;
((void)attrs);
assert((hasattrs && (attrs == key-1)) || !hasattrs);
unsigned char flags = (hasattrs?NEW_SLOT_ATTRIBUTES_FLAG:0)|(isstatic?NEW_SLOT_STATIC_FLAG:0);
SQInteger table = _fs->TopTarget(); //<<BECAUSE OF THIS NO COMMON EMIT FUNC IS POSSIBLE
int64_t table = _fs->TopTarget(); //<<BECAUSE OF THIS NO COMMON EMIT FUNC IS POSSIBLE
if(separator == _SC(',')) { //hack recognizes a table from the separator
_fs->AddInstruction(_OP_NEWSLOT, 0xFF, table, key, val);
}
@ -1028,8 +1028,8 @@ public:
varname = Expect(TK_IDENTIFIER);
if(_token == _SC('=')) {
Lex(); Expression();
SQInteger src = _fs->PopTarget();
SQInteger dest = _fs->PushTarget();
int64_t src = _fs->PopTarget();
int64_t dest = _fs->PushTarget();
if(dest != src) _fs->AddInstruction(_OP_MOVE, dest, src);
}
else{
@ -1064,11 +1064,11 @@ public:
}
void IfStatement()
{
SQInteger jmppos;
int64_t jmppos;
bool haselse = false;
Lex(); Expect(_SC('(')); CommaExpr(); Expect(_SC(')'));
_fs->AddInstruction(_OP_JZ, _fs->PopTarget());
SQInteger jnepos = _fs->GetCurrentPos();
int64_t jnepos = _fs->GetCurrentPos();
@ -1086,7 +1086,7 @@ public:
}*/
SQInteger endifblock = _fs->GetCurrentPos();
int64_t endifblock = _fs->GetCurrentPos();
if(_token == TK_ELSE){
haselse = true;
//BEGIN_SCOPE();
@ -1102,7 +1102,7 @@ public:
}
void WhileStatement()
{
SQInteger jzpos, jmppos;
int64_t jzpos, jmppos;
jmppos = _fs->GetCurrentPos();
Lex(); Expect(_SC('(')); CommaExpr(); Expect(_SC(')'));
@ -1122,13 +1122,13 @@ public:
void DoWhileStatement()
{
Lex();
SQInteger jmptrg = _fs->GetCurrentPos();
int64_t jmptrg = _fs->GetCurrentPos();
BEGIN_BREAKBLE_BLOCK()
BEGIN_SCOPE();
Statement();
END_SCOPE();
Expect(TK_WHILE);
SQInteger continuetrg = _fs->GetCurrentPos();
int64_t continuetrg = _fs->GetCurrentPos();
Expect(_SC('(')); CommaExpr(); Expect(_SC(')'));
_fs->AddInstruction(_OP_JZ, _fs->PopTarget(), 1);
_fs->AddInstruction(_OP_JMP, 0, jmptrg - _fs->GetCurrentPos() - 1);
@ -1146,31 +1146,31 @@ public:
}
Expect(_SC(';'));
_fs->SnoozeOpt();
SQInteger jmppos = _fs->GetCurrentPos();
SQInteger jzpos = -1;
int64_t jmppos = _fs->GetCurrentPos();
int64_t jzpos = -1;
if(_token != _SC(';')) { CommaExpr(); _fs->AddInstruction(_OP_JZ, _fs->PopTarget()); jzpos = _fs->GetCurrentPos(); }
Expect(_SC(';'));
_fs->SnoozeOpt();
SQInteger expstart = _fs->GetCurrentPos() + 1;
int64_t expstart = _fs->GetCurrentPos() + 1;
if(_token != _SC(')')) {
CommaExpr();
_fs->PopTarget();
}
Expect(_SC(')'));
_fs->SnoozeOpt();
SQInteger expend = _fs->GetCurrentPos();
SQInteger expsize = (expend - expstart) + 1;
int64_t expend = _fs->GetCurrentPos();
int64_t expsize = (expend - expstart) + 1;
SQInstructionVec exp;
if(expsize > 0) {
for(SQInteger i = 0; i < expsize; i++)
for(int64_t i = 0; i < expsize; i++)
exp.push_back(_fs->GetInstruction(expstart + i));
_fs->PopInstructions(expsize);
}
BEGIN_BREAKBLE_BLOCK()
Statement();
SQInteger continuetrg = _fs->GetCurrentPos();
int64_t continuetrg = _fs->GetCurrentPos();
if(expsize > 0) {
for(SQInteger i = 0; i < expsize; i++)
for(int64_t i = 0; i < expsize; i++)
_fs->AddInstruction(exp[i]);
}
_fs->AddInstruction(_OP_JMP, 0, jmppos - _fs->GetCurrentPos() - 1, 0);
@ -1197,19 +1197,19 @@ public:
BEGIN_SCOPE();
//put the table in the stack(evaluate the table expression)
Expression(); Expect(_SC(')'));
SQInteger container = _fs->TopTarget();
int64_t container = _fs->TopTarget();
//push the index local var
SQInteger indexpos = _fs->PushLocalVariable(idxname);
int64_t indexpos = _fs->PushLocalVariable(idxname);
_fs->AddInstruction(_OP_LOADNULLS, indexpos,1);
//push the value local var
SQInteger valuepos = _fs->PushLocalVariable(valname);
int64_t valuepos = _fs->PushLocalVariable(valname);
_fs->AddInstruction(_OP_LOADNULLS, valuepos,1);
//push reference index
SQInteger itrpos = _fs->PushLocalVariable(_fs->CreateString(_SC("@ITERATOR@"))); //use invalid id to make it inaccessible
int64_t itrpos = _fs->PushLocalVariable(_fs->CreateString(_SC("@ITERATOR@"))); //use invalid id to make it inaccessible
_fs->AddInstruction(_OP_LOADNULLS, itrpos,1);
SQInteger jmppos = _fs->GetCurrentPos();
int64_t jmppos = _fs->GetCurrentPos();
_fs->AddInstruction(_OP_FOREACH, container, 0, indexpos);
SQInteger foreachpos = _fs->GetCurrentPos();
int64_t foreachpos = _fs->GetCurrentPos();
_fs->AddInstruction(_OP_POSTFOREACH, container, 0, indexpos);
//generate the statement code
BEGIN_BREAKBLE_BLOCK()
@ -1226,11 +1226,11 @@ public:
{
Lex(); Expect(_SC('(')); CommaExpr(); Expect(_SC(')'));
Expect(_SC('{'));
SQInteger expr = _fs->TopTarget();
int64_t expr = _fs->TopTarget();
bool bfirst = true;
SQInteger tonextcondjmp = -1;
SQInteger skipcondjmp = -1;
SQInteger __nbreaks__ = _fs->_unresolvedbreaks.size();
int64_t tonextcondjmp = -1;
int64_t skipcondjmp = -1;
int64_t __nbreaks__ = _fs->_unresolvedbreaks.size();
_fs->_breaktargets.push_back(0);
while(_token == TK_CASE) {
if(!bfirst) {
@ -1240,8 +1240,8 @@ public:
}
//condition
Lex(); Expression(); Expect(_SC(':'));
SQInteger trg = _fs->PopTarget();
SQInteger eqtarget = trg;
int64_t trg = _fs->PopTarget();
int64_t eqtarget = trg;
bool local = _fs->IsLocal(trg);
if(local) {
eqtarget = _fs->PushTarget(); //we need to allocate a extra reg
@ -1366,7 +1366,7 @@ public:
Expect(_SC('{'));
SQObject table = _fs->CreateTable();
SQInteger nval = 0;
int64_t nval = 0;
while(_token != _SC('}')) {
SQObject key = Expect(TK_IDENTIFIER);
SQObject val;
@ -1395,7 +1395,7 @@ public:
_fs->_traps++;
if(_fs->_breaktargets.size()) _fs->_breaktargets.top()++;
if(_fs->_continuetargets.size()) _fs->_continuetargets.top()++;
SQInteger trappos = _fs->GetCurrentPos();
int64_t trappos = _fs->GetCurrentPos();
{
BEGIN_SCOPE();
Statement();
@ -1406,19 +1406,19 @@ public:
if(_fs->_breaktargets.size()) _fs->_breaktargets.top()--;
if(_fs->_continuetargets.size()) _fs->_continuetargets.top()--;
_fs->AddInstruction(_OP_JMP, 0, 0);
SQInteger jmppos = _fs->GetCurrentPos();
int64_t jmppos = _fs->GetCurrentPos();
_fs->SetIntructionParam(trappos, 1, (_fs->GetCurrentPos() - trappos));
Expect(TK_CATCH); Expect(_SC('(')); exid = Expect(TK_IDENTIFIER); Expect(_SC(')'));
{
BEGIN_SCOPE();
SQInteger ex_target = _fs->PushLocalVariable(exid);
int64_t ex_target = _fs->PushLocalVariable(exid);
_fs->SetIntructionParam(trappos, 0, ex_target);
Statement();
_fs->SetIntructionParams(jmppos, 0, (_fs->GetCurrentPos() - jmppos), 0);
END_SCOPE();
}
}
void FunctionExp(SQInteger ftype,bool lambda = false)
void FunctionExp(int64_t ftype,bool lambda = false)
{
Lex(); Expect(_SC('('));
SQObjectPtr dummy;
@ -1427,8 +1427,8 @@ public:
}
void ClassExp()
{
SQInteger base = -1;
SQInteger attrs = -1;
int64_t base = -1;
int64_t attrs = -1;
if(_token == TK_EXTENDS) {
Lex(); Expression();
base = _fs->TopTarget();
@ -1461,10 +1461,10 @@ public:
}
_es = es;
}
void PrefixIncDec(SQInteger token)
void PrefixIncDec(int64_t token)
{
SQExpState es;
SQInteger diff = (token==TK_MINUSMINUS) ? -1 : 1;
int64_t diff = (token==TK_MINUSMINUS) ? -1 : 1;
Lex();
es = _es;
_es.donot_get = true;
@ -1476,12 +1476,12 @@ public:
Emit2ArgsOP(_OP_INC, diff);
}
else if(_es.etype==LOCAL) {
SQInteger src = _fs->TopTarget();
int64_t src = _fs->TopTarget();
_fs->AddInstruction(_OP_INCL, src, src, 0, diff);
}
else if(_es.etype==OUTER) {
SQInteger tmp = _fs->PushTarget();
int64_t tmp = _fs->PushTarget();
_fs->AddInstruction(_OP_GETOUTER, tmp, _es.epos);
_fs->AddInstruction(_OP_INCL, tmp, tmp, 0, diff);
_fs->AddInstruction(_OP_SETOUTER, tmp, _es.epos, tmp);
@ -1495,7 +1495,7 @@ public:
SQObject paramname;
funcstate->AddParameter(_fs->CreateString(_SC("this")));
funcstate->_sourcename = _sourcename;
SQInteger defparams = 0;
int64_t defparams = 0;
while(_token!=_SC(')')) {
if(_token == TK_VARPARAMS) {
if(defparams > 0) Error(_SC("function with default parameters cannot have variable number of parameters"));
@ -1522,7 +1522,7 @@ public:
}
}
Expect(_SC(')'));
for(SQInteger n = 0; n < defparams; n++) {
for(int64_t n = 0; n < defparams; n++) {
_fs->PopTarget();
}
@ -1546,20 +1546,20 @@ public:
_fs->_functions.push_back(func);
_fs->PopChildState();
}
void ResolveBreaks(SQFuncState *funcstate, SQInteger ntoresolve)
void ResolveBreaks(SQFuncState *funcstate, int64_t ntoresolve)
{
while(ntoresolve > 0) {
SQInteger pos = funcstate->_unresolvedbreaks.back();
int64_t pos = funcstate->_unresolvedbreaks.back();
funcstate->_unresolvedbreaks.pop_back();
//set the jmp instruction
funcstate->SetIntructionParams(pos, 0, funcstate->GetCurrentPos() - pos, 0);
ntoresolve--;
}
}
void ResolveContinues(SQFuncState *funcstate, SQInteger ntoresolve, SQInteger targetpos)
void ResolveContinues(SQFuncState *funcstate, int64_t ntoresolve, int64_t targetpos)
{
while(ntoresolve > 0) {
SQInteger pos = funcstate->_unresolvedcontinues.back();
int64_t pos = funcstate->_unresolvedcontinues.back();
funcstate->_unresolvedcontinues.pop_back();
//set the jmp instruction
funcstate->SetIntructionParams(pos, 0, targetpos - pos, 0);
@ -1567,14 +1567,14 @@ public:
}
}
private:
SQInteger _token;
int64_t _token;
SQFuncState *_fs;
SQObjectPtr _sourcename;
SQLexer _lex;
bool _lineinfo;
bool _raiseerror;
SQInteger _debugline;
SQInteger _debugop;
int64_t _debugline;
int64_t _debugop;
SQExpState _es;
SQScope _scope;
SQChar _compilererror[MAX_COMPILER_ERROR_LEN];

View File

@ -7,57 +7,33 @@
*/
#pragma once
#ifdef _SQ64
#include <etk/types.hpp>
#ifdef _MSC_VER
typedef __int64 SQInteger;
typedef unsigned __int64 SQUnsignedInteger;
typedef unsigned __int64 SQHash; /*should be the same size of a pointer*/
#else
typedef long long SQInteger;
typedef unsigned long long SQUnsignedInteger;
typedef unsigned long long SQHash; /*should be the same size of a pointer*/
#endif
typedef int SQInt32;
typedef unsigned int SQUnsignedInteger32;
#else
typedef int SQInteger;
typedef int SQInt32; /*must be 32 bits(also on 64bits processors)*/
typedef unsigned int SQUnsignedInteger32; /*must be 32 bits(also on 64bits processors)*/
typedef unsigned int SQUnsignedInteger;
typedef unsigned int SQHash; /*should be the same size of a pointer*/
#endif
// should be the same size of a pointer
using SQHash = size_t;
#ifdef SQUSEDOUBLE
typedef double SQFloat;
typedef double float_t;
#else
typedef float SQFloat;
typedef float float_t;
#endif
#if defined(SQUSEDOUBLE) && !defined(_SQ64) || !defined(SQUSEDOUBLE) && defined(_SQ64)
#ifdef _MSC_VER
typedef __int64 SQRawObjectVal; //must be 64bits
#else
typedef long long SQRawObjectVal; //must be 64bits
#endif
typedef uint64_t SQRawObjectVal; //must be 64bits
#define SQ_OBJECT_RAWINIT() { _unVal.raw = 0; }
#else
typedef SQUnsignedInteger SQRawObjectVal; //is 32 bits on 32 bits builds and 64 bits otherwise
typedef uint64_t SQRawObjectVal; //is 32 bits on 32 bits builds and 64 bits otherwise
#define SQ_OBJECT_RAWINIT()
#endif
#ifndef SQ_ALIGNMENT // SQ_ALIGNMENT shall be less than or equal to SQ_MALLOC alignments, and its value shall be power of 2.
#if defined(SQUSEDOUBLE) || defined(_SQ64)
#ifndef SQ_ALIGNMENT
#define SQ_ALIGNMENT 8
#else
#define SQ_ALIGNMENT 4
#endif
#endif
typedef void* SQUserPointer;
typedef SQUnsignedInteger SQBool;
typedef SQInteger SQRESULT;
typedef uint64_t SQBool;
typedef int64_t SQRESULT;
#ifdef SQUNICODE
#include <wchar.h>
@ -146,9 +122,5 @@ typedef char SQChar;
#endif
#ifdef _SQ64
#define _PRINT_INT_PREC _SC("ll")
#define _PRINT_INT_FMT _SC("%lld")
#else
#define _PRINT_INT_FMT _SC("%d")
#endif
#define _PRINT_INT_FMT _SC("%ld")

View File

@ -13,9 +13,9 @@
#include <rabbit/sqclosure.hpp>
#include <rabbit/sqstring.hpp>
SQRESULT sq_getfunctioninfo(HRABBITVM v,SQInteger level,SQFunctionInfo *fi)
SQRESULT sq_getfunctioninfo(HRABBITVM v,int64_t level,SQFunctionInfo *fi)
{
SQInteger cssize = v->_callsstacksize;
int64_t cssize = v->_callsstacksize;
if (cssize > level) {
SQVM::CallInfo &ci = v->_callsstack[cssize-level-1];
if(sq_isclosure(ci._closure)) {
@ -31,9 +31,9 @@ SQRESULT sq_getfunctioninfo(HRABBITVM v,SQInteger level,SQFunctionInfo *fi)
return sq_throwerror(v,_SC("the object is not a closure"));
}
SQRESULT sq_stackinfos(HRABBITVM v, SQInteger level, SQStackInfos *si)
SQRESULT sq_stackinfos(HRABBITVM v, int64_t level, SQStackInfos *si)
{
SQInteger cssize = v->_callsstacksize;
int64_t cssize = v->_callsstacksize;
if (cssize > level) {
memset(si, 0, sizeof(SQStackInfos));
SQVM::CallInfo &ci = v->_callsstack[cssize-level-1];
@ -65,7 +65,7 @@ void SQVM::Raise_Error(const SQChar *s, ...)
{
va_list vl;
va_start(vl, s);
SQInteger buffersize = (SQInteger)scstrlen(s)+(NUMBER_MAX_CHAR*2);
int64_t buffersize = (int64_t)scstrlen(s)+(NUMBER_MAX_CHAR*2);
scvsprintf(_sp(sq_rsl(buffersize)),buffersize, s, vl);
va_end(vl);
_lasterror = SQString::Create(_ss(this),_spval,-1);
@ -106,13 +106,13 @@ void SQVM::Raise_CompareError(const SQObject &o1, const SQObject &o2)
}
void SQVM::Raise_ParamTypeError(SQInteger nparam,SQInteger typemask,SQInteger type)
void SQVM::Raise_ParamTypeError(int64_t nparam,int64_t typemask,int64_t type)
{
SQObjectPtr exptypes = SQString::Create(_ss(this), _SC(""), -1);
SQInteger found = 0;
for(SQInteger i=0; i<16; i++)
int64_t found = 0;
for(int64_t i=0; i<16; i++)
{
SQInteger mask = ((SQInteger)1) << i;
int64_t mask = ((int64_t)1) << i;
if(typemask & (mask)) {
if(found>0) StringCat(exptypes,SQString::Create(_ss(this), _SC("|"), -1), exptypes);
found ++;

View File

@ -46,12 +46,12 @@ struct SQLocalVarInfo
_pos=lvi._pos;
}
SQObjectPtr _name;
SQUnsignedInteger _start_op;
SQUnsignedInteger _end_op;
SQUnsignedInteger _pos;
uint64_t _start_op;
uint64_t _end_op;
uint64_t _pos;
};
struct SQLineInfo { SQInteger _line;SQInteger _op; };
struct SQLineInfo { int64_t _line;int64_t _op; };
typedef sqvector<SQOuterVar> SQOuterVarVec;
typedef sqvector<SQLocalVarInfo> SQLocalVarInfoVec;
@ -61,7 +61,7 @@ typedef sqvector<SQLineInfo> SQLineInfoVec;
+((ni-1)*sizeof(SQInstruction))+(nl*sizeof(SQObjectPtr)) \
+(nparams*sizeof(SQObjectPtr))+(nfuncs*sizeof(SQObjectPtr)) \
+(nouters*sizeof(SQOuterVar))+(nlineinf*sizeof(SQLineInfo)) \
+(localinf*sizeof(SQLocalVarInfo))+(defparams*sizeof(SQInteger)))
+(localinf*sizeof(SQLocalVarInfo))+(defparams*sizeof(int64_t)))
struct SQFunctionProto : public SQRefCounted
@ -71,10 +71,10 @@ private:
~SQFunctionProto();
public:
static SQFunctionProto *Create(SQSharedState *ss,SQInteger ninstructions,
SQInteger nliterals,SQInteger nparameters,
SQInteger nfunctions,SQInteger noutervalues,
SQInteger nlineinfos,SQInteger nlocalvarinfos,SQInteger ndefaultparams)
static SQFunctionProto *Create(SQSharedState *ss,int64_t ninstructions,
int64_t nliterals,int64_t nparameters,
int64_t nfunctions,int64_t noutervalues,
int64_t nlineinfos,int64_t nlocalvarinfos,int64_t ndefaultparams)
{
SQFunctionProto *f;
//I compact the whole class and members in a single memory allocation
@ -93,7 +93,7 @@ public:
f->_nlineinfos = nlineinfos;
f->_localvarinfos = (SQLocalVarInfo *)&f->_lineinfos[nlineinfos];
f->_nlocalvarinfos = nlocalvarinfos;
f->_defaultparams = (SQInteger *)&f->_localvarinfos[nlocalvarinfos];
f->_defaultparams = (int64_t *)&f->_localvarinfos[nlocalvarinfos];
f->_ndefaultparams = ndefaultparams;
_CONSTRUCT_VECTOR(SQObjectPtr,f->_nliterals,f->_literals);
@ -111,42 +111,42 @@ public:
_DESTRUCT_VECTOR(SQOuterVar,_noutervalues,_outervalues);
//_DESTRUCT_VECTOR(SQLineInfo,_nlineinfos,_lineinfos); //not required are 2 integers
_DESTRUCT_VECTOR(SQLocalVarInfo,_nlocalvarinfos,_localvarinfos);
SQInteger size = _FUNC_SIZE(_ninstructions,_nliterals,_nparameters,_nfunctions,_noutervalues,_nlineinfos,_nlocalvarinfos,_ndefaultparams);
int64_t size = _FUNC_SIZE(_ninstructions,_nliterals,_nparameters,_nfunctions,_noutervalues,_nlineinfos,_nlocalvarinfos,_ndefaultparams);
this->~SQFunctionProto();
sq_vm_free(this,size);
}
const SQChar* GetLocal(SQVM *v,SQUnsignedInteger stackbase,SQUnsignedInteger nseq,SQUnsignedInteger nop);
SQInteger GetLine(SQInstruction *curr);
const SQChar* GetLocal(SQVM *v,uint64_t stackbase,uint64_t nseq,uint64_t nop);
int64_t GetLine(SQInstruction *curr);
bool Save(SQVM *v,SQUserPointer up,SQWRITEFUNC write);
static bool Load(SQVM *v,SQUserPointer up,SQREADFUNC read,SQObjectPtr &ret);
SQObjectPtr _sourcename;
SQObjectPtr _name;
SQInteger _stacksize;
int64_t _stacksize;
bool _bgenerator;
SQInteger _varparams;
int64_t _varparams;
SQInteger _nlocalvarinfos;
int64_t _nlocalvarinfos;
SQLocalVarInfo *_localvarinfos;
SQInteger _nlineinfos;
int64_t _nlineinfos;
SQLineInfo *_lineinfos;
SQInteger _nliterals;
int64_t _nliterals;
SQObjectPtr *_literals;
SQInteger _nparameters;
int64_t _nparameters;
SQObjectPtr *_parameters;
SQInteger _nfunctions;
int64_t _nfunctions;
SQObjectPtr *_functions;
SQInteger _noutervalues;
int64_t _noutervalues;
SQOuterVar *_outervalues;
SQInteger _ndefaultparams;
SQInteger *_defaultparams;
int64_t _ndefaultparams;
int64_t *_defaultparams;
SQInteger _ninstructions;
int64_t _ninstructions;
SQInstruction _instructions[1];
};

View File

@ -120,15 +120,15 @@ void SQFuncState::Error(const SQChar *err)
#ifdef _DEBUG_DUMP
void SQFuncState::Dump(SQFunctionProto *func)
{
SQUnsignedInteger n=0,i;
SQInteger si;
scprintf(_SC("SQInstruction sizeof %d\n"),(SQInt32)sizeof(SQInstruction));
scprintf(_SC("SQObject sizeof %d\n"), (SQInt32)sizeof(SQObject));
uint64_t n=0,i;
int64_t si;
scprintf(_SC("SQInstruction sizeof %d\n"),(int32_t)sizeof(SQInstruction));
scprintf(_SC("SQObject sizeof %d\n"), (int32_t)sizeof(SQObject));
scprintf(_SC("--------------------------------------------------------------------\n"));
scprintf(_SC("*****FUNCTION [%s]\n"),sq_type(func->_name)==OT_STRING?_stringval(func->_name):_SC("unknown"));
scprintf(_SC("-----LITERALS\n"));
SQObjectPtr refidx,key,val;
SQInteger idx;
int64_t idx;
SQObjectPtrVec templiterals;
templiterals.resize(_nliterals);
while((idx=_table(_literals)->Next(false,refidx,key,val))!=-1) {
@ -136,7 +136,7 @@ void SQFuncState::Dump(SQFunctionProto *func)
templiterals[_integer(val)]=key;
}
for(i=0;i<templiterals.size();i++){
scprintf(_SC("[%d] "), (SQInt32)n);
scprintf(_SC("[%d] "), (int32_t)n);
DumpLiteral(templiterals[i]);
scprintf(_SC("\n"));
n++;
@ -146,7 +146,7 @@ void SQFuncState::Dump(SQFunctionProto *func)
scprintf(_SC("<<VARPARAMS>>\n"));
n=0;
for(i=0;i<_parameters.size();i++){
scprintf(_SC("[%d] "), (SQInt32)n);
scprintf(_SC("[%d] "), (int32_t)n);
DumpLiteral(_parameters[i]);
scprintf(_SC("\n"));
n++;
@ -154,13 +154,13 @@ void SQFuncState::Dump(SQFunctionProto *func)
scprintf(_SC("-----LOCALS\n"));
for(si=0;si<func->_nlocalvarinfos;si++){
SQLocalVarInfo lvi=func->_localvarinfos[si];
scprintf(_SC("[%d] %s \t%d %d\n"), (SQInt32)lvi._pos,_stringval(lvi._name), (SQInt32)lvi._start_op, (SQInt32)lvi._end_op);
scprintf(_SC("[%d] %s \t%d %d\n"), (int32_t)lvi._pos,_stringval(lvi._name), (int32_t)lvi._start_op, (int32_t)lvi._end_op);
n++;
}
scprintf(_SC("-----LINE INFO\n"));
for(i=0;i<_lineinfos.size();i++){
SQLineInfo li=_lineinfos[i];
scprintf(_SC("op [%d] line [%d] \n"), (SQInt32)li._op, (SQInt32)li._line);
scprintf(_SC("op [%d] line [%d] \n"), (int32_t)li._op, (int32_t)li._line);
n++;
}
scprintf(_SC("-----dump\n"));
@ -169,12 +169,12 @@ void SQFuncState::Dump(SQFunctionProto *func)
SQInstruction &inst=_instructions[i];
if(inst.op==_OP_LOAD || inst.op==_OP_DLOAD || inst.op==_OP_PREPCALLK || inst.op==_OP_GETK ){
SQInteger lidx = inst._arg1;
scprintf(_SC("[%03d] %15s %d "), (SQInt32)n,g_InstrDesc[inst.op].name,inst._arg0);
int64_t lidx = inst._arg1;
scprintf(_SC("[%03d] %15s %d "), (int32_t)n,g_InstrDesc[inst.op].name,inst._arg0);
if(lidx >= 0xFFFFFFFF)
scprintf(_SC("null"));
else {
SQInteger refidx;
int64_t refidx;
SQObjectPtr val,key,refo;
while(((refidx=_table(_literals)->Next(false,refo,key,val))!= -1) && (_integer(val) != lidx)) {
refo = refidx;
@ -190,7 +190,7 @@ void SQFuncState::Dump(SQFunctionProto *func)
if(lidx >= 0xFFFFFFFF)
scprintf(_SC("null"));
else {
SQInteger refidx;
int64_t refidx;
SQObjectPtr val,key,refo;
while(((refidx=_table(_literals)->Next(false,refo,key,val))!= -1) && (_integer(val) != lidx)) {
refo = refidx;
@ -201,33 +201,33 @@ void SQFuncState::Dump(SQFunctionProto *func)
}
}
else if(inst.op==_OP_LOADFLOAT) {
scprintf(_SC("[%03d] %15s %d %f %d %d\n"), (SQInt32)n,g_InstrDesc[inst.op].name,inst._arg0,*((SQFloat*)&inst._arg1),inst._arg2,inst._arg3);
scprintf(_SC("[%03d] %15s %d %f %d %d\n"), (int32_t)n,g_InstrDesc[inst.op].name,inst._arg0,*((float_t*)&inst._arg1),inst._arg2,inst._arg3);
}
/* else if(inst.op==_OP_ARITH){
scprintf(_SC("[%03d] %15s %d %d %d %c\n"),n,g_InstrDesc[inst.op].name,inst._arg0,inst._arg1,inst._arg2,inst._arg3);
}*/
else {
scprintf(_SC("[%03d] %15s %d %d %d %d\n"), (SQInt32)n,g_InstrDesc[inst.op].name,inst._arg0,inst._arg1,inst._arg2,inst._arg3);
scprintf(_SC("[%03d] %15s %d %d %d %d\n"), (int32_t)n,g_InstrDesc[inst.op].name,inst._arg0,inst._arg1,inst._arg2,inst._arg3);
}
n++;
}
scprintf(_SC("-----\n"));
scprintf(_SC("stack size[%d]\n"), (SQInt32)func->_stacksize);
scprintf(_SC("stack size[%d]\n"), (int32_t)func->_stacksize);
scprintf(_SC("--------------------------------------------------------------------\n\n"));
}
#endif
SQInteger SQFuncState::GetNumericConstant(const SQInteger cons)
int64_t SQFuncState::GetNumericConstant(const int64_t cons)
{
return GetConstant(SQObjectPtr(cons));
}
SQInteger SQFuncState::GetNumericConstant(const SQFloat cons)
int64_t SQFuncState::GetNumericConstant(const float_t cons)
{
return GetConstant(SQObjectPtr(cons));
}
SQInteger SQFuncState::GetConstant(const SQObject &cons)
int64_t SQFuncState::GetConstant(const SQObject &cons)
{
SQObjectPtr val;
if(!_table(_literals)->Get(cons,val))
@ -243,36 +243,36 @@ SQInteger SQFuncState::GetConstant(const SQObject &cons)
return _integer(val);
}
void SQFuncState::SetIntructionParams(SQInteger pos,SQInteger arg0,SQInteger arg1,SQInteger arg2,SQInteger arg3)
void SQFuncState::SetIntructionParams(int64_t pos,int64_t arg0,int64_t arg1,int64_t arg2,int64_t arg3)
{
_instructions[pos]._arg0=(unsigned char)*((SQUnsignedInteger *)&arg0);
_instructions[pos]._arg1=(SQInt32)*((SQUnsignedInteger *)&arg1);
_instructions[pos]._arg2=(unsigned char)*((SQUnsignedInteger *)&arg2);
_instructions[pos]._arg3=(unsigned char)*((SQUnsignedInteger *)&arg3);
_instructions[pos]._arg0=(unsigned char)*((uint64_t *)&arg0);
_instructions[pos]._arg1=(int32_t)*((uint64_t *)&arg1);
_instructions[pos]._arg2=(unsigned char)*((uint64_t *)&arg2);
_instructions[pos]._arg3=(unsigned char)*((uint64_t *)&arg3);
}
void SQFuncState::SetIntructionParam(SQInteger pos,SQInteger arg,SQInteger val)
void SQFuncState::SetIntructionParam(int64_t pos,int64_t arg,int64_t val)
{
switch(arg){
case 0:_instructions[pos]._arg0=(unsigned char)*((SQUnsignedInteger *)&val);break;
case 1:case 4:_instructions[pos]._arg1=(SQInt32)*((SQUnsignedInteger *)&val);break;
case 2:_instructions[pos]._arg2=(unsigned char)*((SQUnsignedInteger *)&val);break;
case 3:_instructions[pos]._arg3=(unsigned char)*((SQUnsignedInteger *)&val);break;
case 0:_instructions[pos]._arg0=(unsigned char)*((uint64_t *)&val);break;
case 1:case 4:_instructions[pos]._arg1=(int32_t)*((uint64_t *)&val);break;
case 2:_instructions[pos]._arg2=(unsigned char)*((uint64_t *)&val);break;
case 3:_instructions[pos]._arg3=(unsigned char)*((uint64_t *)&val);break;
};
}
SQInteger SQFuncState::AllocStackPos()
int64_t SQFuncState::AllocStackPos()
{
SQInteger npos=_vlocals.size();
int64_t npos=_vlocals.size();
_vlocals.push_back(SQLocalVarInfo());
if(_vlocals.size()>((SQUnsignedInteger)_stacksize)) {
if(_vlocals.size()>((uint64_t)_stacksize)) {
if(_stacksize>MAX_FUNC_STACKSIZE) Error(_SC("internal compiler error: too many locals"));
_stacksize=_vlocals.size();
}
return npos;
}
SQInteger SQFuncState::PushTarget(SQInteger n)
int64_t SQFuncState::PushTarget(int64_t n)
{
if(n!=-1){
_targetstack.push_back(n);
@ -283,16 +283,16 @@ SQInteger SQFuncState::PushTarget(SQInteger n)
return n;
}
SQInteger SQFuncState::GetUpTarget(SQInteger n){
int64_t SQFuncState::GetUpTarget(int64_t n){
return _targetstack[((_targetstack.size()-1)-n)];
}
SQInteger SQFuncState::TopTarget(){
int64_t SQFuncState::TopTarget(){
return _targetstack.back();
}
SQInteger SQFuncState::PopTarget()
int64_t SQFuncState::PopTarget()
{
SQUnsignedInteger npos=_targetstack.back();
uint64_t npos=_targetstack.back();
assert(npos < _vlocals.size());
SQLocalVarInfo &t = _vlocals[npos];
if(sq_type(t._name)==OT_NULL){
@ -302,15 +302,15 @@ SQInteger SQFuncState::PopTarget()
return npos;
}
SQInteger SQFuncState::GetStackSize()
int64_t SQFuncState::GetStackSize()
{
return _vlocals.size();
}
SQInteger SQFuncState::CountOuters(SQInteger stacksize)
int64_t SQFuncState::CountOuters(int64_t stacksize)
{
SQInteger outers = 0;
SQInteger k = _vlocals.size() - 1;
int64_t outers = 0;
int64_t k = _vlocals.size() - 1;
while(k >= stacksize) {
SQLocalVarInfo &lvi = _vlocals[k];
k--;
@ -321,9 +321,9 @@ SQInteger SQFuncState::CountOuters(SQInteger stacksize)
return outers;
}
void SQFuncState::SetStackSize(SQInteger n)
void SQFuncState::SetStackSize(int64_t n)
{
SQInteger size=_vlocals.size();
int64_t size=_vlocals.size();
while(size>n){
size--;
SQLocalVarInfo lvi = _vlocals.back();
@ -348,30 +348,30 @@ bool SQFuncState::IsConstant(const SQObject &name,SQObject &e)
return false;
}
bool SQFuncState::IsLocal(SQUnsignedInteger stkpos)
bool SQFuncState::IsLocal(uint64_t stkpos)
{
if(stkpos>=_vlocals.size())return false;
else if(sq_type(_vlocals[stkpos]._name)!=OT_NULL)return true;
return false;
}
SQInteger SQFuncState::PushLocalVariable(const SQObject &name)
int64_t SQFuncState::PushLocalVariable(const SQObject &name)
{
SQInteger pos=_vlocals.size();
int64_t pos=_vlocals.size();
SQLocalVarInfo lvi;
lvi._name=name;
lvi._start_op=GetCurrentPos()+1;
lvi._pos=_vlocals.size();
_vlocals.push_back(lvi);
if(_vlocals.size()>((SQUnsignedInteger)_stacksize))_stacksize=_vlocals.size();
if(_vlocals.size()>((uint64_t)_stacksize))_stacksize=_vlocals.size();
return pos;
}
SQInteger SQFuncState::GetLocalVariable(const SQObject &name)
int64_t SQFuncState::GetLocalVariable(const SQObject &name)
{
SQInteger locals=_vlocals.size();
int64_t locals=_vlocals.size();
while(locals>=1){
SQLocalVarInfo &lvi = _vlocals[locals-1];
if(sq_type(lvi._name)==OT_STRING && _string(lvi._name)==_string(name)){
@ -382,33 +382,33 @@ SQInteger SQFuncState::GetLocalVariable(const SQObject &name)
return -1;
}
void SQFuncState::MarkLocalAsOuter(SQInteger pos)
void SQFuncState::MarkLocalAsOuter(int64_t pos)
{
SQLocalVarInfo &lvi = _vlocals[pos];
lvi._end_op = UINT_MINUS_ONE;
_outers++;
}
SQInteger SQFuncState::GetOuterVariable(const SQObject &name)
int64_t SQFuncState::GetOuterVariable(const SQObject &name)
{
SQInteger outers = _outervalues.size();
for(SQInteger i = 0; i<outers; i++) {
int64_t outers = _outervalues.size();
for(int64_t i = 0; i<outers; i++) {
if(_string(_outervalues[i]._name) == _string(name))
return i;
}
SQInteger pos=-1;
int64_t pos=-1;
if(_parent) {
pos = _parent->GetLocalVariable(name);
if(pos == -1) {
pos = _parent->GetOuterVariable(name);
if(pos != -1) {
_outervalues.push_back(SQOuterVar(name,SQObjectPtr(SQInteger(pos)),otOUTER)); //local
_outervalues.push_back(SQOuterVar(name,SQObjectPtr(int64_t(pos)),otOUTER)); //local
return _outervalues.size() - 1;
}
}
else {
_parent->MarkLocalAsOuter(pos);
_outervalues.push_back(SQOuterVar(name,SQObjectPtr(SQInteger(pos)),otLOCAL)); //local
_outervalues.push_back(SQOuterVar(name,SQObjectPtr(int64_t(pos)),otLOCAL)); //local
return _outervalues.size() - 1;
@ -423,7 +423,7 @@ void SQFuncState::AddParameter(const SQObject &name)
_parameters.push_back(name);
}
void SQFuncState::AddLineInfos(SQInteger line,bool lineop,bool force)
void SQFuncState::AddLineInfos(int64_t line,bool lineop,bool force)
{
if(_lastline!=line || force){
SQLineInfo li;
@ -438,8 +438,8 @@ void SQFuncState::AddLineInfos(SQInteger line,bool lineop,bool force)
void SQFuncState::DiscardTarget()
{
SQInteger discardedtarget = PopTarget();
SQInteger size = _instructions.size();
int64_t discardedtarget = PopTarget();
int64_t size = _instructions.size();
if(size > 0 && _optimization){
SQInstruction &pi = _instructions[size-1];//previous instruction
switch(pi.op) {
@ -453,7 +453,7 @@ void SQFuncState::DiscardTarget()
void SQFuncState::AddInstruction(SQInstruction &i)
{
SQInteger size = _instructions.size();
int64_t size = _instructions.size();
if(size > 0 && _optimization){ //simple optimizer
SQInstruction &pi = _instructions[size-1];//previous instruction
switch(i.op) {
@ -505,7 +505,7 @@ void SQFuncState::AddInstruction(SQInstruction &i)
}
break;
case _OP_APPENDARRAY: {
SQInteger aat = -1;
int64_t aat = -1;
switch(pi.op) {
case _OP_LOAD: aat = AAT_LITERAL; break;
case _OP_LOADINT: aat = AAT_INT; break;
@ -584,17 +584,17 @@ void SQFuncState::AddInstruction(SQInstruction &i)
_instructions.push_back(i);
}
SQObject SQFuncState::CreateString(const SQChar *s,SQInteger len)
SQObject SQFuncState::CreateString(const SQChar *s,int64_t len)
{
SQObjectPtr ns(SQString::Create(_sharedstate,s,len));
_table(_strings)->NewSlot(ns,(SQInteger)1);
_table(_strings)->NewSlot(ns,(int64_t)1);
return ns;
}
SQObject SQFuncState::CreateTable()
{
SQObjectPtr nt(SQTable::Create(_sharedstate,0));
_table(_strings)->NewSlot(nt,(SQInteger)1);
_table(_strings)->NewSlot(nt,(int64_t)1);
return nt;
}
@ -606,7 +606,7 @@ SQFunctionProto *SQFuncState::BuildProto()
_lineinfos.size(),_localvarinfos.size(),_defaultparams.size());
SQObjectPtr refidx,key,val;
SQInteger idx;
int64_t idx;
f->_stacksize = _stacksize;
f->_sourcename = _sourcename;
@ -618,12 +618,12 @@ SQFunctionProto *SQFuncState::BuildProto()
refidx=idx;
}
for(SQUnsignedInteger nf = 0; nf < _functions.size(); nf++) f->_functions[nf] = _functions[nf];
for(SQUnsignedInteger np = 0; np < _parameters.size(); np++) f->_parameters[np] = _parameters[np];
for(SQUnsignedInteger no = 0; no < _outervalues.size(); no++) f->_outervalues[no] = _outervalues[no];
for(SQUnsignedInteger nl = 0; nl < _localvarinfos.size(); nl++) f->_localvarinfos[nl] = _localvarinfos[nl];
for(SQUnsignedInteger ni = 0; ni < _lineinfos.size(); ni++) f->_lineinfos[ni] = _lineinfos[ni];
for(SQUnsignedInteger nd = 0; nd < _defaultparams.size(); nd++) f->_defaultparams[nd] = _defaultparams[nd];
for(uint64_t nf = 0; nf < _functions.size(); nf++) f->_functions[nf] = _functions[nf];
for(uint64_t np = 0; np < _parameters.size(); np++) f->_parameters[np] = _parameters[np];
for(uint64_t no = 0; no < _outervalues.size(); no++) f->_outervalues[no] = _outervalues[no];
for(uint64_t nl = 0; nl < _localvarinfos.size(); nl++) f->_localvarinfos[nl] = _localvarinfos[nl];
for(uint64_t ni = 0; ni < _lineinfos.size(); ni++) f->_lineinfos[ni] = _lineinfos[ni];
for(uint64_t nd = 0; nd < _defaultparams.size(); nd++) f->_defaultparams[nd] = _defaultparams[nd];
memcpy(f->_instructions,&_instructions[0],_instructions.size()*sizeof(SQInstruction));

View File

@ -19,45 +19,45 @@ struct SQFuncState
void Error(const SQChar *err);
SQFuncState *PushChildState(SQSharedState *ss);
void PopChildState();
void AddInstruction(SQOpcode _op,SQInteger arg0=0,SQInteger arg1=0,SQInteger arg2=0,SQInteger arg3=0){SQInstruction i(_op,arg0,arg1,arg2,arg3);AddInstruction(i);}
void AddInstruction(SQOpcode _op,int64_t arg0=0,int64_t arg1=0,int64_t arg2=0,int64_t arg3=0){SQInstruction i(_op,arg0,arg1,arg2,arg3);AddInstruction(i);}
void AddInstruction(SQInstruction &i);
void SetIntructionParams(SQInteger pos,SQInteger arg0,SQInteger arg1,SQInteger arg2=0,SQInteger arg3=0);
void SetIntructionParam(SQInteger pos,SQInteger arg,SQInteger val);
SQInstruction &GetInstruction(SQInteger pos){return _instructions[pos];}
void PopInstructions(SQInteger size){for(SQInteger i=0;i<size;i++)_instructions.pop_back();}
void SetStackSize(SQInteger n);
SQInteger CountOuters(SQInteger stacksize);
void SetIntructionParams(int64_t pos,int64_t arg0,int64_t arg1,int64_t arg2=0,int64_t arg3=0);
void SetIntructionParam(int64_t pos,int64_t arg,int64_t val);
SQInstruction &GetInstruction(int64_t pos){return _instructions[pos];}
void PopInstructions(int64_t size){for(int64_t i=0;i<size;i++)_instructions.pop_back();}
void SetStackSize(int64_t n);
int64_t CountOuters(int64_t stacksize);
void SnoozeOpt(){_optimization=false;}
void AddDefaultParam(SQInteger trg) { _defaultparams.push_back(trg); }
SQInteger GetDefaultParamCount() { return _defaultparams.size(); }
SQInteger GetCurrentPos(){return _instructions.size()-1;}
SQInteger GetNumericConstant(const SQInteger cons);
SQInteger GetNumericConstant(const SQFloat cons);
SQInteger PushLocalVariable(const SQObject &name);
void AddDefaultParam(int64_t trg) { _defaultparams.push_back(trg); }
int64_t GetDefaultParamCount() { return _defaultparams.size(); }
int64_t GetCurrentPos(){return _instructions.size()-1;}
int64_t GetNumericConstant(const int64_t cons);
int64_t GetNumericConstant(const float_t cons);
int64_t PushLocalVariable(const SQObject &name);
void AddParameter(const SQObject &name);
//void AddOuterValue(const SQObject &name);
SQInteger GetLocalVariable(const SQObject &name);
void MarkLocalAsOuter(SQInteger pos);
SQInteger GetOuterVariable(const SQObject &name);
SQInteger GenerateCode();
SQInteger GetStackSize();
SQInteger CalcStackFrameSize();
void AddLineInfos(SQInteger line,bool lineop,bool force=false);
int64_t GetLocalVariable(const SQObject &name);
void MarkLocalAsOuter(int64_t pos);
int64_t GetOuterVariable(const SQObject &name);
int64_t GenerateCode();
int64_t GetStackSize();
int64_t CalcStackFrameSize();
void AddLineInfos(int64_t line,bool lineop,bool force=false);
SQFunctionProto *BuildProto();
SQInteger AllocStackPos();
SQInteger PushTarget(SQInteger n=-1);
SQInteger PopTarget();
SQInteger TopTarget();
SQInteger GetUpTarget(SQInteger n);
int64_t AllocStackPos();
int64_t PushTarget(int64_t n=-1);
int64_t PopTarget();
int64_t TopTarget();
int64_t GetUpTarget(int64_t n);
void DiscardTarget();
bool IsLocal(SQUnsignedInteger stkpos);
SQObject CreateString(const SQChar *s,SQInteger len = -1);
bool IsLocal(uint64_t stkpos);
SQObject CreateString(const SQChar *s,int64_t len = -1);
SQObject CreateTable();
bool IsConstant(const SQObject &name,SQObject &e);
SQInteger _returnexp;
int64_t _returnexp;
SQLocalVarInfoVec _vlocals;
SQIntVec _targetstack;
SQInteger _stacksize;
int64_t _stacksize;
bool _varparams;
bool _bgenerator;
SQIntVec _unresolvedbreaks;
@ -71,20 +71,20 @@ struct SQFuncState
SQObjectPtr _strings;
SQObjectPtr _name;
SQObjectPtr _sourcename;
SQInteger _nliterals;
int64_t _nliterals;
SQLineInfoVec _lineinfos;
SQFuncState *_parent;
SQIntVec _scope_blocks;
SQIntVec _breaktargets;
SQIntVec _continuetargets;
SQIntVec _defaultparams;
SQInteger _lastline;
SQInteger _traps; //contains number of nested exception traps
SQInteger _outers;
int64_t _lastline;
int64_t _traps; //contains number of nested exception traps
int64_t _outers;
bool _optimization;
SQSharedState *_sharedstate;
sqvector<SQFuncState*> _childstates;
SQInteger GetConstant(const SQObject &cons);
int64_t GetConstant(const SQObject &cons);
private:
CompilerErrorFunc _errfunc;
void *_errtarget;

View File

@ -21,7 +21,7 @@
#define INIT_TEMP_STRING() { _longstr.resize(0);}
#define APPEND_CHAR(c) { _longstr.push_back(c);}
#define TERMINATE_BUFFER() {_longstr.push_back(_SC('\0'));}
#define ADD_KEYWORD(key,id) _keywords->NewSlot( SQString::Create(ss, _SC(#key)) ,SQInteger(id))
#define ADD_KEYWORD(key,id) _keywords->NewSlot( SQString::Create(ss, _SC(#key)) ,int64_t(id))
SQLexer::SQLexer(){}
SQLexer::~SQLexer()
@ -91,7 +91,7 @@ void SQLexer::Error(const SQChar *err)
void SQLexer::Next()
{
SQInteger t = _readf(_up);
int64_t t = _readf(_up);
if(t > MAX_CHAR) Error(_SC("Invalid character"));
if(t != 0) {
_currdata = (LexChar)t;
@ -101,13 +101,13 @@ void SQLexer::Next()
_reached_eof = SQTrue;
}
const SQChar *SQLexer::Tok2Str(SQInteger tok)
const SQChar *SQLexer::Tok2Str(int64_t tok)
{
SQObjectPtr itr, key, val;
SQInteger nitr;
int64_t nitr;
while((nitr = _keywords->Next(false,itr, key, val)) != -1) {
itr = (SQInteger)nitr;
if(((SQInteger)_integer(val)) == tok)
itr = (int64_t)nitr;
if(((int64_t)_integer(val)) == tok)
return _stringval(key);
}
return NULL;
@ -130,7 +130,7 @@ void SQLexer::LexLineComment()
do { NEXT(); } while (CUR_CHAR != _SC('\n') && (!IS_EOB()));
}
SQInteger SQLexer::Lex()
int64_t SQLexer::Lex()
{
_lasttokenline = _currentline;
while(CUR_CHAR != RABBIT_EOB) {
@ -202,7 +202,7 @@ SQInteger SQLexer::Lex()
if (CUR_CHAR != _SC('=')){ RETURN_TOKEN('!')}
else { NEXT(); RETURN_TOKEN(TK_NE); }
case _SC('@'): {
SQInteger stype;
int64_t stype;
NEXT();
if(CUR_CHAR != _SC('"')) {
RETURN_TOKEN('@');
@ -214,7 +214,7 @@ SQInteger SQLexer::Lex()
}
case _SC('"'):
case _SC('\''): {
SQInteger stype;
int64_t stype;
if((stype=ReadString(CUR_CHAR,false))!=-1){
RETURN_TOKEN(stype);
}
@ -222,7 +222,7 @@ SQInteger SQLexer::Lex()
}
case _SC('{'): case _SC('}'): case _SC('('): case _SC(')'): case _SC('['): case _SC(']'):
case _SC(';'): case _SC(','): case _SC('?'): case _SC('^'): case _SC('~'):
{SQInteger ret = CUR_CHAR;
{int64_t ret = CUR_CHAR;
NEXT(); RETURN_TOKEN(ret); }
case _SC('.'):
NEXT();
@ -265,15 +265,15 @@ SQInteger SQLexer::Lex()
return 0;
default:{
if (scisdigit(CUR_CHAR)) {
SQInteger ret = ReadNumber();
int64_t ret = ReadNumber();
RETURN_TOKEN(ret);
}
else if (scisalpha(CUR_CHAR) || CUR_CHAR == _SC('_')) {
SQInteger t = ReadID();
int64_t t = ReadID();
RETURN_TOKEN(t);
}
else {
SQInteger c = CUR_CHAR;
int64_t c = CUR_CHAR;
if (sciscntrl((int)c)) Error(_SC("unexpected character(control)"));
NEXT();
RETURN_TOKEN(c);
@ -285,22 +285,22 @@ SQInteger SQLexer::Lex()
return 0;
}
SQInteger SQLexer::GetIDType(const SQChar *s,SQInteger len)
int64_t SQLexer::GetIDType(const SQChar *s,int64_t len)
{
SQObjectPtr t;
if(_keywords->GetStr(s,len, t)) {
return SQInteger(_integer(t));
return int64_t(_integer(t));
}
return TK_IDENTIFIER;
}
#ifdef SQUNICODE
#if WCHAR_SIZE == 2
SQInteger SQLexer::AddUTF16(SQUnsignedInteger ch)
int64_t SQLexer::AddUTF16(uint64_t ch)
{
if (ch >= 0x10000)
{
SQUnsignedInteger code = (ch - 0x10000);
uint64_t code = (ch - 0x10000);
APPEND_CHAR((SQChar)(0xD800 | (code >> 10)));
APPEND_CHAR((SQChar)(0xDC00 | (code & 0x3FF)));
return 2;
@ -312,7 +312,7 @@ SQInteger SQLexer::AddUTF16(SQUnsignedInteger ch)
}
#endif
#else
SQInteger SQLexer::AddUTF8(SQUnsignedInteger ch)
int64_t SQLexer::AddUTF8(uint64_t ch)
{
if (ch < 0x80) {
APPEND_CHAR((char)ch);
@ -340,11 +340,11 @@ SQInteger SQLexer::AddUTF8(SQUnsignedInteger ch)
}
#endif
SQInteger SQLexer::ProcessStringHexEscape(SQChar *dest, SQInteger maxdigits)
int64_t SQLexer::ProcessStringHexEscape(SQChar *dest, int64_t maxdigits)
{
NEXT();
if (!isxdigit(CUR_CHAR)) Error(_SC("hexadecimal number expected"));
SQInteger n = 0;
int64_t n = 0;
while (isxdigit(CUR_CHAR) && n < maxdigits) {
dest[n] = CUR_CHAR;
n++;
@ -354,14 +354,14 @@ SQInteger SQLexer::ProcessStringHexEscape(SQChar *dest, SQInteger maxdigits)
return n;
}
SQInteger SQLexer::ReadString(SQInteger ndelim,bool verbatim)
int64_t SQLexer::ReadString(int64_t ndelim,bool verbatim)
{
INIT_TEMP_STRING();
NEXT();
if(IS_EOB()) return -1;
for(;;) {
while(CUR_CHAR != ndelim) {
SQInteger x = CUR_CHAR;
int64_t x = CUR_CHAR;
switch (x) {
case RABBIT_EOB:
Error(_SC("unfinished string"));
@ -379,7 +379,7 @@ SQInteger SQLexer::ReadString(SQInteger ndelim,bool verbatim)
NEXT();
switch(CUR_CHAR) {
case _SC('x'): {
const SQInteger maxdigits = sizeof(SQChar) * 2;
const int64_t maxdigits = sizeof(SQChar) * 2;
SQChar temp[maxdigits + 1];
ProcessStringHexEscape(temp, maxdigits);
SQChar *stemp;
@ -388,7 +388,7 @@ SQInteger SQLexer::ReadString(SQInteger ndelim,bool verbatim)
break;
case _SC('U'):
case _SC('u'): {
const SQInteger maxdigits = CUR_CHAR == 'u' ? 4 : 8;
const int64_t maxdigits = CUR_CHAR == 'u' ? 4 : 8;
SQChar temp[8 + 1];
ProcessStringHexEscape(temp, maxdigits);
SQChar *stemp;
@ -435,7 +435,7 @@ SQInteger SQLexer::ReadString(SQInteger ndelim,bool verbatim)
}
}
TERMINATE_BUFFER();
SQInteger len = _longstr.size()-1;
int64_t len = _longstr.size()-1;
if(ndelim == _SC('\'')) {
if(len == 0) Error(_SC("empty constant"));
if(len > 1) Error(_SC("constant too long"));
@ -446,7 +446,7 @@ SQInteger SQLexer::ReadString(SQInteger ndelim,bool verbatim)
return TK_STRING_LITERAL;
}
void LexHexadecimal(const SQChar *s,SQUnsignedInteger *res)
void LexHexadecimal(const SQChar *s,uint64_t *res)
{
*res = 0;
while(*s != 0)
@ -457,7 +457,7 @@ void LexHexadecimal(const SQChar *s,SQUnsignedInteger *res)
}
}
void LexInteger(const SQChar *s,SQUnsignedInteger *res)
void LexInteger(const SQChar *s,uint64_t *res)
{
*res = 0;
while(*s != 0)
@ -466,9 +466,9 @@ void LexInteger(const SQChar *s,SQUnsignedInteger *res)
}
}
SQInteger scisodigit(SQInteger c) { return c >= _SC('0') && c <= _SC('7'); }
int64_t scisodigit(int64_t c) { return c >= _SC('0') && c <= _SC('7'); }
void LexOctal(const SQChar *s,SQUnsignedInteger *res)
void LexOctal(const SQChar *s,uint64_t *res)
{
*res = 0;
while(*s != 0)
@ -478,18 +478,18 @@ void LexOctal(const SQChar *s,SQUnsignedInteger *res)
}
}
SQInteger isexponent(SQInteger c) { return c == 'e' || c=='E'; }
int64_t isexponent(int64_t c) { return c == 'e' || c=='E'; }
#define MAX_HEX_DIGITS (sizeof(SQInteger)*2)
SQInteger SQLexer::ReadNumber()
#define MAX_HEX_DIGITS (sizeof(int64_t)*2)
int64_t SQLexer::ReadNumber()
{
#define TINT 1
#define TFLOAT 2
#define THEX 3
#define TSCIENTIFIC 4
#define TOCTAL 5
SQInteger type = TINT, firstchar = CUR_CHAR;
int64_t type = TINT, firstchar = CUR_CHAR;
SQChar *sTemp;
INIT_TEMP_STRING();
NEXT();
@ -536,24 +536,24 @@ SQInteger SQLexer::ReadNumber()
switch(type) {
case TSCIENTIFIC:
case TFLOAT:
_fvalue = (SQFloat)scstrtod(&_longstr[0],&sTemp);
_fvalue = (float_t)scstrtod(&_longstr[0],&sTemp);
return TK_FLOAT;
case TINT:
LexInteger(&_longstr[0],(SQUnsignedInteger *)&_nvalue);
LexInteger(&_longstr[0],(uint64_t *)&_nvalue);
return TK_INTEGER;
case THEX:
LexHexadecimal(&_longstr[0],(SQUnsignedInteger *)&_nvalue);
LexHexadecimal(&_longstr[0],(uint64_t *)&_nvalue);
return TK_INTEGER;
case TOCTAL:
LexOctal(&_longstr[0],(SQUnsignedInteger *)&_nvalue);
LexOctal(&_longstr[0],(uint64_t *)&_nvalue);
return TK_INTEGER;
}
return 0;
}
SQInteger SQLexer::ReadID()
int64_t SQLexer::ReadID()
{
SQInteger res;
int64_t res;
INIT_TEMP_STRING();
do {
APPEND_CHAR(CUR_CHAR);

View File

@ -19,35 +19,35 @@ struct SQLexer
~SQLexer();
void Init(SQSharedState *ss,SQLEXREADFUNC rg,SQUserPointer up,CompilerErrorFunc efunc,void *ed);
void Error(const SQChar *err);
SQInteger Lex();
const SQChar *Tok2Str(SQInteger tok);
int64_t Lex();
const SQChar *Tok2Str(int64_t tok);
private:
SQInteger GetIDType(const SQChar *s,SQInteger len);
SQInteger ReadString(SQInteger ndelim,bool verbatim);
SQInteger ReadNumber();
int64_t GetIDType(const SQChar *s,int64_t len);
int64_t ReadString(int64_t ndelim,bool verbatim);
int64_t ReadNumber();
void LexBlockComment();
void LexLineComment();
SQInteger ReadID();
int64_t ReadID();
void Next();
#ifdef SQUNICODE
#if WCHAR_SIZE == 2
SQInteger AddUTF16(SQUnsignedInteger ch);
int64_t AddUTF16(uint64_t ch);
#endif
#else
SQInteger AddUTF8(SQUnsignedInteger ch);
int64_t AddUTF8(uint64_t ch);
#endif
SQInteger ProcessStringHexEscape(SQChar *dest, SQInteger maxdigits);
SQInteger _curtoken;
int64_t ProcessStringHexEscape(SQChar *dest, int64_t maxdigits);
int64_t _curtoken;
SQTable *_keywords;
SQBool _reached_eof;
public:
SQInteger _prevtoken;
SQInteger _currentline;
SQInteger _lasttokenline;
SQInteger _currentcolumn;
int64_t _prevtoken;
int64_t _currentline;
int64_t _lasttokenline;
int64_t _currentcolumn;
const SQChar *_svalue;
SQInteger _nvalue;
SQFloat _fvalue;
int64_t _nvalue;
float_t _fvalue;
SQLEXREADFUNC _readf;
SQUserPointer _up;
LexChar _currdata;

View File

@ -9,9 +9,9 @@
#include <rabbit/sqpcheader.hpp>
#ifndef SQ_EXCLUDE_DEFAULT_MEMFUNCTIONS
void *sq_vm_malloc(SQUnsignedInteger size){ return malloc(size); }
void *sq_vm_malloc(uint64_t size){ return malloc(size); }
void *sq_vm_realloc(void *p, SQUnsignedInteger SQ_UNUSED_ARG(oldsize), SQUnsignedInteger size){ return realloc(p, size); }
void *sq_vm_realloc(void *p, uint64_t SQ_UNUSED_ARG(oldsize), uint64_t size){ return realloc(p, size); }
void sq_vm_free(void *p, SQUnsignedInteger SQ_UNUSED_ARG(size)){ free(p); }
void sq_vm_free(void *p, uint64_t SQ_UNUSED_ARG(size)){ free(p); }
#endif

View File

@ -50,7 +50,7 @@ const SQChar *GetTypeName(const SQObjectPtr &obj1)
return IdType2Name(sq_type(obj1));
}
SQString *SQString::Create(SQSharedState *ss,const SQChar *s,SQInteger len)
SQString *SQString::Create(SQSharedState *ss,const SQChar *s,int64_t len)
{
SQString *str=ADD_STRING(ss,s,len);
return str;
@ -61,12 +61,12 @@ void SQString::Release()
REMOVE_STRING(_sharedstate,this);
}
SQInteger SQString::Next(const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval)
int64_t SQString::Next(const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval)
{
SQInteger idx = (SQInteger)TranslateIndex(refpos);
int64_t idx = (int64_t)TranslateIndex(refpos);
while(idx < _len){
outkey = (SQInteger)idx;
outval = (SQInteger)((SQUnsignedInteger)_val[idx]);
outkey = (int64_t)idx;
outval = (int64_t)((uint64_t)_val[idx]);
//return idx for the next iteration
return ++idx;
}
@ -74,13 +74,13 @@ SQInteger SQString::Next(const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjec
return -1;
}
SQUnsignedInteger TranslateIndex(const SQObjectPtr &idx)
uint64_t TranslateIndex(const SQObjectPtr &idx)
{
switch(sq_type(idx)){
case OT_NULL:
return 0;
case OT_INTEGER:
return (SQUnsignedInteger)_integer(idx);
return (uint64_t)_integer(idx);
default: assert(0); break;
}
return 0;
@ -135,26 +135,26 @@ bool SQDelegable::SetDelegate(SQTable *mt)
return true;
}
bool SQGenerator::Yield(SQVM *v,SQInteger target)
bool SQGenerator::Yield(SQVM *v,int64_t target)
{
if(_state==eSuspended) { v->Raise_Error(_SC("internal vm error, yielding dead generator")); return false;}
if(_state==eDead) { v->Raise_Error(_SC("internal vm error, yielding a dead generator")); return false; }
SQInteger size = v->_top-v->_stackbase;
int64_t size = v->_top-v->_stackbase;
_stack.resize(size);
SQObject _this = v->_stack[v->_stackbase];
_stack._vals[0] = ISREFCOUNTED(sq_type(_this)) ? SQObjectPtr(_refcounted(_this)->GetWeakRef(sq_type(_this))) : _this;
for(SQInteger n =1; n<target; n++) {
for(int64_t n =1; n<target; n++) {
_stack._vals[n] = v->_stack[v->_stackbase+n];
}
for(SQInteger j =0; j < size; j++)
for(int64_t j =0; j < size; j++)
{
v->_stack[v->_stackbase+j].Null();
}
_ci = *v->ci;
_ci._generator=NULL;
for(SQInteger i=0;i<_ci._etraps;i++) {
for(int64_t i=0;i<_ci._etraps;i++) {
_etraps.push_back(v->_etraps.top());
v->_etraps.pop_back();
// store relative stack base and size in case of resume to other _top
@ -170,14 +170,14 @@ bool SQGenerator::Resume(SQVM *v,SQObjectPtr &dest)
{
if(_state==eDead){ v->Raise_Error(_SC("resuming dead generator")); return false; }
if(_state==eRunning){ v->Raise_Error(_SC("resuming active generator")); return false; }
SQInteger size = _stack.size();
SQInteger target = &dest - &(v->_stack._vals[v->_stackbase]);
int64_t size = _stack.size();
int64_t target = &dest - &(v->_stack._vals[v->_stackbase]);
assert(target>=0 && target<=255);
SQInteger newbase = v->_top;
int64_t newbase = v->_top;
if(!v->EnterFrame(v->_top, v->_top + size, false))
return false;
v->ci->_generator = this;
v->ci->_target = (SQInt32)target;
v->ci->_target = (int32_t)target;
v->ci->_closure = _ci._closure;
v->ci->_ip = _ci._ip;
v->ci->_literals = _ci._literals;
@ -186,7 +186,7 @@ bool SQGenerator::Resume(SQVM *v,SQObjectPtr &dest)
v->ci->_root = _ci._root;
for(SQInteger i=0;i<_ci._etraps;i++) {
for(int64_t i=0;i<_ci._etraps;i++) {
v->_etraps.push_back(_etraps.top());
_etraps.pop_back();
SQExceptionTrap &et = v->_etraps.back();
@ -197,7 +197,7 @@ bool SQGenerator::Resume(SQVM *v,SQObjectPtr &dest)
SQObject _this = _stack._vals[0];
v->_stack[v->_stackbase] = sq_type(_this) == OT_WEAKREF ? _weakref(_this)->_obj : _this;
for(SQInteger n = 1; n<size; n++) {
for(int64_t n = 1; n<size; n++) {
v->_stack[v->_stackbase+n] = _stack._vals[n];
_stack._vals[n].Null();
}
@ -210,18 +210,18 @@ bool SQGenerator::Resume(SQVM *v,SQObjectPtr &dest)
}
void SQArray::Extend(const SQArray *a){
SQInteger xlen;
int64_t xlen;
if((xlen=a->Size()))
for(SQInteger i=0;i<xlen;i++)
for(int64_t i=0;i<xlen;i++)
Append(a->_values[i]);
}
const SQChar* SQFunctionProto::GetLocal(SQVM *vm,SQUnsignedInteger stackbase,SQUnsignedInteger nseq,SQUnsignedInteger nop)
const SQChar* SQFunctionProto::GetLocal(SQVM *vm,uint64_t stackbase,uint64_t nseq,uint64_t nop)
{
SQUnsignedInteger nvars=_nlocalvarinfos;
uint64_t nvars=_nlocalvarinfos;
const SQChar *res=NULL;
if(nvars>=nseq){
for(SQUnsignedInteger i=0;i<nvars;i++){
for(uint64_t i=0;i<nvars;i++){
if(_localvarinfos[i]._start_op<=nop && _localvarinfos[i]._end_op>=nop)
{
if(nseq==0){
@ -237,17 +237,17 @@ const SQChar* SQFunctionProto::GetLocal(SQVM *vm,SQUnsignedInteger stackbase,SQU
}
SQInteger SQFunctionProto::GetLine(SQInstruction *curr)
int64_t SQFunctionProto::GetLine(SQInstruction *curr)
{
SQInteger op = (SQInteger)(curr-_instructions);
SQInteger line=_lineinfos[0]._line;
SQInteger low = 0;
SQInteger high = _nlineinfos - 1;
SQInteger mid = 0;
int64_t op = (int64_t)(curr-_instructions);
int64_t line=_lineinfos[0]._line;
int64_t low = 0;
int64_t high = _nlineinfos - 1;
int64_t mid = 0;
while(low <= high)
{
mid = low + ((high - low) >> 1);
SQInteger curop = _lineinfos[mid]._op;
int64_t curop = _lineinfos[mid]._op;
if(curop > op)
{
high = mid - 1;
@ -279,7 +279,7 @@ SQClosure::~SQClosure()
}
#define _CHECK_IO(exp) { if(!exp)return false; }
bool SafeWrite(HRABBITVM v,SQWRITEFUNC write,SQUserPointer up,SQUserPointer dest,SQInteger size)
bool SafeWrite(HRABBITVM v,SQWRITEFUNC write,SQUserPointer up,SQUserPointer dest,int64_t size)
{
if(write(up,dest,size) != size) {
v->Raise_Error(_SC("io error (write function failure)"));
@ -288,7 +288,7 @@ bool SafeWrite(HRABBITVM v,SQWRITEFUNC write,SQUserPointer up,SQUserPointer dest
return true;
}
bool SafeRead(HRABBITVM v,SQWRITEFUNC read,SQUserPointer up,SQUserPointer dest,SQInteger size)
bool SafeRead(HRABBITVM v,SQWRITEFUNC read,SQUserPointer up,SQUserPointer dest,int64_t size)
{
if(size && read(up,dest,size) != size) {
v->Raise_Error(_SC("io error, read function failure, the origin stream could be corrupted/trucated"));
@ -297,14 +297,14 @@ bool SafeRead(HRABBITVM v,SQWRITEFUNC read,SQUserPointer up,SQUserPointer dest,S
return true;
}
bool WriteTag(HRABBITVM v,SQWRITEFUNC write,SQUserPointer up,SQUnsignedInteger32 tag)
bool WriteTag(HRABBITVM v,SQWRITEFUNC write,SQUserPointer up,uint32_t tag)
{
return SafeWrite(v,write,up,&tag,sizeof(tag));
}
bool CheckTag(HRABBITVM v,SQWRITEFUNC read,SQUserPointer up,SQUnsignedInteger32 tag)
bool CheckTag(HRABBITVM v,SQWRITEFUNC read,SQUserPointer up,uint32_t tag)
{
SQUnsignedInteger32 t;
uint32_t t;
_CHECK_IO(SafeRead(v,read,up,&t,sizeof(t)));
if(t != tag){
v->Raise_Error(_SC("invalid or corrupted closure stream"));
@ -315,18 +315,18 @@ bool CheckTag(HRABBITVM v,SQWRITEFUNC read,SQUserPointer up,SQUnsignedInteger32
bool WriteObject(HRABBITVM v,SQUserPointer up,SQWRITEFUNC write,SQObjectPtr &o)
{
SQUnsignedInteger32 _type = (SQUnsignedInteger32)sq_type(o);
uint32_t _type = (uint32_t)sq_type(o);
_CHECK_IO(SafeWrite(v,write,up,&_type,sizeof(_type)));
switch(sq_type(o)){
case OT_STRING:
_CHECK_IO(SafeWrite(v,write,up,&_string(o)->_len,sizeof(SQInteger)));
_CHECK_IO(SafeWrite(v,write,up,&_string(o)->_len,sizeof(int64_t)));
_CHECK_IO(SafeWrite(v,write,up,_stringval(o),sq_rsl(_string(o)->_len)));
break;
case OT_BOOL:
case OT_INTEGER:
_CHECK_IO(SafeWrite(v,write,up,&_integer(o),sizeof(SQInteger)));break;
_CHECK_IO(SafeWrite(v,write,up,&_integer(o),sizeof(int64_t)));break;
case OT_FLOAT:
_CHECK_IO(SafeWrite(v,write,up,&_float(o),sizeof(SQFloat)));break;
_CHECK_IO(SafeWrite(v,write,up,&_float(o),sizeof(float_t)));break;
case OT_NULL:
break;
default:
@ -338,28 +338,28 @@ bool WriteObject(HRABBITVM v,SQUserPointer up,SQWRITEFUNC write,SQObjectPtr &o)
bool ReadObject(HRABBITVM v,SQUserPointer up,SQREADFUNC read,SQObjectPtr &o)
{
SQUnsignedInteger32 _type;
uint32_t _type;
_CHECK_IO(SafeRead(v,read,up,&_type,sizeof(_type)));
SQObjectType t = (SQObjectType)_type;
switch(t){
case OT_STRING:{
SQInteger len;
_CHECK_IO(SafeRead(v,read,up,&len,sizeof(SQInteger)));
int64_t len;
_CHECK_IO(SafeRead(v,read,up,&len,sizeof(int64_t)));
_CHECK_IO(SafeRead(v,read,up,_ss(v)->GetScratchPad(sq_rsl(len)),sq_rsl(len)));
o=SQString::Create(_ss(v),_ss(v)->GetScratchPad(-1),len);
}
break;
case OT_INTEGER:{
SQInteger i;
_CHECK_IO(SafeRead(v,read,up,&i,sizeof(SQInteger))); o = i; break;
int64_t i;
_CHECK_IO(SafeRead(v,read,up,&i,sizeof(int64_t))); o = i; break;
}
case OT_BOOL:{
SQInteger i;
_CHECK_IO(SafeRead(v,read,up,&i,sizeof(SQInteger))); o._type = OT_BOOL; o._unVal.nInteger = i; break;
int64_t i;
_CHECK_IO(SafeRead(v,read,up,&i,sizeof(int64_t))); o._type = OT_BOOL; o._unVal.nInteger = i; break;
}
case OT_FLOAT:{
SQFloat f;
_CHECK_IO(SafeRead(v,read,up,&f,sizeof(SQFloat))); o = f; break;
float_t f;
_CHECK_IO(SafeRead(v,read,up,&f,sizeof(float_t))); o = f; break;
}
case OT_NULL:
o.Null();
@ -375,8 +375,8 @@ bool SQClosure::Save(SQVM *v,SQUserPointer up,SQWRITEFUNC write)
{
_CHECK_IO(WriteTag(v,write,up,SQ_CLOSURESTREAM_HEAD));
_CHECK_IO(WriteTag(v,write,up,sizeof(SQChar)));
_CHECK_IO(WriteTag(v,write,up,sizeof(SQInteger)));
_CHECK_IO(WriteTag(v,write,up,sizeof(SQFloat)));
_CHECK_IO(WriteTag(v,write,up,sizeof(int64_t)));
_CHECK_IO(WriteTag(v,write,up,sizeof(float_t)));
_CHECK_IO(_function->Save(v,up,write));
_CHECK_IO(WriteTag(v,write,up,SQ_CLOSURESTREAM_TAIL));
return true;
@ -386,8 +386,8 @@ bool SQClosure::Load(SQVM *v,SQUserPointer up,SQREADFUNC read,SQObjectPtr &ret)
{
_CHECK_IO(CheckTag(v,read,up,SQ_CLOSURESTREAM_HEAD));
_CHECK_IO(CheckTag(v,read,up,sizeof(SQChar)));
_CHECK_IO(CheckTag(v,read,up,sizeof(SQInteger)));
_CHECK_IO(CheckTag(v,read,up,sizeof(SQFloat)));
_CHECK_IO(CheckTag(v,read,up,sizeof(int64_t)));
_CHECK_IO(CheckTag(v,read,up,sizeof(float_t)));
SQObjectPtr func;
_CHECK_IO(SQFunctionProto::Load(v,up,read,func));
_CHECK_IO(CheckTag(v,read,up,SQ_CLOSURESTREAM_TAIL));
@ -408,10 +408,10 @@ SQFunctionProto::~SQFunctionProto()
bool SQFunctionProto::Save(SQVM *v,SQUserPointer up,SQWRITEFUNC write)
{
SQInteger i,nliterals = _nliterals,nparameters = _nparameters;
SQInteger noutervalues = _noutervalues,nlocalvarinfos = _nlocalvarinfos;
SQInteger nlineinfos=_nlineinfos,ninstructions = _ninstructions,nfunctions=_nfunctions;
SQInteger ndefaultparams = _ndefaultparams;
int64_t i,nliterals = _nliterals,nparameters = _nparameters;
int64_t noutervalues = _noutervalues,nlocalvarinfos = _nlocalvarinfos;
int64_t nlineinfos=_nlineinfos,ninstructions = _ninstructions,nfunctions=_nfunctions;
int64_t ndefaultparams = _ndefaultparams;
_CHECK_IO(WriteTag(v,write,up,SQ_CLOSURESTREAM_PART));
_CHECK_IO(WriteObject(v,up,write,_sourcename));
_CHECK_IO(WriteObject(v,up,write,_name));
@ -436,7 +436,7 @@ bool SQFunctionProto::Save(SQVM *v,SQUserPointer up,SQWRITEFUNC write)
_CHECK_IO(WriteTag(v,write,up,SQ_CLOSURESTREAM_PART));
for(i=0;i<noutervalues;i++){
_CHECK_IO(SafeWrite(v,write,up,&_outervalues[i]._type,sizeof(SQUnsignedInteger)));
_CHECK_IO(SafeWrite(v,write,up,&_outervalues[i]._type,sizeof(uint64_t)));
_CHECK_IO(WriteObject(v,up,write,_outervalues[i]._src));
_CHECK_IO(WriteObject(v,up,write,_outervalues[i]._name));
}
@ -445,16 +445,16 @@ bool SQFunctionProto::Save(SQVM *v,SQUserPointer up,SQWRITEFUNC write)
for(i=0;i<nlocalvarinfos;i++){
SQLocalVarInfo &lvi=_localvarinfos[i];
_CHECK_IO(WriteObject(v,up,write,lvi._name));
_CHECK_IO(SafeWrite(v,write,up,&lvi._pos,sizeof(SQUnsignedInteger)));
_CHECK_IO(SafeWrite(v,write,up,&lvi._start_op,sizeof(SQUnsignedInteger)));
_CHECK_IO(SafeWrite(v,write,up,&lvi._end_op,sizeof(SQUnsignedInteger)));
_CHECK_IO(SafeWrite(v,write,up,&lvi._pos,sizeof(uint64_t)));
_CHECK_IO(SafeWrite(v,write,up,&lvi._start_op,sizeof(uint64_t)));
_CHECK_IO(SafeWrite(v,write,up,&lvi._end_op,sizeof(uint64_t)));
}
_CHECK_IO(WriteTag(v,write,up,SQ_CLOSURESTREAM_PART));
_CHECK_IO(SafeWrite(v,write,up,_lineinfos,sizeof(SQLineInfo)*nlineinfos));
_CHECK_IO(WriteTag(v,write,up,SQ_CLOSURESTREAM_PART));
_CHECK_IO(SafeWrite(v,write,up,_defaultparams,sizeof(SQInteger)*ndefaultparams));
_CHECK_IO(SafeWrite(v,write,up,_defaultparams,sizeof(int64_t)*ndefaultparams));
_CHECK_IO(WriteTag(v,write,up,SQ_CLOSURESTREAM_PART));
_CHECK_IO(SafeWrite(v,write,up,_instructions,sizeof(SQInstruction)*ninstructions));
@ -471,9 +471,9 @@ bool SQFunctionProto::Save(SQVM *v,SQUserPointer up,SQWRITEFUNC write)
bool SQFunctionProto::Load(SQVM *v,SQUserPointer up,SQREADFUNC read,SQObjectPtr &ret)
{
SQInteger i, nliterals,nparameters;
SQInteger noutervalues ,nlocalvarinfos ;
SQInteger nlineinfos,ninstructions ,nfunctions,ndefaultparams ;
int64_t i, nliterals,nparameters;
int64_t noutervalues ,nlocalvarinfos ;
int64_t nlineinfos,ninstructions ,nfunctions,ndefaultparams ;
SQObjectPtr sourcename, name;
SQObjectPtr o;
_CHECK_IO(CheckTag(v,read,up,SQ_CLOSURESTREAM_PART));
@ -512,9 +512,9 @@ bool SQFunctionProto::Load(SQVM *v,SQUserPointer up,SQREADFUNC read,SQObjectPtr
_CHECK_IO(CheckTag(v,read,up,SQ_CLOSURESTREAM_PART));
for(i = 0; i < noutervalues; i++){
SQUnsignedInteger type;
uint64_t type;
SQObjectPtr name;
_CHECK_IO(SafeRead(v,read,up, &type, sizeof(SQUnsignedInteger)));
_CHECK_IO(SafeRead(v,read,up, &type, sizeof(uint64_t)));
_CHECK_IO(ReadObject(v, up, read, o));
_CHECK_IO(ReadObject(v, up, read, name));
f->_outervalues[i] = SQOuterVar(name,o, (SQOuterType)type);
@ -524,16 +524,16 @@ bool SQFunctionProto::Load(SQVM *v,SQUserPointer up,SQREADFUNC read,SQObjectPtr
for(i = 0; i < nlocalvarinfos; i++){
SQLocalVarInfo lvi;
_CHECK_IO(ReadObject(v, up, read, lvi._name));
_CHECK_IO(SafeRead(v,read,up, &lvi._pos, sizeof(SQUnsignedInteger)));
_CHECK_IO(SafeRead(v,read,up, &lvi._start_op, sizeof(SQUnsignedInteger)));
_CHECK_IO(SafeRead(v,read,up, &lvi._end_op, sizeof(SQUnsignedInteger)));
_CHECK_IO(SafeRead(v,read,up, &lvi._pos, sizeof(uint64_t)));
_CHECK_IO(SafeRead(v,read,up, &lvi._start_op, sizeof(uint64_t)));
_CHECK_IO(SafeRead(v,read,up, &lvi._end_op, sizeof(uint64_t)));
f->_localvarinfos[i] = lvi;
}
_CHECK_IO(CheckTag(v,read,up,SQ_CLOSURESTREAM_PART));
_CHECK_IO(SafeRead(v,read,up, f->_lineinfos, sizeof(SQLineInfo)*nlineinfos));
_CHECK_IO(CheckTag(v,read,up,SQ_CLOSURESTREAM_PART));
_CHECK_IO(SafeRead(v,read,up, f->_defaultparams, sizeof(SQInteger)*ndefaultparams));
_CHECK_IO(SafeRead(v,read,up, f->_defaultparams, sizeof(int64_t)*ndefaultparams));
_CHECK_IO(CheckTag(v,read,up,SQ_CLOSURESTREAM_PART));
_CHECK_IO(SafeRead(v,read,up, f->_instructions, sizeof(SQInstruction)*ninstructions));

View File

@ -64,25 +64,25 @@ enum SQMetaMethod{
#define _CONSTRUCT_VECTOR(type,size,ptr) { \
for(SQInteger n = 0; n < ((SQInteger)size); n++) { \
for(int64_t n = 0; n < ((int64_t)size); n++) { \
new (&ptr[n]) type(); \
} \
}
#define _DESTRUCT_VECTOR(type,size,ptr) { \
for(SQInteger nl = 0; nl < ((SQInteger)size); nl++) { \
for(int64_t nl = 0; nl < ((int64_t)size); nl++) { \
ptr[nl].~type(); \
} \
}
#define _COPY_VECTOR(dest,src,size) { \
for(SQInteger _n_ = 0; _n_ < ((SQInteger)size); _n_++) { \
for(int64_t _n_ = 0; _n_ < ((int64_t)size); _n_++) { \
dest[_n_] = src[_n_]; \
} \
}
#define _NULL_SQOBJECT_VECTOR(vec,size) { \
for(SQInteger _n_ = 0; _n_ < ((SQInteger)size); _n_++) { \
for(int64_t _n_ = 0; _n_ < ((int64_t)size); _n_++) { \
vec[_n_].Null(); \
} \
}
@ -91,7 +91,7 @@ enum SQMetaMethod{
struct SQRefCounted
{
SQUnsignedInteger _uiRef;
uint64_t _uiRef;
struct SQWeakRef *_weakref;
SQRefCounted() { _uiRef = 0; _weakref = NULL; }
virtual ~SQRefCounted();
@ -159,8 +159,8 @@ struct SQObjectPtr;
#define _stringval(obj) (obj)._unVal.pString->_val
#define _userdataval(obj) ((SQUserPointer)sq_aligning((obj)._unVal.pUserData + 1))
#define tofloat(num) ((sq_type(num)==OT_INTEGER)?(SQFloat)_integer(num):_float(num))
#define tointeger(num) ((sq_type(num)==OT_FLOAT)?(SQInteger)_float(num):_integer(num))
#define tofloat(num) ((sq_type(num)==OT_INTEGER)?(float_t)_integer(num):_float(num))
#define tointeger(num) ((sq_type(num)==OT_FLOAT)?(int64_t)_float(num):_integer(num))
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
#if defined(SQUSEDOUBLE) && !defined(_SQ64) || !defined(SQUSEDOUBLE) && defined(_SQ64)
@ -241,8 +241,8 @@ struct SQObjectPtr : public SQObject
_REF_TYPE_DECL(OT_THREAD,SQVM,pThread)
_REF_TYPE_DECL(OT_FUNCPROTO,SQFunctionProto,pFunctionProto)
_SCALAR_TYPE_DECL(OT_INTEGER,SQInteger,nInteger)
_SCALAR_TYPE_DECL(OT_FLOAT,SQFloat,fFloat)
_SCALAR_TYPE_DECL(OT_INTEGER,int64_t,nInteger)
_SCALAR_TYPE_DECL(OT_FLOAT,float_t,fFloat)
_SCALAR_TYPE_DECL(OT_USERPOINTER,SQUserPointer,pUserPointer)
SQObjectPtr(bool bBool)
@ -319,9 +319,9 @@ struct SQDelegable : public SQRefCounted {
SQTable *_delegate;
};
SQUnsignedInteger TranslateIndex(const SQObjectPtr &idx);
uint64_t TranslateIndex(const SQObjectPtr &idx);
typedef sqvector<SQObjectPtr> SQObjectPtrVec;
typedef sqvector<SQInteger> SQIntVec;
typedef sqvector<int64_t> SQIntVec;
const SQChar *GetTypeName(const SQObjectPtr &obj1);
const SQChar *IdType2Name(SQObjectType type);

View File

@ -8,7 +8,7 @@
#pragma once
#define MAX_FUNC_STACKSIZE 0xFF
#define MAX_LITERALS ((SQInteger)0x7FFFFFFF)
#define MAX_LITERALS ((int64_t)0x7FFFFFFF)
enum BitWiseOP {
BW_AND = 0,
@ -114,14 +114,14 @@ struct SQInstructionDesc {
struct SQInstruction
{
SQInstruction(){};
SQInstruction(SQOpcode _op,SQInteger a0=0,SQInteger a1=0,SQInteger a2=0,SQInteger a3=0)
SQInstruction(SQOpcode _op,int64_t a0=0,int64_t a1=0,int64_t a2=0,int64_t a3=0)
{ op = (unsigned char)_op;
_arg0 = (unsigned char)a0;_arg1 = (SQInt32)a1;
_arg0 = (unsigned char)a0;_arg1 = (int32_t)a1;
_arg2 = (unsigned char)a2;_arg3 = (unsigned char)a3;
}
SQInt32 _arg1;
int32_t _arg1;
unsigned char op;
unsigned char _arg0;
unsigned char _arg2;

View File

@ -33,13 +33,13 @@ SQSharedState::SQSharedState()
#define newmetamethod(s) { \
_metamethods->push_back(SQString::Create(this,s)); \
_table(_metamethodsmap)->NewSlot(_metamethods->back(),(SQInteger)(_metamethods->size()-1)); \
_table(_metamethodsmap)->NewSlot(_metamethods->back(),(int64_t)(_metamethods->size()-1)); \
}
bool CompileTypemask(SQIntVec &res,const SQChar *typemask)
{
SQInteger i = 0;
SQInteger mask = 0;
int64_t i = 0;
int64_t mask = 0;
while(typemask[i] != 0) {
switch(typemask[i]) {
case 'o': mask |= _RT_NULL; break;
@ -79,7 +79,7 @@ bool CompileTypemask(SQIntVec &res,const SQChar *typemask)
SQTable *CreateDefaultDelegate(SQSharedState *ss,const SQRegFunction *funcz)
{
SQInteger i=0;
int64_t i=0;
SQTable *t=SQTable::Create(ss,0);
while(funcz[i].name!=0){
SQNativeClosure *nc = SQNativeClosure::Create(ss,funcz[i].f,0);
@ -191,7 +191,7 @@ SQSharedState::~SQSharedState()
}
SQInteger SQSharedState::GetMetaMethodIdxByName(const SQObjectPtr &name)
int64_t SQSharedState::GetMetaMethodIdxByName(const SQObjectPtr &name)
{
if(sq_type(name) != OT_STRING)
return -1;
@ -203,9 +203,9 @@ SQInteger SQSharedState::GetMetaMethodIdxByName(const SQObjectPtr &name)
}
SQChar* SQSharedState::GetScratchPad(SQInteger size)
SQChar* SQSharedState::GetScratchPad(int64_t size)
{
SQInteger newsize;
int64_t newsize;
if(size>0) {
if(_scratchpadsize < size) {
newsize = size + (size>>1);
@ -229,7 +229,7 @@ RefTable::RefTable()
void RefTable::Finalize()
{
RefNode *nodes = _nodes;
for(SQUnsignedInteger n = 0; n < _numofslots; n++) {
for(uint64_t n = 0; n < _numofslots; n++) {
nodes->obj.Null();
nodes++;
}
@ -249,7 +249,7 @@ void RefTable::AddRef(SQObject &obj)
ref->refs++;
}
SQUnsignedInteger RefTable::GetRefCount(SQObject &obj)
uint64_t RefTable::GetRefCount(SQObject &obj)
{
SQHash mainpos;
RefNode *prev;
@ -286,15 +286,15 @@ SQBool RefTable::Release(SQObject &obj)
return SQFalse;
}
void RefTable::Resize(SQUnsignedInteger size)
void RefTable::Resize(uint64_t size)
{
RefNode **oldbucks = _buckets;
RefNode *t = _nodes;
SQUnsignedInteger oldnumofslots = _numofslots;
uint64_t oldnumofslots = _numofslots;
AllocNodes(size);
//rehash
SQUnsignedInteger nfound = 0;
for(SQUnsignedInteger n = 0; n < oldnumofslots; n++) {
uint64_t nfound = 0;
for(uint64_t n = 0; n < oldnumofslots; n++) {
if(sq_type(t->obj) != OT_NULL) {
//add back;
assert(t->refs != 0);
@ -344,14 +344,14 @@ RefTable::RefNode *RefTable::Get(SQObject &obj,SQHash &mainpos,RefNode **prev,bo
return ref;
}
void RefTable::AllocNodes(SQUnsignedInteger size)
void RefTable::AllocNodes(uint64_t size)
{
RefNode **bucks;
RefNode *nodes;
bucks = (RefNode **)SQ_MALLOC((size * sizeof(RefNode *)) + (size * sizeof(RefNode)));
nodes = (RefNode *)&bucks[size];
RefNode *temp = nodes;
SQUnsignedInteger n;
uint64_t n;
for(n = 0; n < size - 1; n++) {
bucks[n] = NULL;
temp->refs = 0;
@ -390,17 +390,17 @@ SQStringTable::~SQStringTable()
_strings = NULL;
}
void SQStringTable::AllocNodes(SQInteger size)
void SQStringTable::AllocNodes(int64_t size)
{
_numofslots = size;
_strings = (SQString**)SQ_MALLOC(sizeof(SQString*)*_numofslots);
memset(_strings,0,sizeof(SQString*)*_numofslots);
}
SQString *SQStringTable::Add(const SQChar *news,SQInteger len)
SQString *SQStringTable::Add(const SQChar *news,int64_t len)
{
if(len<0)
len = (SQInteger)scstrlen(news);
len = (int64_t)scstrlen(news);
SQHash newhash = ::_hashstr(news,len);
SQHash h = newhash&(_numofslots-1);
SQString *s;
@ -424,12 +424,12 @@ SQString *SQStringTable::Add(const SQChar *news,SQInteger len)
return t;
}
void SQStringTable::Resize(SQInteger size)
void SQStringTable::Resize(int64_t size)
{
SQInteger oldsize=_numofslots;
int64_t oldsize=_numofslots;
SQString **oldtable=_strings;
AllocNodes(size);
for (SQInteger i=0; i<oldsize; i++){
for (int64_t i=0; i<oldsize; i++){
SQString *p = oldtable[i];
while(p){
SQString *next = p->_next;
@ -455,7 +455,7 @@ void SQStringTable::Remove(SQString *bs)
else
_strings[h] = s->_next;
_slotused--;
SQInteger slen = s->_len;
int64_t slen = s->_len;
s->~SQString();
SQ_FREE(s,sizeof(SQString) + sq_rsl(slen));
return;

View File

@ -18,36 +18,36 @@ struct SQStringTable
{
SQStringTable(SQSharedState*ss);
~SQStringTable();
SQString *Add(const SQChar *,SQInteger len);
SQString *Add(const SQChar *,int64_t len);
void Remove(SQString *);
private:
void Resize(SQInteger size);
void AllocNodes(SQInteger size);
void Resize(int64_t size);
void AllocNodes(int64_t size);
SQString **_strings;
SQUnsignedInteger _numofslots;
SQUnsignedInteger _slotused;
uint64_t _numofslots;
uint64_t _slotused;
SQSharedState *_sharedstate;
};
struct RefTable {
struct RefNode {
SQObjectPtr obj;
SQUnsignedInteger refs;
uint64_t refs;
struct RefNode *next;
};
RefTable();
~RefTable();
void AddRef(SQObject &obj);
SQBool Release(SQObject &obj);
SQUnsignedInteger GetRefCount(SQObject &obj);
uint64_t GetRefCount(SQObject &obj);
void Finalize();
private:
RefNode *Get(SQObject &obj,SQHash &mainpos,RefNode **prev,bool add);
RefNode *Add(SQHash mainpos,SQObject &obj);
void Resize(SQUnsignedInteger size);
void AllocNodes(SQUnsignedInteger size);
SQUnsignedInteger _numofslots;
SQUnsignedInteger _slotused;
void Resize(uint64_t size);
void AllocNodes(uint64_t size);
uint64_t _numofslots;
uint64_t _slotused;
RefNode *_nodes;
RefNode *_freelist;
RefNode **_buckets;
@ -64,8 +64,8 @@ struct SQSharedState
~SQSharedState();
void Init();
public:
SQChar* GetScratchPad(SQInteger size);
SQInteger GetMetaMethodIdxByName(const SQObjectPtr &name);
SQChar* GetScratchPad(int64_t size);
int64_t GetMetaMethodIdxByName(const SQObjectPtr &name);
SQObjectPtrVec *_metamethods;
SQObjectPtr _metamethodsmap;
SQObjectPtrVec *_systemstrings;
@ -106,7 +106,7 @@ public:
SQRELEASEHOOK _releasehook;
private:
SQChar *_scratchpad;
SQInteger _scratchpadsize;
int64_t _scratchpadsize;
};
#define _sp(s) (_sharedstate->GetScratchPad(s))

View File

@ -21,12 +21,12 @@ struct SQString : public SQRefCounted
SQString(){}
~SQString(){}
public:
static SQString *Create(SQSharedState *ss, const SQChar *, SQInteger len = -1 );
SQInteger Next(const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval);
static SQString *Create(SQSharedState *ss, const SQChar *, int64_t len = -1 );
int64_t Next(const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval);
void Release();
SQSharedState *_sharedstate;
SQString *_next; //chain for the string table
SQInteger _len;
int64_t _len;
SQHash _hash;
SQChar _val[1];
};

View File

@ -12,9 +12,9 @@
#include <rabbit/sqfuncproto.hpp>
#include <rabbit/sqclosure.hpp>
SQTable::SQTable(SQSharedState *ss,SQInteger nInitialSize)
SQTable::SQTable(SQSharedState *ss,int64_t nInitialSize)
{
SQInteger pow2size=MINPOWER2;
int64_t pow2size=MINPOWER2;
while(nInitialSize>pow2size)pow2size=pow2size<<1;
AllocNodes(pow2size);
_usednodes = 0;
@ -33,10 +33,10 @@ void SQTable::Remove(const SQObjectPtr &key)
}
}
void SQTable::AllocNodes(SQInteger nSize)
void SQTable::AllocNodes(int64_t nSize)
{
_HashNode *nodes=(_HashNode *)SQ_MALLOC(sizeof(_HashNode)*nSize);
for(SQInteger i=0;i<nSize;i++){
for(int64_t i=0;i<nSize;i++){
_HashNode &n = nodes[i];
new (&n) _HashNode;
n.next=NULL;
@ -48,11 +48,11 @@ void SQTable::AllocNodes(SQInteger nSize)
void SQTable::Rehash(bool force)
{
SQInteger oldsize=_numofnodes;
int64_t oldsize=_numofnodes;
//prevent problems with the integer division
if(oldsize<4)oldsize=4;
_HashNode *nold=_nodes;
SQInteger nelems=CountUsed();
int64_t nelems=CountUsed();
if (nelems >= oldsize-oldsize/4) /* using more than 3/4? */
AllocNodes(oldsize*2);
else if (nelems <= oldsize/4 && /* less than 1/4? */
@ -63,12 +63,12 @@ void SQTable::Rehash(bool force)
else
return;
_usednodes = 0;
for (SQInteger i=0; i<oldsize; i++) {
for (int64_t i=0; i<oldsize; i++) {
_HashNode *old = nold+i;
if (sq_type(old->key) != OT_NULL)
NewSlot(old->key,old->val);
}
for(SQInteger k=0;k<oldsize;k++)
for(int64_t k=0;k<oldsize;k++)
nold[k].~_HashNode();
SQ_FREE(nold,oldsize*sizeof(_HashNode));
}
@ -81,7 +81,7 @@ SQTable *SQTable::Clone()
_HashNode *basedst = nt->_nodes;
_HashNode *src = _nodes;
_HashNode *dst = nt->_nodes;
SQInteger n = 0;
int64_t n = 0;
for(n = 0; n < _numofnodes; n++) {
dst->key = src->key;
dst->val = src->val;
@ -98,7 +98,7 @@ SQTable *SQTable::Clone()
nt->_firstfree = basedst + (_firstfree - basesrc);
nt->_usednodes = _usednodes;
#else
SQInteger ridx=0;
int64_t ridx=0;
SQObjectPtr key,val;
while((ridx=Next(true,ridx,key,val))!=-1){
nt->NewSlot(key,val);
@ -176,9 +176,9 @@ bool SQTable::NewSlot(const SQObjectPtr &key,const SQObjectPtr &val)
return NewSlot(key, val);
}
SQInteger SQTable::Next(bool getweakrefs,const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval)
int64_t SQTable::Next(bool getweakrefs,const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval)
{
SQInteger idx = (SQInteger)TranslateIndex(refpos);
int64_t idx = (int64_t)TranslateIndex(refpos);
while (idx < _numofnodes) {
if(sq_type(_nodes[idx].key) != OT_NULL) {
//first found
@ -207,7 +207,7 @@ bool SQTable::Set(const SQObjectPtr &key, const SQObjectPtr &val)
void SQTable::_ClearNodes()
{
for(SQInteger i = 0;i < _numofnodes; i++) { _HashNode &n = _nodes[i]; n.key.Null(); n.val.Null(); }
for(int64_t i = 0;i < _numofnodes; i++) { _HashNode &n = _nodes[i]; n.key.Null(); n.val.Null(); }
}
void SQTable::Finalize()

View File

@ -16,14 +16,14 @@
#include <rabbit/sqstring.hpp>
#define hashptr(p) ((SQHash)(((SQInteger)p) >> 3))
#define hashptr(p) ((SQHash)(((int64_t)p) >> 3))
inline SQHash HashObj(const SQObjectPtr &key)
{
switch(sq_type(key)) {
case OT_STRING: return _string(key)->_hash;
case OT_FLOAT: return (SQHash)((SQInteger)_float(key));
case OT_BOOL: case OT_INTEGER: return (SQHash)((SQInteger)_integer(key));
case OT_FLOAT: return (SQHash)((int64_t)_float(key));
case OT_BOOL: case OT_INTEGER: return (SQHash)((int64_t)_integer(key));
default: return hashptr(key._unVal.pRefCounted);
}
}
@ -40,16 +40,16 @@ private:
};
_HashNode *_firstfree;
_HashNode *_nodes;
SQInteger _numofnodes;
SQInteger _usednodes;
int64_t _numofnodes;
int64_t _usednodes;
///////////////////////////
void AllocNodes(SQInteger nSize);
void AllocNodes(int64_t nSize);
void Rehash(bool force);
SQTable(SQSharedState *ss, SQInteger nInitialSize);
SQTable(SQSharedState *ss, int64_t nInitialSize);
void _ClearNodes();
public:
static SQTable* Create(SQSharedState *ss,SQInteger nInitialSize)
static SQTable* Create(SQSharedState *ss,int64_t nInitialSize)
{
SQTable *newtable = (SQTable*)SQ_MALLOC(sizeof(SQTable));
new (newtable) SQTable(ss, nInitialSize);
@ -61,7 +61,7 @@ public:
~SQTable()
{
SetDelegate(NULL);
for (SQInteger i = 0; i < _numofnodes; i++) _nodes[i].~_HashNode();
for (int64_t i = 0; i < _numofnodes; i++) _nodes[i].~_HashNode();
SQ_FREE(_nodes, _numofnodes * sizeof(_HashNode));
}
inline _HashNode *_Get(const SQObjectPtr &key,SQHash hash)
@ -75,7 +75,7 @@ public:
return NULL;
}
//for compiler use
inline bool GetStr(const SQChar* key,SQInteger keylen,SQObjectPtr &val)
inline bool GetStr(const SQChar* key,int64_t keylen,SQObjectPtr &val)
{
SQHash hash = _hashstr(key,keylen);
_HashNode *n = &_nodes[hash & (_numofnodes - 1)];
@ -97,9 +97,9 @@ public:
bool Set(const SQObjectPtr &key, const SQObjectPtr &val);
//returns true if a new slot has been created false if it was already present
bool NewSlot(const SQObjectPtr &key,const SQObjectPtr &val);
SQInteger Next(bool getweakrefs,const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval);
int64_t Next(bool getweakrefs,const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval);
SQInteger CountUsed(){ return _usednodes;}
int64_t CountUsed(){ return _usednodes;}
void Clear();
void Release()
{

View File

@ -7,9 +7,9 @@
*/
#pragma once
void *sq_vm_malloc(SQUnsignedInteger size);
void *sq_vm_realloc(void *p,SQUnsignedInteger oldsize,SQUnsignedInteger size);
void sq_vm_free(void *p,SQUnsignedInteger size);
void *sq_vm_malloc(uint64_t size);
void *sq_vm_realloc(void *p,uint64_t oldsize,uint64_t size);
void sq_vm_free(void *p,uint64_t size);
#define sq_new(__ptr,__type) {__ptr=(__type *)sq_vm_malloc(sizeof(__type));new (__ptr) __type;}
#define sq_delete(__ptr,__type) {__ptr->~__type();sq_vm_free(__ptr,sizeof(__type));}
@ -42,7 +42,7 @@ public:
if(v._size > _allocated) {
_realloc(v._size);
}
for(SQUnsignedInteger i = 0; i < v._size; i++) {
for(uint64_t i = 0; i < v._size; i++) {
new ((void *)&_vals[i]) T(v._vals[i]);
}
_size = v._size;
@ -50,13 +50,13 @@ public:
~sqvector()
{
if(_allocated) {
for(SQUnsignedInteger i = 0; i < _size; i++)
for(uint64_t i = 0; i < _size; i++)
_vals[i].~T();
SQ_FREE(_vals, (_allocated * sizeof(T)));
}
}
void reserve(SQUnsignedInteger newsize) { _realloc(newsize); }
void resize(SQUnsignedInteger newsize, const T& fill = T())
void reserve(uint64_t newsize) { _realloc(newsize); }
void resize(uint64_t newsize, const T& fill = T())
{
if(newsize > _allocated)
_realloc(newsize);
@ -67,7 +67,7 @@ public:
}
}
else{
for(SQUnsignedInteger i = newsize; i < _size; i++) {
for(uint64_t i = newsize; i < _size; i++) {
_vals[i].~T();
}
_size = newsize;
@ -75,7 +75,7 @@ public:
}
void shrinktofit() { if(_size > 4) { _realloc(_size); } }
T& top() const { return _vals[_size - 1]; }
inline SQUnsignedInteger size() const { return _size; }
inline uint64_t size() const { return _size; }
bool empty() const { return (_size <= 0); }
inline T &push_back(const T& val = T())
{
@ -87,15 +87,15 @@ public:
{
_size--; _vals[_size].~T();
}
void insert(SQUnsignedInteger idx, const T& val)
void insert(uint64_t idx, const T& val)
{
resize(_size + 1);
for(SQUnsignedInteger i = _size - 1; i > idx; i--) {
for(uint64_t i = _size - 1; i > idx; i--) {
_vals[i] = _vals[i - 1];
}
_vals[idx] = val;
}
void remove(SQUnsignedInteger idx)
void remove(uint64_t idx)
{
_vals[idx].~T();
if(idx < (_size - 1)) {
@ -103,18 +103,18 @@ public:
}
_size--;
}
SQUnsignedInteger capacity() { return _allocated; }
uint64_t capacity() { return _allocated; }
inline T &back() const { return _vals[_size - 1]; }
inline T& operator[](SQUnsignedInteger pos) const{ return _vals[pos]; }
inline T& operator[](uint64_t pos) const{ return _vals[pos]; }
T* _vals;
private:
void _realloc(SQUnsignedInteger newsize)
void _realloc(uint64_t newsize)
{
newsize = (newsize > 0)?newsize:4;
_vals = (T*)SQ_REALLOC(_vals, _allocated * sizeof(T), newsize * sizeof(T));
_allocated = newsize;
}
SQUnsignedInteger _size;
SQUnsignedInteger _allocated;
uint64_t _size;
uint64_t _allocated;
};

View File

@ -22,19 +22,19 @@
#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)
bool SQVM::BW_OP(uint64_t op,SQObjectPtr &trg,const SQObjectPtr &o1,const SQObjectPtr &o2)
{
SQInteger res;
int64_t res;
if((sq_type(o1)| sq_type(o2)) == OT_INTEGER)
{
SQInteger i1 = _integer(o1), i2 = _integer(o2);
int64_t i1 = _integer(o1), i2 = _integer(o2);
switch(op) {
case BW_AND: res = i1 & i2; break;
case BW_OR: res = i1 | i2; break;
case BW_XOR: res = i1 ^ i2; break;
case BW_SHIFTL: res = i1 << i2; break;
case BW_SHIFTR: res = i1 >> i2; break;
case BW_USHIFTR:res = (SQInteger)(*((SQUnsignedInteger*)&i1) >> i2); break;
case BW_USHIFTR:res = (int64_t)(*((uint64_t*)&i1) >> i2); break;
default: { Raise_Error(_SC("internal vm error bitwise op failed")); return false; }
}
}
@ -45,7 +45,7 @@ bool SQVM::BW_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,con
#define _ARITH_(op,trg,o1,o2) \
{ \
SQInteger tmask = sq_type(o1)|sq_type(o2); \
int64_t tmask = sq_type(o1)|sq_type(o2); \
switch(tmask) { \
case OT_INTEGER: trg = _integer(o1) op _integer(o2);break; \
case (OT_FLOAT|OT_INTEGER): \
@ -56,21 +56,21 @@ bool SQVM::BW_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,con
#define _ARITH_NOZERO(op,trg,o1,o2,err) \
{ \
SQInteger tmask = sq_type(o1)|sq_type(o2); \
int64_t tmask = sq_type(o1)|sq_type(o2); \
switch(tmask) { \
case OT_INTEGER: { SQInteger i2 = _integer(o2); if(i2 == 0) { Raise_Error(err); SQ_THROW(); } trg = _integer(o1) op i2; } break;\
case OT_INTEGER: { int64_t i2 = _integer(o2); if(i2 == 0) { Raise_Error(err); SQ_THROW(); } trg = _integer(o1) op i2; } break;\
case (OT_FLOAT|OT_INTEGER): \
case (OT_FLOAT): trg = tofloat(o1) op tofloat(o2); break;\
default: _GUARD(ARITH_OP((#op)[0],trg,o1,o2)); break;\
} \
}
bool SQVM::ARITH_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,const SQObjectPtr &o2)
bool SQVM::ARITH_OP(uint64_t op,SQObjectPtr &trg,const SQObjectPtr &o1,const SQObjectPtr &o2)
{
SQInteger tmask = sq_type(o1)| sq_type(o2);
int64_t tmask = sq_type(o1)| sq_type(o2);
switch(tmask) {
case OT_INTEGER:{
SQInteger res, i1 = _integer(o1), i2 = _integer(o2);
int64_t res, i1 = _integer(o1), i2 = _integer(o2);
switch(op) {
case '+': res = i1 + i2; break;
case '-': res = i1 - i2; break;
@ -89,13 +89,13 @@ bool SQVM::ARITH_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,
break;
case (OT_FLOAT|OT_INTEGER):
case (OT_FLOAT):{
SQFloat res, f1 = tofloat(o1), f2 = tofloat(o2);
float_t res, f1 = tofloat(o1), f2 = tofloat(o2);
switch(op) {
case '+': res = f1 + f2; break;
case '-': res = f1 - f2; break;
case '/': res = f1 / f2; break;
case '*': res = f1 * f2; break;
case '%': res = SQFloat(fmod((double)f1,(double)f2)); break;
case '%': res = float_t(fmod((double)f1,(double)f2)); break;
default: res = 0x0f;
}
trg = res; }
@ -143,8 +143,8 @@ void SQVM::Finalize()
_debughook_closure.Null();
temp_reg.Null();
_callstackdata.resize(0);
SQInteger size=_stack.size();
for(SQInteger i=0;i<size;i++)
int64_t size=_stack.size();
for(int64_t i=0;i<size;i++)
_stack[i].Null();
}
@ -153,7 +153,7 @@ SQVM::~SQVM()
Finalize();
}
bool SQVM::ArithMetaMethod(SQInteger op,const SQObjectPtr &o1,const SQObjectPtr &o2,SQObjectPtr &dest)
bool SQVM::ArithMetaMethod(int64_t op,const SQObjectPtr &o1,const SQObjectPtr &o2,SQObjectPtr &dest)
{
SQMetaMethod mm;
switch(op){
@ -206,7 +206,7 @@ bool SQVM::NEG_OP(SQObjectPtr &trg,const SQObjectPtr &o)
}
#define _RET_SUCCEED(exp) { result = (exp); return true; }
bool SQVM::ObjCmp(const SQObjectPtr &o1,const SQObjectPtr &o2,SQInteger &result)
bool SQVM::ObjCmp(const SQObjectPtr &o1,const SQObjectPtr &o2,int64_t &result)
{
SQObjectType t1 = sq_type(o1), t2 = sq_type(o2);
if(t1 == t2) {
@ -269,7 +269,7 @@ bool SQVM::ObjCmp(const SQObjectPtr &o1,const SQObjectPtr &o2,SQInteger &result)
bool SQVM::CMP_OP(CmpOP op, const SQObjectPtr &o1,const SQObjectPtr &o2,SQObjectPtr &res)
{
SQInteger r;
int64_t r;
if(ObjCmp(o1,o2,r)) {
switch(op) {
case CMP_G: res = (r > 0); return true;
@ -327,7 +327,7 @@ bool SQVM::StringCat(const SQObjectPtr &str,const SQObjectPtr &obj,SQObjectPtr &
SQObjectPtr a, b;
if(!ToString(str, a)) return false;
if(!ToString(obj, b)) return false;
SQInteger l = _string(a)->_len , ol = _string(b)->_len;
int64_t l = _string(a)->_len , ol = _string(b)->_len;
SQChar *s = _sp(sq_rsl(l + ol + 1));
memcpy(s, _stringval(a), sq_rsl(l));
memcpy(s + l, _stringval(b), sq_rsl(ol));
@ -348,7 +348,7 @@ bool SQVM::TypeOf(const SQObjectPtr &obj1,SQObjectPtr &dest)
return true;
}
bool SQVM::Init(SQVM *friendvm, SQInteger stacksize)
bool SQVM::Init(SQVM *friendvm, int64_t stacksize)
{
_stack.resize(stacksize);
_alloccallsstacksize = 4;
@ -374,13 +374,13 @@ bool SQVM::Init(SQVM *friendvm, SQInteger stacksize)
}
bool SQVM::StartCall(SQClosure *closure,SQInteger target,SQInteger args,SQInteger stackbase,bool tailcall)
bool SQVM::StartCall(SQClosure *closure,int64_t target,int64_t args,int64_t stackbase,bool tailcall)
{
SQFunctionProto *func = closure->_function;
SQInteger paramssize = func->_nparameters;
const SQInteger newtop = stackbase + func->_stacksize;
SQInteger nargs = args;
int64_t paramssize = func->_nparameters;
const int64_t newtop = stackbase + func->_stacksize;
int64_t nargs = args;
if(func->_varparams)
{
paramssize--;
@ -390,10 +390,10 @@ bool SQVM::StartCall(SQClosure *closure,SQInteger target,SQInteger args,SQIntege
}
//dumpstack(stackbase);
SQInteger nvargs = nargs - paramssize;
int64_t nvargs = nargs - paramssize;
SQArray *arr = SQArray::Create(_ss(this),nvargs);
SQInteger pbase = stackbase+paramssize;
for(SQInteger n = 0; n < nvargs; n++) {
int64_t pbase = stackbase+paramssize;
for(int64_t n = 0; n < nvargs; n++) {
arr->_values[n] = _stack._vals[pbase];
_stack._vals[pbase].Null();
pbase++;
@ -403,10 +403,10 @@ bool SQVM::StartCall(SQClosure *closure,SQInteger target,SQInteger args,SQIntege
//dumpstack(stackbase);
}
else if (paramssize != nargs) {
SQInteger ndef = func->_ndefaultparams;
SQInteger diff;
int64_t ndef = func->_ndefaultparams;
int64_t diff;
if(ndef && nargs < paramssize && (diff = paramssize - nargs) <= ndef) {
for(SQInteger n = ndef - diff; n < ndef; n++) {
for(int64_t n = ndef - diff; n < ndef; n++) {
_stack._vals[stackbase + (nargs++)] = closure->_defaultparams[n];
}
}
@ -425,7 +425,7 @@ bool SQVM::StartCall(SQClosure *closure,SQInteger target,SQInteger args,SQIntege
ci->_closure = closure;
ci->_literals = func->_literals;
ci->_ip = func->_instructions;
ci->_target = (SQInt32)target;
ci->_target = (int32_t)target;
if (_debughook) {
CallDebugHook(_SC('c'));
@ -445,13 +445,13 @@ bool SQVM::StartCall(SQClosure *closure,SQInteger target,SQInteger args,SQIntege
return true;
}
bool SQVM::Return(SQInteger _arg0, SQInteger _arg1, SQObjectPtr &retval)
bool SQVM::Return(int64_t _arg0, int64_t _arg1, SQObjectPtr &retval)
{
SQBool _isroot = ci->_root;
SQInteger callerbase = _stackbase - ci->_prevstkbase;
int64_t callerbase = _stackbase - ci->_prevstkbase;
if (_debughook) {
for(SQInteger i=0; i<ci->_ncalls; i++) {
for(int64_t i=0; i<ci->_ncalls; i++) {
CallDebugHook(_SC('r'));
}
}
@ -479,7 +479,7 @@ bool SQVM::Return(SQInteger _arg0, SQInteger _arg1, SQObjectPtr &retval)
#define _RET_ON_FAIL(exp) { if(!exp) return false; }
bool SQVM::PLOCAL_INC(SQInteger op,SQObjectPtr &target, SQObjectPtr &a, SQObjectPtr &incr)
bool SQVM::PLOCAL_INC(int64_t op,SQObjectPtr &target, SQObjectPtr &a, SQObjectPtr &incr)
{
SQObjectPtr trg;
_RET_ON_FAIL(ARITH_OP( op , trg, a, incr));
@ -488,7 +488,7 @@ bool SQVM::PLOCAL_INC(SQInteger op,SQObjectPtr &target, SQObjectPtr &a, SQObject
return true;
}
bool SQVM::DerefInc(SQInteger op,SQObjectPtr &target, SQObjectPtr &self, SQObjectPtr &key, SQObjectPtr &incr, bool postfix,SQInteger selfidx)
bool SQVM::DerefInc(int64_t op,SQObjectPtr &target, SQObjectPtr &self, SQObjectPtr &key, SQObjectPtr &incr, bool postfix,int64_t selfidx)
{
SQObjectPtr tmp, tself = self, tkey = key;
if (!Get(tself, tkey, tmp, 0, selfidx)) { return false; }
@ -499,12 +499,12 @@ bool SQVM::DerefInc(SQInteger op,SQObjectPtr &target, SQObjectPtr &self, SQObjec
}
#define arg0 (_i_._arg0)
#define sarg0 ((SQInteger)*((const signed char *)&_i_._arg0))
#define sarg0 ((int64_t)*((const signed char *)&_i_._arg0))
#define arg1 (_i_._arg1)
#define sarg1 (*((const SQInt32 *)&_i_._arg1))
#define sarg1 (*((const int32_t *)&_i_._arg1))
#define arg2 (_i_._arg2)
#define arg3 (_i_._arg3)
#define sarg3 ((SQInteger)*((const signed char *)&_i_._arg3))
#define sarg3 ((int64_t)*((const signed char *)&_i_._arg3))
SQRESULT SQVM::Suspend()
{
@ -518,22 +518,22 @@ SQRESULT SQVM::Suspend()
#define _FINISH(howmuchtojump) {jump = howmuchtojump; return true; }
bool SQVM::FOREACH_OP(SQObjectPtr &o1,SQObjectPtr &o2,SQObjectPtr
&o3,SQObjectPtr &o4,SQInteger SQ_UNUSED_ARG(arg_2),int exitpos,int &jump)
&o3,SQObjectPtr &o4,int64_t SQ_UNUSED_ARG(arg_2),int exitpos,int &jump)
{
SQInteger nrefidx;
int64_t nrefidx;
switch(sq_type(o1)) {
case OT_TABLE:
if((nrefidx = _table(o1)->Next(false,o4, o2, o3)) == -1) _FINISH(exitpos);
o4 = (SQInteger)nrefidx; _FINISH(1);
o4 = (int64_t)nrefidx; _FINISH(1);
case OT_ARRAY:
if((nrefidx = _array(o1)->Next(o4, o2, o3)) == -1) _FINISH(exitpos);
o4 = (SQInteger) nrefidx; _FINISH(1);
o4 = (int64_t) nrefidx; _FINISH(1);
case OT_STRING:
if((nrefidx = _string(o1)->Next(o4, o2, o3)) == -1)_FINISH(exitpos);
o4 = (SQInteger)nrefidx; _FINISH(1);
o4 = (int64_t)nrefidx; _FINISH(1);
case OT_CLASS:
if((nrefidx = _class(o1)->Next(o4, o2, o3)) == -1)_FINISH(exitpos);
o4 = (SQInteger)nrefidx; _FINISH(1);
o4 = (int64_t)nrefidx; _FINISH(1);
case OT_USERDATA:
case OT_INSTANCE:
if(_delegable(o1)->_delegate) {
@ -562,7 +562,7 @@ bool SQVM::FOREACH_OP(SQObjectPtr &o1,SQObjectPtr &o2,SQObjectPtr
case OT_GENERATOR:
if(_generator(o1)->_state == SQGenerator::eDead) _FINISH(exitpos);
if(_generator(o1)->_state == SQGenerator::eSuspended) {
SQInteger idx = 0;
int64_t idx = 0;
if(sq_type(o4) == OT_INTEGER) {
idx = _integer(o4) + 1;
}
@ -585,10 +585,10 @@ bool SQVM::FOREACH_OP(SQObjectPtr &o1,SQObjectPtr &o2,SQObjectPtr
bool SQVM::CLOSURE_OP(SQObjectPtr &target, SQFunctionProto *func)
{
SQInteger nouters;
int64_t nouters;
SQClosure *closure = SQClosure::Create(_ss(this), func,_table(_roottable)->GetWeakRef(OT_TABLE));
if((nouters = func->_noutervalues)) {
for(SQInteger i = 0; i<nouters; i++) {
for(int64_t i = 0; i<nouters; i++) {
SQOuterVar &v = func->_outervalues[i];
switch(v._type){
case otLOCAL:
@ -600,10 +600,10 @@ bool SQVM::CLOSURE_OP(SQObjectPtr &target, SQFunctionProto *func)
}
}
}
SQInteger ndefparams;
int64_t ndefparams;
if((ndefparams = func->_ndefaultparams)) {
for(SQInteger i = 0; i < ndefparams; i++) {
SQInteger spos = func->_defaultparams[i];
for(int64_t i = 0; i < ndefparams; i++) {
int64_t spos = func->_defaultparams[i];
closure->_defaultparams[i] = _stack._vals[_stackbase + spos];
}
}
@ -613,7 +613,7 @@ bool SQVM::CLOSURE_OP(SQObjectPtr &target, SQFunctionProto *func)
}
bool SQVM::CLASS_OP(SQObjectPtr &target,SQInteger baseclass,SQInteger attributes)
bool SQVM::CLASS_OP(SQObjectPtr &target,int64_t baseclass,int64_t attributes)
{
SQClass *base = NULL;
SQObjectPtr attrs;
@ -658,7 +658,7 @@ bool SQVM::IsEqual(const SQObjectPtr &o1,const SQObjectPtr &o2,bool &res)
bool SQVM::IsFalse(SQObjectPtr &o)
{
if(((sq_type(o) & SQOBJECT_CANBEFALSE)
&& ( ((sq_type(o) == OT_FLOAT) && (_float(o) == SQFloat(0.0))) ))
&& ( ((sq_type(o) == OT_FLOAT) && (_float(o) == float_t(0.0))) ))
#if !defined(SQUSEDOUBLE) || (defined(SQUSEDOUBLE) && defined(_SQ64))
|| (_integer(o) == 0) ) //OT_NULL|OT_INTEGER|OT_BOOL
#else
@ -670,12 +670,12 @@ bool SQVM::IsFalse(SQObjectPtr &o)
return false;
}
extern SQInstructionDesc g_InstrDesc[];
bool SQVM::Execute(SQObjectPtr &closure, SQInteger nargs, SQInteger stackbase,SQObjectPtr &outres, SQBool raiseerror,ExecutionType et)
bool SQVM::Execute(SQObjectPtr &closure, int64_t nargs, int64_t stackbase,SQObjectPtr &outres, SQBool raiseerror,ExecutionType et)
{
if ((_nnativecalls + 1) > MAX_NATIVE_CALLS) { Raise_Error(_SC("Native stack overflow")); return false; }
_nnativecalls++;
AutoDec ad(&_nnativecalls);
SQInteger traps = 0;
int64_t traps = 0;
CallInfo *prevci = ci;
switch(et) {
@ -717,20 +717,20 @@ exception_restore:
case _OP_LOAD: TARGET = ci->_literals[arg1]; continue;
case _OP_LOADINT:
#ifndef _SQ64
TARGET = (SQInteger)arg1; continue;
TARGET = (int64_t)arg1; continue;
#else
TARGET = (SQInteger)((SQInt32)arg1); continue;
TARGET = (int64_t)((int32_t)arg1); continue;
#endif
case _OP_LOADFLOAT: TARGET = *((const SQFloat *)&arg1); continue;
case _OP_LOADFLOAT: TARGET = *((const float_t *)&arg1); continue;
case _OP_DLOAD: TARGET = ci->_literals[arg1]; STK(arg2) = ci->_literals[arg3];continue;
case _OP_TAILCALL:{
SQObjectPtr &t = STK(arg1);
if (sq_type(t) == OT_CLOSURE
&& (!_closure(t)->_function->_bgenerator)){
SQObjectPtr clo = t;
SQInteger last_top = _top;
int64_t last_top = _top;
if(_openouters) CloseOuters(&(_stack._vals[_stackbase]));
for (SQInteger i = 0; i < arg3; i++) STK(i) = STK(arg2 + i);
for (int64_t i = 0; i < arg3; i++) STK(i) = STK(arg2 + i);
_GUARD(StartCall(_closure(clo), ci->_target, arg3, _stackbase, true));
if (last_top >= _top) {
_top = last_top;
@ -747,7 +747,7 @@ exception_restore:
case OT_NATIVECLOSURE: {
bool suspend;
bool tailcall;
_GUARD(CallNative(_nativeclosure(clo), arg3, _stackbase+arg2, clo, (SQInt32)sarg0, suspend, tailcall));
_GUARD(CallNative(_nativeclosure(clo), arg3, _stackbase+arg2, clo, (int32_t)sarg0, suspend, tailcall));
if(suspend){
_suspended = SQTrue;
_suspended_target = sarg0;
@ -767,7 +767,7 @@ exception_restore:
if(sarg0 != -1) {
STK(arg0) = inst;
}
SQInteger stkbase;
int64_t stkbase;
switch(sq_type(clo)) {
case OT_CLOSURE:
stkbase = _stackbase+arg2;
@ -790,7 +790,7 @@ exception_restore:
SQObjectPtr closure;
if(_delegable(clo)->_delegate && _delegable(clo)->GetMetaMethod(this,MT_CALL,closure)) {
Push(clo);
for (SQInteger i = 0; i < arg3; i++) Push(STK(arg2 + i));
for (int64_t i = 0; i < arg3; i++) Push(STK(arg2 + i));
if(!CallMetaMethod(closure, MT_CALL, arg3+1, clo)) SQ_THROW();
if(sarg0 != -1) {
STK(arg0) = clo;
@ -863,7 +863,7 @@ exception_restore:
return true;
}
continue;
case _OP_LOADNULLS:{ for(SQInt32 n=0; n < arg1; n++) STK(arg0+n).Null(); }continue;
case _OP_LOADNULLS:{ for(int32_t n=0; n < arg1; n++) STK(arg0+n).Null(); }continue;
case _OP_LOADROOT: {
SQWeakRef *w = _closure(ci->_closure)->_root;
if(sq_type(w->_obj) != OT_NULL) {
@ -916,14 +916,14 @@ exception_restore:
case AAT_INT:
val._type = OT_INTEGER;
#ifndef _SQ64
val._unVal.nInteger = (SQInteger)arg1;
val._unVal.nInteger = (int64_t)arg1;
#else
val._unVal.nInteger = (SQInteger)((SQInt32)arg1);
val._unVal.nInteger = (int64_t)((int32_t)arg1);
#endif
break;
case AAT_FLOAT:
val._type = OT_FLOAT;
val._unVal.fFloat = *((const SQFloat *)&arg1);
val._unVal.fFloat = *((const float_t *)&arg1);
break;
case AAT_BOOL:
val._type = OT_BOOL;
@ -935,7 +935,7 @@ exception_restore:
_array(STK(arg0))->Append(val); continue;
}
case _OP_COMPARITH: {
SQInteger selfidx = (((SQUnsignedInteger)arg1&0xFFFF0000)>>16);
int64_t selfidx = (((uint64_t)arg1&0xFFFF0000)>>16);
_GUARD(DerefInc(arg3, TARGET, STK(selfidx), STK(arg2), STK(arg1&0x0000FFFF), false, selfidx));
}
continue;
@ -985,8 +985,8 @@ exception_restore:
case _OP_NOT: TARGET = IsFalse(STK(arg1)); continue;
case _OP_BWNOT:
if(sq_type(STK(arg1)) == OT_INTEGER) {
SQInteger t = _integer(STK(arg1));
TARGET = SQInteger(~t);
int64_t t = _integer(STK(arg1));
TARGET = int64_t(~t);
continue;
}
Raise_Error(_SC("attempt to perform a bitwise op on a %s"), GetTypeName(STK(arg1)));
@ -1036,7 +1036,7 @@ exception_restore:
}
continue;
case _OP_POPTRAP: {
for(SQInteger i = 0; i < arg0; i++) {
for(int64_t i = 0; i < arg0; i++) {
_etraps.pop_back(); traps--;
ci->_etraps--;
}
@ -1067,8 +1067,8 @@ exception_trap:
{
SQObjectPtr currerror = _lasterror;
// dumpstack(_stackbase);
// SQInteger n = 0;
SQInteger last_top = _top;
// int64_t n = 0;
int64_t last_top = _top;
if(_ss(this)->_notifyallexceptions || (!traps && raiseerror)) CallErrorHandler(currerror);
@ -1086,7 +1086,7 @@ exception_trap:
else if (_debughook) {
//notify debugger of a "return"
//even if it really an exception unwinding the stack
for(SQInteger i = 0; i < ci->_ncalls; i++) {
for(int64_t i = 0; i < ci->_ncalls; i++) {
CallDebugHook(_SC('r'));
}
}
@ -1122,19 +1122,19 @@ void SQVM::CallErrorHandler(SQObjectPtr &error)
}
void SQVM::CallDebugHook(SQInteger type,SQInteger forcedline)
void SQVM::CallDebugHook(int64_t type,int64_t forcedline)
{
_debughook = false;
SQFunctionProto *func=_closure(ci->_closure)->_function;
if(_debughook_native) {
const SQChar *src = sq_type(func->_sourcename) == OT_STRING?_stringval(func->_sourcename):NULL;
const SQChar *fname = sq_type(func->_name) == OT_STRING?_stringval(func->_name):NULL;
SQInteger line = forcedline?forcedline:func->GetLine(ci->_ip);
int64_t line = forcedline?forcedline:func->GetLine(ci->_ip);
_debughook_native(this,type,src,line,fname);
}
else {
SQObjectPtr temp_reg;
SQInteger nparams=5;
int64_t nparams=5;
Push(_roottable); Push(type); Push(func->_sourcename); Push(forcedline?forcedline:func->GetLine(ci->_ip)); Push(func->_name);
Call(_debughook_closure,nparams,_top-nparams,temp_reg,SQFalse);
Pop(nparams);
@ -1142,10 +1142,10 @@ void SQVM::CallDebugHook(SQInteger type,SQInteger forcedline)
_debughook = true;
}
bool SQVM::CallNative(SQNativeClosure *nclosure, SQInteger nargs, SQInteger newbase, SQObjectPtr &retval, SQInt32 target,bool &suspend, bool &tailcall)
bool SQVM::CallNative(SQNativeClosure *nclosure, int64_t nargs, int64_t newbase, SQObjectPtr &retval, int32_t target,bool &suspend, bool &tailcall)
{
SQInteger nparamscheck = nclosure->_nparamscheck;
SQInteger newtop = newbase + nargs + nclosure->_noutervalues;
int64_t nparamscheck = nclosure->_nparamscheck;
int64_t newtop = newbase + nargs + nclosure->_noutervalues;
if (_nnativecalls + 1 > MAX_NATIVE_CALLS) {
Raise_Error(_SC("Native stack overflow"));
@ -1159,10 +1159,10 @@ bool SQVM::CallNative(SQNativeClosure *nclosure, SQInteger nargs, SQInteger newb
return false;
}
SQInteger tcs;
int64_t tcs;
SQIntVec &tc = nclosure->_typecheck;
if((tcs = tc.size())) {
for(SQInteger i = 0; i < nargs && i < tcs; i++) {
for(int64_t i = 0; i < nargs && i < tcs; i++) {
if((tc._vals[i] != -1) && !(sq_type(_stack._vals[newbase+i]) & tc._vals[i])) {
Raise_ParamTypeError(i,tc._vals[i], sq_type(_stack._vals[newbase+i]));
return false;
@ -1174,8 +1174,8 @@ bool SQVM::CallNative(SQNativeClosure *nclosure, SQInteger nargs, SQInteger newb
ci->_closure = nclosure;
ci->_target = target;
SQInteger outers = nclosure->_noutervalues;
for (SQInteger i = 0; i < outers; i++) {
int64_t outers = nclosure->_noutervalues;
for (int64_t i = 0; i < outers; i++) {
_stack._vals[newbase+nargs+i] = nclosure->_outervalues[i];
}
if(nclosure->_env) {
@ -1183,7 +1183,7 @@ bool SQVM::CallNative(SQNativeClosure *nclosure, SQInteger nargs, SQInteger newb
}
_nnativecalls++;
SQInteger ret = (nclosure->_function)(this);
int64_t ret = (nclosure->_function)(this);
_nnativecalls--;
suspend = false;
@ -1211,16 +1211,16 @@ bool SQVM::CallNative(SQNativeClosure *nclosure, SQInteger nargs, SQInteger newb
return true;
}
bool SQVM::TailCall(SQClosure *closure, SQInteger parambase,SQInteger nparams)
bool SQVM::TailCall(SQClosure *closure, int64_t parambase,int64_t nparams)
{
SQInteger last_top = _top;
int64_t last_top = _top;
SQObjectPtr clo = closure;
if (ci->_root)
{
Raise_Error("root calls cannot invoke tailcalls");
return false;
}
for (SQInteger i = 0; i < nparams; i++) STK(i) = STK(parambase + i);
for (int64_t i = 0; i < nparams; i++) STK(i) = STK(parambase + i);
bool ret = StartCall(closure, ci->_target, nparams, _stackbase, true);
if (last_top >= _top) {
_top = last_top;
@ -1232,7 +1232,7 @@ bool SQVM::TailCall(SQClosure *closure, SQInteger parambase,SQInteger nparams)
#define FALLBACK_NO_MATCH 1
#define FALLBACK_ERROR 2
bool SQVM::Get(const SQObjectPtr &self, const SQObjectPtr &key, SQObjectPtr &dest, SQUnsignedInteger getflags, SQInteger selfidx)
bool SQVM::Get(const SQObjectPtr &self, const SQObjectPtr &key, SQObjectPtr &dest, uint64_t getflags, int64_t selfidx)
{
switch(sq_type(self)){
case OT_TABLE:
@ -1249,11 +1249,11 @@ bool SQVM::Get(const SQObjectPtr &self, const SQObjectPtr &key, SQObjectPtr &des
break;
case OT_STRING:
if(sq_isnumeric(key)){
SQInteger n = tointeger(key);
SQInteger len = _string(self)->_len;
int64_t n = tointeger(key);
int64_t len = _string(self)->_len;
if (n < 0) { n += len; }
if (n >= 0 && n < len) {
dest = SQInteger(_stringval(self)[n]);
dest = int64_t(_stringval(self)[n]);
return true;
}
if ((getflags & GET_FLAG_DO_NOT_RAISE_ERROR) == 0) Raise_IdxError(key);
@ -1306,7 +1306,7 @@ bool SQVM::InvokeDefaultDelegate(const SQObjectPtr &self,const SQObjectPtr &key,
}
SQInteger SQVM::FallBackGet(const SQObjectPtr &self,const SQObjectPtr &key,SQObjectPtr &dest)
int64_t SQVM::FallBackGet(const SQObjectPtr &self,const SQObjectPtr &key,SQObjectPtr &dest)
{
switch(sq_type(self)){
case OT_TABLE:
@ -1344,7 +1344,7 @@ SQInteger SQVM::FallBackGet(const SQObjectPtr &self,const SQObjectPtr &key,SQObj
return FALLBACK_NO_MATCH;
}
bool SQVM::Set(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr &val,SQInteger selfidx)
bool SQVM::Set(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr &val,int64_t selfidx)
{
switch(sq_type(self)){
case OT_TABLE:
@ -1379,7 +1379,7 @@ bool SQVM::Set(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr
return false;
}
SQInteger SQVM::FallBackSet(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr &val)
int64_t SQVM::FallBackSet(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr &val)
{
switch(sq_type(self)) {
case OT_TABLE:
@ -1567,10 +1567,10 @@ bool SQVM::DeleteSlot(const SQObjectPtr &self,const SQObjectPtr &key,SQObjectPtr
return true;
}
bool SQVM::Call(SQObjectPtr &closure,SQInteger nparams,SQInteger stackbase,SQObjectPtr &outres,SQBool raiseerror)
bool SQVM::Call(SQObjectPtr &closure,int64_t nparams,int64_t stackbase,SQObjectPtr &outres,SQBool raiseerror)
{
#ifdef _DEBUG
SQInteger prevstackbase = _stackbase;
int64_t prevstackbase = _stackbase;
#endif
switch(sq_type(closure)) {
case OT_CLOSURE:
@ -1605,7 +1605,7 @@ SQInteger prevstackbase = _stackbase;
return true;
}
bool SQVM::CallMetaMethod(SQObjectPtr &closure,SQMetaMethod SQ_UNUSED_ARG(mm),SQInteger nparams,SQObjectPtr &outres)
bool SQVM::CallMetaMethod(SQObjectPtr &closure,SQMetaMethod SQ_UNUSED_ARG(mm),int64_t nparams,SQObjectPtr &outres)
{
//SQObjectPtr closure;
@ -1642,15 +1642,15 @@ void SQVM::FindOuter(SQObjectPtr &target, SQObjectPtr *stackindex)
target = SQObjectPtr(otr);
}
bool SQVM::EnterFrame(SQInteger newbase, SQInteger newtop, bool tailcall)
bool SQVM::EnterFrame(int64_t newbase, int64_t newtop, bool tailcall)
{
if( !tailcall ) {
if( _callsstacksize == _alloccallsstacksize ) {
GrowCallStack();
}
ci = &_callsstack[_callsstacksize++];
ci->_prevstkbase = (SQInt32)(newbase - _stackbase);
ci->_prevtop = (SQInt32)(_top - _stackbase);
ci->_prevstkbase = (int32_t)(newbase - _stackbase);
ci->_prevtop = (int32_t)(_top - _stackbase);
ci->_etraps = 0;
ci->_ncalls = 1;
ci->_generator = NULL;
@ -1662,7 +1662,7 @@ bool SQVM::EnterFrame(SQInteger newbase, SQInteger newtop, bool tailcall)
_stackbase = newbase;
_top = newtop;
if(newtop + MIN_STACK_OVERHEAD > (SQInteger)_stack.size()) {
if(newtop + MIN_STACK_OVERHEAD > (int64_t)_stack.size()) {
if(_nmetamethodscall) {
Raise_Error(_SC("stack overflow, cannot resize stack while in a metamethod"));
return false;
@ -1674,9 +1674,9 @@ bool SQVM::EnterFrame(SQInteger newbase, SQInteger newtop, bool tailcall)
}
void SQVM::LeaveFrame() {
SQInteger last_top = _top;
SQInteger last_stackbase = _stackbase;
SQInteger css = --_callsstacksize;
int64_t last_top = _top;
int64_t last_stackbase = _stackbase;
int64_t css = --_callsstacksize;
/* First clean out the call stack frame */
ci->_closure.Null();
@ -1709,9 +1709,9 @@ void SQVM::CloseOuters(SQObjectPtr *stackindex) {
}
}
void SQVM::Remove(SQInteger n) {
void SQVM::Remove(int64_t n) {
n = (n >= 0)?n + _stackbase - 1:_top + n;
for(SQInteger i = n; i < _top; i++){
for(int64_t i = n; i < _top; i++){
_stack[i] = _stack[i+1];
}
_stack[_top].Null();
@ -1722,8 +1722,8 @@ void SQVM::Pop() {
_stack[--_top].Null();
}
void SQVM::Pop(SQInteger n) {
for(SQInteger i = 0; i < n; i++){
void SQVM::Pop(int64_t n) {
for(int64_t i = 0; i < n; i++){
_stack[--_top].Null();
}
}
@ -1732,20 +1732,20 @@ void SQVM::PushNull() { _stack[_top++].Null(); }
void SQVM::Push(const SQObjectPtr &o) { _stack[_top++] = o; }
SQObjectPtr &SQVM::Top() { return _stack[_top-1]; }
SQObjectPtr &SQVM::PopGet() { return _stack[--_top]; }
SQObjectPtr &SQVM::GetUp(SQInteger n) { return _stack[_top+n]; }
SQObjectPtr &SQVM::GetAt(SQInteger n) { return _stack[n]; }
SQObjectPtr &SQVM::GetUp(int64_t n) { return _stack[_top+n]; }
SQObjectPtr &SQVM::GetAt(int64_t n) { return _stack[n]; }
#ifdef _DEBUG_DUMP
void SQVM::dumpstack(SQInteger stackbase,bool dumpall)
void SQVM::dumpstack(int64_t stackbase,bool dumpall)
{
SQInteger size=dumpall?_stack.size():_top;
SQInteger n=0;
int64_t size=dumpall?_stack.size():_top;
int64_t n=0;
scprintf(_SC("\n>>>>stack dump<<<<\n"));
CallInfo &ci=_callsstack[_callsstacksize-1];
scprintf(_SC("IP: %p\n"),ci._ip);
scprintf(_SC("prev stack base: %d\n"),ci._prevstkbase);
scprintf(_SC("prev top: %d\n"),ci._prevtop);
for(SQInteger i=0;i<size;i++){
for(int64_t i=0;i<size;i++){
SQObjectPtr &obj=_stack[i];
if(stackbase==i)scprintf(_SC(">"));else scprintf(_SC(" "));
scprintf(_SC("[" _PRINT_INT_FMT "]:"),n);

View File

@ -25,12 +25,12 @@ void sq_base_register(HRABBITVM v);
struct SQExceptionTrap{
SQExceptionTrap() {}
SQExceptionTrap(SQInteger ss, SQInteger stackbase,SQInstruction *ip, SQInteger ex_target){ _stacksize = ss; _stackbase = stackbase; _ip = ip; _extarget = ex_target;}
SQExceptionTrap(int64_t ss, int64_t stackbase,SQInstruction *ip, int64_t ex_target){ _stacksize = ss; _stackbase = stackbase; _ip = ip; _extarget = ex_target;}
SQExceptionTrap(const SQExceptionTrap &et) { (*this) = et; }
SQInteger _stackbase;
SQInteger _stacksize;
int64_t _stackbase;
int64_t _stacksize;
SQInstruction *_ip;
SQInteger _extarget;
int64_t _extarget;
};
#define _INLINE
@ -45,45 +45,45 @@ struct SQVM : public SQRefCounted
SQObjectPtr *_literals;
SQObjectPtr _closure;
SQGenerator *_generator;
SQInt32 _etraps;
SQInt32 _prevstkbase;
SQInt32 _prevtop;
SQInt32 _target;
SQInt32 _ncalls;
int32_t _etraps;
int32_t _prevstkbase;
int32_t _prevtop;
int32_t _target;
int32_t _ncalls;
SQBool _root;
};
typedef sqvector<CallInfo> CallInfoVec;
public:
void DebugHookProxy(SQInteger type, const SQChar * sourcename, SQInteger line, const SQChar * funcname);
static void _DebugHookProxy(HRABBITVM v, SQInteger type, const SQChar * sourcename, SQInteger line, const SQChar * funcname);
void DebugHookProxy(int64_t type, const SQChar * sourcename, int64_t line, const SQChar * funcname);
static void _DebugHookProxy(HRABBITVM v, int64_t type, const SQChar * sourcename, int64_t line, const SQChar * funcname);
enum ExecutionType { ET_CALL, ET_RESUME_GENERATOR, ET_RESUME_VM,ET_RESUME_THROW_VM };
SQVM(SQSharedState *ss);
~SQVM();
bool Init(SQVM *friendvm, SQInteger stacksize);
bool Execute(SQObjectPtr &func, SQInteger nargs, SQInteger stackbase, SQObjectPtr &outres, SQBool raiseerror, ExecutionType et = ET_CALL);
bool Init(SQVM *friendvm, int64_t stacksize);
bool Execute(SQObjectPtr &func, int64_t nargs, int64_t stackbase, SQObjectPtr &outres, SQBool raiseerror, ExecutionType et = ET_CALL);
//starts a native call return when the NATIVE closure returns
bool CallNative(SQNativeClosure *nclosure, SQInteger nargs, SQInteger newbase, SQObjectPtr &retval, SQInt32 target, bool &suspend,bool &tailcall);
bool TailCall(SQClosure *closure, SQInteger firstparam, SQInteger nparams);
bool CallNative(SQNativeClosure *nclosure, int64_t nargs, int64_t newbase, SQObjectPtr &retval, int32_t target, bool &suspend,bool &tailcall);
bool TailCall(SQClosure *closure, int64_t firstparam, int64_t nparams);
//starts a RABBIT call in the same "Execution loop"
bool StartCall(SQClosure *closure, SQInteger target, SQInteger nargs, SQInteger stackbase, bool tailcall);
bool StartCall(SQClosure *closure, int64_t target, int64_t nargs, int64_t stackbase, bool tailcall);
bool CreateClassInstance(SQClass *theclass, SQObjectPtr &inst, SQObjectPtr &constructor);
//call a generic closure pure RABBIT or NATIVE
bool Call(SQObjectPtr &closure, SQInteger nparams, SQInteger stackbase, SQObjectPtr &outres,SQBool raiseerror);
bool Call(SQObjectPtr &closure, int64_t nparams, int64_t stackbase, SQObjectPtr &outres,SQBool raiseerror);
SQRESULT Suspend();
void CallDebugHook(SQInteger type,SQInteger forcedline=0);
void CallDebugHook(int64_t type,int64_t forcedline=0);
void CallErrorHandler(SQObjectPtr &e);
bool Get(const SQObjectPtr &self, const SQObjectPtr &key, SQObjectPtr &dest, SQUnsignedInteger getflags, SQInteger selfidx);
SQInteger FallBackGet(const SQObjectPtr &self,const SQObjectPtr &key,SQObjectPtr &dest);
bool Get(const SQObjectPtr &self, const SQObjectPtr &key, SQObjectPtr &dest, uint64_t getflags, int64_t selfidx);
int64_t FallBackGet(const SQObjectPtr &self,const SQObjectPtr &key,SQObjectPtr &dest);
bool InvokeDefaultDelegate(const SQObjectPtr &self,const SQObjectPtr &key,SQObjectPtr &dest);
bool Set(const SQObjectPtr &self, const SQObjectPtr &key, const SQObjectPtr &val, SQInteger selfidx);
SQInteger FallBackSet(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr &val);
bool Set(const SQObjectPtr &self, const SQObjectPtr &key, const SQObjectPtr &val, int64_t selfidx);
int64_t FallBackSet(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr &val);
bool NewSlot(const SQObjectPtr &self, const SQObjectPtr &key, const SQObjectPtr &val,bool bstatic);
bool NewSlotA(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr &val,const SQObjectPtr &attrs,bool bstatic,bool raw);
bool DeleteSlot(const SQObjectPtr &self, const SQObjectPtr &key, SQObjectPtr &res);
bool Clone(const SQObjectPtr &self, SQObjectPtr &target);
bool ObjCmp(const SQObjectPtr &o1, const SQObjectPtr &o2,SQInteger &res);
bool ObjCmp(const SQObjectPtr &o1, const SQObjectPtr &o2,int64_t &res);
bool StringCat(const SQObjectPtr &str, const SQObjectPtr &obj, SQObjectPtr &dest);
static bool IsEqual(const SQObjectPtr &o1,const SQObjectPtr &o2,bool &res);
bool ToString(const SQObjectPtr &o,SQObjectPtr &res);
@ -94,61 +94,61 @@ public:
void Raise_Error(const SQObjectPtr &desc);
void Raise_IdxError(const SQObjectPtr &o);
void Raise_CompareError(const SQObject &o1, const SQObject &o2);
void Raise_ParamTypeError(SQInteger nparam,SQInteger typemask,SQInteger type);
void Raise_ParamTypeError(int64_t nparam,int64_t typemask,int64_t type);
void FindOuter(SQObjectPtr &target, SQObjectPtr *stackindex);
void RelocateOuters();
void CloseOuters(SQObjectPtr *stackindex);
bool TypeOf(const SQObjectPtr &obj1, SQObjectPtr &dest);
bool CallMetaMethod(SQObjectPtr &closure, SQMetaMethod mm, SQInteger nparams, SQObjectPtr &outres);
bool ArithMetaMethod(SQInteger op, const SQObjectPtr &o1, const SQObjectPtr &o2, SQObjectPtr &dest);
bool Return(SQInteger _arg0, SQInteger _arg1, SQObjectPtr &retval);
bool CallMetaMethod(SQObjectPtr &closure, SQMetaMethod mm, int64_t nparams, SQObjectPtr &outres);
bool ArithMetaMethod(int64_t op, const SQObjectPtr &o1, const SQObjectPtr &o2, SQObjectPtr &dest);
bool Return(int64_t _arg0, int64_t _arg1, SQObjectPtr &retval);
//new stuff
bool ARITH_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,const SQObjectPtr &o2);
bool BW_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,const SQObjectPtr &o2);
bool ARITH_OP(uint64_t op,SQObjectPtr &trg,const SQObjectPtr &o1,const SQObjectPtr &o2);
bool BW_OP(uint64_t op,SQObjectPtr &trg,const SQObjectPtr &o1,const SQObjectPtr &o2);
bool NEG_OP(SQObjectPtr &trg,const SQObjectPtr &o1);
bool CMP_OP(CmpOP op, const SQObjectPtr &o1,const SQObjectPtr &o2,SQObjectPtr &res);
bool CLOSURE_OP(SQObjectPtr &target, SQFunctionProto *func);
bool CLASS_OP(SQObjectPtr &target,SQInteger base,SQInteger attrs);
bool CLASS_OP(SQObjectPtr &target,int64_t base,int64_t attrs);
//return true if the loop is finished
bool FOREACH_OP(SQObjectPtr &o1,SQObjectPtr &o2,SQObjectPtr &o3,SQObjectPtr &o4,SQInteger arg_2,int exitpos,int &jump);
//bool LOCAL_INC(SQInteger op,SQObjectPtr &target, SQObjectPtr &a, SQObjectPtr &incr);
bool PLOCAL_INC(SQInteger op,SQObjectPtr &target, SQObjectPtr &a, SQObjectPtr &incr);
bool DerefInc(SQInteger op,SQObjectPtr &target, SQObjectPtr &self, SQObjectPtr &key, SQObjectPtr &incr, bool postfix,SQInteger arg0);
bool FOREACH_OP(SQObjectPtr &o1,SQObjectPtr &o2,SQObjectPtr &o3,SQObjectPtr &o4,int64_t arg_2,int exitpos,int &jump);
//bool LOCAL_INC(int64_t op,SQObjectPtr &target, SQObjectPtr &a, SQObjectPtr &incr);
bool PLOCAL_INC(int64_t op,SQObjectPtr &target, SQObjectPtr &a, SQObjectPtr &incr);
bool DerefInc(int64_t op,SQObjectPtr &target, SQObjectPtr &self, SQObjectPtr &key, SQObjectPtr &incr, bool postfix,int64_t arg0);
#ifdef _DEBUG_DUMP
void dumpstack(SQInteger stackbase=-1, bool dumpall = false);
void dumpstack(int64_t stackbase=-1, bool dumpall = false);
#endif
void Finalize();
void GrowCallStack() {
SQInteger newsize = _alloccallsstacksize*2;
int64_t newsize = _alloccallsstacksize*2;
_callstackdata.resize(newsize);
_callsstack = &_callstackdata[0];
_alloccallsstacksize = newsize;
}
bool EnterFrame(SQInteger newbase, SQInteger newtop, bool tailcall);
bool EnterFrame(int64_t newbase, int64_t newtop, bool tailcall);
void LeaveFrame();
void Release(){ sq_delete(this,SQVM); }
////////////////////////////////////////////////////////////////////////////
//stack functions for the api
void Remove(SQInteger n);
void Remove(int64_t n);
static bool IsFalse(SQObjectPtr &o);
void Pop();
void Pop(SQInteger n);
void Pop(int64_t n);
void Push(const SQObjectPtr &o);
void PushNull();
SQObjectPtr &Top();
SQObjectPtr &PopGet();
SQObjectPtr &GetUp(SQInteger n);
SQObjectPtr &GetAt(SQInteger n);
SQObjectPtr &GetUp(int64_t n);
SQObjectPtr &GetAt(int64_t n);
SQObjectPtrVec _stack;
SQInteger _top;
SQInteger _stackbase;
int64_t _top;
int64_t _stackbase;
SQOuter *_openouters;
SQObjectPtr _roottable;
SQObjectPtr _lasterror;
@ -162,8 +162,8 @@ public:
CallInfo* _callsstack;
SQInteger _callsstacksize;
SQInteger _alloccallsstacksize;
int64_t _callsstacksize;
int64_t _alloccallsstacksize;
sqvector<CallInfo> _callstackdata;
ExceptionsTraps _etraps;
@ -171,28 +171,28 @@ public:
SQUserPointer _foreignptr;
//VMs sharing the same state
SQSharedState *_sharedstate;
SQInteger _nnativecalls;
SQInteger _nmetamethodscall;
int64_t _nnativecalls;
int64_t _nmetamethodscall;
SQRELEASEHOOK _releasehook;
//suspend infos
SQBool _suspended;
SQBool _suspended_root;
SQInteger _suspended_target;
SQInteger _suspended_traps;
int64_t _suspended_target;
int64_t _suspended_traps;
};
struct AutoDec{
AutoDec(SQInteger *n) { _n = n; }
AutoDec(int64_t *n) { _n = n; }
~AutoDec() { (*_n)--; }
SQInteger *_n;
int64_t *_n;
};
inline SQObjectPtr &stack_get(HRABBITVM v,SQInteger idx){return ((idx>=0)?(v->GetAt(idx+v->_stackbase-1)):(v->GetUp(idx)));}
inline SQObjectPtr &stack_get(HRABBITVM v,int64_t idx){return ((idx>=0)?(v->GetAt(idx+v->_stackbase-1)):(v->GetUp(idx)));}
#define _ss(_vm_) (_vm_)->_sharedstate
#define PUSH_CALLINFO(v,nci){ \
SQInteger css = v->_callsstacksize; \
int64_t css = v->_callsstacksize; \
if(css == v->_alloccallsstacksize) { \
v->GrowCallStack(); \
} \
@ -202,7 +202,7 @@ inline SQObjectPtr &stack_get(HRABBITVM v,SQInteger idx){return ((idx>=0)?(v->Ge
}
#define POP_CALLINFO(v){ \
SQInteger css = --v->_callsstacksize; \
int64_t css = --v->_callsstacksize; \
v->ci->_closure.Null(); \
v->ci = css?&v->_callsstack[css-1]:NULL; \
}