     current-vocab lookup [
         dup superclasses [ struct-wrapper? ] any? [
             [ class name>> heap-size ] keep
-            '[ malloc-byte-array _ new swap >>underlying ]
+            '[ _ malloc-byte-array _ new swap >>underlying ]
         ] [ drop [ ] ] if
     ] [ [ ] ] if* ;
 

! Copyright (C) 2009 Jeremy Hughes.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors alien alien.c-types alien.inline.types
alien.marshall.private
alien.strings byte-arrays classes combinators
combinators.short-circuit destructors fry
io.encodings.utf8 kernel sequences
specialized-arrays.alien
specialized-arrays.bool specialized-arrays.char
specialized-arrays.double specialized-arrays.float
specialized-arrays.int specialized-arrays.long
specialized-arrays.longlong specialized-arrays.ulonglong
specialized-arrays.short specialized-arrays.uchar
specialized-arrays.uint specialized-arrays.ulong
specialized-arrays.ushort strings unix.utilities
vocabs.parser words ;
IN: alien.marshall

<< primitive-types [ "void*" = not ] filter

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

: (marshall-char**-or-strings) ( seq -- alien )
    dup first string?
    [ utf8 strings>alien malloc-byte-array ]
    [ (marshall-char**) ] if ;

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

: marshall-char**-or-strings-free ( n/string -- alien )
    [ (marshall-char**-or-strings) &free ] ptr-pass-through ;

: primitive-marshaller ( type -- quot/f )
    {
