alien: replacing the alien-*-error family of errors with callsite-not-compiled
All the errors did the same thing anyway. Also adding a summary method to it.char-rename
parent
4387da41d5
commit
dee9cf0a70
|
@ -1,16 +1,14 @@
|
||||||
! Copyright (C) 2004, 2011 Slava Pestov.
|
! Copyright (C) 2004, 2011 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors alien.strings arrays assocs classes
|
USING: accessors alien alien.strings arrays assocs classes
|
||||||
classes.builtin classes.mixin classes.tuple classes.tuple.parser
|
classes.builtin classes.mixin classes.tuple classes.tuple.parser
|
||||||
combinators combinators.short-circuit compiler.errors
|
combinators combinators.short-circuit compiler.errors compiler.units
|
||||||
compiler.units continuations definitions destructors
|
continuations definitions destructors effects.parser fry generic
|
||||||
effects.parser fry generic generic.math generic.parser
|
generic.math generic.parser generic.single grouping io io.encodings
|
||||||
generic.single grouping io io.encodings io.styles kernel
|
io.styles kernel kernel.private lexer libc make math math.order
|
||||||
kernel.private lexer libc make math math.order math.parser
|
math.parser math.ratios namespaces parser prettyprint sequences
|
||||||
math.ratios namespaces parser prettyprint sequences
|
sequences.private slots source-files.errors strings strings.parser
|
||||||
sequences.private slots source-files.errors strings
|
summary system vocabs vocabs.loader vocabs.parser words ;
|
||||||
strings.parser summary system vocabs vocabs.loader vocabs.parser
|
|
||||||
words ;
|
|
||||||
IN: debugger
|
IN: debugger
|
||||||
|
|
||||||
GENERIC: error-help ( error -- topic )
|
GENERIC: error-help ( error -- topic )
|
||||||
|
@ -384,4 +382,7 @@ M: wrong-values summary drop "Quotation's stack effect does not match call site"
|
||||||
|
|
||||||
M: stack-effect-omits-dashes summary drop "Stack effect must contain “--”" ;
|
M: stack-effect-omits-dashes summary drop "Stack effect must contain “--”" ;
|
||||||
|
|
||||||
|
M: callsite-not-compiled summary
|
||||||
|
drop "Caller not compiled with the optimizing compiler" ;
|
||||||
|
|
||||||
{ "threads" "debugger" } "debugger.threads" require-when
|
{ "threads" "debugger" } "debugger.threads" require-when
|
||||||
|
|
|
@ -11,6 +11,9 @@ HELP: callee-cleanup?
|
||||||
HELP: cdecl
|
HELP: cdecl
|
||||||
{ $description "This symbol is passed as the " { $snippet "abi" } " argument to " { $link alien-indirect } ", " { $link alien-callback } ", " { $link alien-assembly } ", and " { $link add-library } " to indicate that the standard C calling convention should be used, where the caller cleans up the stack frame after calling the function. This symbol only has meaning on 32-bit x86 platforms." } ;
|
{ $description "This symbol is passed as the " { $snippet "abi" } " argument to " { $link alien-indirect } ", " { $link alien-callback } ", " { $link alien-assembly } ", and " { $link add-library } " to indicate that the standard C calling convention should be used, where the caller cleans up the stack frame after calling the function. This symbol only has meaning on 32-bit x86 platforms." } ;
|
||||||
|
|
||||||
|
HELP: callsite-not-compiled
|
||||||
|
{ $error-description "Thrown if the word calling the given word was not compiled with the optimizing compiler. This can happen when experimenting with the word in this listener. To fix the problem, place the word call in a word; word definitions are automatically compiled with the optimizing compiler. Only a few words relating to calling FFI functions throws this error." } ;
|
||||||
|
|
||||||
HELP: stdcall
|
HELP: stdcall
|
||||||
{ $description "This symbol is passed as the " { $snippet "abi" } " argument to " { $link alien-indirect } ", " { $link alien-callback } ", " { $link alien-assembly } ", and " { $link add-library } " to indicate that the Windows API calling convention should be used, where the called function cleans up its own stack frame before returning to the caller. This symbol only has meaning on 32-bit x86 platforms." } ;
|
{ $description "This symbol is passed as the " { $snippet "abi" } " argument to " { $link alien-indirect } ", " { $link alien-callback } ", " { $link alien-assembly } ", and " { $link add-library } " to indicate that the Windows API calling convention should be used, where the called function cleans up its own stack frame before returning to the caller. This symbol only has meaning on 32-bit x86 platforms." } ;
|
||||||
|
|
||||||
|
@ -91,29 +94,11 @@ HELP: <alien>
|
||||||
HELP: c-ptr
|
HELP: c-ptr
|
||||||
{ $class-description "Class of objects consisting of aliens, byte arrays and " { $link f } ". These objects all can be used as values of " { $link pointer } " C types." } ;
|
{ $class-description "Class of objects consisting of aliens, byte arrays and " { $link f } ". These objects all can be used as values of " { $link pointer } " C types." } ;
|
||||||
|
|
||||||
HELP: alien-invoke-error
|
|
||||||
{ $error-description "Thrown if the word calling " { $link alien-invoke } " was not compiled with the optimizing compiler. This may be a result of one of several failure conditions:"
|
|
||||||
{ $list
|
|
||||||
{ "This can happen when experimenting with " { $link alien-invoke } " in this listener. To fix the problem, place the " { $link alien-invoke } " call in a word; word definitions are automatically compiled with the optimizing compiler." }
|
|
||||||
{ "The return type or parameter list references an unknown C type." }
|
|
||||||
{ "The symbol or library could not be found." }
|
|
||||||
{ "One of the four inputs to " { $link alien-invoke } " is not a literal value. To call functions which are not known at compile-time, use " { $link alien-indirect } "." }
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
HELP: alien-invoke
|
HELP: alien-invoke
|
||||||
{ $values { "args..." "zero or more objects passed to the C function" } { "return" "a C return type" } { "library" "a logical library name" } { "function" "a C function name" } { "parameters" "a sequence of C parameter types" } { "return..." "the return value of the function, if not " { $link void } } }
|
{ $values { "args..." "zero or more objects passed to the C function" } { "return" "a C return type" } { "library" "a logical library name" } { "function" "a C function name" } { "parameters" "a sequence of C parameter types" } { "return..." "the return value of the function, if not " { $link void } } }
|
||||||
{ $description "Calls a C library function with the given name. Input parameters are taken from the data stack, and the return value is pushed on the data stack after the function returns. A return type of " { $link void } " indicates that no value is to be expected." }
|
{ $description "Calls a C library function with the given name. Input parameters are taken from the data stack, and the return value is pushed on the data stack after the function returns. A return type of " { $link void } " indicates that no value is to be expected." }
|
||||||
{ $notes "C type names are documented in " { $link "c-types-specs" } "." }
|
{ $notes "C type names are documented in " { $link "c-types-specs" } "." }
|
||||||
{ $errors "Throws an " { $link alien-invoke-error } " if the word calling " { $link alien-invoke } " was not compiled with the optimizing compiler." } ;
|
{ $errors "Throws an " { $link callsite-not-compiled } " if the word calling " { $link alien-invoke } " was not compiled with the optimizing compiler." } ;
|
||||||
|
|
||||||
HELP: alien-indirect-error
|
|
||||||
{ $error-description "Thrown if the word calling " { $link alien-indirect } " was not compiled with the optimizing compiler. This may be a result of one of two failure conditions:"
|
|
||||||
{ $list
|
|
||||||
{ "This can happen when experimenting with " { $link alien-indirect } " in this listener. To fix the problem, place the " { $link alien-indirect } " call in a word; word definitions are automatically compiled with the optimizing compiler." }
|
|
||||||
{ "One of the three inputs to " { $link alien-indirect } " is not a literal value." }
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
HELP: alien-indirect
|
HELP: alien-indirect
|
||||||
{ $values { "args..." "zero or more objects passed to the C function" } { "funcptr" "a C function pointer" } { "return" "a C return type" } { "parameters" "a sequence of C parameter types" } { "abi" "one of " { $link cdecl } " or " { $link stdcall } } { "return..." "the return value of the function, if not " { $link void } } }
|
{ $values { "args..." "zero or more objects passed to the C function" } { "funcptr" "a C function pointer" } { "return" "a C return type" } { "parameters" "a sequence of C parameter types" } { "abi" "one of " { $link cdecl } " or " { $link stdcall } } { "return..." "the return value of the function, if not " { $link void } } }
|
||||||
|
@ -121,15 +106,7 @@ HELP: alien-indirect
|
||||||
"Invokes a C function pointer passed on the data stack. Input parameters are taken from the data stack following the function pointer, and the return value is pushed on the data stack after the function returns. A return type of " { $link void } " indicates that no value is to be expected."
|
"Invokes a C function pointer passed on the data stack. Input parameters are taken from the data stack following the function pointer, and the return value is pushed on the data stack after the function returns. A return type of " { $link void } " indicates that no value is to be expected."
|
||||||
}
|
}
|
||||||
{ $notes "C type names are documented in " { $link "c-types-specs" } "." }
|
{ $notes "C type names are documented in " { $link "c-types-specs" } "." }
|
||||||
{ $errors "Throws an " { $link alien-indirect-error } " if the word calling " { $link alien-indirect } " is not compiled." } ;
|
{ $errors "Throws an " { $link callsite-not-compiled } " if the word calling " { $link alien-indirect } " is not compiled." } ;
|
||||||
|
|
||||||
HELP: alien-callback-error
|
|
||||||
{ $error-description "Thrown if the word calling " { $link alien-callback } " was not compiled with the optimizing compiler. This may be a result of one of two failure conditions:"
|
|
||||||
{ $list
|
|
||||||
{ "This can happen when experimenting with " { $link alien-callback } " in this listener. To fix the problem, place the " { $link alien-callback } " call in a word; word definitions are automatically compiled with the optimizing compiler." }
|
|
||||||
{ "One of the four inputs to " { $link alien-callback } " is not a literal value." }
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
HELP: alien-callback
|
HELP: alien-callback
|
||||||
{ $values { "return" "a C return type" } { "parameters" "a sequence of C parameter types" } { "abi" "one of " { $link cdecl } " or " { $link stdcall } } { "quot" quotation } { "alien" alien } }
|
{ $values { "return" "a C return type" } { "parameters" "a sequence of C parameter types" } { "abi" "one of " { $link cdecl } " or " { $link stdcall } } { "quot" quotation } { "alien" alien } }
|
||||||
|
@ -148,15 +125,7 @@ HELP: alien-callback
|
||||||
" int { int int } cdecl [ - ] alien-callback ;"
|
" int { int int } cdecl [ - ] alien-callback ;"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{ $errors "Throws an " { $link alien-callback-error } " if the word calling " { $link alien-callback } " is not compiled." } ;
|
{ $errors "Throws an " { $link callsite-not-compiled } " if the word calling " { $link alien-callback } " is not compiled." } ;
|
||||||
|
|
||||||
HELP: alien-assembly-error
|
|
||||||
{ $error-description "Thrown if the word calling " { $link alien-assembly } " was not compiled with the optimizing compiler. This may be a result of one of two failure conditions:"
|
|
||||||
{ $list
|
|
||||||
{ "This can happen when experimenting with " { $link alien-assembly } " in this listener. To fix the problem, place the " { $link alien-assembly } " call in a word; word definitions are automatically compiled with the optimizing compiler." }
|
|
||||||
{ "One of the four inputs to " { $link alien-assembly } " is not a literal value." }
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
HELP: alien-assembly
|
HELP: alien-assembly
|
||||||
{ $values { "args..." "zero or more objects passed to the C function" } { "return" "a C return type" } { "parameters" "a sequence of C parameter types" } { "abi" "one of " { $link cdecl } " or " { $link stdcall } } { "quot" quotation } { "return..." "the return value of the function, if not " { $link void } } }
|
{ $values { "args..." "zero or more objects passed to the C function" } { "return" "a C return type" } { "parameters" "a sequence of C parameter types" } { "abi" "one of " { $link cdecl } " or " { $link stdcall } } { "quot" quotation } { "return..." "the return value of the function, if not " { $link void } } }
|
||||||
|
@ -173,7 +142,7 @@ HELP: alien-assembly
|
||||||
$nl
|
$nl
|
||||||
}
|
}
|
||||||
{ $notes "C type names are documented in " { $link "c-types-specs" } "." }
|
{ $notes "C type names are documented in " { $link "c-types-specs" } "." }
|
||||||
{ $errors "Throws an " { $link alien-assembly-error } " if the word calling " { $link alien-assembly } " is not compiled." } ;
|
{ $errors "Throws an " { $link callsite-not-compiled } " if the word calling " { $link alien-assembly } " is not compiled." } ;
|
||||||
|
|
||||||
{ alien-invoke alien-indirect alien-assembly alien-callback } related-words
|
{ alien-invoke alien-indirect alien-assembly alien-callback } related-words
|
||||||
|
|
||||||
|
|
|
@ -123,3 +123,6 @@ SYMBOL: foo
|
||||||
fill-and-free-callback-heap
|
fill-and-free-callback-heap
|
||||||
call-cb
|
call-cb
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
[ void { } cdecl [ ] alien-assembly ] [ callsite-not-compiled? ] must-fail-with
|
||||||
|
[ void f "flor" { } alien-invoke ] [ callsite-not-compiled? ] must-fail-with
|
||||||
|
|
|
@ -83,25 +83,19 @@ UNION: abi stdcall thiscall fastcall cdecl mingw ;
|
||||||
: callee-cleanup? ( abi -- ? )
|
: callee-cleanup? ( abi -- ? )
|
||||||
{ stdcall fastcall thiscall } member? ;
|
{ stdcall fastcall thiscall } member? ;
|
||||||
|
|
||||||
ERROR: alien-callback-error ;
|
ERROR: callsite-not-compiled word ;
|
||||||
|
|
||||||
: alien-callback ( return parameters abi quot -- alien )
|
|
||||||
alien-callback-error ;
|
|
||||||
|
|
||||||
ERROR: alien-indirect-error ;
|
|
||||||
|
|
||||||
: alien-indirect ( args... funcptr return parameters abi -- return... )
|
|
||||||
alien-indirect-error ;
|
|
||||||
|
|
||||||
ERROR: alien-invoke-error library symbol ;
|
|
||||||
|
|
||||||
: alien-invoke ( args... return library function parameters -- return... )
|
|
||||||
2over alien-invoke-error ;
|
|
||||||
|
|
||||||
ERROR: alien-assembly-error code ;
|
|
||||||
|
|
||||||
: alien-assembly ( args... return parameters abi quot -- return... )
|
: alien-assembly ( args... return parameters abi quot -- return... )
|
||||||
dup alien-assembly-error ;
|
\ alien-assembly callsite-not-compiled ;
|
||||||
|
|
||||||
|
: alien-callback ( return parameters abi quot -- alien )
|
||||||
|
\ alien-callback callsite-not-compiled ;
|
||||||
|
|
||||||
|
: alien-indirect ( args... funcptr return parameters abi -- return... )
|
||||||
|
\ alien-indirect callsite-not-compiled ;
|
||||||
|
|
||||||
|
: alien-invoke ( args... return library function parameters -- return... )
|
||||||
|
\ alien-invoke callsite-not-compiled ;
|
||||||
|
|
||||||
<PRIVATE
|
<PRIVATE
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue