Пример #1
0
void factor_vm::primitive_callback()
{
	tagged<word> w(dpop());
	w.untag_check(this);

	callback *stub = callbacks->add(w->code);
	box_alien(stub + 1);
}
Пример #2
0
/* look up a symbol in a native library */
inline void factorvm::vmprim_dlsym()
{
	gc_root<object> library(dpop(),this);
	gc_root<byte_array> name(dpop(),this);
	name.untag_check(this);

	symbol_char *sym = name->data<symbol_char>();

	if(library.value() == F)
		box_alien(ffi_dlsym(NULL,sym));
	else
	{
		dll *d = untag_check<dll>(library.value());

		if(d->dll == NULL)
			dpush(F);
		else
			box_alien(ffi_dlsym(d,sym));
	}
}
Пример #3
0
void primitive_fopen(void)
{
    char *mode = unbox_char_string();
    REGISTER_C_STRING(mode);
    char *path = unbox_char_string();
    UNREGISTER_C_STRING(mode);

    for(;;)
    {
        FILE *file = fopen(path,mode);
        if(file == NULL)
            io_error();
        else
        {
            box_alien(file);
            break;
        }
    }
}
Пример #4
0
inline void factorvm::vmprim_vm_ptr()
{
	box_alien(this);
}