diff --git a/rabbit/Closure.cpp b/rabbit/Closure.cpp index 7023db7..eace7df 100644 --- a/rabbit/Closure.cpp +++ b/rabbit/Closure.cpp @@ -65,8 +65,8 @@ bool rabbit::WriteObject(rabbit::VirtualMachine* v,rabbit::UserPointer up,SQWRIT _CHECK_IO(SafeWrite(v,write,up,&_type,sizeof(_type))); switch(sq_type(o)){ case rabbit::OT_STRING: - _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))); + _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))); break; case rabbit::OT_BOOL: case rabbit::OT_INTEGER: diff --git a/rabbit/FuncState.cpp b/rabbit/FuncState.cpp index be597f5..1c60a62 100644 --- a/rabbit/FuncState.cpp +++ b/rabbit/FuncState.cpp @@ -391,7 +391,7 @@ int64_t rabbit::FuncState::getLocalVariable(const rabbit::Object &name) int64_t locals=_vlocals.size(); while(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; } locals--; @@ -410,7 +410,7 @@ int64_t rabbit::FuncState::getOuterVariable(const rabbit::Object &name) { int64_t outers = _outervalues.size(); for(int64_t i = 0; i_hash; + return key.toString()->_hash; case rabbit::OT_FLOAT: return (rabbit::Hash)((int64_t)key.toFloat()); case rabbit::OT_BOOL: diff --git a/rabbit/VirtualMachine.cpp b/rabbit/VirtualMachine.cpp index 3a00572..9ad636c 100644 --- a/rabbit/VirtualMachine.cpp +++ b/rabbit/VirtualMachine.cpp @@ -344,7 +344,7 @@ bool rabbit::VirtualMachine::stringCat(const rabbit::ObjectPtr &str,const rabbit rabbit::ObjectPtr a, b; if(!toString(str, a)) 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)); memcpy(s, _stringval(a), sq_rsl(l)); 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); o4 = (int64_t) nrefidx; _FINISH(1); 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); case rabbit::OT_CLASS: 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: if(sq_isnumeric(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) { dest = int64_t(_stringval(self)[n]); diff --git a/rabbit/sqapi.cpp b/rabbit/sqapi.cpp index 3f7e07f..ebcb856 100644 --- a/rabbit/sqapi.cpp +++ b/rabbit/sqapi.cpp @@ -701,7 +701,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); - *size = _string(*o)->_len; + *size = o->toString()->_len; 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::ObjectType type = sq_type(o); 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_ARRAY: return o.toArray()->size(); case rabbit::OT_USERDATA: return _userdata(o)->getsize(); diff --git a/rabbit/sqbaselib.cpp b/rabbit/sqbaselib.cpp index fec9658..3f2ade7 100644 --- a/rabbit/sqbaselib.cpp +++ b/rabbit/sqbaselib.cpp @@ -847,7 +847,7 @@ static int64_t string_slice(rabbit::VirtualMachine* v) int64_t sidx,eidx; rabbit::ObjectPtr o; 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(eidx < 0)eidx = slen + eidx; 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; \ rabbit::ObjectPtr str; \ 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(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"); \ - int64_t len=_string(str)->_len; \ + int64_t len=str.toString()->_len; \ const char *sthis=_stringval(str); \ char *snew=(_get_shared_state(v)->getScratchPad(sq_rsl(len))); \ memcpy(snew,sthis,sq_rsl(len));\ diff --git a/rabbit/sqdebug.cpp b/rabbit/sqdebug.cpp index 81a9707..9f556f1 100644 --- a/rabbit/sqdebug.cpp +++ b/rabbit/sqdebug.cpp @@ -88,7 +88,8 @@ void rabbit::VirtualMachine::raise_error(const rabbit::ObjectPtr &desc) rabbit::String *rabbit::VirtualMachine::printObjVal(const rabbit::ObjectPtr &o) { switch(sq_type(o)) { - case rabbit::OT_STRING: return _string(o); + case rabbit::OT_STRING: + return const_cast(o.toString()); case rabbit::OT_INTEGER: 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);