         { [ dup struct-array? ] [ underlying>> ] }
     } cond ;
 
-: marshall-void* ( obj -- alien )
-    marshall-pointer ;
 : marshall-primitive ( n -- n )
     [ bool>arg ] ptr-pass-through ;
 
-: marshall-void** ( obj -- alien )
-    [ marshall-void* ] map >void*-array malloc-underlying ;
+ALIAS: marshall-void* marshall-pointer
+
+: marshall-void** ( seq -- alien )
+    [ marshall-void* ] void*-array{ } map-as malloc-underlying ;
 
 : (marshall-char*-or-string) ( n/string -- alien )
     dup string?

: pointer-unmarshaller ( type -- quot )
    type-sans-pointer current-vocab lookup [
        dup superclasses [ \ alien-wrapper = ] any? [
            '[ _ new swap >>underlying dynamic-cast ]
        ] [ drop [ ] ] if
    ] [ [ ] ] if* ;


    [ (marshall-char*-or-string) ] ptr-pass-through ;

: (marshall-char**-or-strings) ( seq -- alien )
    [ marshall-char*-or-string ] void*-array{ } map-as
    malloc-underlying ;

: marshall-char**-or-strings ( seq -- alien )
    [ (marshall-char**-or-strings) ] ptr-pass-through ;

: marshall-bool ( ? -- n )
