| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (eval_init): Register second through tenth as intrinsic.
* gencadr.txr: New cadr.c changes encoded.
* lib.c (second, third, fourth, fifth, sixth): Functions
reimplemented using ref, so they are much more efficient
for vectors and strings.
(seventh, eighth, ninth, tenth): New functions.
* lib.h (seventh, eighth, ninth, tenth): Declared.
* share/txr/stdlib/place.tl: place macros defined for
second through tenth.
* txr.1: Documented.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
define-place-macro to list of names.
* share/txr/stdlib/place.tl (*place-macro*): New global hash.
(sys:tigger-load, sys:pl-expand): New functions.
(call-update-expander, call-clobber-expander, call-delete-expander):
Recognize and expand place macros.
(define-place-macro): New macro.
(first, rest): Places redefined using define-place-macro, replacing
the old hack of copying the expanders from one table entry to another.
* txr.1: Documented place macros.
|
|
|
|
|
| |
value returned when printing dwim forms, due to
mutating the obj variable.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* lib.c (init): Call cadr_init.
* lisplib.c (dl_table, set_dlt_entries, dlt_register): Externalize.
* lisplib.h (dl_table, set_dlt_entries, dlt_register): Declared.
* Makefile (OBJS): Add cadr.o.
* cadr.c: New file.
* cadr.h: New file.
* gencadr.txr: New file.
* share/txr/stdlib/cadr.tl: New file.
* txr.1: Document cadr accessors.
|
|
|
|
|
|
| |
semantics so that (del (cdr x)) is symmetric with (del (car x)).
* txr.1: Update documentation.
|
|
|
|
|
|
|
|
|
|
|
|
| |
* lib.c (split_func): New static function.
(partition_split_common): New static function, based on
on contents of partition function.
(partition): Now a wrapper around partition_split_common.
(split): New function.
* lib.h (split): Documented.
* txr.1: Documented split.
|
| |
|
| |
|
|
|
|
|
| |
stream should be the resolved name, not the abstract original,
so that error messages correlate to the file.
|
|
|
|
| |
allow "it" to be mutable when it denotes a place form.
|
|
|
|
| |
* lisplib.c (place_set_entries): Add place-form-p to list of names.
|
|
|
|
|
|
|
| |
* eval.c (sys_lisp1_value_s): New global symbol variable.
(expand_lisp1_value): New static function.
(do_expand): Use expand_lisp1_value.
(eval_init): Initialize sys_lisp1_value_s.
|
|
|
|
|
|
|
|
| |
* share/txr/stdlib/place.tl (placelet*): New macro.
* lisplib.c (place_set_entries): Add placelet* to list of names.
* txr.1: Updated to document placelet* and fix mistakes.
|
|
|
|
|
|
|
| |
ogetter-sym variable for caching the sequence; use the getter
for the sequence place to access it. Again, this is for placelet,
where the caching is visible. Another way to fix this is to
clobber the cache variable when updating the sequence place.
|
|
|
|
| |
* txr.1: Documented.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* lisplib.c (place_set_entries): Add placelet to list of names.
* share/txr/stdlib/place.tl (sys:placelet1, placelet): New macros.
(defplace dwim): Do not retrieve the
place's value into a local variable and have the getter
expand to that variable. Rather, have the getter retrieve the
value. A getter that refers to a cached copy breaks
the semantics of placelet, and any place operator which can
evaluate the location after it is stored.
* txr.1: Documented placelet.
|
|
|
|
|
|
|
|
|
|
|
|
| |
* parser.c (prime_parser): Take name as argument,
and install it into parser.
(lisp_parser): Pass name to parse, instead of setting it
in the parser object.
* parser.y (parse): Take name as argument and pass
down to prime_parser.
* parser.h (prime_parser, parse): Declarations updated.
|
|
|
|
|
| |
* parser.c (read_eval_stream): Get name of original stream,
and pass that down to lisp_parse as the name argument.
|
|
|
|
|
| |
* parser.c (read_eval_stream): Add terminating newline to
the first line that was examined for hash bang.
|
|
|
|
|
|
|
|
|
|
|
| |
* parser.c (parser_mark, parser_common_init): Remove reference to primer.
(parser): Don't take primer argument, remove reference to member.
(ensure_parser): Don't take primer argument, don't pass to parser
function.
(lisp_parse): Don't pass primer string to ensure_parser.
* parser.h (primer_t): Remove primer member.
(parser): Declaration updated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Test case: file containing 4(prinl 3). Scanner consumes 4 and (.
The ( is lost when the scanner is reset for the next call to yyparse,
resulting in jut prinl being read and interpreted as a variable.
* parser.c (prime_parser): If present, append hold byte to priming
string. Takes parser_t * instead of parser, and returns void now.
* parser.l (reset_scanner): Now returns int value, the value
of the scanner's yy_hold_char variable which is nonzero when
the scanner is hanging on to an unmatched byte of input.
* parser.h (reset_scanner, prime_parser): Declarations updated.
* parser.y (parse): Pass hold byte returned by reset_scanner to
prime_parser.
|
| |
|
|
|
|
|
| |
* stream.c (cat_unget_byte, cat_unget_char): Recursive
call to unget_byte and unget_char with reversed arguments.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* parser.c (parser_destroy): New GC finalizer static function.
(parser_ops): Register parser_destroy.
(parser_common_init): New function, shared by parse and parse_once.
Initializes embedded scanner.
(parser_cleanup): New function, shared by parse_once and
parser_destroy.
(parser): Use parser_common_init.
* parser.h (parser_t): New member, yyscan.
(reset_scanner, parser_common_init): Declared.
* parser.l (reset_scanner): New function.
* parser.y (parse_once): Use parser_common_init, and
thus perform only a few initializations. Do not
define scanner as a local variable.
(parse): Call reset_scanner instead of
yylex_init since the scanner is being reused,
and for the same reason do not call yylex_destroy.
GC will do that now.
|
|
|
|
|
| |
* lisplib.c (place_set_entries): Add define-modify-macro to
list of names.
|
| |
|
|
|
|
|
|
|
| |
* parser.l (grammar): Scan a METANUM token in the
BRACED state also. This allows us to correctly
reference op arguments in a quasiliteral, as in
`foo @{@1 [1..2] ","} bar`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* stream.c (null_stream_print): Static function removed.
(stream_print_op): New function. Prints stream's name and address.
(null_get_prop): Pull stream name from strm_ops structure
rather than hard-coding to "null-stream".
(null_ops, stdio_ops, tail_ops, pipe_ops, string_in_ops,
byte_in_ops, string_out_ops, strlist_out_ops, dir_ops,
cat_stream_ops): Use stream_print_op in place of cobj_print_op.
Initialize name.
(stdio_stream_print): Use name from ops structure,
and include object address.
(string_in_get_prop): Likewise.
(cat_stream_print): Likewise.
* stream.h (struct strm_ops): New member, name.
(strm_ops_init): Initialize name.
(stream_print_op): Declared.
* syslog.c (syslog_strm_ops): Use stream_print_op. Initialize name.
|
| |
|
| |
|
|
|
|
|
|
| |
* stream.c (stdio_stream_print): Wrong way test on h->pid;
if it is nonzero it must be printed. Was printed wrong:
argument of integer type passed to ~s which expects a val.
|
|
|
|
|
|
|
|
|
|
|
| |
* stream.c (stdio_clear_error): Return the prior value of h->err.
Do not inspect feof(h->f) or ferror(h->f); just clear the error
status of the stream.
(stdio_close): Set h->err from errno if fclose failed.
(dir_clear_error): Return prior value of h->err.
* txr.1: Document return value convetion for clear-error,
and flush-stream.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In many cases, if a stream operation is not applicable to a stream, it
is not appropriate to just do nothing and return nil. An error
must be thrown.
* stream.c (unimpl, unimpl_put_string, unimpl_put_char,
unimpl_put_byte, unimpl_get_line, unimpl_get_char, unimpl_get_byte,
unimpl_unget_char, unimpl_unget_byte, unimpl_seek, null_put_string,
null_put_char, null_put_byte, null_get_line, null_get_char,
null_get_byte, null_close, null_flush, null_seek, null_set_prop,
null_get_error, null_get_error_str, null_clear_error): New
static functions.
(fill_stream_ops): New function.
(null_ops): Use null_put_string, etc., instead of null pointers.
(stdio_clear_error, dir_clear_error, cat_clear_error): Return value now
indicating whether an error was cleared.
(stream_set_prop, stream_get_prop, real_time_stream_p, close_stream,
get_error, get_error_str, clear_error, get_line, get_char, get_byte,
unget_char, unget_byte, put_string, put_char, put_byte,
flush_stream): Do not test whether a function in the ops table
is defined; just call it, and return its value.
(stream_init): Call fill_stream_ops on all stream operation
structures so any null pointers are defaulted to appropriate
functions.
* stream.h (struct strm_ops): clear_error gets return value.
(fill_stream_ops): Declared.
* syslog.c (syslog_init): Call fill_stream_ops on syslog_strm_ops.
|
|
|
|
|
|
|
|
|
| |
* genvim.txr (bs, hex, at, alpha, alnum, dig, oct, chesc, glyph):
New variables.
*(txr_error, txr_atat, txr_comment, txr_contin, txr_char,
txr_regdir, txr_variable, txr_splicevar, txr_stresc, txr_numesc,
txr_regesc, txr_chr, txr_num, txr_badnum,txr_ident,
txr_braced_ident): Use regex definitions.
|
|
|
|
|
|
|
| |
* genvim.txr (txr_variable, txr_splicevar, txr_bracevar): Weren't being
generated into tl.vim. Moved to a common section.
(txr_nested_error): Relocate above other matches.
(txr_ident): Fixed not to match tokens starting with #.
|
| |
|
| |
|
|
|
|
|
|
|
| |
* share/txr/stdlib/place.tl: Introducing new defplace
for (sys:var ...) which is treated as if it were a symbol,
in anticipation of the op/do macro placing that syntax
with a symbol.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* parser.l (%option): Remove nounput option since we need
yyunput.
(grammar): Rule for matching hex and octal escape in SPECIAL
state recognizes optional semicolon. In 109 compatibility,
this is pushed back into the stream, otherwise consumed.
* txr.1: Updated documentation, including compat notes.
* genvim.txr (txr_char): Include optional semicolon in
match. Corrected some errors where 8 and 9 were being
included as matches for octal digits.
(txr_error): Default match for \x or \o not followed
by digits.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* parser.c (read_eval_stream): New boolean argument
to request hash bang support.
* parser.h (read_eval_stream): Declaration updated.
* eval.c (sys_load): Pass new thid argument to read_eval_stream,
to decline hash bang support.
* match.c (v_load): Likewise.
* txr.c (txr_main): Request hash bang support from
read_eval_stream. Thus files referenced from the txr
command line can have a #! line, which is ignored.
|
| |
|
|
|
|
|
|
|
|
|
| |
* genvim.txr (txr_badesc, txr_stresc, txr_numesc, txr_regesc): New
match categories.
(txr_string, txr_quasilit, txr_regex, txl_regex): No longer use skip=
argument, but rather contain escape categories.
All escapes are colored as Special rather than String, and
unknown or malformed escapes are colored as errors.
|
|
|
|
|
|
|
| |
* genvim.txr (txr_escat): New match category containing \@.
Colorized a String.
(txr_quasilit): Contains txr_escat. Thus, \@ looks like any
other escape inside a quasilit.
|
|
|
|
| |
before a function link.
|
| |
|
|
|
|
|
|
|
|
| |
* configure (have_timegm, tm_gmtoff, tm_tmzone): Unused
variables removed.
(SIZEOF_LONG_LONG_T): Reference to nonexistent variable fixed.
Also, fixed two instances of arithmetic expressions using
unnecessary $ prefixes on variables.
|
|
|
|
|
|
|
|
|
| |
* eval.c (expand_quasi): When the modifiers argument of a var
item is expanded, the expansion incorrectly places it as the
fourth item rather than third. This is effectively a continuation
of the incomplete regression fix that was applied on 2014-08-29.
The breakage is that `@{(expr) modifier}` ignores modifier
whenever (expr) is an expression that undergoes expansion.
|
|
|
|
|
|
|
|
|
| |
* parser.l (char_esc): Recognize \@ escape.
(grammar): Add a rule for a \@ escape in quasiliterals,
and quasi word list literals.
* txr.1: Document \@, and remove the lie that @@
encodes for a single @ in quasiliterals.
|
|
|
|
|
|
| |
* parser.l (char_esc): Recognize \@ escape.
(grammar): Add a rule for a \@ escape in quasiliterals,
and quasi word list literals.
|