|
|
@@ -596,16 +596,36 @@ static SQInteger array_resize(HSQUIRRELVM v)
|
|
|
static SQInteger __map_array(SQArray *dest,SQArray *src,HSQUIRRELVM v) {
|
|
|
SQObjectPtr temp;
|
|
|
SQInteger size = src->Size();
|
|
|
+ SQObject &closure = stack_get(v, 2);
|
|
|
+ v->Push(closure);
|
|
|
+
|
|
|
+ SQInteger nArgs;
|
|
|
+ if(sq_type(closure) == OT_CLOSURE) {
|
|
|
+ nArgs = _closure(closure)->_function->_nparameters;
|
|
|
+ }
|
|
|
+ else if (sq_type(closure) == OT_NATIVECLOSURE) {
|
|
|
+ SQInteger nParamsCheck = _nativeclosure(closure)->_nparamscheck;
|
|
|
+ if (nParamsCheck > 0)
|
|
|
+ nArgs = nParamsCheck;
|
|
|
+ else // push all params when there is no check or only minimal count set
|
|
|
+ nArgs = 4;
|
|
|
+ }
|
|
|
+
|
|
|
for(SQInteger n = 0; n < size; n++) {
|
|
|
src->Get(n,temp);
|
|
|
v->Push(src);
|
|
|
v->Push(temp);
|
|
|
- if(SQ_FAILED(sq_call(v,2,SQTrue,SQFalse))) {
|
|
|
+ if (nArgs >= 3)
|
|
|
+ v->Push(SQObjectPtr(n));
|
|
|
+ if (nArgs >= 4)
|
|
|
+ v->Push(src);
|
|
|
+ if(SQ_FAILED(sq_call(v,nArgs,SQTrue,SQFalse))) {
|
|
|
return SQ_ERROR;
|
|
|
}
|
|
|
dest->Set(n,v->GetUp(-1));
|
|
|
v->Pop();
|
|
|
}
|
|
|
+ v->Pop();
|
|
|
return 0;
|
|
|
}
|
|
|
|