summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-02-06 06:22:51 -0800
committerKaz Kylheku <kaz@kylheku.com>2015-02-06 06:22:51 -0800
commit3286f2ca94da081bca5ddeffdfcc6ec92adf237c (patch)
treebfd61ea966ecf4d7094cd2e1a4178b6b996f64c9
parent30c008e52d3c911ff6315c22633fbfec34487003 (diff)
downloadtxr-3286f2ca94da081bca5ddeffdfcc6ec92adf237c.tar.gz
txr-3286f2ca94da081bca5ddeffdfcc6ec92adf237c.tar.bz2
txr-3286f2ca94da081bca5ddeffdfcc6ec92adf237c.zip
* unwind.c (unhandled_hook_s): New static variable.
(uw_throw): In the unhandled case, check if *unhandled-hook* variable has a function, and use it instead of the default logic. If it's not a function, abort with an error message. Clear it so that if the hook function re-enters this code, it will not be used. Always exit now on unhandled exceptions; do not abort. (uw_late_init): New function. * unwind.h (uw_late_init): Declared. * lib.c (init): Call uw_late_init. * txr.1: Documented *unhandled-hook*. * genvim.txr: Scan the unwind.c file, since it has a reg_var now. * tl.vim, txr.vim: Updated.
-rw-r--r--ChangeLog20
-rw-r--r--genvim.txr3
-rw-r--r--lib.c1
-rw-r--r--tl.vim330
-rw-r--r--txr.141
-rw-r--r--txr.vim330
-rw-r--r--unwind.c31
-rw-r--r--unwind.h1
8 files changed, 424 insertions, 333 deletions
diff --git a/ChangeLog b/ChangeLog
index 5d1384ae..805dfc30 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2015-02-06 Kaz Kylheku <kaz@kylheku.com>
+
+ * unwind.c (unhandled_hook_s): New static variable.
+ (uw_throw): In the unhandled case, check if *unhandled-hook* variable
+ has a function, and use it instead of the default logic. If it's not a
+ function, abort with an error message. Clear it so that if the hook
+ function re-enters this code, it will not be used. Always exit now on
+ unhandled exceptions; do not abort.
+ (uw_late_init): New function.
+
+ * unwind.h (uw_late_init): Declared.
+
+ * lib.c (init): Call uw_late_init.
+
+ * txr.1: Documented *unhandled-hook*.
+
+ * genvim.txr: Scan the unwind.c file, since it has a reg_var now.
+
+ * tl.vim, txr.vim: Updated.
+
2015-02-05 Kaz Kylheku <kaz@kylheku.com>
* win/env.nsh: Before the potentially length SendMessage,
diff --git a/genvim.txr b/genvim.txr
index 7bd1e3d7..df4006c6 100644
--- a/genvim.txr
+++ b/genvim.txr
@@ -8,7 +8,8 @@ static void dir_tables_init(void)
}
@(end)
@(next @(open-files '("eval.c" "rand.c" "signal.c" "stream.c" "gc.c" "glob.c"
- "syslog.c" "filter.c" "txr.c" "arith.c" "sysif.c")))
+ "syslog.c" "filter.c" "txr.c" "arith.c" "unwind.c"
+ "sysif.c")))
@(collect)
@ (block)
@ (cases)
diff --git a/lib.c b/lib.c
index a08f1c2f..913d2b47 100644
--- a/lib.c
+++ b/lib.c
@@ -7209,6 +7209,7 @@ void init(const wchar_t *pn, mem_t *(*oom)(mem_t *, size_t),
hash_init();
regex_init();
gc_late_init();
+ uw_late_init();
less_tab_init();
gc_state(gc_save);
diff --git a/tl.vim b/tl.vim
index 1fbe7508..67316ecf 100644
--- a/tl.vim
+++ b/tl.vim
@@ -25,171 +25,171 @@ syn keyword txl_keyword contained *flo-epsilon* *flo-max* *flo-min* *full-args*
syn keyword txl_keyword contained *gensym-counter* *keyword-package* *pi* *random-state*
syn keyword txl_keyword contained *self-path* *stddebug* *stderr* *stdin*
syn keyword txl_keyword contained *stdlog* *stdnull* *stdout* *txr-version*
-syn keyword txl_keyword contained *user-package* + - /
-syn keyword txl_keyword contained /= < <= =
-syn keyword txl_keyword contained > >= abs abs-path-p
-syn keyword txl_keyword contained acons acons-new aconsql-new acos
-syn keyword txl_keyword contained ado alist-nremove alist-remove all
-syn keyword txl_keyword contained and andf ap apf
-syn keyword txl_keyword contained append append* append-each append-each*
-syn keyword txl_keyword contained apply aret ash asin
-syn keyword txl_keyword contained assoc assql atan atan2
-syn keyword txl_keyword contained atom bignump bit block
-syn keyword txl_keyword contained boundp break-str call callf
-syn keyword txl_keyword contained car caseq caseql casequal
-syn keyword txl_keyword contained cat-str cat-streams cat-vec catch
-syn keyword txl_keyword contained cdr ceil chain chand
-syn keyword txl_keyword contained chdir chr-isalnum chr-isalpha chr-isascii
-syn keyword txl_keyword contained chr-isblank chr-iscntrl chr-isdigit chr-isgraph
-syn keyword txl_keyword contained chr-islower chr-isprint chr-ispunct chr-isspace
-syn keyword txl_keyword contained chr-isunisp chr-isupper chr-isxdigit chr-num
-syn keyword txl_keyword contained chr-str chr-str-set chr-tolower chr-toupper
-syn keyword txl_keyword contained chrp close-stream closelog cmp-str
-syn keyword txl_keyword contained collect-each collect-each* comb compl-span-str
-syn keyword txl_keyword contained cond cons conses conses*
-syn keyword txl_keyword contained consp constantp copy copy-alist
-syn keyword txl_keyword contained copy-cons copy-hash copy-list copy-str
-syn keyword txl_keyword contained copy-vec cos count-if countq
-syn keyword txl_keyword contained countql countqual cum-norm-dist daemon
-syn keyword txl_keyword contained dec defmacro defsymacro defun
-syn keyword txl_keyword contained defvar del delay delete-package
-syn keyword txl_keyword contained do dohash downcase-str dup
-syn keyword txl_keyword contained dwim each each* empty
-syn keyword txl_keyword contained env env-fbind env-hash env-vbind
-syn keyword txl_keyword contained eq eql equal errno
-syn keyword txl_keyword contained error eval evenp exit
-syn keyword txl_keyword contained exp expt exptmod false
-syn keyword txl_keyword contained fbind fboundp fifth filter-equal
-syn keyword txl_keyword contained filter-string-tree finalize find find-if
-syn keyword txl_keyword contained find-max find-min find-package first
-syn keyword txl_keyword contained fixnump flatten flatten* flet
-syn keyword txl_keyword contained flip flo-int flo-str floatp
-syn keyword txl_keyword contained floor flush-stream for for*
-syn keyword txl_keyword contained force format fourth fun
-syn keyword txl_keyword contained func-get-env func-get-form func-set-env functionp
-syn keyword txl_keyword contained gcd gen generate gensym
-syn keyword txl_keyword contained gequal get-byte get-char get-hash-userdata
-syn keyword txl_keyword contained get-line get-lines get-list-from-stream get-sig-handler
-syn keyword txl_keyword contained get-string get-string-from-stream gethash getitimer
-syn keyword txl_keyword contained getpid getppid giterate glob
-syn keyword txl_keyword contained glob-altdirfunc glob-brace glob-err glob-mark
-syn keyword txl_keyword contained glob-nocheck glob-noescape glob-nomagic glob-nosort
-syn keyword txl_keyword contained glob-onlydir glob-period glob-tilde glob-tilde-check
-syn keyword txl_keyword contained greater group-by gun hash
-syn keyword txl_keyword contained hash-alist hash-construct hash-count hash-diff
-syn keyword txl_keyword contained hash-eql hash-equal hash-isec hash-keys
-syn keyword txl_keyword contained hash-pairs hash-uni hash-update hash-update-1
-syn keyword txl_keyword contained hash-values hashp html-decode html-encode
-syn keyword txl_keyword contained iapply identity ido if
-syn keyword txl_keyword contained iff iffi in inc
-syn keyword txl_keyword contained inhash int-flo int-str integerp
-syn keyword txl_keyword contained intern interp-fun-p interpose ip
-syn keyword txl_keyword contained ipf isqrt itimer-prov itimer-real
-syn keyword txl_keyword contained itimer-virtual juxt keep-if keep-if*
-syn keyword txl_keyword contained keywordp kill labels lambda
-syn keyword txl_keyword contained last lazy-str lazy-str-force lazy-str-force-upto
-syn keyword txl_keyword contained lazy-str-get-trailing-list lazy-stream-cons lazy-stringp lbind
-syn keyword txl_keyword contained lcm lcons-fun lconsp ldiff
-syn keyword txl_keyword contained length length-list length-str length-str-<
-syn keyword txl_keyword contained length-str-<= length-str-> length-str->= length-vec
-syn keyword txl_keyword contained lequal less let let*
-syn keyword txl_keyword contained lexical-fun-p lexical-var-p link lisp-parse
-syn keyword txl_keyword contained list list* list-str list-vector
-syn keyword txl_keyword contained listp log log-alert log-auth
-syn keyword txl_keyword contained log-authpriv log-cons log-crit log-daemon
-syn keyword txl_keyword contained log-debug log-emerg log-err log-info
-syn keyword txl_keyword contained log-ndelay log-notice log-nowait log-odelay
-syn keyword txl_keyword contained log-perror log-pid log-user log-warning
-syn keyword txl_keyword contained log10 log2 logand logior
-syn keyword txl_keyword contained lognot logtest logtrunc logxor
-syn keyword txl_keyword contained macro-form-p macro-time macroexpand macroexpand-1
-syn keyword txl_keyword contained macrolet major make-catenated-stream make-env
-syn keyword txl_keyword contained make-hash make-lazy-cons make-like make-package
-syn keyword txl_keyword contained make-random-state make-similar-hash make-string-byte-input-stream make-string-input-stream
-syn keyword txl_keyword contained make-string-output-stream make-strlist-output-stream make-sym make-time
-syn keyword txl_keyword contained make-time-utc make-trie makedev mapcar
-syn keyword txl_keyword contained mapcar* mapdo mapf maphash
-syn keyword txl_keyword contained mappend mappend* mask match-fun
-syn keyword txl_keyword contained match-regex match-regex-right match-str match-str-tree
-syn keyword txl_keyword contained max member member-if memq
-syn keyword txl_keyword contained memql memqual merge min
-syn keyword txl_keyword contained minor minusp mkdir mknod
-syn keyword txl_keyword contained mkstring mod multi multi-sort
-syn keyword txl_keyword contained n-choose-k n-perm-k nconc nilf
-syn keyword txl_keyword contained none not notf nreverse
-syn keyword txl_keyword contained null nullify num-chr num-str
-syn keyword txl_keyword contained numberp oand oddp op
-syn keyword txl_keyword contained open-command open-directory open-file open-files
-syn keyword txl_keyword contained open-files* open-pipe open-process open-tail
-syn keyword txl_keyword contained openlog opip or orf
-syn keyword txl_keyword contained packagep partition partition* partition-by
-syn keyword txl_keyword contained perm plusp pop pos
-syn keyword txl_keyword contained pos-if pos-max pos-min posq
-syn keyword txl_keyword contained posql posqual pppred ppred
-syn keyword txl_keyword contained pprinl pprint pprof pred
-syn keyword txl_keyword contained prinl print prof prog1
-syn keyword txl_keyword contained progn prop proper-listp push
-syn keyword txl_keyword contained pushhash put-byte put-char put-line
-syn keyword txl_keyword contained put-lines put-string put-strings pwd
-syn keyword txl_keyword contained qquote quasi quasilist quote
-syn keyword txl_keyword contained rand random random-fixnum random-state-p
-syn keyword txl_keyword contained range range* range-regex rcomb
-syn keyword txl_keyword contained read readlink real-time-stream-p reduce-left
-syn keyword txl_keyword contained reduce-right ref refset regex-compile
-syn keyword txl_keyword contained regex-parse regexp regsub rehome-sym
-syn keyword txl_keyword contained remhash remove-if remove-if* remove-path
-syn keyword txl_keyword contained remq remq* remql remql*
-syn keyword txl_keyword contained remqual remqual* rename-path repeat
-syn keyword txl_keyword contained replace replace-list replace-str replace-vec
-syn keyword txl_keyword contained rest ret retf return
-syn keyword txl_keyword contained return-from reverse rlcp rperm
-syn keyword txl_keyword contained rplaca rplacd run s-ifblk
-syn keyword txl_keyword contained s-ifchr s-ifdir s-ififo s-iflnk
-syn keyword txl_keyword contained s-ifmt s-ifreg s-ifsock s-irgrp
-syn keyword txl_keyword contained s-iroth s-irusr s-irwxg s-irwxo
-syn keyword txl_keyword contained s-irwxu s-isgid s-isuid s-isvtx
-syn keyword txl_keyword contained s-iwgrp s-iwoth s-iwusr s-ixgrp
-syn keyword txl_keyword contained s-ixoth s-ixusr search search-regex
-syn keyword txl_keyword contained search-str search-str-tree second seek-stream
-syn keyword txl_keyword contained select seqp set set-diff
-syn keyword txl_keyword contained set-hash-userdata set-sig-handler sethash setitimer
-syn keyword txl_keyword contained setlogmask sh sig-abrt sig-alrm
-syn keyword txl_keyword contained sig-bus sig-check sig-chld sig-cont
-syn keyword txl_keyword contained sig-fpe sig-hup sig-ill sig-int
-syn keyword txl_keyword contained sig-io sig-iot sig-kill sig-lost
-syn keyword txl_keyword contained sig-pipe sig-poll sig-prof sig-pwr
-syn keyword txl_keyword contained sig-quit sig-segv sig-stkflt sig-stop
-syn keyword txl_keyword contained sig-sys sig-term sig-trap sig-tstp
-syn keyword txl_keyword contained sig-ttin sig-ttou sig-urg sig-usr1
-syn keyword txl_keyword contained sig-usr2 sig-vtalrm sig-winch sig-xcpu
-syn keyword txl_keyword contained sig-xfsz sign-extend sin sixth
-syn keyword txl_keyword contained size-vec some sort sort-group
-syn keyword txl_keyword contained source-loc source-loc-str span-str splice
-syn keyword txl_keyword contained split-str split-str-set sqrt sssucc
-syn keyword txl_keyword contained ssucc stat stdlib str<
-syn keyword txl_keyword contained str<= str= str> str>=
-syn keyword txl_keyword contained stream-get-prop stream-set-prop streamp string-extend
-syn keyword txl_keyword contained string-lt stringp sub sub-list
-syn keyword txl_keyword contained sub-str sub-vec succ symacrolet
-syn keyword txl_keyword contained symbol-function symbol-name symbol-package symbol-value
-syn keyword txl_keyword contained symbolp symlink sys-qquote sys-splice
-syn keyword txl_keyword contained sys-unquote syslog tan tb
-syn keyword txl_keyword contained tc tf third throw
-syn keyword txl_keyword contained throwf time time-fields-local time-fields-utc
-syn keyword txl_keyword contained time-string-local time-string-utc time-usec tofloat
-syn keyword txl_keyword contained toint tok-str tok-where tostring
-syn keyword txl_keyword contained tostringp transpose tree-bind tree-case
-syn keyword txl_keyword contained tree-find trie-add trie-compress trie-lookup-begin
-syn keyword txl_keyword contained trie-lookup-feed-char trie-value-at trim-str true
-syn keyword txl_keyword contained trunc tuples txr-case txr-if
-syn keyword txl_keyword contained txr-when typeof unget-byte unget-char
-syn keyword txl_keyword contained uniq unique unless unquote
-syn keyword txl_keyword contained until upcase-str update url-decode
-syn keyword txl_keyword contained url-encode usleep uw-protect vec
-syn keyword txl_keyword contained vec-push vec-set-length vecref vector
-syn keyword txl_keyword contained vector-list vectorp when where
-syn keyword txl_keyword contained while width with-saved-vars wrap
-syn keyword txl_keyword contained wrap* zerop zip
+syn keyword txl_keyword contained *unhandled-hook* *user-package* + -
+syn keyword txl_keyword contained / /= < <=
+syn keyword txl_keyword contained = > >= abs
+syn keyword txl_keyword contained abs-path-p acons acons-new aconsql-new
+syn keyword txl_keyword contained acos ado alist-nremove alist-remove
+syn keyword txl_keyword contained all and andf ap
+syn keyword txl_keyword contained apf append append* append-each
+syn keyword txl_keyword contained append-each* apply aret ash
+syn keyword txl_keyword contained asin assoc assql atan
+syn keyword txl_keyword contained atan2 atom bignump bit
+syn keyword txl_keyword contained block boundp break-str call
+syn keyword txl_keyword contained callf car caseq caseql
+syn keyword txl_keyword contained casequal cat-str cat-streams cat-vec
+syn keyword txl_keyword contained catch cdr ceil chain
+syn keyword txl_keyword contained chand chdir chr-isalnum chr-isalpha
+syn keyword txl_keyword contained chr-isascii chr-isblank chr-iscntrl chr-isdigit
+syn keyword txl_keyword contained chr-isgraph chr-islower chr-isprint chr-ispunct
+syn keyword txl_keyword contained chr-isspace chr-isunisp chr-isupper chr-isxdigit
+syn keyword txl_keyword contained chr-num chr-str chr-str-set chr-tolower
+syn keyword txl_keyword contained chr-toupper chrp close-stream closelog
+syn keyword txl_keyword contained cmp-str collect-each collect-each* comb
+syn keyword txl_keyword contained compl-span-str cond cons conses
+syn keyword txl_keyword contained conses* consp constantp copy
+syn keyword txl_keyword contained copy-alist copy-cons copy-hash copy-list
+syn keyword txl_keyword contained copy-str copy-vec cos count-if
+syn keyword txl_keyword contained countq countql countqual cum-norm-dist
+syn keyword txl_keyword contained daemon dec defmacro defsymacro
+syn keyword txl_keyword contained defun defvar del delay
+syn keyword txl_keyword contained delete-package do dohash downcase-str
+syn keyword txl_keyword contained dup dwim each each*
+syn keyword txl_keyword contained empty env env-fbind env-hash
+syn keyword txl_keyword contained env-vbind eq eql equal
+syn keyword txl_keyword contained errno error eval evenp
+syn keyword txl_keyword contained exit exp expt exptmod
+syn keyword txl_keyword contained false fbind fboundp fifth
+syn keyword txl_keyword contained filter-equal filter-string-tree finalize find
+syn keyword txl_keyword contained find-if find-max find-min find-package
+syn keyword txl_keyword contained first fixnump flatten flatten*
+syn keyword txl_keyword contained flet flip flo-int flo-str
+syn keyword txl_keyword contained floatp floor flush-stream for
+syn keyword txl_keyword contained for* force format fourth
+syn keyword txl_keyword contained fun func-get-env func-get-form func-set-env
+syn keyword txl_keyword contained functionp gcd gen generate
+syn keyword txl_keyword contained gensym gequal get-byte get-char
+syn keyword txl_keyword contained get-hash-userdata get-line get-lines get-list-from-stream
+syn keyword txl_keyword contained get-sig-handler get-string get-string-from-stream gethash
+syn keyword txl_keyword contained getitimer getpid getppid giterate
+syn keyword txl_keyword contained glob glob-altdirfunc glob-brace glob-err
+syn keyword txl_keyword contained glob-mark glob-nocheck glob-noescape glob-nomagic
+syn keyword txl_keyword contained glob-nosort glob-onlydir glob-period glob-tilde
+syn keyword txl_keyword contained glob-tilde-check greater group-by gun
+syn keyword txl_keyword contained hash hash-alist hash-construct hash-count
+syn keyword txl_keyword contained hash-diff hash-eql hash-equal hash-isec
+syn keyword txl_keyword contained hash-keys hash-pairs hash-uni hash-update
+syn keyword txl_keyword contained hash-update-1 hash-values hashp html-decode
+syn keyword txl_keyword contained html-encode iapply identity ido
+syn keyword txl_keyword contained if iff iffi in
+syn keyword txl_keyword contained inc inhash int-flo int-str
+syn keyword txl_keyword contained integerp intern interp-fun-p interpose
+syn keyword txl_keyword contained ip ipf isqrt itimer-prov
+syn keyword txl_keyword contained itimer-real itimer-virtual juxt keep-if
+syn keyword txl_keyword contained keep-if* keywordp kill labels
+syn keyword txl_keyword contained lambda last lazy-str lazy-str-force
+syn keyword txl_keyword contained lazy-str-force-upto lazy-str-get-trailing-list lazy-stream-cons lazy-stringp
+syn keyword txl_keyword contained lbind lcm lcons-fun lconsp
+syn keyword txl_keyword contained ldiff length length-list length-str
+syn keyword txl_keyword contained length-str-< length-str-<= length-str-> length-str->=
+syn keyword txl_keyword contained length-vec lequal less let
+syn keyword txl_keyword contained let* lexical-fun-p lexical-var-p link
+syn keyword txl_keyword contained lisp-parse list list* list-str
+syn keyword txl_keyword contained list-vector listp log log-alert
+syn keyword txl_keyword contained log-auth log-authpriv log-cons log-crit
+syn keyword txl_keyword contained log-daemon log-debug log-emerg log-err
+syn keyword txl_keyword contained log-info log-ndelay log-notice log-nowait
+syn keyword txl_keyword contained log-odelay log-perror log-pid log-user
+syn keyword txl_keyword contained log-warning log10 log2 logand
+syn keyword txl_keyword contained logior lognot logtest logtrunc
+syn keyword txl_keyword contained logxor macro-form-p macro-time macroexpand
+syn keyword txl_keyword contained macroexpand-1 macrolet major make-catenated-stream
+syn keyword txl_keyword contained make-env make-hash make-lazy-cons make-like
+syn keyword txl_keyword contained make-package make-random-state make-similar-hash make-string-byte-input-stream
+syn keyword txl_keyword contained make-string-input-stream make-string-output-stream make-strlist-output-stream make-sym
+syn keyword txl_keyword contained make-time make-time-utc make-trie makedev
+syn keyword txl_keyword contained mapcar mapcar* mapdo mapf
+syn keyword txl_keyword contained maphash mappend mappend* mask
+syn keyword txl_keyword contained match-fun match-regex match-regex-right match-str
+syn keyword txl_keyword contained match-str-tree max member member-if
+syn keyword txl_keyword contained memq memql memqual merge
+syn keyword txl_keyword contained min minor minusp mkdir
+syn keyword txl_keyword contained mknod mkstring mod multi
+syn keyword txl_keyword contained multi-sort n-choose-k n-perm-k nconc
+syn keyword txl_keyword contained nilf none not notf
+syn keyword txl_keyword contained nreverse null nullify num-chr
+syn keyword txl_keyword contained num-str numberp oand oddp
+syn keyword txl_keyword contained op open-command open-directory open-file
+syn keyword txl_keyword contained open-files open-files* open-pipe open-process
+syn keyword txl_keyword contained open-tail openlog opip or
+syn keyword txl_keyword contained orf packagep partition partition*
+syn keyword txl_keyword contained partition-by perm plusp pop
+syn keyword txl_keyword contained pos pos-if pos-max pos-min
+syn keyword txl_keyword contained posq posql posqual pppred
+syn keyword txl_keyword contained ppred pprinl pprint pprof
+syn keyword txl_keyword contained pred prinl print prof
+syn keyword txl_keyword contained prog1 progn prop proper-listp
+syn keyword txl_keyword contained push pushhash put-byte put-char
+syn keyword txl_keyword contained put-line put-lines put-string put-strings
+syn keyword txl_keyword contained pwd qquote quasi quasilist
+syn keyword txl_keyword contained quote rand random random-fixnum
+syn keyword txl_keyword contained random-state-p range range* range-regex
+syn keyword txl_keyword contained rcomb read readlink real-time-stream-p
+syn keyword txl_keyword contained reduce-left reduce-right ref refset
+syn keyword txl_keyword contained regex-compile regex-parse regexp regsub
+syn keyword txl_keyword contained rehome-sym remhash remove-if remove-if*
+syn keyword txl_keyword contained remove-path remq remq* remql
+syn keyword txl_keyword contained remql* remqual remqual* rename-path
+syn keyword txl_keyword contained repeat replace replace-list replace-str
+syn keyword txl_keyword contained replace-vec rest ret retf
+syn keyword txl_keyword contained return return-from reverse rlcp
+syn keyword txl_keyword contained rperm rplaca rplacd run
+syn keyword txl_keyword contained s-ifblk s-ifchr s-ifdir s-ififo
+syn keyword txl_keyword contained s-iflnk s-ifmt s-ifreg s-ifsock
+syn keyword txl_keyword contained s-irgrp s-iroth s-irusr s-irwxg
+syn keyword txl_keyword contained s-irwxo s-irwxu s-isgid s-isuid
+syn keyword txl_keyword contained s-isvtx s-iwgrp s-iwoth s-iwusr
+syn keyword txl_keyword contained s-ixgrp s-ixoth s-ixusr search
+syn keyword txl_keyword contained search-regex search-str search-str-tree second
+syn keyword txl_keyword contained seek-stream select seqp set
+syn keyword txl_keyword contained set-diff set-hash-userdata set-sig-handler sethash
+syn keyword txl_keyword contained setitimer setlogmask sh sig-abrt
+syn keyword txl_keyword contained sig-alrm sig-bus sig-check sig-chld
+syn keyword txl_keyword contained sig-cont sig-fpe sig-hup sig-ill
+syn keyword txl_keyword contained sig-int sig-io sig-iot sig-kill
+syn keyword txl_keyword contained sig-lost sig-pipe sig-poll sig-prof
+syn keyword txl_keyword contained sig-pwr sig-quit sig-segv sig-stkflt
+syn keyword txl_keyword contained sig-stop sig-sys sig-term sig-trap
+syn keyword txl_keyword contained sig-tstp sig-ttin sig-ttou sig-urg
+syn keyword txl_keyword contained sig-usr1 sig-usr2 sig-vtalrm sig-winch
+syn keyword txl_keyword contained sig-xcpu sig-xfsz sign-extend sin
+syn keyword txl_keyword contained sixth size-vec some sort
+syn keyword txl_keyword contained sort-group source-loc source-loc-str span-str
+syn keyword txl_keyword contained splice split-str split-str-set sqrt
+syn keyword txl_keyword contained sssucc ssucc stat stdlib
+syn keyword txl_keyword contained str< str<= str= str>
+syn keyword txl_keyword contained str>= stream-get-prop stream-set-prop streamp
+syn keyword txl_keyword contained string-extend string-lt stringp sub
+syn keyword txl_keyword contained sub-list sub-str sub-vec succ
+syn keyword txl_keyword contained symacrolet symbol-function symbol-name symbol-package
+syn keyword txl_keyword contained symbol-value symbolp symlink sys-qquote
+syn keyword txl_keyword contained sys-splice sys-unquote syslog tan
+syn keyword txl_keyword contained tb tc tf third
+syn keyword txl_keyword contained throw throwf time time-fields-local
+syn keyword txl_keyword contained time-fields-utc time-string-local time-string-utc time-usec
+syn keyword txl_keyword contained tofloat toint tok-str tok-where
+syn keyword txl_keyword contained tostring tostringp transpose tree-bind
+syn keyword txl_keyword contained tree-case tree-find trie-add trie-compress
+syn keyword txl_keyword contained trie-lookup-begin trie-lookup-feed-char trie-value-at trim-str
+syn keyword txl_keyword contained true trunc tuples txr-case
+syn keyword txl_keyword contained txr-if txr-when typeof unget-byte
+syn keyword txl_keyword contained unget-char uniq unique unless
+syn keyword txl_keyword contained unquote until upcase-str update
+syn keyword txl_keyword contained url-decode url-encode usleep uw-protect
+syn keyword txl_keyword contained vec vec-push vec-set-length vecref
+syn keyword txl_keyword contained vector vector-list vectorp when
+syn keyword txl_keyword contained where while width with-saved-vars
+syn keyword txl_keyword contained wrap wrap* zerop zip
syn match txr_metanum "@[0-9]\+"
syn match txr_nested_error "[^\t `]\+" contained
diff --git a/txr.1 b/txr.1
index 10046d54..ae95b9d7 100644
--- a/txr.1
+++ b/txr.1
@@ -19574,6 +19574,47 @@ operator, and the functions
and
.codn error .
+.coNP Variable @ *unhandled-hook*
+
+The
+.code *unhandled-hook*
+variable is initialized with
+.code nil
+by default.
+
+It may instead be assigned a function which is capable of taking
+three arguments.
+
+When an exception occurs which has no handler, this function is called,
+with the following arguments: the exception type symbol, the exception object,
+and a third value which is either
+.code nil
+or else the form which was being evaluated the exception was thrown.
+
+Otherwise, if the variable is
+.code nil
+some informational messages are printed about the exception, and the process
+exits with a failed termination status.
+In the same situation, if the variable contains an object which is not a
+function, the process aborts.
+
+Prior to the function being called, the
+.code *unhandled-hook*
+variable is reset to
+.codn nil .
+
+If the function registered in
+.code *unhandled-hook*
+returns, the process exits with a failed termination status.
+
+Note: the functions
+.code source-loc
+or
+.code source-loc-str
+may be applied to the third argument of the
+.code *unhandled-hook*
+function to obtain more information about the form.
+
.SS* Regular Expression Library
.coNP Functions @ search-regex and @ range-regex
.synb
diff --git a/txr.vim b/txr.vim
index d5f2d4fb..9705ff3b 100644
--- a/txr.vim
+++ b/txr.vim
@@ -25,171 +25,171 @@ syn keyword txl_keyword contained *flo-epsilon* *flo-max* *flo-min* *full-args*
syn keyword txl_keyword contained *gensym-counter* *keyword-package* *pi* *random-state*
syn keyword txl_keyword contained *self-path* *stddebug* *stderr* *stdin*
syn keyword txl_keyword contained *stdlog* *stdnull* *stdout* *txr-version*
-syn keyword txl_keyword contained *user-package* + - /
-syn keyword txl_keyword contained /= < <= =
-syn keyword txl_keyword contained > >= abs abs-path-p
-syn keyword txl_keyword contained acons acons-new aconsql-new acos
-syn keyword txl_keyword contained ado alist-nremove alist-remove all
-syn keyword txl_keyword contained and andf ap apf
-syn keyword txl_keyword contained append append* append-each append-each*
-syn keyword txl_keyword contained apply aret ash asin
-syn keyword txl_keyword contained assoc assql atan atan2
-syn keyword txl_keyword contained atom bignump bit block
-syn keyword txl_keyword contained boundp break-str call callf
-syn keyword txl_keyword contained car caseq caseql casequal
-syn keyword txl_keyword contained cat-str cat-streams cat-vec catch
-syn keyword txl_keyword contained cdr ceil chain chand
-syn keyword txl_keyword contained chdir chr-isalnum chr-isalpha chr-isascii
-syn keyword txl_keyword contained chr-isblank chr-iscntrl chr-isdigit chr-isgraph
-syn keyword txl_keyword contained chr-islower chr-isprint chr-ispunct chr-isspace
-syn keyword txl_keyword contained chr-isunisp chr-isupper chr-isxdigit chr-num
-syn keyword txl_keyword contained chr-str chr-str-set chr-tolower chr-toupper
-syn keyword txl_keyword contained chrp close-stream closelog cmp-str
-syn keyword txl_keyword contained collect-each collect-each* comb compl-span-str
-syn keyword txl_keyword contained cond cons conses conses*
-syn keyword txl_keyword contained consp constantp copy copy-alist
-syn keyword txl_keyword contained copy-cons copy-hash copy-list copy-str
-syn keyword txl_keyword contained copy-vec cos count-if countq
-syn keyword txl_keyword contained countql countqual cum-norm-dist daemon
-syn keyword txl_keyword contained dec defmacro defsymacro defun
-syn keyword txl_keyword contained defvar del delay delete-package
-syn keyword txl_keyword contained do dohash downcase-str dup
-syn keyword txl_keyword contained dwim each each* empty
-syn keyword txl_keyword contained env env-fbind env-hash env-vbind
-syn keyword txl_keyword contained eq eql equal errno
-syn keyword txl_keyword contained error eval evenp exit
-syn keyword txl_keyword contained exp expt exptmod false
-syn keyword txl_keyword contained fbind fboundp fifth filter-equal
-syn keyword txl_keyword contained filter-string-tree finalize find find-if
-syn keyword txl_keyword contained find-max find-min find-package first
-syn keyword txl_keyword contained fixnump flatten flatten* flet
-syn keyword txl_keyword contained flip flo-int flo-str floatp
-syn keyword txl_keyword contained floor flush-stream for for*
-syn keyword txl_keyword contained force format fourth fun
-syn keyword txl_keyword contained func-get-env func-get-form func-set-env functionp
-syn keyword txl_keyword contained gcd gen generate gensym
-syn keyword txl_keyword contained gequal get-byte get-char get-hash-userdata
-syn keyword txl_keyword contained get-line get-lines get-list-from-stream get-sig-handler
-syn keyword txl_keyword contained get-string get-string-from-stream gethash getitimer
-syn keyword txl_keyword contained getpid getppid giterate glob
-syn keyword txl_keyword contained glob-altdirfunc glob-brace glob-err glob-mark
-syn keyword txl_keyword contained glob-nocheck glob-noescape glob-nomagic glob-nosort
-syn keyword txl_keyword contained glob-onlydir glob-period glob-tilde glob-tilde-check
-syn keyword txl_keyword contained greater group-by gun hash
-syn keyword txl_keyword contained hash-alist hash-construct hash-count hash-diff
-syn keyword txl_keyword contained hash-eql hash-equal hash-isec hash-keys
-syn keyword txl_keyword contained hash-pairs hash-uni hash-update hash-update-1
-syn keyword txl_keyword contained hash-values hashp html-decode html-encode
-syn keyword txl_keyword contained iapply identity ido if
-syn keyword txl_keyword contained iff iffi in inc
-syn keyword txl_keyword contained inhash int-flo int-str integerp
-syn keyword txl_keyword contained intern interp-fun-p interpose ip
-syn keyword txl_keyword contained ipf isqrt itimer-prov itimer-real
-syn keyword txl_keyword contained itimer-virtual juxt keep-if keep-if*
-syn keyword txl_keyword contained keywordp kill labels lambda
-syn keyword txl_keyword contained last lazy-str lazy-str-force lazy-str-force-upto
-syn keyword txl_keyword contained lazy-str-get-trailing-list lazy-stream-cons lazy-stringp lbind
-syn keyword txl_keyword contained lcm lcons-fun lconsp ldiff
-syn keyword txl_keyword contained length length-list length-str length-str-<
-syn keyword txl_keyword contained length-str-<= length-str-> length-str->= length-vec
-syn keyword txl_keyword contained lequal less let let*
-syn keyword txl_keyword contained lexical-fun-p lexical-var-p link lisp-parse
-syn keyword txl_keyword contained list list* list-str list-vector
-syn keyword txl_keyword contained listp log log-alert log-auth
-syn keyword txl_keyword contained log-authpriv log-cons log-crit log-daemon
-syn keyword txl_keyword contained log-debug log-emerg log-err log-info
-syn keyword txl_keyword contained log-ndelay log-notice log-nowait log-odelay
-syn keyword txl_keyword contained log-perror log-pid log-user log-warning
-syn keyword txl_keyword contained log10 log2 logand logior
-syn keyword txl_keyword contained lognot logtest logtrunc logxor
-syn keyword txl_keyword contained macro-form-p macro-time macroexpand macroexpand-1
-syn keyword txl_keyword contained macrolet major make-catenated-stream make-env
-syn keyword txl_keyword contained make-hash make-lazy-cons make-like make-package
-syn keyword txl_keyword contained make-random-state make-similar-hash make-string-byte-input-stream make-string-input-stream
-syn keyword txl_keyword contained make-string-output-stream make-strlist-output-stream make-sym make-time
-syn keyword txl_keyword contained make-time-utc make-trie makedev mapcar
-syn keyword txl_keyword contained mapcar* mapdo mapf maphash
-syn keyword txl_keyword contained mappend mappend* mask match-fun
-syn keyword txl_keyword contained match-regex match-regex-right match-str match-str-tree
-syn keyword txl_keyword contained max member member-if memq
-syn keyword txl_keyword contained memql memqual merge min
-syn keyword txl_keyword contained minor minusp mkdir mknod
-syn keyword txl_keyword contained mkstring mod multi multi-sort
-syn keyword txl_keyword contained n-choose-k n-perm-k nconc nilf
-syn keyword txl_keyword contained none not notf nreverse
-syn keyword txl_keyword contained null nullify num-chr num-str
-syn keyword txl_keyword contained numberp oand oddp op
-syn keyword txl_keyword contained open-command open-directory open-file open-files
-syn keyword txl_keyword contained open-files* open-pipe open-process open-tail
-syn keyword txl_keyword contained openlog opip or orf
-syn keyword txl_keyword contained packagep partition partition* partition-by
-syn keyword txl_keyword contained perm plusp pop pos
-syn keyword txl_keyword contained pos-if pos-max pos-min posq
-syn keyword txl_keyword contained posql posqual pppred ppred
-syn keyword txl_keyword contained pprinl pprint pprof pred
-syn keyword txl_keyword contained prinl print prof prog1
-syn keyword txl_keyword contained progn prop proper-listp push
-syn keyword txl_keyword contained pushhash put-byte put-char put-line
-syn keyword txl_keyword contained put-lines put-string put-strings pwd
-syn keyword txl_keyword contained qquote quasi quasilist quote
-syn keyword txl_keyword contained rand random random-fixnum random-state-p
-syn keyword txl_keyword contained range range* range-regex rcomb
-syn keyword txl_keyword contained read readlink real-time-stream-p reduce-left
-syn keyword txl_keyword contained reduce-right ref refset regex-compile
-syn keyword txl_keyword contained regex-parse regexp regsub rehome-sym
-syn keyword txl_keyword contained remhash remove-if remove-if* remove-path
-syn keyword txl_keyword contained remq remq* remql remql*
-syn keyword txl_keyword contained remqual remqual* rename-path repeat
-syn keyword txl_keyword contained replace replace-list replace-str replace-vec
-syn keyword txl_keyword contained rest ret retf return
-syn keyword txl_keyword contained return-from reverse rlcp rperm
-syn keyword txl_keyword contained rplaca rplacd run s-ifblk
-syn keyword txl_keyword contained s-ifchr s-ifdir s-ififo s-iflnk
-syn keyword txl_keyword contained s-ifmt s-ifreg s-ifsock s-irgrp
-syn keyword txl_keyword contained s-iroth s-irusr s-irwxg s-irwxo
-syn keyword txl_keyword contained s-irwxu s-isgid s-isuid s-isvtx
-syn keyword txl_keyword contained s-iwgrp s-iwoth s-iwusr s-ixgrp
-syn keyword txl_keyword contained s-ixoth s-ixusr search search-regex
-syn keyword txl_keyword contained search-str search-str-tree second seek-stream
-syn keyword txl_keyword contained select seqp set set-diff
-syn keyword txl_keyword contained set-hash-userdata set-sig-handler sethash setitimer
-syn keyword txl_keyword contained setlogmask sh sig-abrt sig-alrm
-syn keyword txl_keyword contained sig-bus sig-check sig-chld sig-cont
-syn keyword txl_keyword contained sig-fpe sig-hup sig-ill sig-int
-syn keyword txl_keyword contained sig-io sig-iot sig-kill sig-lost
-syn keyword txl_keyword contained sig-pipe sig-poll sig-prof sig-pwr
-syn keyword txl_keyword contained sig-quit sig-segv sig-stkflt sig-stop
-syn keyword txl_keyword contained sig-sys sig-term sig-trap sig-tstp
-syn keyword txl_keyword contained sig-ttin sig-ttou sig-urg sig-usr1
-syn keyword txl_keyword contained sig-usr2 sig-vtalrm sig-winch sig-xcpu
-syn keyword txl_keyword contained sig-xfsz sign-extend sin sixth
-syn keyword txl_keyword contained size-vec some sort sort-group
-syn keyword txl_keyword contained source-loc source-loc-str span-str splice
-syn keyword txl_keyword contained split-str split-str-set sqrt sssucc
-syn keyword txl_keyword contained ssucc stat stdlib str<
-syn keyword txl_keyword contained str<= str= str> str>=
-syn keyword txl_keyword contained stream-get-prop stream-set-prop streamp string-extend
-syn keyword txl_keyword contained string-lt stringp sub sub-list
-syn keyword txl_keyword contained sub-str sub-vec succ symacrolet
-syn keyword txl_keyword contained symbol-function symbol-name symbol-package symbol-value
-syn keyword txl_keyword contained symbolp symlink sys-qquote sys-splice
-syn keyword txl_keyword contained sys-unquote syslog tan tb
-syn keyword txl_keyword contained tc tf third throw
-syn keyword txl_keyword contained throwf time time-fields-local time-fields-utc
-syn keyword txl_keyword contained time-string-local time-string-utc time-usec tofloat
-syn keyword txl_keyword contained toint tok-str tok-where tostring
-syn keyword txl_keyword contained tostringp transpose tree-bind tree-case
-syn keyword txl_keyword contained tree-find trie-add trie-compress trie-lookup-begin
-syn keyword txl_keyword contained trie-lookup-feed-char trie-value-at trim-str true
-syn keyword txl_keyword contained trunc tuples txr-case txr-if
-syn keyword txl_keyword contained txr-when typeof unget-byte unget-char
-syn keyword txl_keyword contained uniq unique unless unquote
-syn keyword txl_keyword contained until upcase-str update url-decode
-syn keyword txl_keyword contained url-encode usleep uw-protect vec
-syn keyword txl_keyword contained vec-push vec-set-length vecref vector
-syn keyword txl_keyword contained vector-list vectorp when where
-syn keyword txl_keyword contained while width with-saved-vars wrap
-syn keyword txl_keyword contained wrap* zerop zip
+syn keyword txl_keyword contained *unhandled-hook* *user-package* + -
+syn keyword txl_keyword contained / /= < <=
+syn keyword txl_keyword contained = > >= abs
+syn keyword txl_keyword contained abs-path-p acons acons-new aconsql-new
+syn keyword txl_keyword contained acos ado alist-nremove alist-remove
+syn keyword txl_keyword contained all and andf ap
+syn keyword txl_keyword contained apf append append* append-each
+syn keyword txl_keyword contained append-each* apply aret ash
+syn keyword txl_keyword contained asin assoc assql atan
+syn keyword txl_keyword contained atan2 atom bignump bit
+syn keyword txl_keyword contained block boundp break-str call
+syn keyword txl_keyword contained callf car caseq caseql
+syn keyword txl_keyword contained casequal cat-str cat-streams cat-vec
+syn keyword txl_keyword contained catch cdr ceil chain
+syn keyword txl_keyword contained chand chdir chr-isalnum chr-isalpha
+syn keyword txl_keyword contained chr-isascii chr-isblank chr-iscntrl chr-isdigit
+syn keyword txl_keyword contained chr-isgraph chr-islower chr-isprint chr-ispunct
+syn keyword txl_keyword contained chr-isspace chr-isunisp chr-isupper chr-isxdigit
+syn keyword txl_keyword contained chr-num chr-str chr-str-set chr-tolower
+syn keyword txl_keyword contained chr-toupper chrp close-stream closelog
+syn keyword txl_keyword contained cmp-str collect-each collect-each* comb
+syn keyword txl_keyword contained compl-span-str cond cons conses
+syn keyword txl_keyword contained conses* consp constantp copy
+syn keyword txl_keyword contained copy-alist copy-cons copy-hash copy-list
+syn keyword txl_keyword contained copy-str copy-vec cos count-if
+syn keyword txl_keyword contained countq countql countqual cum-norm-dist
+syn keyword txl_keyword contained daemon dec defmacro defsymacro
+syn keyword txl_keyword contained defun defvar del delay
+syn keyword txl_keyword contained delete-package do dohash downcase-str
+syn keyword txl_keyword contained dup dwim each each*
+syn keyword txl_keyword contained empty env env-fbind env-hash
+syn keyword txl_keyword contained env-vbind eq eql equal
+syn keyword txl_keyword contained errno error eval evenp
+syn keyword txl_keyword contained exit exp expt exptmod
+syn keyword txl_keyword contained false fbind fboundp fifth
+syn keyword txl_keyword contained filter-equal filter-string-tree finalize find
+syn keyword txl_keyword contained find-if find-max find-min find-package
+syn keyword txl_keyword contained first fixnump flatten flatten*
+syn keyword txl_keyword contained flet flip flo-int flo-str
+syn keyword txl_keyword contained floatp floor flush-stream for
+syn keyword txl_keyword contained for* force format fourth
+syn keyword txl_keyword contained fun func-get-env func-get-form func-set-env
+syn keyword txl_keyword contained functionp gcd gen generate
+syn keyword txl_keyword contained gensym gequal get-byte get-char
+syn keyword txl_keyword contained get-hash-userdata get-line get-lines get-list-from-stream
+syn keyword txl_keyword contained get-sig-handler get-string get-string-from-stream gethash
+syn keyword txl_keyword contained getitimer getpid getppid giterate
+syn keyword txl_keyword contained glob glob-altdirfunc glob-brace glob-err
+syn keyword txl_keyword contained glob-mark glob-nocheck glob-noescape glob-nomagic
+syn keyword txl_keyword contained glob-nosort glob-onlydir glob-period glob-tilde
+syn keyword txl_keyword contained glob-tilde-check greater group-by gun
+syn keyword txl_keyword contained hash hash-alist hash-construct hash-count
+syn keyword txl_keyword contained hash-diff hash-eql hash-equal hash-isec
+syn keyword txl_keyword contained hash-keys hash-pairs hash-uni hash-update
+syn keyword txl_keyword contained hash-update-1 hash-values hashp html-decode
+syn keyword txl_keyword contained html-encode iapply identity ido
+syn keyword txl_keyword contained if iff iffi in
+syn keyword txl_keyword contained inc inhash int-flo int-str
+syn keyword txl_keyword contained integerp intern interp-fun-p interpose
+syn keyword txl_keyword contained ip ipf isqrt itimer-prov
+syn keyword txl_keyword contained itimer-real itimer-virtual juxt keep-if
+syn keyword txl_keyword contained keep-if* keywordp kill labels
+syn keyword txl_keyword contained lambda last lazy-str lazy-str-force
+syn keyword txl_keyword contained lazy-str-force-upto lazy-str-get-trailing-list lazy-stream-cons lazy-stringp
+syn keyword txl_keyword contained lbind lcm lcons-fun lconsp
+syn keyword txl_keyword contained ldiff length length-list length-str
+syn keyword txl_keyword contained length-str-< length-str-<= length-str-> length-str->=
+syn keyword txl_keyword contained length-vec lequal less let
+syn keyword txl_keyword contained let* lexical-fun-p lexical-var-p link
+syn keyword txl_keyword contained lisp-parse list list* list-str
+syn keyword txl_keyword contained list-vector listp log log-alert
+syn keyword txl_keyword contained log-auth log-authpriv log-cons log-crit
+syn keyword txl_keyword contained log-daemon log-debug log-emerg log-err
+syn keyword txl_keyword contained log-info log-ndelay log-notice log-nowait
+syn keyword txl_keyword contained log-odelay log-perror log-pid log-user
+syn keyword txl_keyword contained log-warning log10 log2 logand
+syn keyword txl_keyword contained logior lognot logtest logtrunc
+syn keyword txl_keyword contained logxor macro-form-p macro-time macroexpand
+syn keyword txl_keyword contained macroexpand-1 macrolet major make-catenated-stream
+syn keyword txl_keyword contained make-env make-hash make-lazy-cons make-like
+syn keyword txl_keyword contained make-package make-random-state make-similar-hash make-string-byte-input-stream
+syn keyword txl_keyword contained make-string-input-stream make-string-output-stream make-strlist-output-stream make-sym
+syn keyword txl_keyword contained make-time make-time-utc make-trie makedev
+syn keyword txl_keyword contained mapcar mapcar* mapdo mapf
+syn keyword txl_keyword contained maphash mappend mappend* mask
+syn keyword txl_keyword contained match-fun match-regex match-regex-right match-str
+syn keyword txl_keyword contained match-str-tree max member member-if
+syn keyword txl_keyword contained memq memql memqual merge
+syn keyword txl_keyword contained min minor minusp mkdir
+syn keyword txl_keyword contained mknod mkstring mod multi
+syn keyword txl_keyword contained multi-sort n-choose-k n-perm-k nconc
+syn keyword txl_keyword contained nilf none not notf
+syn keyword txl_keyword contained nreverse null nullify num-chr
+syn keyword txl_keyword contained num-str numberp oand oddp
+syn keyword txl_keyword contained op open-command open-directory open-file
+syn keyword txl_keyword contained open-files open-files* open-pipe open-process
+syn keyword txl_keyword contained open-tail openlog opip or
+syn keyword txl_keyword contained orf packagep partition partition*
+syn keyword txl_keyword contained partition-by perm plusp pop
+syn keyword txl_keyword contained pos pos-if pos-max pos-min
+syn keyword txl_keyword contained posq posql posqual pppred
+syn keyword txl_keyword contained ppred pprinl pprint pprof
+syn keyword txl_keyword contained pred prinl print prof
+syn keyword txl_keyword contained prog1 progn prop proper-listp
+syn keyword txl_keyword contained push pushhash put-byte put-char
+syn keyword txl_keyword contained put-line put-lines put-string put-strings
+syn keyword txl_keyword contained pwd qquote quasi quasilist
+syn keyword txl_keyword contained quote rand random random-fixnum
+syn keyword txl_keyword contained random-state-p range range* range-regex
+syn keyword txl_keyword contained rcomb read readlink real-time-stream-p
+syn keyword txl_keyword contained reduce-left reduce-right ref refset
+syn keyword txl_keyword contained regex-compile regex-parse regexp regsub
+syn keyword txl_keyword contained rehome-sym remhash remove-if remove-if*
+syn keyword txl_keyword contained remove-path remq remq* remql
+syn keyword txl_keyword contained remql* remqual remqual* rename-path
+syn keyword txl_keyword contained repeat replace replace-list replace-str
+syn keyword txl_keyword contained replace-vec rest ret retf
+syn keyword txl_keyword contained return return-from reverse rlcp
+syn keyword txl_keyword contained rperm rplaca rplacd run
+syn keyword txl_keyword contained s-ifblk s-ifchr s-ifdir s-ififo
+syn keyword txl_keyword contained s-iflnk s-ifmt s-ifreg s-ifsock
+syn keyword txl_keyword contained s-irgrp s-iroth s-irusr s-irwxg
+syn keyword txl_keyword contained s-irwxo s-irwxu s-isgid s-isuid
+syn keyword txl_keyword contained s-isvtx s-iwgrp s-iwoth s-iwusr
+syn keyword txl_keyword contained s-ixgrp s-ixoth s-ixusr search
+syn keyword txl_keyword contained search-regex search-str search-str-tree second
+syn keyword txl_keyword contained seek-stream select seqp set
+syn keyword txl_keyword contained set-diff set-hash-userdata set-sig-handler sethash
+syn keyword txl_keyword contained setitimer setlogmask sh sig-abrt
+syn keyword txl_keyword contained sig-alrm sig-bus sig-check sig-chld
+syn keyword txl_keyword contained sig-cont sig-fpe sig-hup sig-ill
+syn keyword txl_keyword contained sig-int sig-io sig-iot sig-kill
+syn keyword txl_keyword contained sig-lost sig-pipe sig-poll sig-prof
+syn keyword txl_keyword contained sig-pwr sig-quit sig-segv sig-stkflt
+syn keyword txl_keyword contained sig-stop sig-sys sig-term sig-trap
+syn keyword txl_keyword contained sig-tstp sig-ttin sig-ttou sig-urg
+syn keyword txl_keyword contained sig-usr1 sig-usr2 sig-vtalrm sig-winch
+syn keyword txl_keyword contained sig-xcpu sig-xfsz sign-extend sin
+syn keyword txl_keyword contained sixth size-vec some sort
+syn keyword txl_keyword contained sort-group source-loc source-loc-str span-str
+syn keyword txl_keyword contained splice split-str split-str-set sqrt
+syn keyword txl_keyword contained sssucc ssucc stat stdlib
+syn keyword txl_keyword contained str< str<= str= str>
+syn keyword txl_keyword contained str>= stream-get-prop stream-set-prop streamp
+syn keyword txl_keyword contained string-extend string-lt stringp sub
+syn keyword txl_keyword contained sub-list sub-str sub-vec succ
+syn keyword txl_keyword contained symacrolet symbol-function symbol-name symbol-package
+syn keyword txl_keyword contained symbol-value symbolp symlink sys-qquote
+syn keyword txl_keyword contained sys-splice sys-unquote syslog tan
+syn keyword txl_keyword contained tb tc tf third
+syn keyword txl_keyword contained throw throwf time time-fields-local
+syn keyword txl_keyword contained time-fields-utc time-string-local time-string-utc time-usec
+syn keyword txl_keyword contained tofloat toint tok-str tok-where
+syn keyword txl_keyword contained tostring tostringp transpose tree-bind
+syn keyword txl_keyword contained tree-case tree-find trie-add trie-compress
+syn keyword txl_keyword contained trie-lookup-begin trie-lookup-feed-char trie-value-at trim-str
+syn keyword txl_keyword contained true trunc tuples txr-case
+syn keyword txl_keyword contained txr-if txr-when typeof unget-byte
+syn keyword txl_keyword contained unget-char uniq unique unless
+syn keyword txl_keyword contained unquote until upcase-str update
+syn keyword txl_keyword contained url-decode url-encode usleep uw-protect
+syn keyword txl_keyword contained vec vec-push vec-set-length vecref
+syn keyword txl_keyword contained vector vector-list vectorp when
+syn keyword txl_keyword contained where while width with-saved-vars
+syn keyword txl_keyword contained wrap wrap* zerop zip
syn keyword txr_keyword contained accept all and assert
syn keyword txr_keyword contained bind block cases cat
diff --git a/unwind.c b/unwind.c
index 217e24f9..05ff6335 100644
--- a/unwind.c
+++ b/unwind.c
@@ -47,6 +47,8 @@ static uw_frame_t *uw_env_stack;
static uw_frame_t *uw_exit_point;
static uw_frame_t toplevel_env;
+static val unhandled_hook_s;
+
/* C99 inline instantiations. */
#if __STDC_VERSION__ >= 199901L
val uw_block_return(val tag, val result);
@@ -280,6 +282,25 @@ val uw_throw(val sym, val exception)
abort();
}
+ {
+ loc pfun = lookup_var_l(nil, unhandled_hook_s);
+ val fun = deref(pfun);
+
+ set(pfun, nil);
+
+ if (fun) {
+ if (functionp(fun)) {
+ funcall3(fun, sym, exception, last_form_evaled);
+ } else {
+ format(std_error, lit("~a: *unhandled-hook* ~s isn't a function\n"),
+ prog_string, fun, nao);
+ abort();
+ }
+
+ exit(EXIT_FAILURE);
+ }
+ }
+
if (opt_loglevel >= 1) {
val s = stringp(exception);
val info = if2(source_loc(last_form_evaled),
@@ -298,9 +319,9 @@ val uw_throw(val sym, val exception)
uw_exception_subtype_p(sym, file_error_s)) {
if (opt_print_bindings)
put_line(lit("false"), std_output);
- exit(EXIT_FAILURE);
}
- abort();
+
+ exit(EXIT_FAILURE);
}
ex->ca.sym = sym;
@@ -439,3 +460,9 @@ void uw_init(void)
uw_register_subtype(assert_s, error_s);
uw_register_subtype(syntax_error_s, error_s);
}
+
+void uw_late_init(void)
+{
+ reg_var(unhandled_hook_s = intern(lit("*unhandled-hook*"),
+ user_package), nil);
+}
diff --git a/unwind.h b/unwind.h
index e684eb79..634fdfea 100644
--- a/unwind.h
+++ b/unwind.h
@@ -114,6 +114,7 @@ void uw_pop_until(uw_frame_t *);
uw_frame_t *uw_current_frame(void);
uw_frame_t *uw_current_exit_point(void);
void uw_init(void);
+void uw_late_init(void);
noreturn val type_mismatch(val, ...);