| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
be done for lazy strings, otherwise it just causes unnecessary
memory use by duplicating the line, and inefficiency via
thanks to allocator churn.
|
|
|
|
|
|
|
|
|
|
| |
object is nil.
* match.c (do_match_line): Bugfix for incorrect treatment of long
lines. Must return the absolute position from the start of the original
line (plus(c->pos, c->base)), rather than just c->pos, which only
measures from the start of a line that may have been chopped by
consume_prefix.
|
|
|
|
|
|
|
|
|
| |
line number info.
* parser.h (rlset): Declared.
(rlcp): Use rlset.
* parser.y (rlset): New function.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
Condense the output to 8 times the screen width, for more context.
Condense the output in vertical mode (when the entire input line
is shown) not only character mode.
* lib.c (remq, remql, remqual): New functions.
* lib.h (remq, remql, remqual): Declared.
|
|
|
|
|
|
|
|
|
|
| |
* txr.c (version): Bumped.
* txr.1: Bumped version and set date.
* configure (txr_ver): Bumped.
* RELNOTES: Updated.
|
|
|
|
|
| |
sub_vec, replace_vec): Regression: replace incorrect zerop(to)
test with to == zero, because to is not necessarily a number.
|
| |
|
|
|
|
| |
and highlighting of errors.
|
|
|
|
|
|
|
|
|
|
|
| |
which forces the printing.
* txr.c (help): Under -b, mention that printing the word false is
suppressed also. Added documentation for -B.
(main): Implemented -B option.
* txr.1: Documented -B option and added clarifying text under -b
option explaining the conditions under which bindings are printed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
that output has taken place and suppress the printing of bindings.
* debug.c (debug): std_output replaced with std_debug.
* eval.c (eval_init): Registered new *stddebug* variable.
* stream.c (std_debug): New variable.
(stdio_put_string): Check that stream is other than
std_debug, to determine that output has taken place.
* stream.h (std_debug): Declared.
* txr.1: Added *stddebug* to documentation stub heading.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
represent empty optional output clauses, distinguishing them from
missing clauses. This creates an ambiguity, so that an @(output)
block which puts out a single empty line is treated as empty.
Present but empty clauses are now represented by t.
* match.c (do_output_line): Check for t and bail.
(do_output): Check for t instead of (nil) and bail.
* parser.y (o_elems_opt2): Nonterminal deleted.
(out_clauses_opt): Empty case generates nil.
(req_parts_opt): o_elems_opt2 replaced by o_elems_opt.
(repeat_rep_helper): Function now keeps track of which
clauses were specified. For those that were specified, but
empty, it substitutes t.
* tests/008/empty-clauses.expected: New file.
* tests/008/empty-clauses.txr: New file.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* parser.l (BSCHR, BSYM, BTOK): New lexical definitions.
(BRACED): New state.
(grammar): Refactored so that braced variables are now handled
in the BRACED state, allowing for lexical differences between
braced variables and Lisp. This allows us to have
the /regex/ syntax in braces, but /regex/ is just a symbol
in the Lisp. The new #/ token is recognized and returned
as HASH_SLASH. All rules reformatted to a more easily
maintainble convention.
* parser.y (HASH_SLASH): New token.
(modifiers, lisp_regex): New nonterminals.
(var): Grammar changed to use modifiers nonterminal instead of exprs.
(var_op): Rule moved closer to var.
(expr): Produces lisp_regex rather than regex.
(yybadtoken): Handle HASH_SLASH in the switch statement.
Bugfix: HASH_BACKSLASH was not handled.
* txr.1: Documented #/regex/ syntax.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* arith.h: Likewise.
* debug.c: Added copyright header.
* debug.h: Updated copyright year.
* eval.c: Likewise.
* eval.h: Likewise.
* filter.c: Likewise.
* filter.h: Likewise.
* gc.c: Likewise.
* gc.h: Likewise.
* hash.c: Likewise.
* hash.h: Likewise.
* lib.c: Likewise.
* lib.h: Likewise.
* match.c: Likewise.
* match.h: Likewise.
* parser.h: Likewise.
* regex.c: Likewise.
* regex.h: Likewise.
* stream.c: Likewise.
* stream.h: Likewise.
* txr.c: Likewise, and e-mail address.
* txr.h: Updated copyright year.
* unwind.c: Likewise.
* unwind.h: Likewise.
|
|
|
|
| |
* tests/008/filtenv.txr: New file.
|
|
|
|
|
|
|
|
| |
* match.c (do_txeval): Establish a dynamic env frame around
evaluation of quasiliteral and around embedded TXR Lisp expression
(which may contain quasiliterals) and stick the bindings there
via set_match_context. This way if filte functions are invoked through
a quasiliteral, they can see bindings.
|
|
|
|
|
|
|
|
|
|
| |
* stream.c (struct strm_ops): New member, put_byte.
(stdio_put_byte): New function.
(stdio_ops, pipe_ops, string_in_ops, byte_in_ops,
string_out_ops, strlist_out_ops, dir_ops): Updated.
(put_byte): New function.
* stream.h (put_byte): Declared.
|
|
|
|
|
|
|
| |
This is needed for character constants.
(CHRLIT): Fix broken hex constants, being treated as octal.
* txr.1: Document octal character constants.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* txr.c (version): Bumped.
* txr.1: Bumped version and set date.
* configure (txr_ver): Bumped.
* RELNOTES: Updated.
* eval.c (eval_init): Updated.
* rand.c (rand): Function renamed to rnd due to a clash with
standard C library (that does not show up when compiling as C++).
* rand.h (rand): Declaration renamed to rnd.
|
|
|
|
|
|
|
|
| |
(Accidentally originally written in lex.yy.c file!)
(parse_reset): If file can't be opened, try adding .txr suffix
to it.
* txr.1: Suffix-handling behavior documented.
|
|
|
|
|
|
|
|
| |
transformation of the load syntax because the parent location
is already associated with the syntax.
* match.c (v_load): Pull out source location info from
the form itself.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (eval_error): Use source_loc_str to get source location.
* match.c (debuglf, sem_err, file_err): Likewise.
* parser.h (source_loc_str): Declared.
* parser.l (parse_init): form_to_ln_hash must be equal based now.
* parser.y (rl): Store new form of read-time source location info.
* txr.1: Documented load.
|
|
|
|
|
| |
Check if it is absolute and do not substitute parent
file's directory.
|
|
|
|
| |
rlcp. Only the parser should use rl to establish location info.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
needs to record file name, not only line number; absolute paths
not handled, etc.
* match.c (load_s): New symbol variable.
(v_load): New static function.
(syms_init): load_s initialized.
(dir_tables_init): Load directive registered.
* match.h (load_s): Declared.
* parser.h (parse_reset): New function declared.
* parser.l (spec_file_str): Global variable moved from txr.c.
(parse_reset): New function.
* parser.y (clause): Special handling for @(load ...) directive.
parent file path inserted into the syntax at parse time,
so when the load directive executes, it can load the file from
the same directory as the parent file.
* txr.c (spec_file_str): Global variable moved to parser.l.
|
|
|
|
| |
* tests/010/seq.expected: New file.
|
|
|
|
|
|
|
|
|
| |
replace_str, sub_vec, replace_vec): Implementing floating zero
behavior. This is necessary so that the important case index .. (+
index 1) for selecting one element as a subrange works even if index is
negative.
* txr.1: Floating zero behavior for ranges documented.
|
|
|
|
|
|
|
|
| |
deleted range of values. Missing del cases added for single
index cases.
* lib.c (quicksort): Fix pivot selection one more time.
(length): Fix bad argument in "not a sequence" error.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(eval_error): nostatic added to suppress a g++ warning.
(dwim_loc): Takes new value as the original unevaluated form so
it can control evaluation. Support for del operator added.
(op_modplace): Bugfixes: new value form was being unconditionally
evaluated and out of order w.r.t. other forms. Now there is
left to right order. The form is evaluated later, since for most
operators it is on the right, with the exception of push.
dwim places can now optionally control the evaluation of newform.
del operator supported in gethash case as a special case.
error case added for del: if it's not handled in gethash or
dwim_loc, it is an error.
(eval_init): del_s initialized, and del operator added to table.
* txr.vim: syntax highlighting for del.
* txr.1: Documented del.
|
|
|
|
|
| |
Previously this function did nothing, but now it interns
some important symbols.
|
|
|
|
|
|
|
| |
It was decrementing the hash count without checking that
something was deleted from the chain. The deletion was done
incorrectly, without regard for the kind of comparison fucntion
used by the hash table.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and replace.
* lib.c (do_sort): Static function renamed to sort_list.
(swap, quicksort, sort_vec): New static functions.
(sort): Made generic over lists, vectors and strings.
(refset): New function.
* lib.h (sort): Declaration updated (parameter name change).
(refset): Declared.
* txr.1: Mention refset.
* txr.vim: Updated with refset.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* debug.c (help, show_bindings): put_string arguments reversed.
* eval.c (bind_args): Support colon notation in interpreted
function lambda lists for optional arguments. Improved error checking.
(apply): Allow optional arguments to be left out.
(dwim_loc): Reversed arguments to replace_str, replace_vec,
replace_list.
(eval_init): Numerous intrinsics now have arguments that are optional.
New function rand introduced which reverses arguments relative to
random. New intrinsic function hash introduced for alternative
construction of hashes.
* gc.c (sweep): Reversed arguments to put_char.
* hash.c (weak_keys_k, weak_vals_k, equal_based_k): New keyword
symbol variables.
(hashv): New function.
(hash_init): Intern new symbols.
* hash.h (weak_keys_k, weak_vals_k, equal_based_k, hashv): Declared.
* lib.c (colon_k): New keyword symbol variable.
(replace_list, replace_str, replace_vec): Arguments rearranged.
(tree_find): testfun becomes optional argument.
(int_str): base becomes optional argument.
(func_f0, func_f1, func_f2, func_f3, func_f4, func_n0,
func_n1, func_n2, func_n3, func_n4, func_f0v, func_f1v,
func_f2v, func_f3v, func_f4v, func_n0v, func_n1v,
func_n2v, func_n3v, func_n4v, func_interp): Initialize optargs to zero.
(func_n0o, func_n1o, func_n2o, func_n3o, func_n4o): New functions.
(cobj_print_op): Reversed arguments to put_string.
(find): testfun and keyfun become optional arguments.
(replace): Parameters rearranged and arguments rearranged in calls to
replace_list, replace_str and replace_vec.
(obj_init): colon_k initialized.
(obj_print, obj_pprint): Arguments reversed, and stream defaults
to std_output. Arguments reversed in calls to put_char and put_string.
(dump): Arguments reversed in call to put_char.
* lib.h (struct func): sizes of minparam, fixparam bitfields
adjusted. New bitfield optargs. New unnamed bitfield added so
the previous ones add up to 16 bits.
(colon_k): Declared.
(func_n0o, func_n1o, func_n2o, func_n3o, func_n4o): Declared.
(replace_list, replace_str, replace_vec, replace): Declarations updated.
* match.c (debuglf, dump_shell_string, dump_byte_string, dump_var,
do_output_line, extract): Reversed arguments to put_char and
|
|
|
|
|
| |
variables. Lists do not have to be wrapped in @(repeat)/@(rep).
Indexing notation works on strings and vectors.
|
|
|
|
|
|
|
|
|
|
| |
* lib.h (sub, ref, replace): Declared.
* match.c (format_field): Generic indexing using new functions.
* txr.1: Documentation stub.
* txr.vim: Highlighting for new functions.
|
|
|
|
|
|
| |
expression, then recurse into the expression to find
variables. This allows us to do things like @{`@x`} inside
a @(repeat) or @(rep).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (subst_vars): Treat the variable as an arbitrary
expression rather than just a symbol.
* match.c (subst_vars): Likewise.
* parser.y (o_var): Further simplification. The first item in
an output var is an expr and not an IDENT.
* txr.1: Updated.
* txr.vim: Likewise.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
or not. This is now done right inside the standard output stream.
* match.c (output_produced): Variable removed.
(complex_open): Assignment to output_produced removed.
* stream.c (output_produced): New global variable.
(stdio_put_string, stdio_put_char): Set output_produced
to t if the target of the output is stdout.
* stream.h (output_produced): Declared.
* txr.h (output_produced): Declaration removed.
|
|
|
|
|
| |
Here is a simpler way. We can let nil be treated as a list with a
simple goto. This solves all cases.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* match.c (v_do): Store match context.
(match_fun): New function.
* match.h (match_fun): Declared.
* stream.c (streamp): New function.
* stream.h (streamp): Declared.
* txr.1: Stub section for match-fun.
* txr.vim: Highlight match-fun.
|
|
|
|
|
|
| |
* match.h (match_funcall): Declaration updated.
* filter.c (get_filter): Updated.
|
|
|
|
|
|
|
|
|
| |
list, and not the atom nil.
* match.c (v_try): Do not transform an atomic exception x into
the list ((t . x)). Just to (x). This (t . x) representation is
a vestige of from the time when the exception consisted of the
old-style return values from txeval.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (op_catch, expand_catch_clause,
expand_catch): New static functions.
(expand): Handle catch operator.
(eval_init): Added catch operator to op_table,
and registered new functions throw, throwf and error.
* txr.1: Documented catch operator and created
stub section for throw, throwf and error.
* txr.vim: Updated.
* unwind.c (uw_throwfv, uw_errorfv): New functions.
* unwind.h (uw_throwfv, uw_errorfv): Declared.
|
|
|
|
|
| |
range_star_v): Regression: handle the case where the range is
open-ended (to is nil).
|
|
|
|
|
|
|
|
|
|
|
| |
but the step is omitted, the step should be negative one
rather than one.
(range_star_v_func, range_star_v): New static functions.
(eval_init): New function, range*, registered.
* txr.1: Stub section for range is also for range*.
* txr.vim: Recognize range* function.
|
|
|
|
| |
not only if it achieves the endpoint, but if it crosses it.
|
|
|
|
|
|
| |
evaluates to nil, by building a form targetting the place,
and recursing into op_modplace. Also, optimization: don't use eval
on a form built from the operator; just go to op_modplace directly.
|