Remove multiple calls with same parameter by only one call.

This commit is contained in:
mingodad 2016-01-18 19:27:16 +00:00
parent fc3da7819f
commit be2955b926

View File

@ -1020,23 +1020,23 @@ SQRESULT sq_get(HSQUIRRELVM v,SQInteger idx)
SQRESULT sq_rawget(HSQUIRRELVM v,SQInteger idx) SQRESULT sq_rawget(HSQUIRRELVM v,SQInteger idx)
{ {
SQObjectPtr &self=stack_get(v,idx); SQObjectPtr &self=stack_get(v,idx);
SQObjectPtr &obj = v->GetUp(-1);
switch(type(self)) { switch(type(self)) {
case OT_TABLE: case OT_TABLE:
if(_table(self)->Get(v->GetUp(-1),v->GetUp(-1))) if(_table(self)->Get(obj,obj))
return SQ_OK; return SQ_OK;
break; break;
case OT_CLASS: case OT_CLASS:
if(_class(self)->Get(v->GetUp(-1),v->GetUp(-1))) if(_class(self)->Get(obj,obj))
return SQ_OK; return SQ_OK;
break; break;
case OT_INSTANCE: case OT_INSTANCE:
if(_instance(self)->Get(v->GetUp(-1),v->GetUp(-1))) if(_instance(self)->Get(obj,obj))
return SQ_OK; return SQ_OK;
break; break;
case OT_ARRAY:{ case OT_ARRAY:{
SQObjectPtr& key = v->GetUp(-1); if(sq_isnumeric(obj)){
if(sq_isnumeric(key)){ if(_array(self)->Get(tointeger(obj),obj)) {
if(_array(self)->Get(tointeger(key),v->GetUp(-1))) {
return SQ_OK; return SQ_OK;
} }
} }
@ -1132,9 +1132,10 @@ SQRESULT sq_reservestack(HSQUIRRELVM v,SQInteger nsize)
SQRESULT sq_resume(HSQUIRRELVM v,SQBool retval,SQBool raiseerror) SQRESULT sq_resume(HSQUIRRELVM v,SQBool retval,SQBool raiseerror)
{ {
if(type(v->GetUp(-1))==OT_GENERATOR){ SQObjectPtr &obj = v->GetUp(-1);
if(type(obj)==OT_GENERATOR){
v->PushNull(); //retval v->PushNull(); //retval
if(!v->Execute(v->GetUp(-2),0,v->_top,v->GetUp(-1),raiseerror,SQVM::ET_RESUME_GENERATOR)) if(!v->Execute(v->GetUp(-2),0,v->_top,obj,raiseerror,SQVM::ET_RESUME_GENERATOR))
{v->Raise_Error(v->_lasterror); return SQ_ERROR;} {v->Raise_Error(v->_lasterror); return SQ_ERROR;}
if(!retval) if(!retval)
v->Pop(); v->Pop();