descriptive: add make-descriptive word to enable this functionality to be used as an annotation; improve docs
parent
d3b5236367
commit
30191f87e5
|
@ -1,20 +1,28 @@
|
|||
USING: help.syntax help.markup ;
|
||||
USING: help.syntax help.markup words ;
|
||||
IN: descriptive
|
||||
|
||||
HELP: DESCRIPTIVE:
|
||||
{ $syntax "DESCRIPTIVE: word ( inputs -- outputs ) definition ;" }
|
||||
{ $description "Defines a word such that, if an error is thrown from within it, that error is wrapped in a descriptive tag including the arguments to that word." } ;
|
||||
{ $description "Defines a word such that, if an error is thrown from within it, that error is wrapped in a " { $link descriptive-error } " with the arguments to that word." } ;
|
||||
|
||||
HELP: DESCRIPTIVE::
|
||||
{ $syntax "DESCRIPTIVE:: word ( inputs -- outputs ) definition ;" }
|
||||
{ $description "Defines a word which uses locals such that, if an error is thrown from within it, that error is wrapped in a descriptive tag including the arguments to that word." } ;
|
||||
{ $description "Defines a word which uses locals such that, if an error is thrown from within it, that error is wrapped in a " { $link descriptive-error } " with the arguments to that word." } ;
|
||||
|
||||
HELP: descriptive
|
||||
{ $class-description "The class of errors wrapping another error (in the underlying slot) which were thrown in a word (in the word slot) with a given set of arguments (in the args slot)." } ;
|
||||
HELP: descriptive-error
|
||||
{ $error-description "The class of errors wrapping another error (in the underlying slot) which were thrown in a word (in the word slot) with a given set of arguments (in the args slot)." } ;
|
||||
|
||||
HELP: make-descriptive
|
||||
{ $values { "word" word } }
|
||||
{ $description "Makes the word wrap errors in " { $link descriptive-error } " instances." } ;
|
||||
|
||||
ARTICLE: "descriptive" "Descriptive errors"
|
||||
"This vocabulary defines automatic descriptive errors. Using it, you can define a word which acts as normal, except when it throws an error, the error is wrapped in a special descriptor declaring that an error was thrown from inside that word, and including the arguments given to that word. The error is of the following class:"
|
||||
{ $subsection descriptive }
|
||||
"This vocabulary defines automatic descriptive errors. Using it, you can define a word which acts as normal, except when it throws an error, the error is wrapped in an instance of a class:"
|
||||
{ $subsection descriptive-error }
|
||||
"The wrapper contains the word itself, the input parameters, as well as the original error."
|
||||
$nl
|
||||
"To annotate an existing word with descriptive error checking:"
|
||||
{ $subsection make-descriptive }
|
||||
"To define words which throw descriptive errors, use the following words:"
|
||||
{ $subsection POSTPONE: DESCRIPTIVE: }
|
||||
{ $subsection POSTPONE: DESCRIPTIVE:: } ;
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
USING: words kernel sequences locals locals.parser
|
||||
! Copyright (c) 2008 Daniel Ehrenberg.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: words kernel sequences locals locals.parser fry
|
||||
locals.definitions accessors parser namespaces continuations
|
||||
summary definitions generalizations arrays prettyprint debugger io ;
|
||||
summary definitions generalizations arrays prettyprint debugger io
|
||||
effects tools.annotations ;
|
||||
IN: descriptive
|
||||
|
||||
ERROR: descriptive-error args underlying word ;
|
||||
|
@ -23,6 +26,10 @@ M: descriptive-error error.
|
|||
|
||||
PRIVATE>
|
||||
|
||||
: make-descriptive ( word -- )
|
||||
dup [ ] [ def>> ] [ stack-effect ] tri [descriptive]
|
||||
'[ drop _ ] annotate-methods ;
|
||||
|
||||
: define-descriptive ( word def effect -- )
|
||||
[ drop "descriptive-definition" set-word-prop ]
|
||||
[ [ [ dup ] 2dip [descriptive] ] keep define-declared ]
|
||||
|
|
Loading…
Reference in New Issue