- live search: timer delay would be nice
- help responder has no way to access { "foo" "bar" }
- httpd search tools
+- condition rethrow restarts broken
+- menus broken (right click, left click another word)
+ ui:
: alien-invoke ( ... return library function parameters -- ... )
pick pick <alien-invoke-error> throw ;
+: ensure-dlsym ( node -- )
+ [ alien-invoke-dlsym dlsym drop ]
+ [ inference-warning ] recover ;
+
\ alien-invoke [ string object string object ] [ ] <effect>
"infer-effect" set-word-prop
pop-literal nip over set-alien-invoke-function
pop-literal nip over set-alien-invoke-library
pop-literal nip over set-alien-invoke-return
- dup alien-invoke-dlsym dlsym drop
+ dup ensure-dlsym
alien-invoke-stack
] "infer" set-word-prop
#! so this is mostly a no-op.
swap slip stack-reg swap ADD ; inline
-: compile-c-call* ( symbol dll args -- operands )
+: compile-c-call* ( symbol dll args -- )
dup length cells [
<reversed> [ PUSH ] each %alien-invoke
] with-aligned-stack ;
"Cannot convert to C string: " write third . ;
: ffi-error. ( obj -- )
- "FFI: " write third print ;
+ "FFI: " write
+ dup third [ write ": " write ] when*
+ fourth print ;
: heap-scan-error. ( obj -- )
"Cannot do next-object outside begin/end-scan" print drop ;
{
if(error)
{
- general_error(ERROR_FFI,tag_object(
- from_char_string(dlerror())),F,true);
+ general_error(ERROR_FFI,F,
+ tag_object(from_char_string(dlerror())),true);
}
else
dll->dll = NULL;
{
if(error)
{
- general_error(ERROR_FFI,tag_object(
- from_char_string(dlerror())),F,true);
+ general_error(ERROR_FFI,tag_object(symbol),
+ tag_object(from_char_string(dlerror())),true);
}
return NULL;
{
dll->dll = NULL;
if(error)
- general_error(ERROR_FFI, tag_object(get_error_message()),F,true);
+ general_error(ERROR_FFI, F, tag_object(get_error_message()),true);
else
return;
}
if (!sym)
{
if(error)
- general_error(ERROR_FFI, tag_object(get_error_message()),F,true);
+ general_error(ERROR_FFI, tag_object(symbol),
+ tag_object(get_error_message()),true);
else
return NULL;
}