[DEV] remote _string()

This commit is contained in:
Edouard DUPIN 2018-07-03 21:53:06 +02:00
parent 0f930d76f7
commit 7a589d9a98
8 changed files with 15 additions and 15 deletions

View File

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

View File

@ -391,7 +391,7 @@ int64_t rabbit::FuncState::getLocalVariable(const rabbit::Object &name)
int64_t locals=_vlocals.size(); int64_t locals=_vlocals.size();
while(locals>=1){ while(locals>=1){
rabbit::LocalVarInfo &lvi = _vlocals[locals-1]; rabbit::LocalVarInfo &lvi = _vlocals[locals-1];
if(sq_type(lvi._name)==rabbit::OT_STRING && _string(lvi._name)==_string(name)){ if(sq_type(lvi._name)==rabbit::OT_STRING && lvi._name.toString()==name.toString()){
return locals-1; return locals-1;
} }
locals--; locals--;
@ -410,7 +410,7 @@ int64_t rabbit::FuncState::getOuterVariable(const rabbit::Object &name)
{ {
int64_t outers = _outervalues.size(); int64_t outers = _outervalues.size();
for(int64_t i = 0; i<outers; i++) { for(int64_t i = 0; i<outers; i++) {
if(_string(_outervalues[i]._name) == _string(name)) if(_outervalues[i]._name.toString() == name.toString())
return i; return i;
} }
int64_t pos=-1; int64_t pos=-1;

View File

@ -149,7 +149,6 @@ namespace rabbit {
#define is_delegable(t) (sq_type(t)&SQOBJECT_DELEGABLE) #define is_delegable(t) (sq_type(t)&SQOBJECT_DELEGABLE)
#define raw_type(obj) _RAW_TYPE((obj)._type) #define raw_type(obj) _RAW_TYPE((obj)._type)
#define _string(obj) ((obj)._unVal.pString)
#define _table(obj) ((obj)._unVal.pTable) #define _table(obj) ((obj)._unVal.pTable)
#define _closure(obj) ((obj)._unVal.pClosure) #define _closure(obj) ((obj)._unVal.pClosure)
#define _generator(obj) ((obj)._unVal.pGenerator) #define _generator(obj) ((obj)._unVal.pGenerator)

View File

@ -13,7 +13,7 @@
rabbit::Hash rabbit::HashObj(const rabbit::ObjectPtr &key) { rabbit::Hash rabbit::HashObj(const rabbit::ObjectPtr &key) {
switch(sq_type(key)) { switch(sq_type(key)) {
case rabbit::OT_STRING: case rabbit::OT_STRING:
return _string(key)->_hash; return key.toString()->_hash;
case rabbit::OT_FLOAT: case rabbit::OT_FLOAT:
return (rabbit::Hash)((int64_t)key.toFloat()); return (rabbit::Hash)((int64_t)key.toFloat());
case rabbit::OT_BOOL: case rabbit::OT_BOOL:

View File

@ -344,7 +344,7 @@ bool rabbit::VirtualMachine::stringCat(const rabbit::ObjectPtr &str,const rabbit
rabbit::ObjectPtr a, b; rabbit::ObjectPtr a, b;
if(!toString(str, a)) return false; if(!toString(str, a)) return false;
if(!toString(obj, b)) return false; if(!toString(obj, b)) return false;
int64_t l = _string(a)->_len , ol = _string(b)->_len; int64_t l = a.toString()->_len , ol = b.toString()->_len;
char *s = _sp(sq_rsl(l + ol + 1)); char *s = _sp(sq_rsl(l + ol + 1));
memcpy(s, _stringval(a), sq_rsl(l)); memcpy(s, _stringval(a), sq_rsl(l));
memcpy(s + l, _stringval(b), sq_rsl(ol)); memcpy(s + l, _stringval(b), sq_rsl(ol));
@ -546,7 +546,7 @@ bool rabbit::VirtualMachine::FOREACH_OP(rabbit::ObjectPtr &o1,rabbit::ObjectPtr
if((nrefidx = o1.toArray()->next(o4, o2, o3)) == -1) _FINISH(exitpos); if((nrefidx = o1.toArray()->next(o4, o2, o3)) == -1) _FINISH(exitpos);
o4 = (int64_t) nrefidx; _FINISH(1); o4 = (int64_t) nrefidx; _FINISH(1);
case rabbit::OT_STRING: case rabbit::OT_STRING:
if((nrefidx = _string(o1)->next(o4, o2, o3)) == -1)_FINISH(exitpos); if((nrefidx = o1.toString()->next(o4, o2, o3)) == -1)_FINISH(exitpos);
o4 = (int64_t)nrefidx; _FINISH(1); o4 = (int64_t)nrefidx; _FINISH(1);
case rabbit::OT_CLASS: case rabbit::OT_CLASS:
if((nrefidx = _class(o1)->next(o4, o2, o3)) == -1)_FINISH(exitpos); if((nrefidx = _class(o1)->next(o4, o2, o3)) == -1)_FINISH(exitpos);
@ -1272,7 +1272,7 @@ bool rabbit::VirtualMachine::get(const rabbit::ObjectPtr &self, const rabbit::Ob
case rabbit::OT_STRING: case rabbit::OT_STRING:
if(sq_isnumeric(key)){ if(sq_isnumeric(key)){
int64_t n = tointeger(key); int64_t n = tointeger(key);
int64_t len = _string(self)->_len; int64_t len = self.toString()->_len;
if (n < 0) { n += len; } if (n < 0) { n += len; }
if (n >= 0 && n < len) { if (n >= 0 && n < len) {
dest = int64_t(_stringval(self)[n]); dest = int64_t(_stringval(self)[n]);

View File

@ -701,7 +701,7 @@ rabbit::Result rabbit::sq_getstringandsize(rabbit::VirtualMachine* v,int64_t idx
rabbit::ObjectPtr *o = NULL; rabbit::ObjectPtr *o = NULL;
_GETSAFE_OBJ(v, idx, rabbit::OT_STRING,o); _GETSAFE_OBJ(v, idx, rabbit::OT_STRING,o);
*c = _stringval(*o); *c = _stringval(*o);
*size = _string(*o)->_len; *size = o->toString()->_len;
return SQ_OK; return SQ_OK;
} }
@ -737,7 +737,7 @@ int64_t rabbit::sq_getsize(rabbit::VirtualMachine* v, int64_t idx)
rabbit::ObjectPtr &o = stack_get(v, idx); rabbit::ObjectPtr &o = stack_get(v, idx);
rabbit::ObjectType type = sq_type(o); rabbit::ObjectType type = sq_type(o);
switch(type) { switch(type) {
case rabbit::OT_STRING: return _string(o)->_len; case rabbit::OT_STRING: return o.toString()->_len;
case rabbit::OT_TABLE: return _table(o)->countUsed(); case rabbit::OT_TABLE: return _table(o)->countUsed();
case rabbit::OT_ARRAY: return o.toArray()->size(); case rabbit::OT_ARRAY: return o.toArray()->size();
case rabbit::OT_USERDATA: return _userdata(o)->getsize(); case rabbit::OT_USERDATA: return _userdata(o)->getsize();

View File

@ -847,7 +847,7 @@ static int64_t string_slice(rabbit::VirtualMachine* v)
int64_t sidx,eidx; int64_t sidx,eidx;
rabbit::ObjectPtr o; rabbit::ObjectPtr o;
if(SQ_FAILED(get_slice_params(v,sidx,eidx,o)))return -1; if(SQ_FAILED(get_slice_params(v,sidx,eidx,o)))return -1;
int64_t slen = _string(o)->_len; int64_t slen = o.toString()->_len;
if(sidx < 0)sidx = slen + sidx; if(sidx < 0)sidx = slen + sidx;
if(eidx < 0)eidx = slen + eidx; if(eidx < 0)eidx = slen + eidx;
if(eidx < sidx) return sq_throwerror(v,"wrong indexes"); if(eidx < sidx) return sq_throwerror(v,"wrong indexes");
@ -879,12 +879,12 @@ static int64_t string_find(rabbit::VirtualMachine* v)
int64_t sidx,eidx; \ int64_t sidx,eidx; \
rabbit::ObjectPtr str; \ rabbit::ObjectPtr str; \
if(SQ_FAILED(get_slice_params(v,sidx,eidx,str)))return -1; \ if(SQ_FAILED(get_slice_params(v,sidx,eidx,str)))return -1; \
int64_t slen = _string(str)->_len; \ int64_t slen = str.toString()->_len; \
if(sidx < 0)sidx = slen + sidx; \ if(sidx < 0)sidx = slen + sidx; \
if(eidx < 0)eidx = slen + eidx; \ if(eidx < 0)eidx = slen + eidx; \
if(eidx < sidx) return sq_throwerror(v,"wrong indexes"); \ if(eidx < sidx) return sq_throwerror(v,"wrong indexes"); \
if(eidx > slen || sidx < 0) return sq_throwerror(v,"slice out of range"); \ if(eidx > slen || sidx < 0) return sq_throwerror(v,"slice out of range"); \
int64_t len=_string(str)->_len; \ int64_t len=str.toString()->_len; \
const char *sthis=_stringval(str); \ const char *sthis=_stringval(str); \
char *snew=(_get_shared_state(v)->getScratchPad(sq_rsl(len))); \ char *snew=(_get_shared_state(v)->getScratchPad(sq_rsl(len))); \
memcpy(snew,sthis,sq_rsl(len));\ memcpy(snew,sthis,sq_rsl(len));\

View File

@ -88,7 +88,8 @@ void rabbit::VirtualMachine::raise_error(const rabbit::ObjectPtr &desc)
rabbit::String *rabbit::VirtualMachine::printObjVal(const rabbit::ObjectPtr &o) rabbit::String *rabbit::VirtualMachine::printObjVal(const rabbit::ObjectPtr &o)
{ {
switch(sq_type(o)) { switch(sq_type(o)) {
case rabbit::OT_STRING: return _string(o); case rabbit::OT_STRING:
return const_cast<rabbit::String *>(o.toString());
case rabbit::OT_INTEGER: case rabbit::OT_INTEGER:
snprintf(_sp(sq_rsl(NUMBER_UINT8_MAX+1)),sq_rsl(NUMBER_UINT8_MAX), _PRINT_INT_FMT, o.toInteger()); snprintf(_sp(sq_rsl(NUMBER_UINT8_MAX+1)),sq_rsl(NUMBER_UINT8_MAX), _PRINT_INT_FMT, o.toInteger());
return rabbit::String::create(_get_shared_state(this), _spval); return rabbit::String::create(_get_shared_state(this), _spval);