+WrapperCreator::create_squirrel_instance(Class* _class)
+{
+ out << "void create_squirrel_instance(HSQUIRRELVM v, "
+ << ns_prefix << _class->name
+ << "* object, bool setup_releasehook)\n"
+ << "{\n"
+ << ind << "using namespace Wrapper;\n"
+ << "\n"
+ << ind << "sq_pushroottable(v);\n"
+ << ind << "sq_pushstring(v, \"" << _class->name << "\", -1);\n"
+ << ind << "if(SQ_FAILED(sq_get(v, -2))) {\n"
+ << ind << ind << "std::ostringstream msg;\n"
+ << ind << ind << "msg << \"Couldn't resolved squirrel type '"
+ << _class->name << "'\";\n"
+ << ind << ind << "throw SquirrelError(v, msg.str());\n"
+ << ind << "}\n"
+ << "\n"
+ << ind << "if(SQ_FAILED(sq_createinstance(v, -1)) || "
+ << "SQ_FAILED(sq_setinstanceup(v, -1, object))) {\n"
+ << ind << ind << "std::ostringstream msg;\n"
+ << ind << ind << "msg << \"Couldn't setup squirrel instance for "
+ << "object of type '" << _class->name << "'\";\n"
+ << ind << ind << "throw SquirrelError(v, msg.str());\n"
+ << ind << "}\n"
+ << ind << "sq_remove(v, -2); // remove object name\n"
+ << "\n"
+ << ind << "if(setup_releasehook) {\n"
+ << ind << ind << "sq_setreleasehook(v, -1, "
+ << _class->name << "_release_hook);\n"
+ << ind << "}\n"
+ << "\n"
+ << ind << "sq_remove(v, -2); // remove root table\n"
+ << "}\n"
+ << "\n";
+}
+
+void