better FFI error reporting
parent
cdecc54db5
commit
72ba2c98c5
|
|
@ -1,6 +1,8 @@
|
|||
- 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:
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,10 @@ M: alien-invoke-error summary
|
|||
: 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
|
||||
|
||||
|
|
@ -33,7 +37,7 @@ M: alien-invoke-error summary
|
|||
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
|
||||
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ M: cs-loc v>operand cs-loc-n cs-reg reg-stack ;
|
|||
#! 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 ;
|
||||
|
|
|
|||
|
|
@ -30,7 +30,9 @@ words definitions ;
|
|||
"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 ;
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ void ffi_dlopen(DLL *dll, bool error)
|
|||
{
|
||||
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;
|
||||
|
|
@ -42,8 +42,8 @@ void *ffi_dlsym(DLL *dll, F_STRING *symbol, bool error)
|
|||
{
|
||||
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;
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ void ffi_dlopen (DLL *dll, bool error)
|
|||
{
|
||||
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;
|
||||
}
|
||||
|
|
@ -74,7 +74,8 @@ void *ffi_dlsym (DLL *dll, F_STRING *symbol, bool error)
|
|||
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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue