summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* New functionality: mod and modlast directives in repeat and rep.Kaz Kylheku2011-12-298-30/+202
| | | | | | | | | | | | | | | | | | | | | | * eval.c (eval_init): Use new symbol variable mod_s instead of calling intern. * match.c (mod_s, modlast_s): Symbol variables defined. (do_output_line): mod and modlast directives implemented under rep. (do_output): likewise under repeat. (syms_init): Initialize new symbol variables. * match.h (mod_s, modlast_s): Declared. * parser.l (MOD, MODLAST): Parse new token types. * parser.y (MOD, MODLAST): New tokens. (repeat_parts_opt, rep_parts_opt): New syntax. (repeat_rep_helper): Handle mod and modlast syntax. * txr.1: Updated. * txr.vim: Updated.
* * parser.y (repeat_rep_helper): Bugfix. Circular listsKaz Kylheku2011-12-292-1/+8
| | | | | | were being created here when clauses of the same kind appear multiple times. The problem is that append2 no longer copies the second list, which the code was relying on it to do.
* * txr.1: Missing Description headings added.Kaz Kylheku2011-12-292-0/+5
|
* * txr.1: Useless sentence under reduce-left and reduce-right removed.Kaz Kylheku2011-12-292-3/+4
|
* Spelling.Kaz Kylheku2011-12-291-2/+2
|
* * txr.1: Clarifying semantics of exceptions being thrown inKaz Kylheku2011-12-281-8/+13
| | | | catch clauses and in finally clauses.
* * genman.txr: Updated for recent man page changes.Kaz Kylheku2011-12-282-1/+5
|
* Version 51txr-51Kaz Kylheku2011-12-285-3/+42
| | | | | | | | | | * txr.c (version): Bumped. * txr.1: Bumped version and set date. * configure (txr_ver): Bumped. * RELNOTES: Updated.
* * txr.1: Capitalize TXR where it makes sense.Kaz Kylheku2011-12-282-76/+68
| | | | Introductory text rewritten.
* Missing entry for previous commit.Kaz Kylheku2011-12-281-0/+6
|
* * match.c (LOG_MATCH): Use < in format directive instead of -.Kaz Kylheku2011-12-282-2/+3
| | | | * rand.c (random): Add back missing declaration.
* * parser.y (quasi_item): Switch from var to o_var. This fixesKaz Kylheku2011-12-282-1/+7
| | | | | cases like `@a@(foo)@b` where foo was being translated to (foo) rather than (sys:expr foo).
* * mpi-patches/shrink-mpi-int (mpi_int): Fixed terrible bug in thisKaz Kylheku2011-12-272-8/+12
| | | | | patch, resulting in an insufficient bit field width for representing the allocation size of the MPI integer on 32 bit platforms.
* * rand.c (make_state): Use ANSI C syntax for prototyped function of noKaz Kylheku2011-12-272-2/+8
| | | | | | arguments. This snuck through due to working with a C++ compiler. (random): Fixed unused variable warning that happens on 32-bit-pointer platforms.
* More formatting changes.Kaz Kylheku2011-12-251-267/+192
|
* * txr.1: Formatting fixes.Kaz Kylheku2011-12-252-31/+99
|
* * dep.mk: Overdue update.Kaz Kylheku2011-12-252-4/+9
|
* * match.c (v_next): Change flatten to lazy_flatten in theKaz Kylheku2011-12-252-1/+7
| | | | | correct place. In the previous commit I did it in the code that handles the obsolescent :var syntax.
* * eval.c (eval_init): New function interned.Kaz Kylheku2011-12-256-3/+80
| | | | | | | | | | | | | * 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.
* * rand.c (rand32): Moved.Kaz Kylheku2011-12-232-21/+32
| | | | | | (make_random_state): After initializing, retrieve eight random numbers to clear pathological initial behavior leading to duplicate values.
* * arith.c (highest_bit): Changing to external linkage.Kaz Kylheku2011-12-234-20/+60
| | | | | | | | * arith.h (highest_bit): Declared. * rand.c (random): Rewrote using different algorithm which ensures even distribution, and avoids doing a bignum mod operation.
* Version 50txr-50Kaz Kylheku2011-12-235-4/+72
| | | | | | | | | | * txr.c (version): Bumped. * txr.1: Bumped version and set date. * configure (txr_ver): Bumped. * RELNOTES: Updated.
* Missing log entry re-created.Kaz Kylheku2011-12-231-0/+7
|
* * lib.c (memql): New function.Kaz Kylheku2011-12-234-5/+163
| | | | | | | | | | | (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.
* * txr.1: Documented copy-list, reverse, nreverse, ldiff and flatten.Kaz Kylheku2011-12-222-0/+107
|
* * txr.1: Documented reduce-left and reduce-right.Kaz Kylheku2011-12-222-0/+54
|
* Bug #35010Kaz Kylheku2011-12-222-9/+26
| | | | | | | | | | * 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.
* * stream.c (vformat): If width is specified for ~s or ~a, andKaz Kylheku2011-12-222-1/+15
| | | | | | | 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.
* * stream.c (vformat): Left-adjusted field is now specifiedKaz Kylheku2011-12-222-11/+15
| | | | | using < rather than '-'. The +, space and leading 0 are specified on the precision, not the width.
* * rand.c (random): Fix for 64 bit fixnums: stick two random numbersKaz Kylheku2011-12-222-0/+10
| | | | | together. Otherwise for fixnum moduli, we get only a 32 bit number no matter what the modulus is.
* * stream.c (vformat): Combine ~a and ~s cases, so numbers andKaz Kylheku2011-12-222-30/+12
| | | | | strings are printed the same way under ~s and ~a. The only difference is printing other kinds of objects.
* Bug #35026Kaz Kylheku2011-12-222-14/+45
| | | | | | | | | | | * 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 ~~.
* Bug #35136 and cleanup.Kaz Kylheku2011-12-222-32/+41
| | | | | | | | | | | * 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.
* * txr.vim: Fixed to char literal syntax.Kaz Kylheku2011-12-212-0/+5
|
* * mpi-patches/bit-search-optimizations (s_highest_bit):Kaz Kylheku2011-12-211-13/+13
| | | | | | It will take days to completely wipe the egg off my face. I forgot to fix this code for unsigned integers before pasting it into MPI.
* * arith.c (normalize): Linkage changed to extern.Kaz Kylheku2011-12-215-2/+21
| | | | | | | | * arith.h (normalize): Declared. * rand.c (random): Bugfix: normalize the bignum before returning it. * txr.1: Doc stubs for PRNG functionality.
* * rand.c: Added comment about source of algorithm.Kaz Kylheku2011-12-212-0/+8
|
* * rand.c (random): Bugfix: not building up sufficiently large bignums.Kaz Kylheku2011-12-212-3/+17
| | | | Work properly when mp_digit is smaller than 32 bits.
* * Makefile (OBJS): new object file, rand.o.Kaz Kylheku2011-12-216-1/+256
| | | | | | | | | | | | * 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.
* Bug #35139Kaz Kylheku2011-12-212-3/+12
| | | | | | | Better fix. * parser.y (YYEOF): If YYEOF is not defined, define it as zero. (yybadtoken): Undo previous changes: do not test for zero.
* Bug #35139Kaz Kylheku2011-12-212-3/+10
| | | | | * parser.y (yybadtoken): The current token (yychar) is 0 on byacc rather than YYEOF or YYEMPTY, so we have to handle that.
* * Makefile (distclean): use rm -rf on mpi directory.Kaz Kylheku2011-12-212-1/+6
|
* Test case for bug #35137Kaz Kylheku2011-12-203-0/+30
| | | | | | * tests/007/except-2.expected: New file. * tests/007/except-2.txr: New file.
* * eval.c (eval_init): New function registered.Kaz Kylheku2011-12-205-0/+44
| | | | | | | | * lib.c (cat_vec): New function. * lib.h (cat_vec): Declared. * txr.1: Documentation stub.
* Bug #35137Kaz Kylheku2011-12-203-11/+24
| | | | | | | | | | | | | | * 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.
* Streamlining exception handling macros a little bit.Kaz Kylheku2011-12-204-13/+39
| | | | | | | | | | | | | | | | | | | | | | * 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.
* Critical regression. Hash lookup was crashing on some platformsKaz Kylheku2011-12-203-24/+40
| | | | | | | | | | | | | | 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.
* * eval.c (eval_init): New functions registered as intrinsics.Kaz Kylheku2011-12-205-0/+68
| | | | | | | | * lib.c (copy_vec, sub_vec): New functions. * lib.h (copy_vec, sub_vec): Declared. * txr.1: Stub sections created.
* Version 049txr-049Kaz Kylheku2011-12-195-4/+64
| | | | | | | | | | * txr.c (version): Bumped. * txr.1: Bumped version and set date. * configure (txr_ver): Bumped. * RELNOTES: Updated.
* * eval.c (subst_vars, op_quasi_list, expand_quasi): New staticKaz Kylheku2011-12-194-4/+110
| | | | | | | | | | 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.