| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
| |
* txr.1: The window-mapdo function is analogous to mapdo, not
window-mappend. Reported by vapnik spaknik.
|
|
|
|
|
|
|
|
| |
* stdlib/getopts.tl (opthelp): If the long/short part of an
option description is 34 characters long or more, print the help
text starting on the next line, lest it be glued to the
long/short part (i.e., without an intervening space) and extend
too far to the right.
|
|
|
|
|
| |
* stdlib/getopts.tl (opthelp): Actually use the function's stream
parameter in the put-line calls.
|
|
|
|
|
|
|
| |
* cadr.c, cadr.h, stdlib/cadr.tl: Regenerated. All that
changes is the formatting of the copyright block, since now it
is scraped from files that reformatted it to 80 columns half a
year ago.
|
|
|
|
|
| |
* stdlib/conv.tl: Extra blank line after copyright header
removed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Commit 93edcde038209335122964432bd35dee0c2ecb04, made in
August 2021, accidentally removed the blank line after the
copyright header in most stdlib files.
stdlib{asm.tl, awk.tl, build.tl, compiler.tl, copy-file.tl,
debugger.tl, doloop.tl, each-prod.tl, error.tl, except.tl,
ffi.tl, getopts.tl, getput.tl, hash.tl, ifa.tl, match.tl,
op.tl, package.tl, param.tl, path-test.tl, pic.tl, place.tl,
pmac.tl, quips.tl, save-exe.tl, socket.tl, stream-wrap.tl,
tagbody.tl, termios.tl, trace.tl, txr-case.tl, type.tl,
vm-param.tl, with-resources.tl, with-stream.tl, yield.tl}:
Ensure there is a blank line after the copyright header.
|
|
|
|
|
| |
* mpi.c (mp_mul_2, mp_2expt, mp_addmod, mp_submod,
mp_mulmod, mp_sqrmod): Excluded from compilation.
|
|
|
|
|
|
|
|
|
| |
* rand.c (random_sample): The brnach of the code for lists is
converted from the naive algorithm R which requires a random
integer for each element of the sequence to a list adaptation
of the smarter algorithm L used for vector. We don't have
random access through the list being sampled, but we can step
to new positions without generating random numbers.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Implements reservoir sampling.
* rand.c (radom_float_impl): New static function, made out of
random_float. Returns double, giving us access to the unboxed
result
(random_float): Now a wrapper around random_float_impl: boxes
the result of random_float.
(elrd, flrd, random_sample): New static functions.
(rand_init): Register random-sample intrinsic.
* txr.1: Documented.
* stdlib/doc-syms.tl: Updated.
|
|
|
|
|
|
|
|
|
| |
* parser.c (repl): The line_w variable must be volatile
because it's modified after we save the context for catching
exceptions. Without this, I'm seeing that expressions that
throw an exception are not being entered into the linenoise
history, because the exception catch restores the null initial
value of line_w.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is an issue that affects plain mode, because in full
editing mode, linenoise reads Ctrl-C as a character.
In plain mode, Ctrl-C-generated SIGINT behaves curiously.
The ^C characters appear, and the current line of input
is discarded. This is because the linenoise() call is not
enclosed in the catch region. The registered signa handler
goes off, and repl_intr is called. Thta function throws the
intr exception. Since that exception isn't derived from error,
and there is no handler for it, nothing happens. The signal
handler just returns.
In this fix, we move the linenoise call into the catch
region of the REPL loop, so the interrupt is handled. The
entire multi-line input is aborted, an ** intr message
is printed, and the REPL waits for another line.
Issues reportd by Paul A. Patience.
* parser.c (repl): Move the uw_catch_begin above the linenoise
call. This means that the surrounding code can no longer use
continue to continue the loop, or break to terminate. Instead
of "continue" we go to a new "contin" label placed at the
bottom of the catch processing, just before the end of the
loop. The EOF case now sets the done fag and also branches to
that label. Some free(line_w) calls no longer have to be done
because the unwinding block takes care of it. In the
exception catching block, we no actually check for the intr_s
exception.
|
|
|
|
|
|
|
| |
* linenoise/linenoise.c (linenoise): In plain mode, like in
full editing mode, when EOF is detected, print a newline
so that when TXR exit to an interactive shell, the shell's
prompt starts on a new line.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If newlines are inserted into the input, they don't behave
well. The is_balanced_line callback doesn't recognize them as
line terminators for the purposes of delimiting ; comments.
Also, they make a mess in the ~/.txr_history file.
Plus, users of shells like Bash are used to Ctrl-V Ctrl-J
inserting a line break; some users have that in their muscle
memory. So let's just do that as a special case: Ctrl-V Ctrl-J
behaves like Ctrl-V Ctrl-M.
* linenoise/linenoise.c (history_search, edit): Remap a
verbatim Ctrl-J to a carriage return.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The is_balanced_line function assumes that comments are
terminated by a carriage return, whic his the multi-line
convention used by the interactive repl. The plain-mode
listener, though, only replaces newlines by carriage returns
when returning the complete multi-line input. When invoking
the is_balanced_line callback, the newlines are still there,
and so comments are not handled properly.
Reported by Paul. A. Patience.
* linenoise/linenoise.c (linenoise): In plain mode, replace
the trailing newline with a carriage return after every
physical line input, before that line is passed to the
lino->enter_callback (i.e. is_balanced_line). The code to
replace newlines with carriage returns at the end is
consequently no longer required.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (eval_init): copy-cptr intrinsic registered.
* lib.c (copy_cptr): New function.
(copy): Use copy_cptr for CPTR objects.
* lib.h (copy_cptr): Declared.
* tests/017/ffi-misc.tl: New test cases.
* txr.1: Documented.
* stdlib/doc-syms.tl: Updated.
|
|
|
|
|
|
|
|
|
| |
* filter.c (filter_string_tree): The function tries to call
uw_throwf when an invalid filter is provided, but an overzealous
return statement renders the effort futile. Remove the return
statement, change the exception type from error_s to
type_error_s, and conform the message to the usual type-error
style.
|
|
|
|
| |
% stdlib/quips.tl (%quips%): New one.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.[ch] (lookup_global_var_l): Remove.
* itypes.[ch] (c_schar): Likewise.
* lib.[ch] (null_list, rcyc_list, gequal, func_n6v, func_n7v,
func_n8v, do_pa_123_23, pa_123_23, orf, aconsql_new_c):
Likewise.
(obj_init): Remove references to null_list.
* mpi/mpi-config.h (MP_FOR_TXR): New preprocessor symbol,
defined as 1.
* mpi/mpi.c (mp_get_prec, mp_set_prec, mp_init_array,
mp_clear_array, mp_set_word, mp_exptmod_d, mp_cmp_d,
mp_cmp_mag, mp_cmp_int, mp_lcm, mp_xgcd, mp_invmod,
mp_char2value): Exclude using #if !MPI_FOR_TXR, rather
than remove. We don't bother excluding the declarations in the
header.
* utf8.[ch] (w_freopen): Remove.
|
|
|
|
|
| |
* signal.c (stack_refcount): This variable is referenced only
from two static functions here; it should be static.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (me_nand, me_nor, nor_fun, nand_fun): New functions.
(eval_init): Register new intrinsics.
* lib.c (nandv, norv): New functions.
* lib.h (nandv, norv): Declared.
* txr.1: Documented, along with trivial fixes to the descriptions
of and, or, andf, orf and notf.
* stdlib/doc-syms.tl: Updated.
|
|
|
|
|
|
|
|
| |
* stdlib/compiler.tl (compiler compile): Handle typep symbol
via comp-typep method.
(compiler comp-typep): New method. This recognizes some
absolute truths: every object is of type t, and no object is
of type nil.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* stdlib/type.tl (sys:typecase-expander): New function, formed
from body of typecase. Bad clause syntax now handled with
compile-error rather than (throwf 'eval-error). The t symbol
is handled specially: it turns into a t conditon in the
resulting cond rather than a typep test. The compiler will
nicely eliminate dead code after that. Now etypecase is handled
here also: if we are expanding etypecase, we just emit the
extra clause.
(typecase, etypecase): Reduced to sys:typecase-expander calls.
* tests/012/typecase.tl: New file.
* tests/012/compile.tl: Add type.tl to list of compile-tested
files.
|
|
|
|
|
|
|
|
|
|
| |
* lisplib.c (type_set_entries): Add etypecase to autoload list.
* stdlib/type.tl (etypecase): New macro.
* txr.1: Documented.
* stdlib/doc-syms.tl: Updated.
|
|
|
|
|
|
|
|
|
|
| |
* optimize.tl (basic-blocks peephole-block): Check for the
reversed arguments case of (ifq (d x) (t 0)), and
also match ifq. Add a case for two different d registers
being compared by ifq or ifql which are not both implicated as
load-time regs; that also converts to an unconditional jmp
to the else label. Add a case for a register being compared
with itself with ifq or ifql, which disappears.
|
|
|
|
|
| |
* txr.1: In the Pattern-Matching macros overview section,
mention while-match and each-match.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Bugfix: the newly introduced @.expr fails in the
dotted position because ^(a . @,expr) turns
into (list 'a 'let ...).
* eval.c (is_meta_unquote): New static function.
(expand_qquote_rec): Replace existing shape test with
is_meta_unquote. We must also use this test in one more place:
whenever the cdr of a list has the meta unquote shape,
we must treat the result similarly to a dotted atom, by
converting to append format.
* tests/010/qquote.tl: Test cases to cover this.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
For better or worse, TXR Lisp has a dichotomy of
representation that @<atom> produces sys:var syntax, whereas
@<compound> produces sys:expr. This can cause an issue in
backquoting. Suppose you want to use backquote to generate
sytax like (a @b) where the b comes from a variable.
The problem is that (let ((x 'b)) ^(a @,x)) doesn't do
what you might expect: it produces (sys:expr b) rather
than (sys:var b).
This patch adds a hack into the quasiquote expander which
causes it to generate code to do what you expect.
Old behavior:
1> (expand '^(a @,x))
(list 'a (list 'sys:expr x))
New behavior:
1> (expand '^(a @,x))
(list 'a (let ((#:g0012 x))
(if (atom #:g0012)
(list 'sys:var #:g0012)
(list 'sys:expr #:g0012))))
In other words, x will be evaluted, and the based on the
type of the object which emerges, either sys:var or
sys:expr syntax is generated.
* eval.c (expand_qquote_rec): Implement the above hack.
We are careful to only do this when this exact shape occurs
in the syntax: (sys:expr (sys:unquote item)).
* tests/010/qquote.tl: New file.
* txr.1: Documented.
|
|
|
|
|
|
| |
* txr.1: the @expr syntax is not just for numbers, symbols and
compound expressions. Most atom syntax can follow @, and
produces sys:var.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
User vapnik spaknik was asking in the mailing list whether
there is an existence test for TXR pattern functions. Now
there is.
* eval.c (eval_init): Register match-fboundp intrinsic.
* match.c (match_fbound): New function.
* match.h (match_fbound): Declared.
* tests/011/txr-case.txr: New test cases.
* txr.1: Documented.
* stdlib/doc-syms.tl: Updated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Issues reported by user vapnik spaknik. The evaluation of init
forms is incorrect. Init forms like '(x) evaluate to
'(x) rather than (x), Also, init forms are evaluated even when
the argument is present, so the entire current approach is
wrong.
* stdlib/keyparams.tl (extract-keys, extract-keys-p,
build-key-list-expr): Functions removed.
(stuff-key-params): New function.
(:key): Rework using simplified approach, with just the
stuff-key-params helper. All variables from the keyword
parameter list are bound with let. Generated code searches
the keyword parameters for values and assigns the variables as
needed, evaluating default init forms in the not-found cases.
* tests/011/keyparams.tl: New file.
|
|
|
|
| |
* stdlib/quips.tl (%quips%): New entry.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The lambda.tl test, when compiled, is only testing the
compiler's implementation of the inlined lambda: code
generated from a lambda expression to which arguments are
statically applied. We augment this to also compile
real lambda functions which are called. Everything passes.
* tests/012/lambda.tl (call-lambda): New function.
(ltest): New macro, specifically geared for testing lambda
expressions. When *compile-test* is true, this generates code
which performs two tests: applying the arguments directly to
the lambda, and evaluating the lambda to a function which is
passed to call-lambda, which will then apply the arguments.
We cannot use apply, because the compiler sees through that
and will inline the lambda anyway.
(mltest): Multi-expression version of ltest. This is a drop-in
replacement for mtest in the rest of the file.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The motivating situation is this:
(lambda (: (opt :)) opt)
When the default value of an optional parameter is :
then the net effect is that there is no optional substituion.
The optional argument is signaled by the : symbol, and that
same symbol then replaces the value.
This is not optimized well:
data:
0: :
1: t
syms:
code:
0: 8C000009 close t2 0 3 9 1 0 nil t2
1: 00000002
2: 00000001
3: 00000003
4: 00000002
5: 3C000008 ifq t2 d0 8
6: 00020400
7: 2C020400 movsr t2 d0
8: 10000002 end t2
9: 10000002 end t2
instruction count:
5
entry point:
4
The instruction sequence
5: 3C000008 ifq t2 d0 8
6: 00020400
7: 2C020400 movsr t2 d0
8:
serves no purpose; it's like:
(if (eq x y)
(set x y))
With this commit it looks like:
data:
0: :
1: t
syms:
code:
0: 8C000006 close t2 0 3 6 1 0 nil t2
1: 00000002
2: 00000001
3: 00000003
4: 00000002
5: 10000002 end t2
6: 10000002 end t2
instruction count:
3
entry point:
4
* stdlib/optimize.tl (basic-blocks peephole-block): Here, we
add an optimization for the useless assignment pattern.
If an "ifq tx dy label" instruction falls through to a
"mov tx dy", then we remove that move instruction from
the next block. But only if that next block has nothing
else jumping to it! If there are other jumps there, they could
be relying on that "mov tx dy", so it cannot be removed.
(basic-blocks elim-next-jump): The above optimization may
leave us with a useless ifq instruction, which jumps to
the same destination whether the comparison is true or not.
In elim-next-jmp, we took care only of jmp instructions which
uselessly jump to the next block in instruction order.
We fix this to also eliminate if and ifq instructions whose
destination label is the next block; they are equivalent to
an unconditional jump.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The cptr-int function requries an address to be expressed as a
signed integer, which is incovenient. E.g. -2147483648 to
2147483647 in a 32 bit address space. Let's fix it to accept
an extended range.
* lib.c (cptr_int): Convert the argument value to a ucnum if it
is positive according to plusp, otherwise to cnum. Then either
one to the mem_t * pointer. Thus we can accept either signed
or unsigned values.
* txr.1: Document the extended range of cptr-int.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* ffi.c (carray_replace): In the case when we replace a larger
range by a smaller one, when the upper part of the aray shifts
down, we are not correctly clearing to zeros the vacated part
of the array. The variable whole is a displacement from the
base of the array, not from ptr. Secondly, the copying loop
must go rom fr to below sn, not below vn; sn is derived from
vn but truncated not to go past the array.
* tests/017/carray.tl: New file. Several cases here fail
before this fix.
|
|
|
|
|
| |
* ffi.c (carray_sub, carray_replace): Allow t as from or to value, and
also implement the zero's end-of-range floating behavior.
|
|
|
|
|
| |
* stdlib/type.tl (typecase): Return nil (as documented) instead of t
when a matching clause has no clause forms.
|
|
|
|
|
|
| |
* txr.1: The sample copy method given in the description of
copy-struct looks like it could be a special structure function
that would be taken into account by the copy function. It is not.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* lisplib.c (arith_each_set_entries): Trigger autoload on
new symbols.
* stdilb/arith-each.tl (sys:arith-each): Generalize macro to
handle short-circuiting logical operations. The op-iv
parameter, which is a cons, is spread into two op and iv
parameter.
One new argument appears, short-circ. This specifies a code
for short-circuiting behavior: t means iteration continues
while the result is true; nil means it continues while it is
nil, and + means iteration continues while the accumulator is
nonzero. A new convention is in effect: the operator has
to be specified as a list in order to request accumulating
behavior, e.g (+) or (*). Otherwise the operator specifies a
predicate that is applied to the forms, without taking into
account the prior value.
(sum-each, sum-each*, mul-each, mul-each*): Spread the op-iv
arguments. Wrap the op argument in a list to request
accumulation. In the case of mul-each and mul-each*, specify +
for the short-circ argument, which means that iteration stops
when the accumulator becomes zerop. sum-each and sum-each*
specify : for the short-circ argument which is unrecognized,
and so ther is no short-circuiting behavior.
(each-true, some-true, each-false, some-false): New macros.
* tests/016/arith.tl: New tests.
* txr.1: Documented new macros and added note about possible
short-circuiting in mul-each and mul-each*.
* stdlib/doc-syms.tl: Updated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* stdlib/arith-each.tl (sys:arith-each): If there are no vars,
then just reduce to the identity element value.
This is alreading happening fine for the each-prod family
of operators.
* tests/016/arith.tl: Test cases covering the no vars
and empty iteration identity element cases for sum-each and
mul-each, as well as the *-prod variants.
* txr.1: Document empty iteration and empty vars behavior
for arithmetic each operators as well as the each-prod
family.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
*LICENSE, LICENSE-CYG, METALICENSE, Makefile, alloca.h,
args.c, args.h, arith.c, arith.h, buf.c, buf.h, cadr.c,
cadr.h, chksum.c, chksum.h, chksums/crc32.c, chksums/crc32.h,
combi.c, combi.h, configure, debug.c, debug.h, eval.c, eval.h,
ffi.c, ffi.h, filter.c, filter.h, ftw.c, ftw.h, gc.c, gc.h,
glob.c, glob.h, hash.c, hash.h, itypes.c, itypes.h, jmp.S,
lex.yy.c.shipped, lib.c, lib.h, linenoise/linenoise.c,
linenoise/linenoise.h, lisplib.c, lisplib.h, match.c, match.h,
parser.c, parser.h, parser.l, parser.y, protsym.c, psquare.h,
rand.c, rand.h, regex.c, regex.h, signal.c, signal.h,
socket.c, socket.h, stdlib/arith-each.tl, stdlib/asm.tl,
stdlib/awk.tl, stdlib/build.tl, stdlib/cadr.tl,
stdlib/compiler.tl, stdlib/constfun.tl, stdlib/conv.tl,
stdlib/copy-file.tl, stdlib/debugger.tl, stdlib/defset.tl,
stdlib/doloop.tl, stdlib/each-prod.tl, stdlib/error.tl,
stdlib/except.tl, stdlib/ffi.tl, stdlib/getopts.tl,
stdlib/getput.tl, stdlib/hash.tl, stdlib/ifa.tl,
stdlib/keyparams.tl, stdlib/match.tl, stdlib/op.tl,
stdlib/optimize.tl, stdlib/package.tl, stdlib/param.tl,
stdlib/path-test.tl, stdlib/pic.tl, stdlib/place.tl,
stdlib/pmac.tl, stdlib/quips.tl, stdlib/save-exe.tl,
stdlib/socket.tl, stdlib/stream-wrap.tl, stdlib/struct.tl,
stdlib/tagbody.tl, stdlib/termios.tl, stdlib/trace.tl,
stdlib/txr-case.tl, stdlib/type.tl, stdlib/vm-param.tl,
stdlib/with-resources.tl, stdlib/with-stream.tl,
stdlib/yield.tl, stream.c, stream.h, struct.c, struct.h,
strudel.c, strudel.h, sysif.c, sysif.h, syslog.c, syslog.h,
termios.c, termios.h, time.c, time.h, tree.c, tree.h, txr.1,
txr.c, txr.h, unwind.c, unwind.h, utf8.c, utf8.h, vm.c, vm.h,
vmop.h, win/cleansvg.txr, y.tab.c.shipped: Copyright year
bumped to 2022.
|
|
|
|
|
| |
* unwind.h (uw_last_form_expanded): Add missing # token.
Because of this, code won't compile without CONFIG_DEBUG_SUPPORT.
|
|
|
|
|
|
|
|
|
|
|
| |
* parser.l (NJPUNC): This inverted class lexical category must
exclude the carriage return character \r, otherwise it matches
it. The JSON keywords true, false and null are recognized as
sequences of NJPUNC. If we don't exclude \r from NJPUNC, it
looks like a symbol constituent, comprising an unrecognized
JSON keyword.
* lex.yy.c.shipped: Updated.
|
|
|
|
|
|
|
| |
* parser.l: Remove rule matching double quote in JSON state.
This follows a rule which matches . so is unreachable. The
rule is necessary, but an identical copy of it already appears
earlier.
|
|
|
|
|
|
| |
* tests/010/json.tl: New tests. These work. Odd; I'm seeing
an issue whereby typing multi-line #J expressions into the
listener does not work.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
It is against TXR coding conventions to use the C cast
notation. The usage creeps into the code. To find instances of
this, we must compile using GNU g++, and add -Wold-style-cast
via EXTRA_FLAGS.
* eval.c (prof_call): Use macro instead of cast.
* ffi.c (pad_retval, ffi_varray_alloc, make_ffi_type_union,
carray_dup, carray_replace, uint_carray, int_carray,
put_carray, fill_carray): Likewise.
* itypes.c (c_i64, c_u64): Likewise.
* lib.c (cyr, chk_xalloc, spilt_str_keep, vector,
cobj_register): Likewise.
* linenoise.c (record_undo): Likewise. Also, drop one
superfluous cast: wstrdup_fn returns wchar_t *.
(flash, edit_insert, edit_insert_str): Use macro instead of cast.
* mpi/mpi.c (s_mp_ispow2d): Likewise.
* parser.c (lino_getch): Likewise.
* rand.c (make_random_state, random_buf): Likewise.
* stream.c (generic_get_line, do_parse_mode): Likewise.
* struct.c (get_duplicate_supers, call_initfun_chain,
call_postinitfun_chain): Likewise.
* sysif.c (c_time): Likewise.
* tree.c (tr_insert): Likewise.
|
|
|
|
|
|
|
| |
* lib.h (num_ex): Remove the cast to ucnum, which will cause
this macro to misbehave for negative arguments. For instance,
-1 > (ucnum) INT_PTR_MAX will compare as true! The -1 gets
converted to the unsigned type and becomes UINT_PTR_MAX.
|
|
|
|
| |
* stdlib/quips.tl (%quips%): New entry.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Makefile (TXR_CFLAGS): Pull in $(CPPFLAGS) also. It seems
some distros like Gentoo are relying on programs to
interpolate CPPFLAGS, and use this variable for passing
preprocessor-level options like -Dfoo=bar. This is an
incredibly bad, unnecessary idea, but let's play along.
Now because we are merging this into TXR_CFLAGS, it means
that these preprocessor-only flags are used for linking,
when nothing is being preprocessed, which makes no sense.
However, GNU Make's built-in recipe for linking C code seems
to do the same thing.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
I'm taking the position that on systems where time_t is 32
bits by default, but can be switched to 64 with some option
that we positively detect, configure will refuse to run unless
the user explicitly chooses what to do using either --big-time
or --no-big-time. We neither want to ignore this situation
(because Y2038 is a problem, and we don't want to contribute
to it) nor do we want to force 64 bit time_t, which could be
problematic in distributions where other applications and
components are not being configured that way for whatever
reason (like it being a system with a projected life span that
is not expected to go past Y2038).
* configure (big_time, big_time_given): New variables.
(help): Document big-time. New logic in the test to validate
the detected situation versus whether or not the big-time
variable has been specified, and which way. Error out in
several cases.
|