(svn r23496) -Fix: [Squirrel] Provide a proper error message when the _cmp meta-function doesn't return an integer

This commit is contained in:
yexo 2011-12-11 15:52:18 +00:00
parent 686297c2c6
commit 8f36e70e35

View File

@ -195,14 +195,19 @@ bool SQVM::ObjCmp(const SQObjectPtr &o1,const SQObjectPtr &o2,SQInteger &result)
case OT_INSTANCE: case OT_INSTANCE:
if(_delegable(o1)->_delegate) { if(_delegable(o1)->_delegate) {
Push(o1);Push(o2); Push(o1);Push(o2);
if(CallMetaMethod(_delegable(o1),MT_CMP,2,res)) break; if(CallMetaMethod(_delegable(o1),MT_CMP,2,res)) {
if(type(res) != OT_INTEGER) {
Raise_Error(_SC("_cmp must return an integer"));
return false;
}
_RET_SUCCEED(_integer(res))
}
} }
//continues through (no break needed) //continues through (no break needed)
default: default:
_RET_SUCCEED( _userpointer(o1) < _userpointer(o2)?-1:1 ); _RET_SUCCEED( _userpointer(o1) < _userpointer(o2)?-1:1 );
} }
if(type(res)!=OT_INTEGER) { Raise_CompareError(o1,o2); return false; } assert(0);
_RET_SUCCEED(_integer(res));
} }
else{ else{