| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
quasiquoting. We cannot use the same symbol for the
literal form from the parser, and for the expanded form,
because this creates a confusion when there are multiple
nestings of quasiquote expansion.
* eval.c (vector_lit_s, vector_list_s, hash_lit_s): New symbol
variables.
(hash_construct_s): Relocated here from hash.c.
(expand_qquote): Part of bugfix: look for hash_lit_s
instead of has_construct_s. Translate to a hash_construct_s
form which is no longer recognizes as a hash literal.
Implementing recognition of a quasiquote vector literal,
handled similarly.
(eval_init): Initialize vector_lit_s, vector_list_s,
hash_list_s and hash_lit_s.
Use vector_list_s when registering vector_list function.
* eval.h (vector_lit_s, vector_list_s, hash_lit_s,
hash_constuct_s): Declared.
* hash.c (hash_construct_s): Variable removed
and relocated into eval.c.
(hash_init): Initialization of hash_construct_s removed.
* hash.h (hash_construct_s): Declaration removed.
* parser.y: (vector): Action updated to generate
a (vec-lit ...) form if the object contains unquotes,
otherwise generate a vector object.
(hash): Generate hash-lit form, not a
hash-construct form.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
to express dynamic hash table construction
* eval.c (expand_qquote): Recognize hash-construct
forms: expand the hash arguments and pairs separately,
then rewrite to a new hash-construct form.
(eval-init): hash-construct intrinsic function added.
* hash.c (hash_construct_s): New symbol variable.
(hash_construct): New function.
(hash_init): Initialize hash_construct_s.
* hash.h (hash_construct_s, hash_construct): Declared.
* parser.y (hash): Rule rewritten to emit either a literal
hash table object, or a hash-construct form, based on
whether quasiquote unquotes occur within the syntax.
(hash_from_notation): Function removed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* hash.c (print_key_val, hash_print_op): New static functions.
(hash_ops): hash_print_op wired in in place of cobj_print_op.
* parser.l (HASH_H): New token recognized.
* parser.y (HASH_H): New terminal symbol.
(hash): New nonterminal symbol.
(expr): Acquires hash as a constituent.
(hash_from_notation): New static function.
* txr.1: Hash syntax described.
* txr.vim: Updated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Blocks no longer extend to the end of the surrounding
scope.
* match.c (v_block): Rewrite for new syntax.
* parser.l (BLOCK): New token type handled.
* parser.y (BLOCK): New token.
(block_clause): New nonterminal grammar symbol.
(clause): Collateral fix: replaced a bunch of
list(X, nao) forms with cons(X, nil).
Introduced block_clause as a constituent of clause.
* txr.1: Revamped documentation of block, and
wrote about using blocks for reducing nested
skips and reducing backtracking in general.
|
|
|
|
|
|
| |
for the current way in which an identifier token is recognized.
As a result @(collect-ing) was being interpreted as @(collect -ing).
It should be the complement of NSCHR.
|
|
|
|
|
|
| |
can now be a function of one argument which maps
the original piece of text matched by the regex
to a replacement text.
|
| |
|
|
|
|
|
|
| |
consider data sent to std_error to be output for the purposes of
the output_produced flag. Otherwise the program behavior changes
in -v mode; it will not print bindings.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (eval_init): New intrinsic functions: url-encode, url-decode.
* filter.c (tourl_k, fromurl_k): New keyword variables.
(is_url_reserved, digit_value): New static functions.
(url_encode, url_decode): New functions.
(filter_init): Intialize new keyword variables and register
new :tourl and :fromurl filters.
* filter.h (tourl_k, fromurl_k, url_encode, url_decode): Declared.
* txr.1: Updated.
* txr.vim: Likewise.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
function. This must not flush out more than one character out of this
small buffer, except when we are flushing out the last data.
The correct operation is predicated on the assumption that
a complete character can be pulled out. That's why we move the
buffer to the front after consuming it, and do not automatically
flush until there are four bytes.
(string_out_put_string): We loop the call to string_out_byte_flush
here because when a request comes in to write a Unicode character,
we flush all the bytes, even if the tail of those bytes forms
an incomplete sequence that turns into U+DCxx codes.
(get_string_from_stream): Use the same loop termination test
as in string_out_put_string, for consistency. In that function
it is needed to prevent infinite looping in the case when
the string_out_put_string is being called from string_out_byte_flush
and is thus re-entering it.
* tests/010/strstream.expected: New file.
* tests/010/strstream.txr: New file.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This does the Right Thing with a mixture of bytes and characters.
Incomplete byte sequences.
* stream.c (struct strm_ops): Changing byte argument of put_byte
to int, since the put_byte API function can just pass down that
value after validating it.
(stdio_handle): Use available typedef.
(stdio_put_byte): Follow interface change in strm_ops.
Do not validate the range of a byte; the put_byte higher
level function does that now.
(struct string_output): New members: ud, byte_buf, head, tail.
(string_out_byte_callback, string_out_byte_flush): New static
functions.
(string_out_put_string): Flush any UTF-8 bytes in the byte buffer
before putting the string.
(string_out_put_byte): New static function, implementation for
put_byte on string output streams.
(string_out_ops): string_out_put_byte wired in.
(make_string_output_stream): Initialize new members of
of struct string_output.
(get_string_from_stream): Flush any UTF-8 bytes in the byte buffer
before retrieving the string.
(put_byte): Validate that the byte is in range. Pass byte
as C int down to the put_byte virtual.
|
|
|
|
|
| |
* stream.c (byte_in_stream_destroy): New function.
(byte_in_ops): Use new function instead of noop stub.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (cons_find): New function.
(expand_op): Use cons_find rather than tree_find to look for
rest_gensym.
* regex.c (regsub): Rearranged arguments so that the string
is last. This is better for partial evaluaton via the op
operator.
* regex.h (regsub): Updated declaration.
|
|
|
|
|
|
|
|
| |
* regex.c (regsub): New function.
* regex.h (regsub): Declared.
* txr.1: Doc stub added.
|
| |
|
| |
|
|
|
|
| |
Extending release 60 to include the plus fix.
|
|
|
|
| |
broken for fixnum <= 0. Bad pointer passed to MPI.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
variable on platforms where the MP digit is smaller than a long integer.
(Not anything TXR is known to run on). Changed algorithm to take the
first and last digit and add them together, rather than just taking the
last digit. The last digit will be zeros for numbers that contain 2 as a
factor with a large enough multiplicity.
* mpi-patches/add-mpi-toradix-with-case: Refreshed.
* mpi-patches/bit-search-optimizations: Likewise.
* mpi-patches/faster-square-root: Likewise.
* mpi-patches/fix-bad-shifts: Likewise.
* mpi-patches/fix-mult-bug: Likewise.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* txr.c (version): Bumped.
* txr.1: Bumped version and set date.
* configure (txr_ver): Bumped.
* RELNOTES: Updated.
* txr.vim: Handle : symbol properly.
* eval.c (op_defun): Bugfix: documentation says that defun supports
the same parameter list as lambda, and that is the intent. But
this was broken, since op_defun was expecting the parameter list
to be a proper list containing only bindable symbols, ruling out
the use of the consing dot for rest parameter as well as the colon
keyword symbol for optional parmeters.
|
|
|
|
| |
* txr.1: Documented.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
can't ever come out true.
* match.c (search_form, h_var, h_coll, h_parallel, h_fun): Handle
position t emanating from match_line, indicating match to end of line.
(h_skip): When skipping to the end of line (empty spec), just
return t as the position rather than the end of the line. This avoids
calculating the length of the line, which forces a lazy string.
(do_match_line): Near the beginning of the loop, if the position is t,
then substitute the length of the line.
(freeform_prepare): Return the freeform line limit value.
(v_freeform): Check for t coming out of match line and do the
conversion back to the trailing list in that case, but only if
the freeform was limited by number of lines.
|
|
|
|
|
|
|
| |
but match_line returns absolute, and so needs to be offset by -c->base.
(h_trailer, h_fun): Bugfix: return the absolute position, rather than
relative c->pos. The return value of these functions becomes the return
value of do_match_line, so the semantics has to agree.
|
|
|
|
| |
location using source_loc_str rather than raw object using source_loc.
|
| |
|
|
|
|
| |
directives following the load and consume input properly.
|
|
|
|
| |
and for load.
|
|
|
|
| |
Load directive moved before Output section.
|
|
|
|
| |
Fixed typo.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
that occur in horizontal matching of basic text patterns.
* lib.c (match_str, match_str_tree): New functions.
* lib.h (match_str, match_str_tree): Declared.
* match.c (do_match_line): Use match_str_tree and match_str when matching
strings and string lists, respectively, rather than stupidly calling
search functions and then asserting that the match was found at the
starting position.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The check for completely matching a line is now done within
do_match_line.
(match_line): Pass nil to do_match_line, specifying that a prefix
match is okay.
(match_line_completely): New interface to do_match_line, which
requests a match to the end of the line.
(v_freeform): Pass nil to do_match_line: freeform needs
incomplete match semantics.
(match_files): Use match_line_completely instead of match_line.
By doing it this way, we do not need to compute the length of
the original line and compare it to the absolute position.
This saves time and memory since computing the length of a lazy
string forces it.
|
|
|
|
|
|
| |
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.
|