factor/native/ffi.h

49 lines
1.1 KiB
C
Raw Normal View History

2004-09-18 18:15:01 -04:00
typedef struct {
CELL header;
2004-12-25 18:08:20 -05:00
/* tagged string */
CELL path;
/* OS-specific handle */
2004-09-18 18:15:01 -04:00
void* dll;
} DLL;
2004-09-21 22:58:54 -04:00
DLL* untag_dll(CELL tagged);
2004-09-18 18:15:01 -04:00
2004-09-19 17:39:28 -04:00
typedef struct {
CELL header;
CELL ptr;
2004-09-21 22:58:54 -04:00
/* local aliens are heap-allocated as strings and must be collected. */
bool local;
2004-09-19 17:39:28 -04:00
} ALIEN;
INLINE ALIEN* untag_alien(CELL tagged)
{
type_check(ALIEN_TYPE,tagged);
return (ALIEN*)UNTAG(tagged);
}
2004-12-25 18:08:20 -05:00
void ffi_dlopen(DLL *dll);
2004-12-25 05:49:30 -05:00
void *ffi_dlsym(DLL *dll, F_STRING *symbol);
void ffi_dlclose(DLL *dll);
2004-09-18 18:15:01 -04:00
void primitive_dlopen(void);
void primitive_dlsym(void);
void primitive_dlclose(void);
2004-09-19 17:39:28 -04:00
void primitive_alien(void);
2004-09-21 22:58:54 -04:00
void primitive_local_alien(void);
2004-12-18 00:41:31 -05:00
DLLEXPORT CELL unbox_alien(void);
DLLEXPORT void box_alien(CELL ptr);
2004-12-23 01:14:07 -05:00
void primitive_local_alienp(void);
void primitive_alien_address(void);
2004-09-19 17:39:28 -04:00
void primitive_alien_cell(void);
void primitive_set_alien_cell(void);
void primitive_alien_4(void);
void primitive_set_alien_4(void);
2004-09-20 21:02:48 -04:00
void primitive_alien_2(void);
void primitive_set_alien_2(void);
2004-09-19 17:39:28 -04:00
void primitive_alien_1(void);
void primitive_set_alien_1(void);
2004-09-21 22:58:54 -04:00
void fixup_dll(DLL* dll);
void collect_dll(DLL* dll);
2004-09-21 22:58:54 -04:00
void fixup_alien(ALIEN* alien);
void collect_alien(ALIEN* alien);