summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-11-07 10:21:42 -0800
committerKaz Kylheku <kaz@kylheku.com>2015-11-07 10:21:42 -0800
commit660af6ed504bac0258834f6e4c58ad81454dbad8 (patch)
treed888fa89f333c390cde67094b4b65cea2806405c /lib.c
parent7bbb027e111cc4b90248cd9d9da127839d91038a (diff)
downloadtxr-660af6ed504bac0258834f6e4c58ad81454dbad8.tar.gz
txr-660af6ed504bac0258834f6e4c58ad81454dbad8.tar.bz2
txr-660af6ed504bac0258834f6e4c58ad81454dbad8.zip
New iread function.
The read function no longer works like it used to on an interactive terminal because of the support for .. and . syntax on a top-level expression. The iread function is provided which uses a modified syntax that doesn't support these operators on a top-level expression. The parser thus doesn't look one token ahead, and so iread can return immediately. * eval.c (eval_init): Register iread intrinsic function. * parser.c (prime_parser): Only push back the recently seen token when priming for a regular Lisp read. Handle the prime_interactive method by preparing a SECRET_ESCAPE_I token. (lisp_parse_impl): New static function, formed from previous lisp_parse. Takes a boolean argument indicating interactive mode. (prime_parser_post): New function. (lisp_parse): Now a wrapper for lisp_parse_impl which passes a nil to indicate noninteractive read. (iread): New function. * parser.h (enum prime_parser): New member, prime_interactive. (scrub_scanner, iread, prime_parser_post): Declared. * parser.l (prime_scanner): Handle the prime_interactive case the same way as prime_lisp. (scrub_scanner): New function. * parser.y (SECRET_ESCAPE_I): New token type. (i_expr): New nonterminal symbol. Like n_expr, but doesn't support dot or dotdot operators, except in nested subexpressions. (spec): Handle SECRET_ESCAPE_I by way of i_expr. (sym_helper): Before freeing the token lexeme, call scrub_scanner. If the token is registered as the scanner's most recently seen token, the scanner must forget that registration, because it is no longer valid. (parse): Call prime_parser_post. * txr.1: Documented iread.
Diffstat (limited to 'lib.c')
0 files changed, 0 insertions, 0 deletions