let marshal_insert f argv =
match List.tl (Closure.get_args argv) with
| `STRING _ :: `INT len :: `POINTER(Some p) :: _ ->
(* XXX These two accesses are implementation-dependent *)
let s = Gpointer.peek_string (Closure.get_pointer argv ~pos:1) ~len
and pos = ref (Gpointer.peek_int p) in
(f s ~pos : unit); Gpointer.poke_int p !pos
| _ -> invalid_arg "GtkEdit.Editable.marshal_insert"