 M: alien-callback alien-node-abi alien-callback-abi ;
 
 M: alien-callback-error summary
-    drop "Words calling ``alien-callback'' cannot run in the interpreter. Compile the caller word and try again." ;
+    drop "Words calling ``alien-callback'' must be compiled with the optimizing compiler." ;
 
 : callback-bottom ( node -- )
     alien-callback-xt [ word-xt <alien> ] curry

M: alien-indirect alien-node-abi alien-indirect-abi ;

M: alien-indirect-error summary
    drop "Words calling ``alien-indirect'' cannot run in the interpreter. Compile the caller word and try again." ;

\ alien-indirect [
    ! Three literals and function pointer

    pop-literal nip over set-alien-invoke-return
    ! Quotation which coerces parameters to required types
    dup make-prep-quot recursive-state get infer-quot
    ! Add node to IR
    dup node,
    ! Magic #: consume exactly the number of inputs
    0 alien-invoke-stack
] "infer" set-word-prop

: stdcall-mangle ( symbol node -- symbol )
    "@"
    swap alien-node-parameters parameter-sizes drop
    number>string 3append ;

: (alien-invoke-dlsym) ( node -- symbol dll )
    dup alien-invoke-function
    swap alien-invoke-library load-library ;

: alien-invoke-dlsym ( node -- symbol dll )
    dup (alien-invoke-dlsym)
    >r over stdcall-mangle r> 2dup dlsym [
        rot drop
    ] [
        2drop (alien-invoke-dlsym)
    ] if ;

M: alien-invoke generate-node
    dup alien-invoke-frame [
