let_callback: optional call variable list
[m6w6/ext-psi] / tests / sqlite / sqlite.psi
index 594332e34fecca69da43f996cb53aa1fc43cb5d1..4bc8059823560ab73e236d0370fe67cd6aa7a5e7 100644 (file)
@@ -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);