diff options
Diffstat (limited to 'src/script/squirrel_helper.hpp')
-rw-r--r-- | src/script/squirrel_helper.hpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/script/squirrel_helper.hpp b/src/script/squirrel_helper.hpp index a72199dce..6314d3bc2 100644 --- a/src/script/squirrel_helper.hpp +++ b/src/script/squirrel_helper.hpp @@ -885,6 +885,28 @@ namespace SQConvert { } } + /** + * A general template to handle creating of an instance with a complex + * constructor. + */ + template <typename Tcls> + inline SQInteger DefSQAdvancedConstructorCallback(HSQUIRRELVM vm) + { + try { + /* Find the amount of params we got */ + int nparam = sq_gettop(vm); + + /* Create the real instance */ + Tcls *instance = new Tcls(vm); + sq_setinstanceup(vm, -nparam, instance); + sq_setreleasehook(vm, -nparam, DefSQDestructorCallback<Tcls>); + instance->AddRef(); + return 0; + } catch (SQInteger e) { + return e; + } + } + } // namespace SQConvert #endif /* SQUIRREL_HELPER_HPP */ |