X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=tests%2Fsqlite%2Fsqlite.psi;h=4bc8059823560ab73e236d0370fe67cd6aa7a5e7;hp=594332e34fecca69da43f996cb53aa1fc43cb5d1;hb=4fd6435041048363289eb7b9243cee39b6901e4e;hpb=84ede02ee3a07d099b921fe965898282cc68902a diff --git a/tests/sqlite/sqlite.psi b/tests/sqlite/sqlite.psi index 594332e..4bc8059 100644 --- a/tests/sqlite/sqlite.psi +++ b/tests/sqlite/sqlite.psi @@ -12,7 +12,7 @@ function sqlite3\errstr(int $errno) : string { } /* obviously fake, we ever always need a pointer to it */ -struct sqlite3::(8, 8); +struct sqlite3; typedef struct sqlite3 sqlite3; @@ -23,15 +23,13 @@ typedef sqlite_int64 sqlite3_int64; typedef sqlite_uint64 sqlite3_uint64; extern void sqlite3_free(void *ptr); -function sqlite3\free(object $object) : void { - let ptr = objval($object); - return void(sqlite3_free); -} extern int sqlite3_close(sqlite3 *db); -function sqlite3\close(object $db) : int { +function sqlite3\close(object &$db) : int { let db = objval($db); return to_int(sqlite3_close); + // unset($db) as safe-guard + set $db = void(db); } extern int sqlite3_open(const char *filename, sqlite3 **db_ptr); @@ -44,23 +42,16 @@ function sqlite3\open(string $uri, object &$db) : int { typedef int (*sqlite3_callback)(void *data, int argc, char** argv, char** cols); -/* - * C calls into us, so we have to have a way to define how the callback - * arguments have to be marshaled for the userland callback, i.e. from - * native C types to ZE zvals /and/ how the userland return value has - * to be marshaled to a native type. All in all, the opposite of function impls. - */ - -extern int sqlite3_exec(sqlite3 *db, const char *sql, sqlite3_callback callback, void *data, char **errmsg); +extern int sqlite3_exec(sqlite3 *db, const char *sql, sqlite3_callback cb, void *data, char **errmsg); function sqlite3\exec(object $db, string $sql, callable $cb, mixed $cd, string &$error = null) : int { let db = objval($db); let sql = strval($sql); - let callback = callback intval( + let cb = callback intval( $cb( zval(data), to_int(argc), - to_array(argv, argc, to_string(argv)), - to_array(cols, argc, to_string(cols)) + to_array(*argv, argc, to_string(*argv)), + to_array(*cols, argc, to_string(*cols)) ) ); let data = zval($cd);