| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
* txr.1: Superfluous article a deleted, and sentence reworded.
|
|
|
|
|
|
|
|
|
|
|
| |
* genvim.txr (txr_pnum): New match; matches a superset of
the #x, #o and #b literals with the inclusion of trailing
alphanumeric junk. Highlighted as Error.
(txr_xnum, txr_onum, txr_bnum): New match categories, formed
by renaming the previous #x, #o and #b matches. These are
contained in txr_pnum, highlighted as Number.
(txr_bracevar, txr_directive, txr_list, txr_bracket,
txr_mlist, txr_mbracket): Include txr_pnum.
|
|
|
|
| |
* txr.1: Fix incorrect #H prefix which should of course be #S.
|
|
|
|
| |
* txr.1: anything code -> any code.
|
|
|
|
|
|
|
| |
* genvim.txr (txr_error): New match in this category for #
followed by something other than H, S or R. Some characters
other than these are valid after #, but are covered by
explicit matches that occur later.
|
|
|
|
|
|
|
| |
* genvim.txr (tl_ident): Fix the incorrect match which allows
things beginning with # to be categorized as identifier
tokens. The new match reflects the true original intent: the
match must not begin with #, but may contain #.
|
|
|
|
|
|
|
| |
* genvim.txr (txr_buf_error, txr_buf_interior): New matches.
(txr_list, txr_bracket, txr_mlist, txr_mbracket): Now also
contain txr_buf.
(txr_buf): New region, in the new txr_string matchgroup.
|
|
|
|
|
|
|
| |
* genvim.txr (txr_num): Move the syn match definitions for
hex, octal and binary integer tokens after tl_ident, which is
a more general match that matches them also, and causes them
to be colorized as symbols rather than numbers.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (eval_init): Register set-diff under two
names: set-diff and diff. Register new isec and uni
intrinsics.
* lib.c (isec, uni): New functions.
* lib.h (isec, uni): Declared.
* txr.1: Documented new uni and isec functions, new diff
function name, and the deprecation of set-diff and its order
guarantee w.r.t the left sequence.
|
|
|
|
|
|
|
|
|
|
| |
* RELNOTES: Updated.
* configure, txr.1: Bumped version and date.
* share/txr/stdlib/ver.tl: Likewise.
* txr.vim, tl.vim, protsym.c: Regenerated.
|
|
|
|
|
|
|
| |
* txr.1: We are missing an "and" in the heading for the
section about the *args-full* and related variables.
This was caught due to the fix in checkman.txr to
handle Special variables sections.
|
|
|
|
|
|
| |
* checkman.txr (check-var): This pattern function must
handle "Special variable{s,}" sections not only
"Variable{s,}".
|
|
|
|
|
| |
* txr.1: the syslog-related constants are global lexical
variables and so must not be documented as special variables.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* filter.c (filters): Global variable removed.
(filter_s): New symbol variable.
(filter_init): Remove gc-protection from removed variable.
Intern the *filters* symbol. Use local variable for filters
hash, create the *filters* special variable and store the hash
into that.
* filter.h (filters): Variable declaraton removed.
(filters): New macro: expands to an expression designating
the current value of *filters* in the dynamic environment.
* txr.1: Documented *filters*, adding a forward reference to
it from the description of filtering.
|
|
|
|
|
|
|
| |
* gc.c (make_obj): remove assertion that the object
pulled from the free list is marked FREE. This hasn't proved
to be valuable and adds a nonzero cost to a frequently
executed path.
|
|
|
|
|
|
| |
* txr.1: Under "Parentheses Matching" correct the introductory
sentence which misleadingly claims that parenthesis matching
jumps only backwards.
|
|
|
|
|
| |
* txr.1: Under "Making a Selection", remove an unclear
sentence which contributes nothing.
|
|
|
|
|
|
| |
* txr.1: of course, the out operation of a type recursively
invokes the out operation on embedded pointers, not the in
operation.
|
|
|
|
|
| |
* txr.1: Special varaible *trace-output* not typeset in
typewriter font in heading.
|
|
|
|
|
| |
* txr.1: Under description of length function, reference to
nonexistent lambda-ref should be lambda-set.
|
|
|
|
|
| |
* txr.1: In description of buffer literal syntax, reference to
make-buffer should be make-buf.
|
|
|
|
|
| |
* txr.1: Under description of bool, fix references to
nonexistent (bits n type).
|
|
|
|
|
|
|
|
|
|
|
| |
* lib.c (find, pos): Provide specialized behavior based
on type and test and key functions. Lists and list-like
objects are treated by marching down with cdr. Vectors are
traversed with numeric index, as are vector-like objects which
exhibit a length function. A special optimization is put in
for non-lazy strings which use identity as their key function,
and one of the built-in equality operators for the test
function: wcschr is used on the underlying C string.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Just the ANSI CL nth for lists.
* eval.c (eval_init): Register nth intrinsic.
* lib.c (nth): New function.
* lib.h (nth): Declared.
* share/txr/stdlib/place.tl (nth): New place macro,
trivially takes care of making nth an accessor.
Place macros are terrific!
* txr.1: Documented.
|
|
|
|
|
|
|
|
|
| |
* stream.c (path_cat): New function.
(stream_init): Registered path_cat.
* stream.h (path_cat): Declared.
* txr.1: Documented.
|
|
|
|
|
|
|
|
|
|
|
|
| |
* stream.c (remove_path): The second argument now defaults to
false rather than true, and controls only whether an exception
is thrown in the non-existence case. Thus, the function throws
errors by default, as before, but doesn't throw by default if
the failure reason is that the path doesn't exist. Previously
it threw by default in all situations, and the flag turned all
errors into a nil return.
* txr.1: Documented.
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (eval_init): Register new intrinsic relate.
* lib.c (do_relate, do_relate_dfl): New static functions.
(relate): New function.
* lib.h (relate): Declared.
* txr.1: Documented.
|
|
|
|
|
|
|
|
|
|
| |
* share/txr/stdlib/getopts.tl (opt-desc): New entry in
valid-types, :text symbol.
(sys:opt-parsed convert-type): Handle :text case.
This is a no-op since :text applied no treatment.
(opthelp): Provide help text for :text type.
* txr.1: Documented :text getopts option type.
|
|
|
|
|
|
| |
This was broken on 2016-11-03 by the commit "Support
simple list arguments in getopts." The sys:opt-parsed
type has no type slot.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* ffi.c (ffi_put_into, ffi_in, ffi_get, ffi_out): New offset
parameter.
(ffi_init): Re-register ffi-put-into, ffi-in, ffi-get and
ffi-out with new optional parameter.
* ffi.c (ffi_put_into, ffi_in, ffi_get, ffi_out): Declarations
updated.
* txr.1: Documented new argument on ffi-put-into, ffi-in
and ffi-get. The documentation for ffi-out doesn't exist!
|
|
|
|
|
|
|
|
| |
* regex.c (print_rec): Switching from negative tests to
positive: print parens around elements of a compound which
have a lower precedence. The previously incorrectly omitted
set and cset remain unmentioned, so under this inversion of
logic, they print without parentheses.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
For a floating-point argument, the following behavior
is supported by the ~a, ~s and ~f format directives:
if the precision has a leading zero, then leading zeros
are added, up to one less than the field width.
* stream.c (formatv): Set the precision to one less than
the field width when rendering floats, rather than to
zero. The output_num code takes the precision as the cue
for padding zeros.
* txr.1: Updated format documentation, and clarified
a few things also.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The accessors symbol-value, symbol-function and symbol-macro
can now be used to store a value to nonexistent bindings,
which brings those bindings into existence.
* share/txr/stdlib/place.tl (sys:ge-fun-getter-setter,
sys:get-vb): Don't throw exceptions for nonexistent binding
lookups: create and return the bindings instead. For methods,
use static-slot-ensure rather than static-slot-set. Thus
new methods can be defined by setting to a (meth ...) place.
* txr.1: Doc updated.
|
|
|
|
|
|
|
|
| |
* match.c (match_reg_var): The uw_tentative_def_exists
check is being made against a symbol rather than the
tag. This check will always fail. There is no ill consequence.
Just that uw_register_tentative_def will be called
redundantly when it doesn't have to be.
|
|
|
|
|
|
|
|
| |
* share/txr/stdlib/trace.tl (sys:tr*, sys:trfm): New
variables, holding the * and format functions.
(sys:trace-enter, sys:trace-leave): Use format and *
through the aliases, so we don't trigger infinite
recursion if these are traced.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* ffi.c (struct carray): New member, offs.
(make_carray): Initiialize offs member from new argument.
(copy_carray, carray_blank, carry_ptr, carray_sub,
carray_pun, carray_unum, carray_num): Pass zero offset to
(carray_buf): New optional parameter off_in.
(carray_buf_sync): Handle offset.
(ffi_init): Update registration of carray-buf.
* ffi.h (make_carray, carray_buf): Declaration updated.
* txr.1: Documented.
|
|
|
|
|
|
| |
* ffi.c (carray_cptr): Ref argument in make_carray
call should be specified as nil not 0. The meaning is
the same, but it's wrong style for TXR internals.
|
|
|
|
|
| |
* share/txr/stdlib/place.tl (sys:placelet-1): Remove the
genyms called steal-getter which is not referenced.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Repro test cases for this:
A: (progn (defun f ()) [f]).
This emits a warning against the [f] usage, even though there
is a tentative definition of f as a function.
B: (progn (defun g () [f]) (defun f ())).
Emits a warning against [f] usage which is not purged by the
evaluation of the later definition.
Both problems are related to the separation of deferred
warnings into the tag namespaces: symbols and functions. When
[f] is being expanded, the deferred warning is put into the
variable namespace. So it doesn't match a tentative def in the
function namespace which would otherwise suppress it.
A subsequent function definition only purges the warning for
the function space.
We introduce a third space, the "symbol space". Lisp-1
deferred warnings are introduced against this namespace and
both variable and function definitions purge deferred warnings
from that namespace also, in addition to their respective
proper namespace. This solves problem B. Problem A is solved
by checking, when [f] is expanded, for tentative definitions
of f in both the variable and function tag space.
Note that test case B still warns when entered into the
listener, because the listener dumps deferred warnings
prior to evaluation, thus prior to evaluating (defun f ()).
* eval.c (op_defvarl, op_defun): Purge deferred warnings from
the sym tag namespace also.
(expand_lisp1): Do not emit the deferred warning for a
nonexistent name if it has a tentative definition either as a
function or variable. When emitting the deferred warning, use
the sym namespace.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is for those situations when multiple lists are being
collected, and must all be bound even if empty. Yet, the
lists are independent rather than parallel, so the discipline
of :vars is too rigid.
* match.c (lists_k): New keyword symbol variable.
(h_coll, v_collect): Extract :lists argument as local variable
lists, validate that :lists is not used on @(repeat)/@(rep)
and implement logic.
(match_expand_keyword_args): Treat expansion of :lists
the same way as :vars.
(syms_init): Initialize lists_k.
* match.c (lists_k): Declared.
* txr.1: Documented.
|
|
|
|
|
| |
* txr.1: Fix text under gather and collect directive wrongly
referring to :vars keyword as just vars in the plain font.
|
|
|
|
|
|
|
|
| |
* txr-embedded-arg.txr: Streamline the logic by using buffers
and the FFI type (zarray 128 char) which converts between a
null terminated buffer of 128 UTF-8 characters and a string.
We get not only null termination, as before, but clean padding
ith zeros up to the size of the 128 byte area.
|
|
|
|
|
|
|
|
|
|
| |
* RELNOTES: Updated.
* configure, txr.1: Bumped version and date.
* share/txr/stdlib/ver.tl: Likewise.
* txr.vim, tl.vim, protsym.c: Regenerated.
|
|
|
|
|
|
| |
* txr.1: the sections following the Overview were
wrongly subordinated to Overview. They are now on the
same level.
|
|
|
|
|
|
|
|
|
| |
* ffi.c (zero_fill): New function.
(ffi_init): zero-fill intrinsic registered.
* ffi.h (zero_fill): Declared.
* txr.1: Documented.
|
|
|
|
|
|
| |
* share/txr/stdlib/place.tl (sys:get:fun-getter-setter):
Remove superfluous @1 from op macro syntax, on the
basis that (op function @1) is equivalent to (op function).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In this change, a struct type's initfun and postinitfun
become mutable. This is achieved by modeling them as
the pseudo-static-slots :initfun and :postinitfun.
Effectively these now behave as reserved names which do not
denote static slots but these special functions.
* eval.c (lookup_fun): When (meth type slot) syntax is
encountered, treat the slot names :init and :postinit
specially: retrieve these special functions instead of
accessing static slots.
* share/txr/stdlib/place.tl (sys:get-fun-getter-setter):
Similarly, when handling (meth type slot) syntax, return
the alternative getter/setter functions for the special
functions, not the static slot accessing functions.
Also, getting rid of a useless @1 here in existing code,
since (op foo @1) is equivalent to (op foo).
* share/txr/stdlib/struct.tl (sys:defmeth): Check for
the special names :init and :postinit, handling these
through the appropriate setter functions rather than
static-slot-ensure.
* struct.c (init_k, postinit_k): New keyword symbol variables.
(struct_init): Initialize init_k and postinit_k. Register
intrinsics struct-get-initfun, struct-set-initfun,
struct-get-postinitfun and struct-set-postinitfun.
* (struct_get_initfun, struct_set_initfun,
struct_get_postinitfun, struct_set_postinitfun): New
functions.
(method_name): For each struct type visited, check
whether the function is the initfun or postinitfun
and return the appropriate meth syntax if so.
* struct.h (init_k, postinit_k, struct_get_initfun,
struct_set_initfun, struct_get_postinitfun,
struct_set_postinitfun): Declared.
* txr.1: Documented. Updated description of method-name,
defmeth, and documented new functions.
|
|
|
|
| |
* txr.1: The word was "change" is missing in the sentence.
|
|
|
|
|
|
|
|
|
|
| |
* txr.1: Fix a flaw in the compat note 156 wording. The
workaround described only applies to TXR that has not been
upgraded to 157 or newer; it is not an alternative to using
the compat option, but a way to fix code under old TXR.
Also adding here the recommendation that applications should
switch to the new evaluating case functions rather than
relying on the compat switch.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This fixes the issue that when a multi-line result is pasted
into the edit buffer with Ctrl-X P, the line breaks appear in
it as linefeeds, displayed as ^J. In linenoise, we need line
breaks to be carriage returns.
* linenoise/linenoise.c (lino_set_result): replace newlines
with carriage returns in the given string.
* linenoise/linenoise.h (lino_set_result): Add comment that
function takes ownership of memory assumed to be malloced,
and that it modifies it.
|