[DEV] remove to_string()

This commit is contained in:
Edouard DUPIN 2018-07-04 21:48:56 +02:00
parent fa37b1fedb
commit 48c38c1797
14 changed files with 51 additions and 41 deletions

View File

@ -66,7 +66,7 @@ bool rabbit::WriteObject(rabbit::VirtualMachine* v,rabbit::UserPointer up,SQWRIT
switch(o.getType()){
case rabbit::OT_STRING:
_CHECK_IO(SafeWrite(v,write,up,&o.toString()->_len,sizeof(int64_t)));
_CHECK_IO(SafeWrite(v,write,up,_stringval(o),sq_rsl(o.toString()->_len)));
_CHECK_IO(SafeWrite(v,write,up,o.getStringValue(),sq_rsl(o.toString()->_len)));
break;
case rabbit::OT_BOOL:
case rabbit::OT_INTEGER:

View File

@ -210,7 +210,7 @@ public:
}
else {
if(_raiseerror && _get_shared_state(_vm)->_compilererrorhandler) {
_get_shared_state(_vm)->_compilererrorhandler(_vm, _compilererror, _sourcename.isString() == true?_stringval(_sourcename):"unknown",
_get_shared_state(_vm)->_compilererrorhandler(_vm, _compilererror, _sourcename.isString() == true?_sourcename.getStringValue():"unknown",
_lex._currentline, _lex._currentcolumn);
}
_vm->_lasterror = rabbit::String::create(_get_shared_state(_vm), _compilererror, -1);
@ -789,7 +789,7 @@ public:
constid = Expect(TK_IDENTIFIER);
if(!constant.toTable()->get(constid, constval)) {
constval.Null();
error("invalid constant [%s.%s]", _stringval(id), _stringval(constid));
error("invalid constant [%s.%s]", id.getStringValue(), constid.getStringValue());
}
}
else {

View File

@ -101,7 +101,7 @@ void rabbit::FuncState::addInstruction(SQOpcode _op,int64_t arg0,int64_t arg1,in
static void dumpLiteral(rabbit::ObjectPtr &o) {
switch(o.getType()){
case rabbit::OT_STRING:
printf("\"%s\"",_stringval(o));
printf("\"%s\"",o.getStringValue());
break;
case rabbit::OT_FLOAT:
printf("{%f}",o.toFloat());
@ -152,7 +152,7 @@ void rabbit::FuncState::dump(rabbit::FunctionProto *func)
printf("rabbit::Instruction sizeof %d\n",(int32_t)sizeof(rabbit::Instruction));
printf("rabbit::Object sizeof %d\n", (int32_t)sizeof(rabbit::Object));
printf("--------------------------------------------------------------------\n");
printf("*****FUNCTION [%s]\n",func->_name.isString() == true?_stringval(func->_name):"unknown");
printf("*****FUNCTION [%s]\n",func->_name.isString() == true?func->_name.getStringValue():"unknown");
printf("-----LITERALS\n");
rabbit::ObjectPtr refidx,key,val;
int64_t idx;
@ -181,7 +181,7 @@ void rabbit::FuncState::dump(rabbit::FunctionProto *func)
printf("-----LOCALS\n");
for(si=0;si<func->_nlocalvarinfos;si++){
rabbit::LocalVarInfo lvi=func->_localvarinfos[si];
printf("[%d] %s \t%d %d\n", (int32_t)lvi._pos,_stringval(lvi._name), (int32_t)lvi._start_op, (int32_t)lvi._end_op);
printf("[%d] %s \t%d %d\n", (int32_t)lvi._pos,lvi._name.getStringValue(), (int32_t)lvi._start_op, (int32_t)lvi._end_op);
n++;
}
printf("-----LINE INFO\n");

View File

@ -75,7 +75,7 @@ const char* rabbit::FunctionProto::getLocal(rabbit::VirtualMachine *vm,uint64_t
{
if(nseq==0){
vm->push(vm->_stack[stackbase+_localvarinfos[i]._pos]);
res=_stringval(_localvarinfos[i]._name);
res=_localvarinfos[i]._name.getStringValue();
break;
}
nseq--;

View File

@ -105,7 +105,7 @@ const char *rabbit::Lexer::tok2Str(int64_t tok)
while((nitr = _keywords->next(false,itr, key, val)) != -1) {
itr = (int64_t)nitr;
if(((int64_t)val.toInteger()) == tok)
return _stringval(key);
return key.getStringValue();
}
return NULL;
}

View File

@ -7,3 +7,12 @@
*/
#include <rabbit/Object.hpp>
#include <rabbit/String.hpp>
const char* rabbit::Object::getStringValue() const {
return (const char*)&_unVal.pString->_val[0];
}
char* rabbit::Object::getStringValue() {
return (char*)&_unVal.pString->_val[0];
}

View File

@ -54,6 +54,8 @@ namespace rabbit {
const rabbit::String* toString() const {
return _unVal.pString;
}
const char* getStringValue() const;
char* getStringValue();
rabbit::Table*& toTable() {
return _unVal.pTable;
}
@ -216,6 +218,9 @@ namespace rabbit {
rabbit::ObjectType getType() const {
return _type;
}
rabbit::ObjectType getTypeRaw() const {
return rabbit::ObjectType(_type&_RT_MASK);
}
};
#define ISREFCOUNTED(t) (t&SQOBJECT_REF_COUNTED)
@ -232,9 +237,6 @@ namespace rabbit {
#define _realval(o) ((o).isWeakRef() == false?(rabbit::Object)o:(o).toWeakRef()->_obj)
#define raw_type(obj) _RAW_TYPE((obj)._type)
#define _stringval(obj) (obj)._unVal.pString->_val
#define _userdataval(obj) ((rabbit::UserPointer)sq_aligning((obj)._unVal.pUserData + 1))
inline void _Swap(rabbit::Object &a,rabbit::Object &b)

View File

@ -155,7 +155,7 @@ uint64_t rabbit::translateIndex(const rabbit::ObjectPtr &idx) {
const char* rabbit::IdType2Name(rabbit::ObjectType type)
{
switch(_RAW_TYPE(type)) {
switch (type&_RT_MASK) {
case _RT_NULL:
return "null";
case _RT_INTEGER:

View File

@ -17,7 +17,6 @@
#define SQ_MATCHTYPEMASKSTRING (-99999)
#define _RT_MASK 0x00FFFFFF
#define _RAW_TYPE(type) (type&_RT_MASK)
#define _RT_NULL 0x00000001
#define _RT_INTEGER 0x00000002

View File

@ -276,7 +276,7 @@ bool rabbit::Table::getStr(const char* key,int64_t keylen,rabbit::ObjectPtr &val
_HashNode *res = NULL;
do {
if ( n->key.isString() == true
&& strcmp(_stringval(n->key), key) == 0) {
&& strcmp(n->key.getStringValue(), key) == 0) {
res = n;
break;
}

View File

@ -246,7 +246,7 @@ bool rabbit::VirtualMachine::objCmp(const rabbit::ObjectPtr &o1,const rabbit::Ob
rabbit::ObjectPtr res;
switch(t1){
case rabbit::OT_STRING:
_RET_SUCCEED(strcmp(_stringval(o1),_stringval(o2)));
_RET_SUCCEED(strcmp(o1.getStringValue(),o2.getStringValue()));
case rabbit::OT_INTEGER:
_RET_SUCCEED((o1.toInteger()<o2.toInteger())?-1:1);
case rabbit::OT_FLOAT:
@ -362,8 +362,8 @@ bool rabbit::VirtualMachine::stringCat(const rabbit::ObjectPtr &str,const rabbit
if(!toString(obj, b)) return false;
int64_t l = a.toString()->_len , ol = b.toString()->_len;
char *s = _sp(sq_rsl(l + ol + 1));
memcpy(s, _stringval(a), sq_rsl(l));
memcpy(s + l, _stringval(b), sq_rsl(ol));
memcpy(s, a.getStringValue(), sq_rsl(l));
memcpy(s + l, b.getStringValue(), sq_rsl(ol));
dest = rabbit::String::create(_get_shared_state(this), _spval, l + ol);
return true;
}
@ -1183,11 +1183,11 @@ void rabbit::VirtualMachine::callDebugHook(int64_t type,int64_t forcedline)
if(_debughook_native) {
const char* src = nullptr;
if (func->_sourcename.isString() == true) {
src = _stringval(func->_sourcename);
src = func->_sourcename.getStringValue();
}
const char* fname = nullptr;
if (func->_name.isString() == true) {
fname = _stringval(func->_name);
fname = func->_name.getStringValue();
}
int64_t line = forcedline?forcedline:func->getLine(ci->_ip);
_debughook_native(this,type,src,line,fname);
@ -1330,7 +1330,7 @@ bool rabbit::VirtualMachine::get(const rabbit::ObjectPtr &self, const rabbit::Ob
int64_t len = self.toString()->_len;
if (n < 0) { n += len; }
if (n >= 0 && n < len) {
dest = int64_t(_stringval(self)[n]);
dest = int64_t(self.getStringValue()[n]);
return true;
}
if ((getflags & GET_FLAG_DO_NOT_RAISE_ERROR) == 0) raise_Idxerror(key);
@ -1605,7 +1605,7 @@ bool rabbit::VirtualMachine::newSlot(const rabbit::ObjectPtr &self,const rabbit:
}
else {
rabbit::ObjectPtr oval = printObjVal(key);
raise_error("the property '%s' already exists",_stringval(oval));
raise_error("the property '%s' already exists",oval.getStringValue());
return false;
}
}
@ -1849,7 +1849,7 @@ void rabbit::VirtualMachine::dumpstack(int64_t stackbase,bool dumpall)
case rabbit::OT_FLOAT: printf("FLOAT %.3f",obj.toFloat());break;
case rabbit::OT_INTEGER: printf("INTEGER " _PRINT_INT_FMT,obj.toInteger());break;
case rabbit::OT_BOOL: printf("BOOL %s",obj.toInteger()?"true":"false");break;
case rabbit::OT_STRING: printf("STRING %s",_stringval(obj));break;
case rabbit::OT_STRING: printf("STRING %s",obj.getStringValue());break;
case rabbit::OT_NULL: printf("NULL"); break;
case rabbit::OT_TABLE: printf("TABLE %p[%p]",obj.toTable(),obj.toTable()->_delegate);break;
case rabbit::OT_ARRAY: printf("ARRAY %p",obj.toArray());break;

View File

@ -35,7 +35,7 @@ static bool sq_aux_gettypedarg(rabbit::VirtualMachine* v,int64_t idx,rabbit::Obj
*o = &stack_get(v,idx);
if((*o)->getType() != type){
rabbit::ObjectPtr oval = v->printObjVal(**o);
v->raise_error("wrong argument type, expected '%s' got '%.50s'",IdType2Name(type),_stringval(oval));
v->raise_error("wrong argument type, expected '%s' got '%.50s'",IdType2Name(type),oval.getStringValue());
return false;
}
return true;
@ -209,7 +209,7 @@ uint64_t rabbit::sq_getvmrefcount(rabbit::VirtualMachine* SQ_UNUSED_ARG(v), cons
const char * rabbit::sq_objtostring(const rabbit::Object *o)
{
if(o->isString() == true) {
return _stringval(*o);
return o->getStringValue();
}
return NULL;
}
@ -718,7 +718,7 @@ rabbit::Result rabbit::sq_getstringandsize(rabbit::VirtualMachine* v,int64_t idx
{
rabbit::ObjectPtr *o = NULL;
_GETSAFE_OBJ(v, idx, rabbit::OT_STRING,o);
*c = _stringval(*o);
*c = o->getStringValue();
*size = o->toString()->_len;
return SQ_OK;
}
@ -727,7 +727,7 @@ rabbit::Result rabbit::sq_getstring(rabbit::VirtualMachine* v,int64_t idx,const
{
rabbit::ObjectPtr *o = NULL;
_GETSAFE_OBJ(v, idx, rabbit::OT_STRING,o);
*c = _stringval(*o);
*c = o->getStringValue();
return SQ_OK;
}
@ -1171,7 +1171,7 @@ const char * rabbit::sq_getlocal(rabbit::VirtualMachine* v,uint64_t level,uint64
rabbit::FunctionProto *func=c->_function;
if(func->_noutervalues > (int64_t)idx) {
v->push(*c->_outervalues[idx].toOuter()->_valptr);
return _stringval(func->_outervalues[idx]._name);
return func->_outervalues[idx]._name.getStringValue();
}
idx -= func->_noutervalues;
return func->getLocal(v,stackbase,idx,(int64_t)(ci._ip-func->_instructions)-1);
@ -1417,7 +1417,7 @@ const char * rabbit::sq_getfreevariable(rabbit::VirtualMachine* v,int64_t idx,ui
if(((uint64_t)fp->_noutervalues) > nval) {
v->push(*(clo->_outervalues[nval].toOuter()->_valptr));
rabbit::OuterVar &ov = fp->_outervalues[nval];
name = _stringval(ov._name);
name = ov._name.getStringValue();
}
}
break;

View File

@ -347,7 +347,7 @@ static int64_t default_delegate_tofloat(rabbit::VirtualMachine* v)
switch(o.getType()){
case rabbit::OT_STRING:{
rabbit::ObjectPtr res;
if(str2num(_stringval(o),res,10)){
if(str2num(o.getStringValue(),res,10)){
v->push(rabbit::ObjectPtr(res.toFloatValue()));
break;
}}
@ -377,7 +377,7 @@ static int64_t default_delegate_tointeger(rabbit::VirtualMachine* v)
switch(o.getType()){
case rabbit::OT_STRING:{
rabbit::ObjectPtr res;
if(str2num(_stringval(o),res,base)){
if(str2num(o.getStringValue(),res,base)){
v->push(rabbit::ObjectPtr(res.toIntegerValue()));
break;
}}
@ -856,7 +856,7 @@ static int64_t string_slice(rabbit::VirtualMachine* v)
if(eidx < 0)eidx = slen + eidx;
if(eidx < sidx) return sq_throwerror(v,"wrong indexes");
if(eidx > slen || sidx < 0) return sq_throwerror(v, "slice out of range");
v->push(rabbit::String::create(_get_shared_state(v),&_stringval(o)[sidx],eidx-sidx));
v->push(rabbit::String::create(_get_shared_state(v),&o.getStringValue()[sidx],eidx-sidx));
return 1;
}
@ -889,7 +889,7 @@ static int64_t string_find(rabbit::VirtualMachine* v)
if(eidx < sidx) return sq_throwerror(v,"wrong indexes"); \
if(eidx > slen || sidx < 0) return sq_throwerror(v,"slice out of range"); \
int64_t len=str.toString()->_len; \
const char *sthis=_stringval(str); \
const char *sthis=str.getStringValue(); \
char *snew=(_get_shared_state(v)->getScratchPad(sq_rsl(len))); \
memcpy(snew,sthis,sq_rsl(len));\
for(int64_t i=sidx;i<eidx;i++) snew[i] = func(sthis[i]); \
@ -1187,7 +1187,7 @@ static int64_t thread_getstackinfos(rabbit::VirtualMachine* v)
{
sq_settop(thread,threadtop);
if(thread->_lasterror.isString() == true) {
sq_throwerror(v,_stringval(thread->_lasterror));
sq_throwerror(v,thread->_lasterror.getStringValue());
}
else {
sq_throwerror(v,"unknown error");

View File

@ -32,12 +32,12 @@ rabbit::Result rabbit::sq_getfunctioninfo(rabbit::VirtualMachine* v,int64_t leve
rabbit::FunctionProto *proto = c->_function;
fi->funcid = proto;
if (proto->_name.isString() == true) {
fi->name = _stringval(proto->_name);
fi->name = proto->_name.getStringValue();
} else {
fi->name = "unknown";
}
if (proto->_sourcename.isString() == true) {
fi->source = _stringval(proto->_sourcename);
fi->source = proto->_sourcename.getStringValue();
} else {
fi->source = "unknown";
}
@ -59,10 +59,10 @@ rabbit::Result rabbit::sq_stackinfos(rabbit::VirtualMachine* v, int64_t level, r
{
rabbit::FunctionProto *func = ci._closure.toClosure()->_function;
if (func->_name.isString() == true) {
si->funcname = _stringval(func->_name);
si->funcname = func->_name.getStringValue();
}
if (func->_sourcename.isString() == true) {
si->source = _stringval(func->_sourcename);
si->source = func->_sourcename.getStringValue();
}
si->line = func->getLine(ci._ip);
}
@ -71,7 +71,7 @@ rabbit::Result rabbit::sq_stackinfos(rabbit::VirtualMachine* v, int64_t level, r
si->source = "NATIVE";
si->funcname = "unknown";
if(ci._closure.toNativeClosure()->_name.isString() == true) {
si->funcname = _stringval(ci._closure.toNativeClosure()->_name);
si->funcname = ci._closure.toNativeClosure()->_name.getStringValue();
}
si->line = -1;
break;
@ -119,13 +119,13 @@ rabbit::String *rabbit::VirtualMachine::printObjVal(const rabbit::ObjectPtr &o)
void rabbit::VirtualMachine::raise_Idxerror(const rabbit::ObjectPtr &o)
{
rabbit::ObjectPtr oval = printObjVal(o);
raise_error("the index '%.50s' does not exist", _stringval(oval));
raise_error("the index '%.50s' does not exist", oval.getStringValue());
}
void rabbit::VirtualMachine::raise_Compareerror(const rabbit::Object &o1, const rabbit::Object &o2)
{
rabbit::ObjectPtr oval1 = printObjVal(o1), oval2 = printObjVal(o2);
raise_error("comparison between '%.50s' and '%.50s'", _stringval(oval1), _stringval(oval2));
raise_error("comparison between '%.50s' and '%.50s'", oval1.getStringValue(), oval2.getStringValue());
}
@ -142,5 +142,5 @@ void rabbit::VirtualMachine::raise_ParamTypeerror(int64_t nparam,int64_t typemas
stringCat(exptypes,rabbit::String::create(_get_shared_state(this), IdType2Name((rabbit::ObjectType)mask), -1), exptypes);
}
}
raise_error("parameter %d has an invalid type '%s' ; expected: '%s'", nparam, IdType2Name((rabbit::ObjectType)type), _stringval(exptypes));
raise_error("parameter %d has an invalid type '%s' ; expected: '%s'", nparam, IdType2Name((rabbit::ObjectType)type), exptypes.getStringValue());
}