factor/core/alien/alien.factor

86 lines
2.0 KiB
Factor
Raw Normal View History

2008-01-05 17:27:15 -05:00
! Copyright (C) 2004, 2008 Slava Pestov.
2007-09-20 18:09:08 -04:00
! See http://factorcode.org/license.txt for BSD license.
USING: assocs kernel math namespaces sequences system
2008-02-15 21:08:01 -05:00
kernel.private tuples bit-arrays byte-arrays float-arrays
2008-03-19 14:26:39 -04:00
arrays ;
2008-01-05 17:27:15 -05:00
IN: alien
2007-09-20 18:09:08 -04:00
! Some predicate classes used by the compiler for optimization
! purposes
2008-03-26 19:23:19 -04:00
PREDICATE: simple-alien < alien
2007-09-20 18:09:08 -04:00
underlying-alien not ;
2008-01-31 21:11:46 -05:00
UNION: simple-c-ptr
simple-alien POSTPONE: f byte-array bit-array float-array ;
2008-01-05 17:27:15 -05:00
2008-01-31 21:11:46 -05:00
UNION: c-ptr
alien POSTPONE: f byte-array bit-array float-array ;
2007-09-20 18:09:08 -04:00
DEFER: pinned-c-ptr?
2008-03-26 19:23:19 -04:00
PREDICATE: pinned-alien < alien
underlying-alien pinned-c-ptr? ;
UNION: pinned-c-ptr
pinned-alien POSTPONE: f ;
2007-09-20 18:09:08 -04:00
M: f expired? drop t ;
: <alien> ( address -- alien )
f <displaced-alien> { simple-c-ptr } declare ; inline
: alien>native-string ( alien -- string )
windows? [ alien>u16-string ] [ alien>char-string ] if ;
: dll-path ( dll -- string )
(dll-path) alien>native-string ;
M: alien equal?
over alien? [
2dup [ expired? ] either? [
[ expired? ] both?
] [
[ alien-address ] 2apply =
] if
] [
2drop f
] if ;
SYMBOL: libraries
2008-01-05 17:27:15 -05:00
libraries global [ H{ } assoc-like ] change-at
2007-09-20 18:09:08 -04:00
TUPLE: library path abi dll ;
: library ( name -- library ) libraries get at ;
: <library> ( path abi -- library )
over dup [ dlopen ] when \ library construct-boa ;
2007-09-20 18:09:08 -04:00
: load-library ( name -- dll )
library dup [ library-dll ] when ;
2007-09-20 18:09:08 -04:00
: add-library ( name path abi -- )
<library> swap libraries get set-at ;
TUPLE: alien-callback return parameters abi quot xt ;
2008-03-20 16:00:49 -04:00
ERROR: alien-callback-error ;
2007-09-20 18:09:08 -04:00
: alien-callback ( return parameters abi quot -- alien )
2008-03-20 16:00:49 -04:00
alien-callback-error ;
2007-09-20 18:09:08 -04:00
TUPLE: alien-indirect return parameters abi ;
2008-03-20 16:00:49 -04:00
ERROR: alien-indirect-error ;
2007-09-20 18:09:08 -04:00
: alien-indirect ( ... funcptr return parameters abi -- )
2008-03-20 16:00:49 -04:00
alien-indirect-error ;
2007-09-20 18:09:08 -04:00
2008-03-20 21:13:13 -04:00
TUPLE: alien-invoke library function return parameters abi ;
2007-09-20 18:09:08 -04:00
2008-03-20 16:00:49 -04:00
ERROR: alien-invoke-error library symbol ;
2007-09-20 18:09:08 -04:00
: alien-invoke ( ... return library function parameters -- ... )
2008-03-20 16:00:49 -04:00
2over alien-invoke-error ;