| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
| |
* txr.1: Rewrote and rearranged sections that introduce
compound expressions. Introduced "bind expressions" as
a concept and applied throughout. Revised faulty
documentation of @(bind). Documented Lisp evaluation where
it now occurs.
|
|
|
|
| |
* match.c (v_cat): Use tleval_144 instead of txeval.
|
|
|
|
| |
* match.c (vars_to_bindings): Use tleval_144 instead of txeval.
|
|
|
|
| |
* txr.1: Introduce function with .coNP not .SS.
|
|
|
|
|
|
|
| |
* match.c (do_output_line): Use num(i) rather than
num_fast(i), because i is not guaranteed to be in
the fixnum range. It's less than c_num(max_depth),
which could be a bignum that is in the cnum range.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* match.c (h_var): Check modifier for integerp rather
than fixnump.
(h_skip, h_coll, v_collect): Substitute zero only for nil
values of various numeric parameters, not for values that are
not fixnump.
(v_skip): Likewise, and check success for integerp rather than
fixnump. Even if the code can't handle bignums, we need to
steer into that case so it can do he right thing and throw an
exception.
(freeform_prepare): Use weaker integerp type test rather than
fixnump on arguments, for same reason as in v_skip.
|
|
|
|
|
|
|
|
| |
* configure: Generate #define CONFIG_EXTRA_DEBUGGING 1 in
config.h header, rather than EXTRA_DEBUGGING.
* gc.c, gc.h, hash.c: Change references to EXTRA_DEBUGGING
preprocessor symbol to CONFIG_EXTRA_DEBUGGING.
|
|
|
|
|
|
|
|
|
|
|
|
| |
* gc.c (more): Under EXTRA_DEBUGGING, call breakpt()
here also, when it is detected that break_obj is
added to the free list for the firts time.
Print a message and backtrace using
VALGRIND_PRINTF_BACKTRACE.
(make_obj): Likewise, for an object that is pulled out
of the free list and returned.
(mark_obj, sweep_one): Print backtrace with Valgrind for
break_obj, in addition to calling breakpt().
|
|
|
|
|
| |
* gc.c (make_obj): Assert that the object we are pulling
from the free list is marked FREE.
|
|
|
|
|
|
|
| |
* lib.c (vector, copy_vec, sub_vec, cat_vec): Set the type
field of the object sooner. Do not malloc between obtaining
the object, and initializing it, because that could throw,
leaving an uninitialized object in the heap space.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* gc.c (more): Only set the free_tail if the
new memory is being added to an empty free_list.
Otherwise free_tail is valid.
(make_obj): If we empty the free_list, then
reset the free_tail pointer, so it doesn't
continue pointing into the object we are returning.
(sweep): Remove defensive code which tries to reset
the free_tail in the empty free_list case,
but assumes that free_tail is correct in the non-empty
case.
|
|
|
|
|
|
|
|
|
|
| |
* gc.c (sweep_one): Don't check for gen == -1;
no reachable object can have that at this stage,
since mark flips -1 objects to gen 0.
(sweep): Do not clear freshobj_idx here;
completely revert the mark_markfresh code.
(gc): Clear freshobj_idx here., as before
the mark_makefresh hack.
|
|
|
|
|
|
|
|
|
|
| |
* syslog.c (syslog_mark): Remove incorrect stray code,
which passes a pointer to a non-gc-object to the gc_mark
function. This code was left behind in the change
which introduced struct syslog_strm,
git hash e44c113ee17c7cf15e8b1891f4d51ec03b16bc24
"Deriving streams from the same base",
July 29, 2015.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* match.c (tlist_k): New keyword symbol variable.
(tleval_144): New static function.
(h_skip): evaluate min and max arguments as Lisp.
(h_coll): Evaluate all numeric keyword arguments as
Lisp: :min, :max, :gap, :times, :maxtimes, :mintimes,
:chars.
(h_call): Evaluate function expression as Lisp.
(do_output_line, do_output): Evaluate n and m parameters
in @(modlast) and @(mod) as Lisp.
(v_skip): Evaluate min and max as Lisp.
(v_fuzz): Evaluate m and n as Lisp.
(v_freeform): Evaluate arguments as Lisp.
(v_next): Support new argument, :tlist, which is like
:list, but with TXR style evaluation. From now on :list
uses Lisp evaluation, unless compatibility is set to 143
or lower. Also, evaluate the :string argument as Lisp.
(v_collect): Evaluate all numeric keyword arguments as
Lisp: :min, :max, :gap, :times, :maxtimes, :mintimes,
:lines.
(v_output): Evaluate stream in :continue or :finish
expression as Lisp.
(v_load): Evaluate load target as Lisp.
(v_close): Evaluate stream argument as Lisp.
(v_call): Evaluate function expression as Lisp.
(syms_init): Initialize tlist_k variable.
* tests/007/except-1.txr: Use :tlist instead of :list,
since argument is a TXR list expression.
* tests/010/block.txr: Likewise.
|
|
|
|
|
|
|
|
|
|
|
| |
* match.c (eval_with_bindings, eval_progn_with_bindings):
Change static function names to the shorter tleval and
tleval_progn. The first and second arguments swapped around to
match the convention used by txeval.
(dest_bind, h_coll, tx_subst_vars, do_txeval,
extract_bindings, do_output_line, do_output_line, do_output,
v_next, v_collect, v_output, v_do, v_require, v_if, h_do):
Follow rename.
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (op_defsymacro): Remove sym from the special
hash, unless compatibility 143 or lower is requested.
* txr.1: Document effects of evaluating defsymacro
if a global variable of the same name exists, and the
behavior in lexical scopes where sym is bound.
Added compatibility notes covering the code change.
|
|
|
|
|
|
|
|
| |
* match.c (h_coll, v_collect): Parse out :collect keyword
specification, using code borrowed from do_output.
Implement binding in collect loop.
* txr.1: Documented.
|
|
|
|
|
| |
* txr.1: Use indented paragraphs to replace the ad-hoc
introduction of keywords.
|
|
|
|
|
| |
* share/txr/stdlib/place.tl (defplace symbol-value):
Don't splice body into deleter syntax; must use plain unquote.
|
|
|
|
|
| |
* txr.1: Largely rewrote description of symbol-function,
symbol-macro and symbol-value.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (unbound_s): New symbol variable.
(lookup_var): If a dynamic binding has the special sys:unbound
symbol as its value, then return nil, so the behavior
is as if there is no binding.
(makunbound): If the symbol exists in a dynamic environment,
then replace its value with sys:unbound, making it look
unbound.
(eval_init): Initialize unbound_s.
* lib.h (us_car, us_cdr): New inline functions.
* txr.1: New dialect notes under boundp.
Updated the makunbound documentation. Separated
makunbound documentation from fmakunbound and
mmakunbound. Added compatibility notes.
|
|
|
|
|
| |
* socket.c (dgram_destroy): Free the dgram_stream
structure too, not just its buffers.
|
|
|
|
|
|
|
| |
* mpi/mpi.c (mp_bit): If the digit index is beyond
the available digits in the number, report MP_NO rather than
accessing undefined digit material or beyond the array
entirely.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Here we ensure that the digits pointer of an uninitialized
mp_int is nulled out. The garbage collector could conceivably
encounter such an object, in which case mp_clear will then try
to free a garbage pointer. This could happen if an exception
is thrown out of numeric code due to low memory, interrupting
its execution, leaving behind an unfilled object produced
by make_ubignum.
* arith.c (make_ubignum): Perform minimal
initialization of the mp_int using new function.
* mpi/mpi.h (mp_init_minimal): New inline function.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* arith.c (logand, logior, logxor): Use make_ubignum
to create an uninitialized bignum, because mp_and, mp_or, and
mp_xor expect argument c to be uninitialized, and clobber
it by initializing.
(comp_trunc): Use make_ubignum for b argument,
because mp_trunk_comp initializes it.
(lognot, logtrunc): Use make_ubignum for b, because
mp_trunc initializes it.
* mpi/mpi.c (mp_and, mp_or, mp_xor, mp_comp, mp_trunc_comp,
mp_trunc, mp_shift, mp_bit): Do not initialize the tmp that is
passed as argument b to mp_2comp, since that function
initializes it.
|
|
|
|
|
|
|
|
| |
This one is minor because there is only one syslog
stream.
* syslog.c (syslog_strm_ops): Use cobj_destroy_free_op rather
than cobj_destroy_stub_op.
|
|
|
|
|
| |
* parser.c (parser_destroy): Don't just clean up
the parser_t structure, free it.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Although we are garbage-collected, being able to clean up on
shutdown is nevertheless useful for uncovering leaks. Leaks
can occur, for instance, due to neglect to free out-of-heap
satellite data from objects that are reclaimed by gc.
This feature is long overdue.
* arith.c, arith.h (arith_free_all): New function.
* gc.c, gc.h (gc_free_all): New function.
* lib.c (init): Remove program name parameter and
redundant initialization of progname globl variable.
* lib.h (progname): Superfluous declaration removed.
This is already declared in txr.h.
(init): Declaration updated.
* regex.c (char_set_destroy): Do not check the static
allocation flag here; just destroy the object.
Do check for a null pointer, though.
(char_set_cobj_destroy): This cobj destructor now
checks the static flag of the char set object and
avoids freeing it. Thus our char set singletons are
left alone by gc, but our global freeing function
takes care of them.
(wide_cs): New static variable moved out of
wide_display_char_p to static scope.
(regex_free_all): New function.
* regex.h (regex_free_all): Declared.
* txr.c (progname): const qualifier and initializer removed.
(main): Ensure progname is always dynamically allocated, even
in the argv[0] == 0 case. Do not pass progname to init;
it doesn't take that argument any more.
(free_all): New static function.
(txr_main): Implement --free-all option.
* txr.h (progname): Declaration updated.
|
|
|
|
|
| |
* lib.c (length): In COBJ case, handle
structures which have a car slot.
|
|
|
|
|
|
| |
* lib.c (toseq): Handle OBJP case, and
implement behavior for struct objects that
have a car method.
|
|
|
|
|
|
|
|
|
| |
* lib.c (replace_list): Simplify treatment of items
on entry using toseq.
(replace_str, replace_vec): When a list or vector of
indices is given, use the itseq result of passing
items items through toseq function rather than
original items, for consistency with range assignment.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This eliminates the error which occurs when
a sequence implemented as a struct is nconced
or appended onto. The struct is converted to
a list, and so is the object on the right hand
side. As a result, more generic sequence code
works on structs.
* lib.c (list_collect_nconc, list_collect_append):
Handle tail of type COBJ by converting to a list,
storing that list back in the tail and then
destructively tacking onto that the obj
operand, also turned into a list.
|
|
|
|
|
|
|
| |
* lib.c (list_collect_nconc, list_collect_append):
Capture deref(ptail) subexpression in local var
and refer to that in all code where ptail isn't
modified from the original value.
|
|
|
|
|
|
| |
* lib.c (tolist): Use mapcar_listout, to avoid
the conversion of the resulting list to the object's type,
making this whole operation useless!
|
|
|
|
|
| |
* txr.1: Document that txr-path includes slash.
Fix two incorrect examples which have an extra slash.
|
|
|
|
|
| |
* lib.c (vscat): Replace "cat-str" and "vcat"
with correct name "scat".
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* txr.c (sysroot_init): Add slash to stdlib_path.
(sysroot_compat_fixup): Replace user-visible stdlib
variable with a path that doesn't have a slash,
if compatibility is 143 or lower.
(compat): Call sysroot_compat_fixup.
* lisplib.c (place_set_entries, ver_set_entries,
ifa_set_entries, txr_case_set_entries,
with_resources_set_entries, path_test_set_entries,
struct_set_entries, with_stream_set_entries, hash_set_entries,
except_set_entries, type_set_entries, yield_set_entries,
sock_set_entries, termios_set_entries): Remove slash from
format string since the directory includes it.
* txr.1: Added note under stdlib about the slash,
and also an entry COMPATIBILITY.
|
|
|
|
|
|
|
| |
* parser.y (catch_clauses_opt): Don't diagnose empty catch and
finally. There is no benefit in doing so; moreover, it
contravenes the documentation, which explicitly says these
may be empty. I.e. this fixes a regression.
|
|
|
|
|
|
|
|
|
|
| |
* RELNOTES: Updated.
* configure, txr.1: Bumped version and date.
* share/txr/stdlib/ver.tl: Likewise.
* txr.vim, tl.vim: Regenerated.
|
|
|
|
|
|
|
| |
* match.c (extract_vars): With these changes, if @{a b [c..d]}
appears inside a @(repeat) or @(rep), variables in the b, c
and d positions will be recognized for list iteration, not
only a.
|
|
|
|
|
|
| |
* eval.c (format_field): Improve error messages; streamline
some code, report expression value rather than expression
itself for bad modifier.
|
|
|
|
|
| |
* txr.1: Insufficient parenthesis nesting in
:vars syntax with initializer.
|
|
|
|
|
|
|
|
|
| |
* match.c (v_output): Use txeval on the destination only if
compatibility is 142 or lower, or it is a meta expression
(so that @var and @(expr) still work without having to use
the compatibility option).
* txr.1: Documented and put in compatibility notes.
|
|
|
|
| |
* txr.1: reqm was written instead of remq*.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Dropping the document feature that hyperlinks
in the TXR section resolve to TXR topics,
and TXR Lisp hyperlinks go to TXR Lisp topics.
All multiple uses of symbols are handled through
the new mechanism of disambiguating topic navigators.
* genman.txr (txrhash, txlhash, tgthash): Variables
removed.
(symhash): One variable, replacing those three.
BODY collecting loop no longer collects LOOKUP
variable, since body lines are not associated
with a particular hash.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The purpose of this change is to handle situations where a
symbol has multiple meanings, resulting in different topic
areas of the document where we might want to navigate. For
instance, there is an equal function in the TXR Lisp library,
and an equal method that users can define.
* genman.txr (tochash, disamb, dist-counter): New variables.
(process-ambiguities): New Lisp function.
When collecting symbol/jump-tag associations, collect
the lists of jump tags rather than just the first jump tag.
Then process the hash using process-ambiguities to
handle the cases with multiple entries, which are prepared
in the disamb hash. The contents of the disamb hash turn
into HTML material at the end of the page.
An in-line style sheet is now added; it adds vertical space
between the navigation menus so they appear as if they
were separate web pages.
|
|
|
|
|
|
|
|
|
|
| |
* lib.c (from_list_s): New symbol variable.
(make_like): Handle a COBJ. If it's a structure with a
from-list method, then use it, otherwise the
default handling applies of returning the list.
(obj_init): Initialize from_list_s.
* txr.1: Documented.
|
|
|
|
|
|
|
|
| |
* txr.1: Removing "Functors", "Equality Substitution", "Custom
Pretty-Printing" and "Sequence Operations on Structures"
paragraphs. Adding major section "Special Structure
Functions" under which the special functions are described
with syntax headings.
|
|
|
|
|
|
|
|
|
|
|
| |
* lib.c (ldiff): Rather than checking specifically for
strings and vectors to apply the special case behavior
(comparison using equal), test specifically for lists and
apply the traditional behavior. Every other object,
not just strings and vectors, gets the altered behavior.
* txr.1: Changed text in TXR Lisp introduction which touches
on ldiff, and wording fix under ldiff.
|