diff options
-rw-r--r-- | ChangeLog | 20 | ||||
-rw-r--r-- | genvim.txr | 3 | ||||
-rw-r--r-- | lib.c | 1 | ||||
-rw-r--r-- | tl.vim | 330 | ||||
-rw-r--r-- | txr.1 | 41 | ||||
-rw-r--r-- | txr.vim | 330 | ||||
-rw-r--r-- | unwind.c | 31 | ||||
-rw-r--r-- | unwind.h | 1 |
8 files changed, 424 insertions, 333 deletions
@@ -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, @@ -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) @@ -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); @@ -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 @@ -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 @@ -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 @@ -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); +} @@ -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, ...); |