src/ai/api/ai_abstractlist.cpp
branchnoai
changeset 10957 7a140b4cd91d
parent 10956 82aa600a9922
child 11058 3305a425f55b
--- a/src/ai/api/ai_abstractlist.cpp	Fri Jun 13 19:12:55 2008 +0000
+++ b/src/ai/api/ai_abstractlist.cpp	Fri Jun 13 19:57:25 2008 +0000
@@ -556,10 +556,13 @@
 		return -1;
 	}
 
+	sq_addref(vm, &obj_func);
+
 	/* Read the params */
 	HSQOBJECT *obj_params = AllocaM(HSQOBJECT, nparam);
 	for (int i = 0; i < nparam; i++) {
 		sq_getstackobj(vm, i + 3, &obj_params[i]);
+		sq_addref(vm, &obj_params[i]);
 	}
 	/* Remove all unneeded stuff */
 	sq_pop(vm, nparam + 1);
@@ -595,6 +598,10 @@
 			} break;
 
 			default: {
+				sq_pop(vm, 3);
+				sq_release(vm, &obj_func);
+				for (int i = 0; i < nparam; i++) sq_release(vm, &obj_params[i]);
+
 				sq_throwerror(vm, _SC("return value of valuator is not valid (not integer/bool)"));
 				return -1;
 			}
@@ -602,9 +609,11 @@
 		/* Remove junk */
 		sq_pop(vm, 2);
 
-		(*iter).second = value;
-		this->buckets[value].insert((*iter).first);
+		(*iter).second = (int32)value;
+		this->buckets[(int32)value].insert((*iter).first);
 	}
 
+	sq_release(vm, &obj_func);
+	for (int i = 0; i < nparam; i++) sq_release(vm, &obj_params[i]);
 	return 0;
 }