2004-09-18 18:15:01 -04:00
|
|
|
typedef struct {
|
|
|
|
CELL header;
|
|
|
|
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-09-18 18:15:01 -04:00
|
|
|
void primitive_dlopen(void);
|
|
|
|
void primitive_dlsym(void);
|
|
|
|
void primitive_dlsym_self(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-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 fixup_alien(ALIEN* alien);
|
|
|
|
void collect_alien(ALIEN* alien);
|