         [ drop f ]
     } case ;
 
-: marshall-non-pointer ( obj -- byte-array/f )
+: marshall-non-pointer ( alien-wrapper/byte-array -- byte-array )
     {
         { [ dup byte-array? ] [ ] }
         { [ dup alien-wrapper? ]

        { [ 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 ;

: (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 unmarshall-cast ]
        ] [ drop [ ] ] if
    ] [ [ ] ] if* ;

