| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
| |
* txr.c (version): Bumped.
* txr.1: Bumped version and set date.
* configure (txr_ver): Bumped.
* RELNOTES: Updated.
|
|
|
|
|
|
|
|
| |
* eval.c (eval_init): New functions registered as intrisics.
* lib.h (exptmod, gcd): Declared.
* txr.1: Documentation stubs added.
|
|
|
|
|
|
|
|
| |
* eval.c (eval_init): New functions registered as intrinsics.
* lib.h (evenp, oddp): Declared.
* txr.1: Documentation stub updated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(abso, isqrt): New functions.
(isqrt_fixnum): New static function.
* eval.c (eval_init): Registered abs, sqrt and numberp instrinsics.
* lib.c (numberp): New function.
* lib.h (numberp, abso, isqrt): Declared.
* mpi-patches/series: New patch added.
* mpi-patches/faster-square-root: New patch added.
* txr.1: Documentation stubs for new functions.
|
| |
|
|
|
|
| |
(distclean): Remove mpi directory.
|
|
|
|
|
|
|
|
| |
so that obj_t stays four pointers wide.
* mpi-patches/series: New patch added.
* mpi-patches/shrink-mpi-int: New file.
|
|
|
|
|
|
|
|
|
| |
storage class specifier.
* mpi-patches/fix-mult-bug (s_mp_sqr): More braindamage found in MPI.
This function performs additions and multiplication mp_digit,
expecting a mp_word precision result without casting. This function
is needed for exponentiation.
|
|
|
|
|
|
|
|
|
| |
the highest bit, replacing them with an adapation of the
bit searching function used in arith.c.
* mpi-patches/series: Patch added.
* mpi-patches/bit-search-optimizations: New file.
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (eval_init): Registering new intrinsic functions,
reduce-left, reduce-right and expt.
* lib.c (minusv): Return one instead of num(1).
(exptv, reduce_right): New functions.
* lib.h (expt, exptv, reduce_right): Declared.
* txr.1: Blank sections for new functions.
|
|
|
|
|
|
|
|
|
|
|
|
| |
s_mp_mul_d and added to patch. This one caused malloc corruption and
crashes, because the incorrect arithmetic causes the function
to think that the multiplication will not be needing another
digit, but then there is a carry out which does spill into
a new digit.
* mpi-patches/series: Arg! Somehow the patch fix-bad-shift
went missing from the series file, even though the patch
itself is in the GIT repository.
|
|
|
|
|
|
|
|
|
|
| |
* txr.c (version): Bumped.
* txr.1: Bumped version and set date.
* configure (txr_ver): Bumped.
* RELNOTES: Updated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
with bignum support.
* eval.c (eval_init): Added bignump and zerop as intrinsic function.
Renamed numberp to fixnump.
* lib.c (zerop, gt, lt, ge, le): Functions removed.
(numeq): Unused function removed.
* lib.h (numeq): Declaration removed.
* txr.1: Sections for zerop and bignump created. Changed reference
to numberp to fixnump.
|
|
|
|
|
| |
(trunc): Plugged memory leaks. Straightened out semantics
with negative modulus. (Residue comes out negative).
|
|
|
|
|
|
| |
(mod): New function, reimplementation of removed mod from lib.c.
* lib.c (mod): Function removed.
|
|
|
|
|
|
|
|
|
|
|
| |
code like 1 << n, where n exceeds the width of the type int.
* arith.c (trunc): New function, reimplementation of removed
trunc from lib.c.
* lib.c (trunc): Removed.
* mpi-patches/fix-bad-shifts: New file.
|
|
|
|
|
|
|
| |
(plus, minus): Bugfix: must not pass signed values to mp_add_d and
mp_sub_d functions.
(mul): Must not pass signed value to mp_mul_d. Also, fixed type check
on wrong argument in the (TAG_PTR, TAG_NUM) case.
|
| |
|
|
|
|
| |
* arith.txr: File removed.
|
|
|
|
|
| |
* arith.txr (normalize): Bugfix: was not turning +/- NUM_MAX bignums
into fixnums.
|
|
|
|
|
| |
* arith.txr (highest_bit): Missing #else added, fixing
SIZEOF_PTR == 4 case.
|
|
|
|
|
| |
* arith.txr (highest_bit): Oops, half the logic for
the 64 bit case was missing due to to a cut and paste mistake.
|
|
|
|
|
| |
* arith.txr (highest_bit): New function.
(mul): Use highest_bit instead of shift based algorithm.
|
|
|
|
| |
properly and highlighted.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* arith.c: Regenerated.
* arith.txr (CNUM_BIT): New constant.
(bignum, bignum_dbl_ipt): New static functions.
(@{add-fname}): Use bignum function.
(mul): New functions, rewrite of mul from lib.c.
* lib.c (mul): Function removed.
* mpi-patches/add-mp-set-intptr (mp_set_intptr): Revised patch.
Local variable v should be int_ptr_t not unsigned long.
Also, the mp_set interface doesn't set the sign; it's an unsigned
interface. We must do that ourselves.
* mpi-patches/fix-mult-bug: The main multiplication function is
also broken in the same way, requiring the cast.
* mpi-patches/mpi-set-double-intptr: Fixed use of wrong type for
local variable v.
|
|
|
|
|
|
| |
* mpi-patches/mpi-set-double-intptr: New file.
* mpi-patches/series (mpi-set-double-intptr): Patch added.
|
|
|
|
|
| |
is twice the size of intptr_t. It may not be available, so
there is a HAVE_ macro to detect it.
|
|
|
|
|
|
| |
* mpi-patches/series (mpi-set-mpi-word): New patch.
* mpi-patches/mpi-set-mpi-word: New file.
|
|
|
|
|
|
|
|
| |
* hash.c (hash_eql, hash_equal): New external functions.
* hash.h (hash_eql, hash_equal): Declared.
* txr.1: Sections added.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
low-order bit material from the bignum to fill an unsigned long.
We don't need to walk the entire bignum. If the low order
digit of the bignum is at least as large as an unsigned long,
we just take that as the hash, otherwise we take enough of the
digits to fill an unsigned long. For negative numbers, we just
invert the bits of the hash.
* mpi-patches/add-mpi-toradix-with-case: Refreshed.
* mpi-patches/fix-mult-bug: Refreshed.
|
|
|
|
| |
with an initial element of 1.
|
|
|
|
| |
with an initial element of zero.
|
|
|
|
|
|
|
|
|
|
|
| |
(NOOP): New macro.
(plus): Use NOOP macro.
(minus, neg): Function moved here from lib.c and rewritten
for bignum support.
* lib.c (minus, neg): Functions removed.
* arith.txr: New file.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
* configure (longlong, ulonglong, superlong, usuperlong): Initialize
these variables so that if the detection tests fail, the script
does not access unbound variables.
Avoid adding junk like .bss.* into config.h.
* mpi-patches/config-types: Fixed wrong use of nonexistent
SIZEOF_LONG_T.
|
|
|
|
|
| |
* mpi-patches/config-types: Added missing definitions
of MP_DIGIT_SIZE in two cases.
|
|
|
|
|
| |
* mpi-patches/config-types: Added missing definitions
of MP_DIGIT_SIZE in two cases.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Bignums, based on Michael Fromberger's MPI library, are integrated
into the input syntax, stream output, equality testing, the garbage
collector, and hashing.
The plus operation handles transitions between fixnums and bignums.
Other operations are still fixnum only.
* Makefile (CFLAGS): Add mpi directory to include file search.
(OBJS): Include new arith.o module and all of MPI_OBJS.
(MPI_OBJS, MPI_OBJS_BASE): New variables.
* configure (mpi_version, have_quilt, have_patch): New variables.
Script detects whether patch and quilt are available. Unpacks
mpi library, applies patches. Detects 128 bit integer type.
Records more information in config.h about the sizes of types.
* dep.mk: Updated.
* depend.txr: Make work with paths that have directory components.
* eval.c (eval_init): Rename of nump to fixnump.
* gc.c (finalize, mark_obj): Handle BGNUM case.
* hash.c: (hash_c_str): Changed to return unsigned long
instead of long.
(equal_hash): Handle BGNUM case.
(eql_hash): Handle bignums with equal-hash, but other
objects as eq.
* lib.c (num_s): Variable renamed to fixnum_s.
(bignum_s): New symbol variable.
(code2type): Follow rename of num_s. Handle BGNUM case.
(typeof): Follow rename of num_s.
(eql): Handle bignums using equal, and other types using eq.
(equal): Handle BGNUM case.
(chk_calloc): New function.
(c_num): Wording change in error message: is not a fixnum.
(nump): Renamed to fixnump.
(bignump): New function.
(plus): Function removed, reimplemented in arith.c.
(int_str): Handle integers which are too large for wcstol
using bignum conversion. Base 0 is no longer passed to
wcstol but converted to 10 because the special semantics
for 0 would be inconsistent for bignums.
(obj_init): Follow rename of num_s. Initialize bignum_s.
|
|
|
|
|
|
| |
* eval.c (and_s, or_s): Redundant variables removed.
* match.h (do_s): extern storage class specifier added.
|
|
|
|
|
|
|
|
| |
a named block around it, thereby imitating a Common Lisp feature.
(op_for): Establish an anonymous block around the loop body,
test form and increment forms.
* txr.1: Documented named block in defun. Documented for and for *.
|
| |
|
|
|
|
| |
Blank section for list-vector function added.
|
|
|
|
|
|
|
| |
the arguments. We want (push item list) for compatibility with CL.
(expand): Bugfix: some of the cases were constructing new
forms using unexpanded pieces from the original form.
Added separate case for push, which handles the reversed arguments.
|