summaryrefslogtreecommitdiffstats
path: root/syslog.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2014-02-21 21:47:39 -0800
committerKaz Kylheku <kaz@kylheku.com>2014-02-21 21:47:39 -0800
commit438152be2bda0288e5d5e8c5b013077ac9512d86 (patch)
treef5eabffa6cc08d2dc506637e52c6ae0f009920be /syslog.c
parenta9fe8b63f5013c25ab84922d0dbd0afd52f3dcd2 (diff)
downloadtxr-438152be2bda0288e5d5e8c5b013077ac9512d86.tar.gz
txr-438152be2bda0288e5d5e8c5b013077ac9512d86.tar.bz2
txr-438152be2bda0288e5d5e8c5b013077ac9512d86.zip
Implementing special variables with local overriding.
All predefined globals become special. * eval.c (special, with_saved_vars_s): New global variables. (mark_special, special_p): New functions. (bindings_helper): Takes new argument, include_specials. Now processes the special colon syntax for denoting special variables, setting up their values, taking care to observe whether the binding is parallel or sequential. (op_let, op_for): Pass new argument to bindings_helper. (op_each): Pass new argument to bindings_helper with a value of it, and deal with the colon annotations that emerge in the bindings. (op_defvar, regvar): Mark symbol as special. (op_with_saved_vars): New static function. (expand_vars): Takes new argument, returns a cons. Detects special variables among the vars and produces the colon syntax. (expand_catch_clause): Bugfix: this was using expand_vars on a parameter list. Now properly uses expand_params. (expand_save_specials): New static function. (expand): For the operators that are binding constructs, handle the new form of expand_vars which returns information about special variables. If specials occur, then generate the with-saved-vars form around the expansion which will save and restore their values. The expansion of vars done by expand_vars, together with the run-time actions of bindings_helper, do the rest. Speaking of which, the new with-saved-vars operator form is now expanded here too. (eval_init): Protect new variables special and with_saved_vars_s. Initialize special with new hash table. Store new interned symbol in with_saved_vars_s. Register op_with_save_vars in op_table. * txr.1: Documented specials.
Diffstat (limited to 'syslog.c')
0 files changed, 0 insertions, 0 deletions