src/ai/api/ai_abstractlist.cpp
branchnoai
changeset 10957 7a140b4cd91d
parent 10956 82aa600a9922
child 11058 3305a425f55b
equal deleted inserted replaced
10956:82aa600a9922 10957:7a140b4cd91d
   554 	if (sq_isfunction(obj_func)) {
   554 	if (sq_isfunction(obj_func)) {
   555 		sq_throwerror(vm, _SC("parameter 2 has an invalid type (expected function)"));
   555 		sq_throwerror(vm, _SC("parameter 2 has an invalid type (expected function)"));
   556 		return -1;
   556 		return -1;
   557 	}
   557 	}
   558 
   558 
       
   559 	sq_addref(vm, &obj_func);
       
   560 
   559 	/* Read the params */
   561 	/* Read the params */
   560 	HSQOBJECT *obj_params = AllocaM(HSQOBJECT, nparam);
   562 	HSQOBJECT *obj_params = AllocaM(HSQOBJECT, nparam);
   561 	for (int i = 0; i < nparam; i++) {
   563 	for (int i = 0; i < nparam; i++) {
   562 		sq_getstackobj(vm, i + 3, &obj_params[i]);
   564 		sq_getstackobj(vm, i + 3, &obj_params[i]);
       
   565 		sq_addref(vm, &obj_params[i]);
   563 	}
   566 	}
   564 	/* Remove all unneeded stuff */
   567 	/* Remove all unneeded stuff */
   565 	sq_pop(vm, nparam + 1);
   568 	sq_pop(vm, nparam + 1);
   566 
   569 
   567 	/* Walk all items, and query the result */
   570 	/* Walk all items, and query the result */
   593 				sq_getbool(vm, -1, &v);
   596 				sq_getbool(vm, -1, &v);
   594 				value = v ? 1 : 0;
   597 				value = v ? 1 : 0;
   595 			} break;
   598 			} break;
   596 
   599 
   597 			default: {
   600 			default: {
       
   601 				sq_pop(vm, 3);
       
   602 				sq_release(vm, &obj_func);
       
   603 				for (int i = 0; i < nparam; i++) sq_release(vm, &obj_params[i]);
       
   604 
   598 				sq_throwerror(vm, _SC("return value of valuator is not valid (not integer/bool)"));
   605 				sq_throwerror(vm, _SC("return value of valuator is not valid (not integer/bool)"));
   599 				return -1;
   606 				return -1;
   600 			}
   607 			}
   601 		}
   608 		}
   602 		/* Remove junk */
   609 		/* Remove junk */
   603 		sq_pop(vm, 2);
   610 		sq_pop(vm, 2);
   604 
   611 
   605 		(*iter).second = value;
   612 		(*iter).second = (int32)value;
   606 		this->buckets[value].insert((*iter).first);
   613 		this->buckets[(int32)value].insert((*iter).first);
   607 	}
   614 	}
   608 
   615 
       
   616 	sq_release(vm, &obj_func);
       
   617 	for (int i = 0; i < nparam; i++) sq_release(vm, &obj_params[i]);
   609 	return 0;
   618 	return 0;
   610 }
   619 }