[DEV] build and execute again

This commit is contained in:
Edouard DUPIN 2018-06-28 00:09:15 +02:00
parent 1b59eb8c8e
commit f882c9fedc
19 changed files with 52 additions and 29 deletions

View File

@ -9,6 +9,7 @@
#include <rabbit/rabbit.hpp> #include <rabbit/rabbit.hpp>
#include <rabbit-std/sqstdaux.hpp> #include <rabbit-std/sqstdaux.hpp>
#include <assert.h> #include <assert.h>
#include <rabbit/StackInfos.hpp>
void sqstd_printcallstack(rabbit::VirtualMachine* v) void sqstd_printcallstack(rabbit::VirtualMachine* v)
{ {

View File

@ -136,7 +136,7 @@ static int64_t _file_constructor(rabbit::VirtualMachine* v)
bool owns = true; bool owns = true;
SQFile *f; SQFile *f;
SQFILE newf; SQFILE newf;
if(sq_gettype(v,2) == rabbit::OT_STRING && sq_gettype(v,3) == OT_STRING) { if(sq_gettype(v,2) == rabbit::OT_STRING && sq_gettype(v,3) == rabbit::OT_STRING) {
sq_getstring(v, 2, &filename); sq_getstring(v, 2, &filename);
sq_getstring(v, 3, &mode); sq_getstring(v, 3, &mode);
newf = sqstd_fopen(filename, mode); newf = sqstd_fopen(filename, mode);

View File

@ -8,6 +8,7 @@
#pragma once #pragma once
#include <rabbit/rabbit.hpp> #include <rabbit/rabbit.hpp>
#include <rabbit/RegFunction.hpp>
RABBIT_API rabbit::Result sqstd_register_mathlib(rabbit::VirtualMachine* v); RABBIT_API rabbit::Result sqstd_register_mathlib(rabbit::VirtualMachine* v);

View File

@ -7,6 +7,8 @@
*/ */
#pragma once #pragma once
#include <rabbit/RegFunction.hpp>
int64_t _stream_readblob(rabbit::VirtualMachine* v); int64_t _stream_readblob(rabbit::VirtualMachine* v);
int64_t _stream_readline(rabbit::VirtualMachine* v); int64_t _stream_readline(rabbit::VirtualMachine* v);
int64_t _stream_readn(rabbit::VirtualMachine* v); int64_t _stream_readn(rabbit::VirtualMachine* v);

View File

@ -7,6 +7,8 @@
*/ */
#pragma once #pragma once
#include <rabbit/RegFunction.hpp>
typedef unsigned int SQRexBool; typedef unsigned int SQRexBool;
typedef struct SQRex SQRex; typedef struct SQRex SQRex;

View File

@ -27,6 +27,8 @@
#define screname rename #define screname rename
#endif #endif
#include <rabbit/RegFunction.hpp>
static int64_t _system_getenv(rabbit::VirtualMachine* v) static int64_t _system_getenv(rabbit::VirtualMachine* v)
{ {
const rabbit::Char *s; const rabbit::Char *s;

View File

@ -10,8 +10,8 @@
#include <etk/types.hpp> #include <etk/types.hpp>
#include <rabbit/sqconfig.hpp> #include <rabbit/sqconfig.hpp>
struct SQInstruction;
namespace rabbit { namespace rabbit {
struct SQInstruction;
class ExceptionTrap { class ExceptionTrap {
public: public:
ExceptionTrap() { ExceptionTrap() {

View File

@ -12,6 +12,7 @@
#include <rabbit/AutoDec.hpp> #include <rabbit/AutoDec.hpp>
#include <rabbit/sqconfig.hpp> #include <rabbit/sqconfig.hpp>
#include <rabbit/ExceptionTrap.hpp> #include <rabbit/ExceptionTrap.hpp>
#include <rabbit/MetaMethod.hpp>
#define MAX_NATIVE_CALLS 100 #define MAX_NATIVE_CALLS 100

View File

@ -16,6 +16,7 @@
#include <rabbit/sqcompiler.hpp> #include <rabbit/sqcompiler.hpp>
#include <rabbit/sqfuncstate.hpp> #include <rabbit/sqfuncstate.hpp>
#include <rabbit/sqclass.hpp> #include <rabbit/sqclass.hpp>
#include <rabbit/MemberHandle.hpp>
static bool sq_aux_gettypedarg(rabbit::VirtualMachine* v,int64_t idx,rabbit::ObjectType type,rabbit::ObjectPtr **o) static bool sq_aux_gettypedarg(rabbit::VirtualMachine* v,int64_t idx,rabbit::ObjectType type,rabbit::ObjectPtr **o)
{ {
@ -299,7 +300,8 @@ rabbit::Bool sq_instanceof(rabbit::VirtualMachine* v)
{ {
rabbit::ObjectPtr &inst = stack_get(v,-1); rabbit::ObjectPtr &inst = stack_get(v,-1);
rabbit::ObjectPtr &cl = stack_get(v,-2); rabbit::ObjectPtr &cl = stack_get(v,-2);
if(sq_type(inst) != rabbit::OT_INSTANCE || sq_type(cl) != OT_CLASS) if( sq_type(inst) != rabbit::OT_INSTANCE
|| sq_type(cl) != rabbit::OT_CLASS)
return sq_throwerror(v,_SC("invalid param type")); return sq_throwerror(v,_SC("invalid param type"));
return _instance(inst)->instanceOf(_class(cl))?SQTrue:SQFalse; return _instance(inst)->instanceOf(_class(cl))?SQTrue:SQFalse;
} }
@ -872,7 +874,7 @@ rabbit::Result sq_newslot(rabbit::VirtualMachine* v, int64_t idx, rabbit::Bool b
{ {
sq_aux_paramscheck(v, 3); sq_aux_paramscheck(v, 3);
rabbit::ObjectPtr &self = stack_get(v, idx); rabbit::ObjectPtr &self = stack_get(v, idx);
if(sq_type(self) == rabbit::OT_TABLE || sq_type(self) == OT_CLASS) { if(sq_type(self) == rabbit::OT_TABLE || sq_type(self) == rabbit::OT_CLASS) {
rabbit::ObjectPtr &key = v->getUp(-2); rabbit::ObjectPtr &key = v->getUp(-2);
if(sq_type(key) == rabbit::OT_NULL) return sq_throwerror(v, _SC("null is not a valid key")); if(sq_type(key) == rabbit::OT_NULL) return sq_throwerror(v, _SC("null is not a valid key"));
v->newSlot(self, key, v->getUp(-1),bstatic?true:false); v->newSlot(self, key, v->getUp(-1),bstatic?true:false);
@ -1563,9 +1565,9 @@ rabbit::Result sq_getdefaultdelegate(rabbit::VirtualMachine* v,rabbit::ObjectTyp
case rabbit::OT_TABLE: v->push(ss->_table_default_delegate); break; case rabbit::OT_TABLE: v->push(ss->_table_default_delegate); break;
case rabbit::OT_ARRAY: v->push(ss->_array_default_delegate); break; case rabbit::OT_ARRAY: v->push(ss->_array_default_delegate); break;
case rabbit::OT_STRING: v->push(ss->_string_default_delegate); break; case rabbit::OT_STRING: v->push(ss->_string_default_delegate); break;
case rabbit::OT_INTEGER: case OT_FLOAT: v->push(ss->_number_default_delegate); break; case rabbit::OT_INTEGER: case rabbit::OT_FLOAT: v->push(ss->_number_default_delegate); break;
case rabbit::OT_GENERATOR: v->push(ss->_generator_default_delegate); break; case rabbit::OT_GENERATOR: v->push(ss->_generator_default_delegate); break;
case rabbit::OT_CLOSURE: case OT_NATIVECLOSURE: v->push(ss->_closure_default_delegate); break; case rabbit::OT_CLOSURE: case rabbit::OT_NATIVECLOSURE: v->push(ss->_closure_default_delegate); break;
case rabbit::OT_THREAD: v->push(ss->_thread_default_delegate); break; case rabbit::OT_THREAD: v->push(ss->_thread_default_delegate); break;
case rabbit::OT_CLASS: v->push(ss->_class_default_delegate); break; case rabbit::OT_CLASS: v->push(ss->_class_default_delegate); break;
case rabbit::OT_INSTANCE: v->push(ss->_instance_default_delegate); break; case rabbit::OT_INSTANCE: v->push(ss->_instance_default_delegate); break;

View File

@ -16,6 +16,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdarg.h> #include <stdarg.h>
#include <ctype.h> #include <ctype.h>
#include <rabbit/StackInfos.hpp>
static bool str2num(const rabbit::Char *s,rabbit::ObjectPtr &res,int64_t base) static bool str2num(const rabbit::Char *s,rabbit::ObjectPtr &res,int64_t base)
{ {
@ -189,7 +190,7 @@ static int64_t base_print(rabbit::VirtualMachine* v)
if(SQ_SUCCEEDED(sq_tostring(v,2))) if(SQ_SUCCEEDED(sq_tostring(v,2)))
{ {
if(SQ_SUCCEEDED(sq_getstring(v,-1,&str))) { if(SQ_SUCCEEDED(sq_getstring(v,-1,&str))) {
if(_get_shared_state(v)->_printfunc) _ss(v)->_printfunc(v,_SC("%s"),str); if(_get_shared_state(v)->_printfunc) _get_shared_state(v)->_printfunc(v,_SC("%s"),str);
return 0; return 0;
} }
} }
@ -202,7 +203,7 @@ static int64_t base_error(rabbit::VirtualMachine* v)
if(SQ_SUCCEEDED(sq_tostring(v,2))) if(SQ_SUCCEEDED(sq_tostring(v,2)))
{ {
if(SQ_SUCCEEDED(sq_getstring(v,-1,&str))) { if(SQ_SUCCEEDED(sq_getstring(v,-1,&str))) {
if(_get_shared_state(v)->_errorfunc) _ss(v)->_errorfunc(v,_SC("%s"),str); if(_get_shared_state(v)->_errorfunc) _get_shared_state(v)->_errorfunc(v,_SC("%s"),str);
return 0; return 0;
} }
} }
@ -343,7 +344,8 @@ static int64_t default_delegate_tofloat(rabbit::VirtualMachine* v)
}} }}
return sq_throwerror(v, _SC("cannot convert the string")); return sq_throwerror(v, _SC("cannot convert the string"));
break; break;
case rabbit::OT_INTEGER:case OT_FLOAT: case rabbit::OT_INTEGER:
case rabbit::OT_FLOAT:
v->push(rabbit::ObjectPtr(tofloat(o))); v->push(rabbit::ObjectPtr(tofloat(o)));
break; break;
case rabbit::OT_BOOL: case rabbit::OT_BOOL:
@ -372,7 +374,8 @@ static int64_t default_delegate_tointeger(rabbit::VirtualMachine* v)
}} }}
return sq_throwerror(v, _SC("cannot convert the string")); return sq_throwerror(v, _SC("cannot convert the string"));
break; break;
case rabbit::OT_INTEGER:case OT_FLOAT: case rabbit::OT_INTEGER:
case rabbit::OT_FLOAT:
v->push(rabbit::ObjectPtr(tointeger(o))); v->push(rabbit::ObjectPtr(tointeger(o)));
break; break;
case rabbit::OT_BOOL: case rabbit::OT_BOOL:

View File

@ -11,7 +11,7 @@
#include <rabbit/sqclass.hpp> #include <rabbit/sqclass.hpp>
#include <rabbit/sqfuncproto.hpp> #include <rabbit/sqfuncproto.hpp>
#include <rabbit/sqclosure.hpp> #include <rabbit/sqclosure.hpp>
#include <rabbit/MetaMethod.hpp>
SQClass::SQClass(SQSharedState *ss,SQClass *base) SQClass::SQClass(SQSharedState *ss,SQClass *base)
@ -27,7 +27,7 @@ SQClass::SQClass(SQSharedState *ss,SQClass *base)
_udsize = _base->_udsize; _udsize = _base->_udsize;
_defaultvalues = base->_defaultvalues; _defaultvalues = base->_defaultvalues;
_methods = base->_methods; _methods = base->_methods;
_COPY_VECTOR(_metamethods,base->_metamethods,MT_LAST); _COPY_VECTOR(_metamethods,base->_metamethods, rabbit::MT_LAST);
__ObjaddRef(_base); __ObjaddRef(_base);
} }
_members = base?base->_members->clone() : SQTable::create(ss,0); _members = base?base->_members->clone() : SQTable::create(ss,0);
@ -38,7 +38,7 @@ void SQClass::finalize() {
_attributes.Null(); _attributes.Null();
_NULL_SQOBJECT_VECTOR(_defaultvalues,_defaultvalues.size()); _NULL_SQOBJECT_VECTOR(_defaultvalues,_defaultvalues.size());
_methods.resize(0); _methods.resize(0);
_NULL_SQOBJECT_VECTOR(_metamethods,MT_LAST); _NULL_SQOBJECT_VECTOR(_metamethods, rabbit::MT_LAST);
__Objrelease(_members); __Objrelease(_members);
if(_base) { if(_base) {
__Objrelease(_base); __Objrelease(_base);
@ -53,7 +53,9 @@ SQClass::~SQClass()
bool SQClass::newSlot(SQSharedState *ss,const rabbit::ObjectPtr &key,const rabbit::ObjectPtr &val,bool bstatic) bool SQClass::newSlot(SQSharedState *ss,const rabbit::ObjectPtr &key,const rabbit::ObjectPtr &val,bool bstatic)
{ {
rabbit::ObjectPtr temp; rabbit::ObjectPtr temp;
bool belongs_to_static_table = sq_type(val) == rabbit::OT_CLOSURE || sq_type(val) == OT_NATIVECLOSURE || bstatic; bool belongs_to_static_table = sq_type(val) == rabbit::OT_CLOSURE
|| sq_type(val) == rabbit::OT_NATIVECLOSURE
|| bstatic;
if(_locked && !belongs_to_static_table) if(_locked && !belongs_to_static_table)
return false; //the class already has an instance so cannot be modified return false; //the class already has an instance so cannot be modified
if(_members->get(key,temp) && _isfield(temp)) //overrides the default value if(_members->get(key,temp) && _isfield(temp)) //overrides the default value
@ -63,8 +65,9 @@ bool SQClass::newSlot(SQSharedState *ss,const rabbit::ObjectPtr &key,const rabbi
} }
if(belongs_to_static_table) { if(belongs_to_static_table) {
int64_t mmidx; int64_t mmidx;
if((sq_type(val) == rabbit::OT_CLOSURE || sq_type(val) == OT_NATIVECLOSURE) && if( ( sq_type(val) == rabbit::OT_CLOSURE
(mmidx = ss->getMetaMethodIdxByName(key)) != -1) { || sq_type(val) == rabbit::OT_NATIVECLOSURE )
&& (mmidx = ss->getMetaMethodIdxByName(key)) != -1) {
_metamethods[mmidx] = val; _metamethods[mmidx] = val;
} }
else { else {

View File

@ -76,7 +76,7 @@ public:
SQClass *_base; SQClass *_base;
SQClassMemberVec _defaultvalues; SQClassMemberVec _defaultvalues;
SQClassMemberVec _methods; SQClassMemberVec _methods;
rabbit::ObjectPtr _metamethods[MT_LAST]; rabbit::ObjectPtr _metamethods[rabbit::MT_LAST];
rabbit::ObjectPtr _attributes; rabbit::ObjectPtr _attributes;
rabbit::UserPointer _typetag; rabbit::UserPointer _typetag;
SQRELEASEHOOK _hook; SQRELEASEHOOK _hook;

View File

@ -36,8 +36,8 @@ public:
void release(){ void release(){
SQFunctionProto *f = _function; SQFunctionProto *f = _function;
int64_t size = _CALC_CLOSURE_SIZE(f); int64_t size = _CALC_CLOSURE_SIZE(f);
_DESTRUCT_VECTOR(rabbit::ObjectPtr,f->_noutervalues,_outervalues); _DESTRUCT_VECTOR(ObjectPtr,f->_noutervalues,_outervalues);
_DESTRUCT_VECTOR(rabbit::ObjectPtr,f->_ndefaultparams,_defaultparams); _DESTRUCT_VECTOR(ObjectPtr,f->_ndefaultparams,_defaultparams);
__Objrelease(_function); __Objrelease(_function);
this->~SQClosure(); this->~SQClosure();
sq_vm_free(this,size); sq_vm_free(this,size);
@ -177,7 +177,7 @@ public:
} }
void release(){ void release(){
int64_t size = _CALC_NATVIVECLOSURE_SIZE(_noutervalues); int64_t size = _CALC_NATVIVECLOSURE_SIZE(_noutervalues);
_DESTRUCT_VECTOR(rabbit::ObjectPtr,_noutervalues,_outervalues); _DESTRUCT_VECTOR(ObjectPtr,_noutervalues,_outervalues);
this->~SQNativeClosure(); this->~SQNativeClosure();
sq_free(this,size); sq_free(this,size);
} }

View File

@ -12,6 +12,8 @@
#include <rabbit/sqfuncproto.hpp> #include <rabbit/sqfuncproto.hpp>
#include <rabbit/sqclosure.hpp> #include <rabbit/sqclosure.hpp>
#include <rabbit/sqstring.hpp> #include <rabbit/sqstring.hpp>
#include <rabbit/FunctionInfo.hpp>
#include <rabbit/StackInfos.hpp>
rabbit::Result sq_getfunctioninfo(rabbit::VirtualMachine* v,int64_t level,rabbit::FunctionInfo *fi) rabbit::Result sq_getfunctioninfo(rabbit::VirtualMachine* v,int64_t level,rabbit::FunctionInfo *fi)
{ {

View File

@ -105,9 +105,9 @@ public:
return f; return f;
} }
void release(){ void release(){
_DESTRUCT_VECTOR(rabbit::ObjectPtr,_nliterals,_literals); _DESTRUCT_VECTOR(ObjectPtr,_nliterals,_literals);
_DESTRUCT_VECTOR(rabbit::ObjectPtr,_nparameters,_parameters); _DESTRUCT_VECTOR(ObjectPtr,_nparameters,_parameters);
_DESTRUCT_VECTOR(rabbit::ObjectPtr,_nfunctions,_functions); _DESTRUCT_VECTOR(ObjectPtr,_nfunctions,_functions);
_DESTRUCT_VECTOR(SQOuterVar,_noutervalues,_outervalues); _DESTRUCT_VECTOR(SQOuterVar,_noutervalues,_outervalues);
//_DESTRUCT_VECTOR(SQLineInfo,_nlineinfos,_lineinfos); //not required are 2 integers //_DESTRUCT_VECTOR(SQLineInfo,_nlineinfos,_lineinfos); //not required are 2 integers
_DESTRUCT_VECTOR(SQLocalVarInfo,_nlocalvarinfos,_localvarinfos); _DESTRUCT_VECTOR(SQLocalVarInfo,_nlocalvarinfos,_localvarinfos);

View File

@ -251,7 +251,7 @@ bool ReadObject(rabbit::VirtualMachine* v,rabbit::UserPointer up,SQREADFUNC read
int64_t len; int64_t len;
_CHECK_IO(SafeRead(v,read,up,&len,sizeof(int64_t))); _CHECK_IO(SafeRead(v,read,up,&len,sizeof(int64_t)));
_CHECK_IO(SafeRead(v,read,up,_get_shared_state(v)->getScratchPad(sq_rsl(len)),sq_rsl(len))); _CHECK_IO(SafeRead(v,read,up,_get_shared_state(v)->getScratchPad(sq_rsl(len)),sq_rsl(len)));
o=SQString::create(_get_shared_state(v),_ss(v)->getScratchPad(-1),len); o=SQString::create(_get_shared_state(v),_get_shared_state(v)->getScratchPad(-1),len);
} }
break; break;
case rabbit::OT_INTEGER:{ case rabbit::OT_INTEGER:{

View File

@ -102,7 +102,7 @@ void SQSharedState::init()
sq_new(_metamethods,etk::Vector<rabbit::ObjectPtr>); sq_new(_metamethods,etk::Vector<rabbit::ObjectPtr>);
sq_new(_systemstrings,etk::Vector<rabbit::ObjectPtr>); sq_new(_systemstrings,etk::Vector<rabbit::ObjectPtr>);
sq_new(_types,etk::Vector<rabbit::ObjectPtr>); sq_new(_types,etk::Vector<rabbit::ObjectPtr>);
_metamethodsmap = SQTable::create(this,MT_LAST-1); _metamethodsmap = SQTable::create(this,rabbit::MT_LAST-1);
//adding type strings to avoid memory trashing //adding type strings to avoid memory trashing
//types names //types names
newsysstring(_SC("null")); newsysstring(_SC("null"));
@ -183,10 +183,11 @@ SQSharedState::~SQSharedState()
_weakref_default_delegate.Null(); _weakref_default_delegate.Null();
_refs_table.finalize(); _refs_table.finalize();
sq_delete(_types,etk::Vector<rabbit::ObjectPtr>); using tmpType = etk::Vector<rabbit::ObjectPtr>;
sq_delete(_systemstrings,etk::Vector<rabbit::ObjectPtr>); sq_delete(_types, tmpType);
sq_delete(_metamethods,etk::Vector<rabbit::ObjectPtr>); sq_delete(_systemstrings, tmpType);
sq_delete(_stringtable,SQStringTable); sq_delete(_metamethods, tmpType);
sq_delete(_stringtable, SQStringTable);
if(_scratchpad)SQ_FREE(_scratchpad,_scratchpadsize); if(_scratchpad)SQ_FREE(_scratchpad,_scratchpadsize);
} }

View File

@ -10,6 +10,7 @@
#include <rabbit/squtils.hpp> #include <rabbit/squtils.hpp>
#include <rabbit/sqobject.hpp> #include <rabbit/sqobject.hpp>
#include <rabbit/RegFunction.hpp> #include <rabbit/RegFunction.hpp>
#include <rabbit/ObjectPtr.hpp>
struct SQString; struct SQString;
struct SQTable; struct SQTable;

View File

@ -12,6 +12,8 @@
#include <rabbit/sqfuncproto.hpp> #include <rabbit/sqfuncproto.hpp>
#include <rabbit/sqclosure.hpp> #include <rabbit/sqclosure.hpp>
#define MINPOWER2 4
SQTable::SQTable(SQSharedState *ss,int64_t ninitialsize) SQTable::SQTable(SQSharedState *ss,int64_t ninitialsize)
{ {
int64_t pow2size=MINPOWER2; int64_t pow2size=MINPOWER2;