(svn r9627) [NoAI] -Fix: let the squirrel export script export all needed (and a few more) types of references to structs and classes. noai
authorrubidium
Sat, 14 Apr 2007 20:38:10 +0000
branchnoai
changeset 9594 5009a30f320a
parent 9593 012f29f59906
child 9595 91423dbb6f5f
(svn r9627) [NoAI] -Fix: let the squirrel export script export all needed (and a few more) types of references to structs and classes.
src/ai/ai_squirrel.cpp
src/ai/api/ai_abstractlist.hpp
src/ai/api/ai_accounting.hpp
src/ai/api/ai_base.hpp
src/ai/api/ai_cargo.hpp
src/ai/api/ai_company.hpp
src/ai/api/ai_execmode.hpp
src/ai/api/ai_industry.hpp
src/ai/api/ai_list.hpp
src/ai/api/ai_map.hpp
src/ai/api/ai_order.hpp
src/ai/api/ai_road.hpp
src/ai/api/ai_settings.hpp
src/ai/api/ai_sign.hpp
src/ai/api/ai_testmode.hpp
src/ai/api/ai_tilelist.hpp
src/ai/api/ai_tilelist_valuator.hpp
src/ai/api/ai_town.hpp
src/ai/api/ai_townlist.hpp
src/ai/api/ai_townlist_valuator.hpp
src/ai/api/ai_transactionmode.hpp
src/ai/api/ai_vehicle.hpp
src/ai/api/squirrel_export.awk
--- a/src/ai/ai_squirrel.cpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/ai_squirrel.cpp	Sat Apr 14 20:38:10 2007 +0000
@@ -21,6 +21,7 @@
 
 /* Convert all AI related classes to Squirrel data */
 #define DEFINE_SQUIRREL_CLASS
+#include "api/ai_abstractlist.hpp"
 #include "api/ai_accounting.hpp"
 #include "api/ai_base.hpp"
 #include "api/ai_cargo.hpp"
--- a/src/ai/api/ai_abstractlist.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_abstractlist.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -198,10 +198,16 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow inner classes/structs to be used as Squirrel parameters */
+	template <> AIAbstractList::Valuator *GetParam(ForceType<AIAbstractList::Valuator *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIAbstractList::Valuator *)instance; }
+	template <> AIAbstractList::Valuator &GetParam(ForceType<AIAbstractList::Valuator &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIAbstractList::Valuator *)instance; }
+	template <> const AIAbstractList::Valuator *GetParam(ForceType<const AIAbstractList::Valuator *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIAbstractList::Valuator *)instance; }
 	template <> const AIAbstractList::Valuator &GetParam(ForceType<const AIAbstractList::Valuator &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIAbstractList::Valuator *)instance; }
 
 	/* Allow AIAbstractList to be used as Squirrel parameter */
-	template <> AIAbstractList *GetParam(ForceType<AIAbstractList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AIAbstractList *)instance; }
+	template <> AIAbstractList *GetParam(ForceType<AIAbstractList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIAbstractList *)instance; }
+	template <> AIAbstractList &GetParam(ForceType<AIAbstractList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIAbstractList *)instance; }
+	template <> const AIAbstractList *GetParam(ForceType<const AIAbstractList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIAbstractList *)instance; }
+	template <> const AIAbstractList &GetParam(ForceType<const AIAbstractList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIAbstractList *)instance; }
 }; // namespace SQConvert
 
 void SQAIAbstractListRegister(Squirrel *engine) {
--- a/src/ai/api/ai_accounting.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_accounting.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -54,7 +54,10 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow AIAccounting to be used as Squirrel parameter */
-	template <> AIAccounting *GetParam(ForceType<AIAccounting *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AIAccounting *)instance; }
+	template <> AIAccounting *GetParam(ForceType<AIAccounting *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIAccounting *)instance; }
+	template <> AIAccounting &GetParam(ForceType<AIAccounting &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIAccounting *)instance; }
+	template <> const AIAccounting *GetParam(ForceType<const AIAccounting *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIAccounting *)instance; }
+	template <> const AIAccounting &GetParam(ForceType<const AIAccounting &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIAccounting *)instance; }
 }; // namespace SQConvert
 
 void SQAIAccountingRegister(Squirrel *engine) {
--- a/src/ai/api/ai_base.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_base.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -49,7 +49,10 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow AIBase to be used as Squirrel parameter */
-	template <> AIBase *GetParam(ForceType<AIBase *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AIBase *)instance; }
+	template <> AIBase *GetParam(ForceType<AIBase *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIBase *)instance; }
+	template <> AIBase &GetParam(ForceType<AIBase &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIBase *)instance; }
+	template <> const AIBase *GetParam(ForceType<const AIBase *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIBase *)instance; }
+	template <> const AIBase &GetParam(ForceType<const AIBase &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIBase *)instance; }
 }; // namespace SQConvert
 
 void SQAIBaseRegister(Squirrel *engine) {
--- a/src/ai/api/ai_cargo.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_cargo.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -53,7 +53,10 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow AICargo to be used as Squirrel parameter */
-	template <> AICargo *GetParam(ForceType<AICargo *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AICargo *)instance; }
+	template <> AICargo *GetParam(ForceType<AICargo *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AICargo *)instance; }
+	template <> AICargo &GetParam(ForceType<AICargo &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AICargo *)instance; }
+	template <> const AICargo *GetParam(ForceType<const AICargo *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AICargo *)instance; }
+	template <> const AICargo &GetParam(ForceType<const AICargo &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AICargo *)instance; }
 }; // namespace SQConvert
 
 void SQAICargoRegister(Squirrel *engine) {
--- a/src/ai/api/ai_company.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_company.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -97,7 +97,10 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow AICompany to be used as Squirrel parameter */
-	template <> AICompany *GetParam(ForceType<AICompany *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AICompany *)instance; }
+	template <> AICompany *GetParam(ForceType<AICompany *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AICompany *)instance; }
+	template <> AICompany &GetParam(ForceType<AICompany &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AICompany *)instance; }
+	template <> const AICompany *GetParam(ForceType<const AICompany *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AICompany *)instance; }
+	template <> const AICompany &GetParam(ForceType<const AICompany &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AICompany *)instance; }
 }; // namespace SQConvert
 
 void SQAICompanyRegister(Squirrel *engine) {
--- a/src/ai/api/ai_execmode.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_execmode.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -48,7 +48,10 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow AIExecMode to be used as Squirrel parameter */
-	template <> AIExecMode *GetParam(ForceType<AIExecMode *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AIExecMode *)instance; }
+	template <> AIExecMode *GetParam(ForceType<AIExecMode *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIExecMode *)instance; }
+	template <> AIExecMode &GetParam(ForceType<AIExecMode &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIExecMode *)instance; }
+	template <> const AIExecMode *GetParam(ForceType<const AIExecMode *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIExecMode *)instance; }
+	template <> const AIExecMode &GetParam(ForceType<const AIExecMode &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIExecMode *)instance; }
 }; // namespace SQConvert
 
 void SQAIExecModeRegister(Squirrel *engine) {
--- a/src/ai/api/ai_industry.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_industry.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -62,7 +62,10 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow AIIndustry to be used as Squirrel parameter */
-	template <> AIIndustry *GetParam(ForceType<AIIndustry *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AIIndustry *)instance; }
+	template <> AIIndustry *GetParam(ForceType<AIIndustry *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIIndustry *)instance; }
+	template <> AIIndustry &GetParam(ForceType<AIIndustry &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustry *)instance; }
+	template <> const AIIndustry *GetParam(ForceType<const AIIndustry *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIIndustry *)instance; }
+	template <> const AIIndustry &GetParam(ForceType<const AIIndustry &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIIndustry *)instance; }
 }; // namespace SQConvert
 
 void SQAIIndustryRegister(Squirrel *engine) {
--- a/src/ai/api/ai_list.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_list.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -34,7 +34,10 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow AIList to be used as Squirrel parameter */
-	template <> AIList *GetParam(ForceType<AIList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AIList *)instance; }
+	template <> AIList *GetParam(ForceType<AIList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIList *)instance; }
+	template <> AIList &GetParam(ForceType<AIList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIList *)instance; }
+	template <> const AIList *GetParam(ForceType<const AIList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIList *)instance; }
+	template <> const AIList &GetParam(ForceType<const AIList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIList *)instance; }
 }; // namespace SQConvert
 
 void SQAIListRegister(Squirrel *engine) {
@@ -44,8 +47,8 @@
 
 	SQAIList.DefSQStaticMethod(engine, &AIList::GetClassName, "GetClassName", 1, "x");
 
-	SQAIList.DefSQMethod(engine, &AIList::AddItem,         "AddItem",         2, "xi");
-	SQAIList.DefSQMethod(engine, &AIList::RemoveItem,      "RemoveItem",      2, "xi");
+	SQAIList.DefSQMethod(engine, &AIList::AddItem,    "AddItem",    2, "xi");
+	SQAIList.DefSQMethod(engine, &AIList::RemoveItem, "RemoveItem", 2, "xi");
 
 	SQAIList.PostRegister(engine);
 }
--- a/src/ai/api/ai_map.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_map.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -128,7 +128,10 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow AIMap to be used as Squirrel parameter */
-	template <> AIMap *GetParam(ForceType<AIMap *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AIMap *)instance; }
+	template <> AIMap *GetParam(ForceType<AIMap *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIMap *)instance; }
+	template <> AIMap &GetParam(ForceType<AIMap &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIMap *)instance; }
+	template <> const AIMap *GetParam(ForceType<const AIMap *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIMap *)instance; }
+	template <> const AIMap &GetParam(ForceType<const AIMap &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIMap *)instance; }
 }; // namespace SQConvert
 
 void SQAIMapRegister(Squirrel *engine) {
--- a/src/ai/api/ai_order.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_order.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -167,7 +167,10 @@
 	template <> int Return<AIOrder::AIOrderFlags>(HSQUIRRELVM vm, AIOrder::AIOrderFlags res) { sq_pushinteger(vm, (int32)res); return 1; }
 
 	/* Allow AIOrder to be used as Squirrel parameter */
-	template <> AIOrder *GetParam(ForceType<AIOrder *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AIOrder *)instance; }
+	template <> AIOrder *GetParam(ForceType<AIOrder *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIOrder *)instance; }
+	template <> AIOrder &GetParam(ForceType<AIOrder &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIOrder *)instance; }
+	template <> const AIOrder *GetParam(ForceType<const AIOrder *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIOrder *)instance; }
+	template <> const AIOrder &GetParam(ForceType<const AIOrder &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIOrder *)instance; }
 }; // namespace SQConvert
 
 void SQAIOrderRegister(Squirrel *engine) {
--- a/src/ai/api/ai_road.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_road.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -177,7 +177,10 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow AIRoad to be used as Squirrel parameter */
-	template <> AIRoad *GetParam(ForceType<AIRoad *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AIRoad *)instance; }
+	template <> AIRoad *GetParam(ForceType<AIRoad *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIRoad *)instance; }
+	template <> AIRoad &GetParam(ForceType<AIRoad &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIRoad *)instance; }
+	template <> const AIRoad *GetParam(ForceType<const AIRoad *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIRoad *)instance; }
+	template <> const AIRoad &GetParam(ForceType<const AIRoad &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIRoad *)instance; }
 }; // namespace SQConvert
 
 void SQAIRoadRegister(Squirrel *engine) {
--- a/src/ai/api/ai_settings.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_settings.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -33,7 +33,10 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow AISettings to be used as Squirrel parameter */
-	template <> AISettings *GetParam(ForceType<AISettings *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AISettings *)instance; }
+	template <> AISettings *GetParam(ForceType<AISettings *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AISettings *)instance; }
+	template <> AISettings &GetParam(ForceType<AISettings &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AISettings *)instance; }
+	template <> const AISettings *GetParam(ForceType<const AISettings *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AISettings *)instance; }
+	template <> const AISettings &GetParam(ForceType<const AISettings &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AISettings *)instance; }
 }; // namespace SQConvert
 
 void SQAISettingsRegister(Squirrel *engine) {
--- a/src/ai/api/ai_sign.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_sign.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -81,7 +81,10 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow AISign to be used as Squirrel parameter */
-	template <> AISign *GetParam(ForceType<AISign *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AISign *)instance; }
+	template <> AISign *GetParam(ForceType<AISign *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AISign *)instance; }
+	template <> AISign &GetParam(ForceType<AISign &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AISign *)instance; }
+	template <> const AISign *GetParam(ForceType<const AISign *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AISign *)instance; }
+	template <> const AISign &GetParam(ForceType<const AISign &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AISign *)instance; }
 }; // namespace SQConvert
 
 void SQAISignRegister(Squirrel *engine) {
--- a/src/ai/api/ai_testmode.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_testmode.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -50,7 +50,10 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow AITestMode to be used as Squirrel parameter */
-	template <> AITestMode *GetParam(ForceType<AITestMode *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AITestMode *)instance; }
+	template <> AITestMode *GetParam(ForceType<AITestMode *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITestMode *)instance; }
+	template <> AITestMode &GetParam(ForceType<AITestMode &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITestMode *)instance; }
+	template <> const AITestMode *GetParam(ForceType<const AITestMode *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITestMode *)instance; }
+	template <> const AITestMode &GetParam(ForceType<const AITestMode &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITestMode *)instance; }
 }; // namespace SQConvert
 
 void SQAITestModeRegister(Squirrel *engine) {
--- a/src/ai/api/ai_tilelist.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_tilelist.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -62,7 +62,10 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow AITileList to be used as Squirrel parameter */
-	template <> AITileList *GetParam(ForceType<AITileList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AITileList *)instance; }
+	template <> AITileList *GetParam(ForceType<AITileList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList *)instance; }
+	template <> AITileList &GetParam(ForceType<AITileList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList *)instance; }
+	template <> const AITileList *GetParam(ForceType<const AITileList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileList *)instance; }
+	template <> const AITileList &GetParam(ForceType<const AITileList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileList *)instance; }
 }; // namespace SQConvert
 
 void SQAITileListRegister(Squirrel *engine) {
--- a/src/ai/api/ai_tilelist_valuator.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_tilelist_valuator.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -26,7 +26,10 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow AITileListBuildable to be used as Squirrel parameter */
-	template <> AITileListBuildable *GetParam(ForceType<AITileListBuildable *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AITileListBuildable *)instance; }
+	template <> AITileListBuildable *GetParam(ForceType<AITileListBuildable *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileListBuildable *)instance; }
+	template <> AITileListBuildable &GetParam(ForceType<AITileListBuildable &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListBuildable *)instance; }
+	template <> const AITileListBuildable *GetParam(ForceType<const AITileListBuildable *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITileListBuildable *)instance; }
+	template <> const AITileListBuildable &GetParam(ForceType<const AITileListBuildable &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITileListBuildable *)instance; }
 }; // namespace SQConvert
 
 void SQAITileListBuildableRegister(Squirrel *engine) {
--- a/src/ai/api/ai_town.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_town.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -70,7 +70,10 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow AITown to be used as Squirrel parameter */
-	template <> AITown *GetParam(ForceType<AITown *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AITown *)instance; }
+	template <> AITown *GetParam(ForceType<AITown *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITown *)instance; }
+	template <> AITown &GetParam(ForceType<AITown &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITown *)instance; }
+	template <> const AITown *GetParam(ForceType<const AITown *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITown *)instance; }
+	template <> const AITown &GetParam(ForceType<const AITown &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITown *)instance; }
 }; // namespace SQConvert
 
 void SQAITownRegister(Squirrel *engine) {
--- a/src/ai/api/ai_townlist.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_townlist.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -26,7 +26,10 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow AITownList to be used as Squirrel parameter */
-	template <> AITownList *GetParam(ForceType<AITownList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AITownList *)instance; }
+	template <> AITownList *GetParam(ForceType<AITownList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITownList *)instance; }
+	template <> AITownList &GetParam(ForceType<AITownList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownList *)instance; }
+	template <> const AITownList *GetParam(ForceType<const AITownList *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITownList *)instance; }
+	template <> const AITownList &GetParam(ForceType<const AITownList &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownList *)instance; }
 }; // namespace SQConvert
 
 void SQAITownListRegister(Squirrel *engine) {
--- a/src/ai/api/ai_townlist_valuator.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_townlist_valuator.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -26,7 +26,10 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow AITownListGetPopulation to be used as Squirrel parameter */
-	template <> AITownListGetPopulation *GetParam(ForceType<AITownListGetPopulation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AITownListGetPopulation *)instance; }
+	template <> AITownListGetPopulation *GetParam(ForceType<AITownListGetPopulation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITownListGetPopulation *)instance; }
+	template <> AITownListGetPopulation &GetParam(ForceType<AITownListGetPopulation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownListGetPopulation *)instance; }
+	template <> const AITownListGetPopulation *GetParam(ForceType<const AITownListGetPopulation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITownListGetPopulation *)instance; }
+	template <> const AITownListGetPopulation &GetParam(ForceType<const AITownListGetPopulation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownListGetPopulation *)instance; }
 }; // namespace SQConvert
 
 void SQAITownListGetPopulationRegister(Squirrel *engine) {
@@ -59,7 +62,10 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow AITownListGetLocation to be used as Squirrel parameter */
-	template <> AITownListGetLocation *GetParam(ForceType<AITownListGetLocation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AITownListGetLocation *)instance; }
+	template <> AITownListGetLocation *GetParam(ForceType<AITownListGetLocation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITownListGetLocation *)instance; }
+	template <> AITownListGetLocation &GetParam(ForceType<AITownListGetLocation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownListGetLocation *)instance; }
+	template <> const AITownListGetLocation *GetParam(ForceType<const AITownListGetLocation *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITownListGetLocation *)instance; }
+	template <> const AITownListGetLocation &GetParam(ForceType<const AITownListGetLocation &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITownListGetLocation *)instance; }
 }; // namespace SQConvert
 
 void SQAITownListGetLocationRegister(Squirrel *engine) {
--- a/src/ai/api/ai_transactionmode.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_transactionmode.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -109,7 +109,10 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow AITransactionMode to be used as Squirrel parameter */
-	template <> AITransactionMode *GetParam(ForceType<AITransactionMode *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AITransactionMode *)instance; }
+	template <> AITransactionMode *GetParam(ForceType<AITransactionMode *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITransactionMode *)instance; }
+	template <> AITransactionMode &GetParam(ForceType<AITransactionMode &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITransactionMode *)instance; }
+	template <> const AITransactionMode *GetParam(ForceType<const AITransactionMode *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AITransactionMode *)instance; }
+	template <> const AITransactionMode &GetParam(ForceType<const AITransactionMode &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AITransactionMode *)instance; }
 }; // namespace SQConvert
 
 void SQAITransactionModeRegister(Squirrel *engine) {
--- a/src/ai/api/ai_vehicle.hpp	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/ai_vehicle.hpp	Sat Apr 14 20:38:10 2007 +0000
@@ -126,7 +126,10 @@
 #ifdef DEFINE_SQUIRREL_CLASS
 namespace SQConvert {
 	/* Allow AIVehicle to be used as Squirrel parameter */
-	template <> AIVehicle *GetParam(ForceType<AIVehicle *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AIVehicle *)instance; }
+	template <> AIVehicle *GetParam(ForceType<AIVehicle *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicle *)instance; }
+	template <> AIVehicle &GetParam(ForceType<AIVehicle &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicle *)instance; }
+	template <> const AIVehicle *GetParam(ForceType<const AIVehicle *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (AIVehicle *)instance; }
+	template <> const AIVehicle &GetParam(ForceType<const AIVehicle &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AIVehicle *)instance; }
 }; // namespace SQConvert
 
 void SQAIVehicleRegister(Squirrel *engine) {
--- a/src/ai/api/squirrel_export.awk	Sat Apr 14 20:17:36 2007 +0000
+++ b/src/ai/api/squirrel_export.awk	Sat Apr 14 20:38:10 2007 +0000
@@ -16,6 +16,13 @@
 	return
 }
 
+function dump_class_templates(name) {
+	print "	template <> "       name " *GetParam(ForceType<"       name " *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (" name " *)instance; }"
+	print "	template <> "       name " &GetParam(ForceType<"       name " &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" name " *)instance; }"
+	print "	template <> const " name " *GetParam(ForceType<const " name " *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (" name " *)instance; }"
+	print "	template <> const " name " &GetParam(ForceType<const " name " &>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(" name " *)instance; }"
+}
+
 BEGIN {
 	enum_size = 0
 	enum_value_size = 0
@@ -23,6 +30,7 @@
 	method_size = 0
 	static_method_size = 0
 	virtual_class = "false"
+	super_cls = ""
 	cls = ""
 	start_squirrel_define_on_next_line = "false"
 	cls_level = 0
@@ -42,6 +50,11 @@
 	if (cls_level == 0) {
 		public = "false"
 		cls = $2
+		if (match($4, "public") || match($4, "protected") || match($4, "private")) {
+			super_cls = $5
+		} else {
+			super_cls = $4
+		}
 	} else if (cls_level == 1) {
 		struct_size++
 		structs[struct_size] = cls "::" $2
@@ -124,7 +137,7 @@
 		}
 		print "	/* Allow inner classes/structs to be used as Squirrel parameters */"
 		for (i = 1; i <= struct_size; i++) {
-			print "	template <> " structs[i] " *GetParam(ForceType<" structs[i] " *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (" structs[i] " *)instance; }"
+			dump_class_templates(structs[i])
 			delete structs[i]
 		}
 	}
@@ -136,8 +149,7 @@
 		print ""
 	}
 	print "	/* Allow " cls " to be used as Squirrel parameter */"
-	print "	template <> " cls " *GetParam(ForceType<" cls " *>, HSQUIRRELVM vm, int index) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (" cls " *)instance; }"
-	# TODO returning...
+	dump_class_templates(cls)
 
 	print "}; // namespace SQConvert"
 
@@ -146,7 +158,11 @@
 		# Then do the registration functions of the class. */
 		print "void SQ" cls "Register(Squirrel *engine) {"
 		print "	DefSQClass <" cls "> SQ" cls "(\"" cls "\");"
-		print "	SQ" cls ".PreRegister(engine);"
+		if (super_cls == "AIObject" || super_cls == "AIAbstractList::Valuator") {
+			print "	SQ" cls ".PreRegister(engine);"
+		} else {
+			print "	SQ" cls ".PreRegister(engine, \"" super_cls "\");"
+		}
 		print "	SQ" cls ".AddConstructor(engine);"
 		print ""
 
@@ -237,7 +253,7 @@
 	len = 1;
 	for (len = 1; params[len] != ""; len++) {
 		sub("^[ 	]*", "", params[len])
-		if (match(params[len], "\\*")) {
+		if (match(params[len], "\\*") || match(params[len], "&")) {
 			if (match(params[len], "^char")) {
 				types = types "s"
 			} else {