static SQRESULT sq_mysql_exec_query(HSQUIRRELVM v){ SQ_FUNC_VARS_NO_TOP(v); GET_mysql_INSTANCE(); SQ_GET_STRING(v, 2, szSQL); if (dlmysql_real_query(self, szSQL, szSQL_size)) /* error executing query */ return sq_throwerror(v, _SC("error executing query. MySQL: %s"), dlmysql_error(self)); MYSQL_RES *qres = dlmysql_store_result(self); sq_pushroottable(v); sq_pushstring(v, MySQL_Result_TAG, -1); if(sq_get(v, -2) == SQ_OK){ if(sq_createinstance(v, -1) == SQ_OK){ sq_setinstanceup(v, -1, qres); sq_setreleasehook(v, -1, sq_mysql_result_releasehook); sq_pushstring(v, _curr_row_key, -1); sq_pushinteger(v, -1); sq_set(v, -3); return 1; } } return SQ_ERROR; }
/* * create a instance */ SQInteger createSQObject(HSQUIRRELVM v, const char* package_name, const char* name, SQUserPointer ptr, SQRELEASEHOOK releaseHook) { sq_pushroottable(v); sq_pushstring(v, package_name, -1); if (!SQ_SUCCEEDED(sq_get(v, -2))) { sq_pop(v, 1); return 0; } if (name != NULL) { sq_pushstring(v, name, -1); if (!SQ_SUCCEEDED(sq_get(v, -2))) { sq_pop(v, 2); return 0; } } sq_createinstance(v, -1); sq_setinstanceup(v, -1, ptr); if (releaseHook != NULL) { sq_setreleasehook(v, -1, releaseHook); } sq_remove(v, -2); sq_remove(v, -2); return 1; }
void BindInput() { Sqrat::Class<CInput, Sqrat::NoConstructor> def; def.Func("KeyUp", &CInput::KeyUp); def.Func("KeyPressed", &CInput::KeyPressed); def.Func("KeyHeld", &CInput::KeyHeld); def.Func("KeyReleased", &CInput::KeyReleased); Sqrat::RootTable().Bind("InputSystem", def); //Sqrat::ConstTable().Const("KEY_LEFT", KEY_LEFT); MAKE_KEY( KEY_LEFT ); MAKE_KEY( KEY_RIGHT ); MAKE_KEY( KEY_UP ); MAKE_KEY( KEY_DOWN ); MAKE_KEY( KEY_Q ); MAKE_KEY( KEY_W ); MAKE_KEY( KEY_PAGEUP ); MAKE_KEY( KEY_PAGEDOWN ); MAKE_KEY( KEY_HOME ); // Push the singleton to squirrel sq_pushroottable( Sqrat::DefaultVM::Get() ); sq_pushstring( Sqrat::DefaultVM::Get(), "InputSystem", -1 ); sq_get( Sqrat::DefaultVM::Get(), -2 ); sq_pushstring( Sqrat::DefaultVM::Get(), "Input", -1 ); sq_createinstance( Sqrat::DefaultVM::Get(), -2 ); sq_setinstanceup( Sqrat::DefaultVM::Get(), -1, (SQUserPointer)Input() ); sq_newslot( Sqrat::DefaultVM::Get(), -4, SQFalse ); sq_pop( Sqrat::DefaultVM::Get(), 2 ); }
// // Transport.Position class // SQInteger TransportPositionPush(HSQUIRRELVM vm, TimePosition *obj) { sq_pushobject(vm, TransportPositionObject); sq_createinstance(vm, -1); sq_remove(vm, -2); sq_setinstanceup(vm, -1, new TimePosition(*obj)); sq_setreleasehook(vm, -1, &TransportPositionRelease); }
SquirrelObject SquirrelVM::CreateInstance(SquirrelObject &oclass) { SquirrelObject ret(_VM); int oldtop = sq_gettop(_VM); sq_pushobject(_VM,oclass._o); if(SQ_FAILED(sq_createinstance(_VM,-1))) { sq_settop(_VM,oldtop); throw SquirrelError(_VM); } ret.AttachToStackObject(-1); sq_pop(_VM,2); return ret; }
static SQRESULT ssl_constructor(HSQUIRRELVM v, SSL *ssl, int free_on_gc) { if(!ssl) return sq_throwerror(v, _SC("Could'nt create an ssl object.")); sq_pushstring(v, SQ_LIBNAME, -1); if(sq_getonroottable(v) == SQ_OK){ sq_pushstring(v, ssl_NAME, -1); if(sq_get(v, -2) == SQ_OK){ if(sq_createinstance(v, -1) == SQ_OK){ sq_setinstanceup(v, -1, ssl); if(free_on_gc) sq_setreleasehook(v,-1, ssl_release_hook); return 1; } } } return SQ_ERROR; }
bool CreateNativeClassInstance(HSQUIRRELVM v, const SQChar *classname, SQUserPointer ud, SQRELEASEHOOK hook) { // If we don't do this, SquirrelVM keeps an old pointer around and this // will be used by SquirrelObject. That crashes when using several VMs. int oldtop = sq_gettop(v); sq_pushroottable(v); sq_pushstring(v, classname, -1); if (SQ_FAILED(sq_rawget(v, -2))){ //Get the class (created with sq_newclass()). sq_settop(v, oldtop); return false; } //sq_pushroottable(v); if (SQ_FAILED(sq_createinstance(v, -1))) { sq_settop(v, oldtop); return false; } #ifdef SQ_USE_CLASS_INHERITANCE HSQOBJECT ho; sq_getstackobj(v, -1, &ho); // OT_INSTANCE SquirrelObject instance(ho); SqPlus::PopulateAncestry(v, instance, ud); #endif sq_remove(v, -3); //removes the root table sq_remove(v, -2); //removes the class if (SQ_FAILED(sq_setinstanceup(v, -1, ud))) { sq_settop(v, oldtop); return false; } sq_setreleasehook(v, -1, hook); return true; }
static SQRESULT sq_mysql_prepare(HSQUIRRELVM v){ SQ_FUNC_VARS_NO_TOP(v); GET_mysql_INSTANCE(); SQ_GET_STRING(v, 2, szSQL); MYSQL_STMT *stmt = dlmysql_stmt_init(self); if (!stmt) return sq_throwerror(v, _SC(" mysql_stmt_init(), out of memory\n")); if (dlmysql_stmt_prepare(stmt, szSQL, szSQL_size)) { SQRESULT res = sq_throwerror(v, dlmysql_stmt_error(stmt)); dlmysql_stmt_close(stmt); return res; } unsigned long expected_params = dlmysql_stmt_param_count(stmt); size_t bind_params_info_size = sizeof(MYSQL_BIND) * expected_params; size_t bind_params_data_size = sizeof(double) * expected_params; size_t bind_data_buffer_size = bind_params_info_size + bind_params_data_size; size_t st_mysq_stmt_size = sizeof(SQ_MysqlStatement) + bind_data_buffer_size; SQ_MysqlStatement *sq_stmt = (SQ_MysqlStatement*)sq_malloc(st_mysq_stmt_size); sq_stmt->stmt = stmt; sq_stmt->bind_data_buffer_size = bind_data_buffer_size; sq_stmt->param_count = expected_params; sq_stmt->bind_params_info = (MYSQL_BIND*)sq_stmt->bind_data_buffer; sq_stmt->bind_params_data = ((char*)sq_stmt->bind_params_info) + bind_params_info_size; sq_pushroottable(v); sq_pushstring(v, MySQL_Statement_TAG, -1); if(sq_get(v, -2) == SQ_OK){ if(sq_createinstance(v, -1) == SQ_OK){ sq_setinstanceup(v, -1, sq_stmt); sq_setreleasehook(v, -1, sq_mysql_statement_releasehook); return 1; } } return SQ_ERROR; }
BOOL SbuCreateNativeClassInstance(HSQUIRRELVM v,const SQChar *classname,SQUserPointer ud,SQRELEASEHOOK hook) { int oldtop = sq_gettop(v); sq_pushroottable(v); sq_pushstring(v,classname,-1); if(SQ_FAILED(sq_rawget(v,-2))){ sq_settop(v,oldtop); return FALSE; } //sq_pushroottable(v); if(SQ_FAILED(sq_createinstance(v,-1))) { sq_settop(v,oldtop); return FALSE; } sq_remove(v,-3); //removes the root table sq_remove(v,-2); //removes the the class if(SQ_FAILED(sq_setinstanceup(v,-1,ud))) { sq_settop(v,oldtop); return FALSE; } sq_setreleasehook(v,-1,hook); return TRUE; }
/* static */ bool Squirrel::CreateClassInstanceVM(HSQUIRRELVM vm, const char *class_name, void *real_instance, HSQOBJECT *instance, SQRELEASEHOOK release_hook) { int oldtop = sq_gettop(vm); /* First, find the class */ sq_pushroottable(vm); sq_pushstring(vm, OTTD2SQ(class_name), -1); if (SQ_FAILED(sq_get(vm, -2))) { DEBUG(misc, 0, "[squirrel] Failed to find class by the name '%s'", class_name); sq_settop(vm, oldtop); return false; } /* Create the instance */ if (SQ_FAILED(sq_createinstance(vm, -1))) { DEBUG(misc, 0, "[squirrel] Failed to create instance for class '%s'", class_name); sq_settop(vm, oldtop); return false; } if (instance != NULL) { /* Find our instance */ sq_getstackobj(vm, -1, instance); /* Add a reference to it, so it survives for ever */ sq_addref(vm, instance); } sq_remove(vm, -2); // Class-name sq_remove(vm, -2); // Root-table /* Store it in the class */ sq_setinstanceup(vm, -1, real_instance); if (release_hook != NULL) sq_setreleasehook(vm, -1, release_hook); if (instance != NULL) sq_settop(vm, oldtop); return true; }
static SQInteger class_instance(HSQUIRRELVM v) { return SQ_SUCCEEDED(sq_createinstance(v,-1))?1:SQ_ERROR; }
/* static */ bool Squirrel::CreateClassInstanceVM(HSQUIRRELVM vm, const char *class_name, void *real_instance, HSQOBJECT *instance, SQRELEASEHOOK release_hook, bool prepend_API_name) { Squirrel *engine = (Squirrel *)sq_getforeignptr(vm); int oldtop = sq_gettop(vm); /* First, find the class */ sq_pushroottable(vm); if (prepend_API_name) { size_t len = strlen(class_name) + strlen(engine->GetAPIName()) + 1; char *class_name2 = (char *)alloca(len); seprintf(class_name2, class_name2 + len - 1, "%s%s", engine->GetAPIName(), class_name); sq_pushstring(vm, class_name2, -1); } else { sq_pushstring(vm, class_name, -1); } if (SQ_FAILED(sq_get(vm, -2))) { DEBUG(misc, 0, "[squirrel] Failed to find class by the name '%s%s'", prepend_API_name ? engine->GetAPIName() : "", class_name); sq_settop(vm, oldtop); return false; } /* Create the instance */ if (SQ_FAILED(sq_createinstance(vm, -1))) { DEBUG(misc, 0, "[squirrel] Failed to create instance for class '%s%s'", prepend_API_name ? engine->GetAPIName() : "", class_name); sq_settop(vm, oldtop); return false; } if (instance != NULL) { /* Find our instance */ sq_getstackobj(vm, -1, instance); /* Add a reference to it, so it survives for ever */ sq_addref(vm, instance); } sq_remove(vm, -2); // Class-name sq_remove(vm, -2); // Root-table /* Store it in the class */ sq_setinstanceup(vm, -1, real_instance); if (release_hook != NULL) sq_setreleasehook(vm, -1, release_hook); if (instance != NULL) sq_settop(vm, oldtop); return true; }