| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| |
|
| |
|
|
|
|
|
| |
correct place. In the previous commit I did it in the code that handles
the obsolescent :var syntax.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* lib.c:x (lazy_flatten_scan, lazy_flatten_func): New static functions.
(lazy_flatten): New function.
* lib.h (lazy_flatten): Declared.
* match.c (v_next): Use lazy_flatten instead of flatten for
processing a :list source. This means that @(next :list ...)
can be used to process infinite lazy lists.
* txr.1: Documented lazy-flatten.
|
|
|
|
|
|
| |
(make_random_state): After initializing, retrieve eight
random numbers to clear pathological initial behavior
leading to duplicate values.
|
|
|
|
|
|
|
|
| |
* arith.h (highest_bit): Declared.
* rand.c (random): Rewrote using different algorithm which
ensures even distribution, and avoids doing a bignum mod
operation.
|
|
|
|
|
|
|
|
|
|
| |
* txr.c (version): Bumped.
* txr.1: Bumped version and set date.
* configure (txr_ver): Bumped.
* RELNOTES: Updated.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
(some_satisfy): Return the first non-nil result, rather than t.
(all_satisfy): Return the value of the last item, if all items
are processed.
* lib.h (memql): Declared.
* txr.1: Documented memq, memql, memqual, tree-find, some,
all, none, eq, eql and equal.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
* match.c (extract_bindings): Make sure there are no duplicate
variables among the extracted bindings. This is needed because
of the other changes.
(do_output_line, do_output): In handling the rep/repeat directives,
append the original bindings to the extracted set bindings for the
variables which just occur in the clause, so that Lisp code can see all
of the variables.
|
|
|
|
|
|
|
| |
the object is not a string or number, then print it to a string
and treat it as a string, adjusting it within the field.
Also, do not simply abort on an unknown format directive
but throw a proper exception.
|
|
|
|
|
| |
using < rather than '-'. The +, space and leading 0 are
specified on the precision, not the width.
|
|
|
|
|
| |
together. Otherwise for fixnum moduli, we get only a 32 bit number no
matter what the modulus is.
|
|
|
|
|
| |
strings are printed the same way under ~s and ~a. The only difference
is printing other kinds of objects.
|
|
|
|
|
|
|
|
|
|
|
| |
* stream.c (format_num): New argument: sign character.
Rewrote to handle precision, width, zero padding and
leading sign similarly to printf.
(vformat): New syntax accepted: a space or + before
the width specifies that a positive sign is to be
explicitly written as a space or + character.
Pass one more argument to vormat_num calls.
Bugfix: go back to vf_init state after processing ~~.
|
|
|
|
|
|
|
|
|
|
|
| |
* arith.c (plus, minus, mul, gt, ge, lt, le, exptmod, gcd): Remove
trailing abort; we already marked uw_throwf as noreturn. This hack
should not be needed in functions where the last statement is a throw.
(trunc, expt): Repeated error case handled in one place. Temp variable
used to avoid two calls to mp_clear. Call to abort removed.
(mod): Repeated error handed in one place. Plugged memory leak
by moving throw past mp_clear calls. Call to abort removed.
(isqrt): Repeated error case handed in one place.
|
| |
|
|
|
|
|
|
|
|
| |
* arith.h (normalize): Declared.
* rand.c (random): Bugfix: normalize the bignum before returning it.
* txr.1: Doc stubs for PRNG functionality.
|
| |
|
|
|
|
| |
Work properly when mp_digit is smaller than 32 bits.
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c: Includes rand.h header.
(eval_init): New variable and functions from rand module registered.
* lib.c: Includes rand.h header.
(init): Call rand_init.
* rand.c: New file.
* rand.h: New file.
|
|
|
|
|
|
|
| |
Better fix.
* parser.y (YYEOF): If YYEOF is not defined, define it as zero.
(yybadtoken): Undo previous changes: do not test for zero.
|
|
|
|
|
| |
* parser.y (yybadtoken): The current token (yychar) is 0 on byacc
rather than YYEOF or YYEMPTY, so we have to handle that.
|
| |
|
|
|
|
|
|
| |
* tests/007/except-2.expected: New file.
* tests/007/except-2.txr: New file.
|
|
|
|
|
|
|
|
| |
* lib.c (cat_vec): New function.
* lib.h (cat_vec): Declared.
* txr.1: Documentation stub.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* unwind.c (uw_unwind_to_exit_point): When jumping to a catch frame,
do not mark it invisible.
* unwind.h (uw_catch): Flip the matches to nil so that this catch
frame can no longer be identified as an unwind point by uw_throw,
and thus will not be re-entered for the purposes of handling
an exception. It remains visible for the purposes of running the
clean up code.
(uw_unwind): Prior to executing cleanup forms, flip the visibility
to 0. This means that the frame will no longer be re-entered
for any reason.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (op_unwind_protect): Use uw_simple_catch_begin,
and remove the uw_catch (exsym, exvals) clause. Put
explicit braces around the unwind code even though it
is only one statement.
* match.c (do_txeval): Got rid of empty uw_unwind clause.
This is not needed any longer.
(v_try): Got rid of explicit uw_do_unwind calls.
* unwind.h (uw_simple_catch_begin): New macro.
(uw_do_unwind): Macro removed.
(uw_catch): Added goto uw_unwind_label at the front.
This way if the previous clause falls through,
control goes to the unwind logic.
(uw_unwind): Got rid of initial break. Previous
clause should fall through to unwind logic,
whether it is the main clause, or one of the catches.
(uw_catch_end): Default case aborts, because
we don't expect this.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
due to negative hashing values being reduced modulo table size
to a negative array index.
* hash.c (equal_hash, eql_hash): Ensure
that value returned is in the range [0,NUM_MAX].
(hash_obj): Unused function removed.
(cobj_hash_op): Use hashing similar to eql hash for
other kinds of references.
(hash_eql, hash_equal): Removed bogus % NUM_MAX reduction.
* hash.h (hash_obj): Declaration removed.
|
|
|
|
|
|
|
|
| |
* lib.c (copy_vec, sub_vec): New functions.
* lib.h (copy_vec, sub_vec): Declared.
* txr.1: Stub sections created.
|
|
|
|
|
|
|
|
|
|
| |
* txr.c (version): Bumped.
* txr.1: Bumped version and set date.
* configure (txr_ver): Bumped.
* RELNOTES: Updated.
|
|
|
|
|
|
|
|
|
|
| |
functions.
(expand): New case for quasiliterals.
(eval_init): Register quasi literal as special operator.
* match.c (format_field): Linkage changed to external.
* match.h (format_field): Declared. Declarations rearranged.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(eval_init): Registered new functions: symbol-function,
func-get-form, func-get-env, functionp, interp-fun-p.
* lib.c (nappend2, getplist_f, improper_plist_to_alist):
tail variable renamed to avoid clash in macro.
(func_get_form, func_get_env, interp_fun_p): New functions.
* lib.h (func_get_form, func_get_env, interp_fun_p): Declared.
(list_collect): Fix macro not to throw error, but handle the case.
* match.c (vars_to_bindings, extract_bindings): tail variable
renamed to avoid clash in macro.
* txr.1: Documentation stubs.
|
|
|
|
|
|
|
|
| |
* hash.c (equal_hash): Eliminating displacement from character
hashes. Simplifying some code.
(eql_hash): Handle fixnums, characters and literals specially,
rather than hashing all value types the same way. The shift
applicable for object pointers causes adjacent integers to clash.
|
|
|
|
| |
expand on a list of forms.
|
| |
|
|
|
|
| |
(vector_list): Wrong zero used, resulting in vector(nil) being called.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* lib.c (copy_list): Use list_collect_append rather than
list_collect_terminate.
(append2, appendv): Simplified using new list_collect_append.
(nappend2): Simplified using new list_collect_nconc.
* lib.h (list_collect): Added check for accidental usage
of list_collect after list_append, since PTAIL has different
semantics.
(list_collect_nconc, list_collect_append): Semantics fixed so that
append collecting works more like the Common Lisp append function,
allowing trailing atoms or a lone atom. The meaning of PTAIL is
changed, however. Now PTAIL actually tracks the head of the most
recently appended segment. Each append operation has to first
traverse the previously added piece to get to the end.
(list_collect_terminate): Macro removed.
* match.c (v_gather): Removed useless use of list_collect_terminate.
* parser.y: Some headers added that are needed by list_collect.
* txr.1: Documented append, list, atom, null, not, consp, make-lazy-cons,
lcons-fun, listp, proper-listp, length-list, mapcar, mappend, and apply.
|
|
|
|
|
|
|
|
|
|
|
| |
can now be used. Within nested forms,
Lisp-compatible ; comments are suported.
* parser.l: Support @# and ; comments.
* txr.1: Documentation updated.
* txr.vim: Updated.
|
|
|
|
|
|
|
|
| |
after calling it.
(rplacd): Do not set the lazy cons function to nil
in.
* txr.1: Documented a bunch of functions.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Renamed vec_set_fill to vec-set-length.
* hash.c (equal_hash): vec_fill to vec_length name change.
(hash_grow, make_hash): No need to call vec_set_length.
* lib.c (equal, vecref, vec_push, length_vec, list_vector,
obj_print, obj_pprint): vec_fill to vec_length name change.
(vector): Argument now represents actual length, not just allocated
size.
(vec_get_fill): Function removed; did exactly the same thing
as length_vec.
(vec_set_fill): Function renamed to vec_set_length.
(vector_list): Allocate a 0 length vector initially.
* lib.h (enum vecindex): member changes name from vec_fill
to vec_length.
(vector): Parameter name changed.
(vec_set_fill): Redeclared.
(vec_get_fill): Declaration removed.
* txr.1: Doc stubs updated.
|
|
|
|
|
|
|
|
| |
Ignore the return value of the lazy cons function: do not
return nil if the function returns nil.
This useless behavior was a source of inconvenience in lazy
cons programming, requiring the lazy function to return
non-nil in addition to installing the car and cdr fields.
|
| |
|
| |
|
|
|
|
| |
* txr.1: Finished documenting special operators.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (eval_init): New functions interned.
* lib.c (num_chr, chr_num): New functions.
* lib.h (num_chr, chr_num): Declared.
* txr.1: Documentation stubs.
|