| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
| |
* lib.c (match_str): The match_str function is hereby altered
to return an integer instead of the symbol t in the matching case.
* txr.1: Updated.
|
|
|
|
|
|
| |
* txr.1: New operator <2> for meta-syntax, used when two
italicized terms are sandwiched in three non-italicized terms.
Documented quasiliteral matching.
|
|
|
|
|
|
|
| |
* share/txr/stdlib/match.tl (expand-quasi-match): Close the
gap in the expander by diagnosing all unhandled syntax.
There is now enough useful functionality and stability to
start documenting the feature.
|
|
|
|
|
|
| |
* tests/011/patmatch.tl: More tests. All explicitly coded
cases covered, except the fall-through situations we are
not yet catching in expand-quasi-match.
|
|
|
|
|
|
|
| |
* share/txr/stdlib/match.tl (expand-quasi-match): Add case fo
r unbound var followed by var, followed by nothing.
* tests/011/patmatch.tl: New tests.
|
|
|
|
|
|
| |
* share/txr/stdlib/match.tl (expand-quasi-match): Instead of
accessing args with car and cadr, capture that part in the
match using @(as) and refer to the variable.
|
|
|
|
|
|
|
| |
* share/txr/stdlib/match.tl (expan-quasi-match): Use rest
variable consistently instead of (cdr args). Two instances of
(cdr rest) should just be rest. New case added for variable
with no modifiers followed by text being the last item.
|
|
|
|
|
|
|
|
|
|
| |
* share/txr/stdlib/match.tl (expand-quasi-match): The return
value of search-str isn't a length but an absolute position.
We not only fix a bug, but lose a useless calculation.
* tests/011/patmatch.tl: New test cases for quasiliteral
patterns, starting with the most rudimentary.
Last one broke, due to the above issue.
|
|
|
|
|
|
|
|
|
|
|
| |
* match.tl (compile-cons-structure): Recognize quasi in the
middle of cons structure and compile appropriately.
(parse-lambda-match-clause): Recognize quasi in dot
position properly.
(check, check-end): Treat quasi as atom pattern.
(pat-len): Recognize quasi in dotted position.
(non-triv-pat-p): Handle quasi case. Any quasi containing
elements that are lists is nontrivial.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This not only gets rid of the @ from @`...`, but allows the ``
empty pattern `` to work. A bug is also fixed.
* share/txr/stdlib/match.tl (compile-match): Recognize
list headed by sys:quasi and feed to expand-quasi-match.
(sys:quasi): defmatch removed.
(expand-quasi-match): Function formed from sys:quasi defmatch.
Instead of :form argument, we access *match-form*, like all
the other internal functions. Instead of the :env parameter,
we use the vars-list object. Using that object's exists method
fixed a bug: failing to check for existing variables using
boundp.
|
|
|
|
|
|
|
|
| |
* share/txr/stdlib/match.tl (sys:quasi): New defmatch.
This is a macro for now, which makes it require the @ prefix:
e.g. @`@a-@b-@c`. The plain is to integrate this into the
matcher to eliminate that @ prefix. The first priority
are test cases and documentation.
|
|
|
|
|
|
|
|
|
|
|
| |
* share/txr/stdlib/compiler.tl (expand-quasi): Do not emit
sys:fmt-join call unconditionally. If expand-quasi yields
a list of one expression, we can just yield that expression.
If the list is empty, we can yield a mutable empty string.
(That case will not arise via `` because that converts to ""
at read time, but code that generates quasiliteral syntax
might have an empty case, and expect a mutable string in
all cases).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Log message correction superseding original commit
65213f5f7f6a204886a02c32f259ae2617d1dfb6.
* RELNOTES: Updated.
* configure, txr.1: Bumped version and date.
* share/txr/stdlib/ver.tl: Bumped.
* txr.vim, tl.vim: Regenerated.
* protsymc.: Likewise
* share/txr/stdlib/doc-syms.tl: Likewise.
|
|
|
|
|
|
| |
* configure: nopie test must check for "clang" in two places
in the version banner. Some vendors stick their name in
front of "clang".
|
|
|
|
|
|
|
|
|
|
| |
* txr.1: After some some discussions with Paul A. Patience,
I've decided to fix the instances where an identifier in
italics or typewriter font is pluralized with -s to just use s.
Some 140 instances are fixed.
* checkman.txr: Allow exception for "s" in the rule that
punctuation must follow codn/metn.
|
|
|
|
|
|
|
|
| |
* tests/011/patmatch.tl: Wrap one test with compile-only and
eval-only so that the compiler ignores it. Add a form
at the end of the file, similarly ignored by the compiler
to compile the file. This compiles and executes all the test
cases.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In eliminate-frame, our stategy of replacing vregs with tregs
assumes that the newly minted tregs are initialized to nil.
This is true if the block is executed only once, but not true
if it's in the middle of a loop, where the previous
iteration's treg values can be present. This results in
miscompilation of code like
(when-match (@x @(all @x)) '(1 (1 2)) x)
which wrongly returns 1 instead of nil starting at
optimization level 2.
* share/txr/stdlib/compiler.tl (struct compiler): New slot,
loop-nest, indicating the loop nesting level.
(compiler eliminate-frame): add instructions to the start of
the block of code to null out all the tregs that we allocated
for replacing vregs. We do this only when compiling the
repeated parts of a loop, as indicated by a positive value
of loop-nest.
(comp-for): Increment loop-nest before compiling the repeated
parts of the loop; decrement it afterward.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* share/txr/stdlib/optimize.tl (basic-blocks join-block): When
we merge a block N with its physical predecessor P, we must
iterate over the jump targets of N, and update their reverse
list to point to P instead of N. A full call to link-graph
would fix it also, but we don't call link-graph anywhere in
the optimization pipeline after this point. The reverse
links are relied on to be correct elsewhere, such
merge-jump-tunks, which needs to walk the blocks which jump
to a removed duplicate block, to retarget them to go to
another copy of that block.
|
|
|
|
|
|
|
| |
* share/txr/stdlib/compiler.tl (comp-apply-call): When a call
expression is evaluated at compile time, we must quote the
result, because it could be a non-self-evaluating symbol,
or list.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* share/txr/stdlib/match.tl (compile-match): Pattern macro
expanders now have an environment parameter. We turn the list
of variables that have been bound so far into a fake
macro-time lexical environment, the parent of which is the
surrounding environment. The pattern macro can query this
using the lexical-var-p function to determine whether a given
variable already has a binding, either in the pattern, or
in the surrounding lexical environment.
(defmatch): Generate a two-argument lambda, and use the new
mac-env-param-bind to make the environment object available
to the user-defined expansion.
* tests/011/patmatch.tl: New test cases for this environment
mechanism, and also for defmatch itself.
* txr.1: Document role of :env under defmatch.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
mac-env-param-bind is like mac-param-bind but also allows
the value for the :env parameter to be specified.
* eval.c (op_mac_env_param_bind_s): New sy mbol variable.
(op_mac_env_param_bind): New static function.
(do_expand): Handle mac_env_param_bind_s.
(eval_init): Initialize symbol variable and register macro.
* share/txr/stdlib/compiler.tl (compiler compile): Add case
for mac-env-param-bind.
(compiler comp-mac-env-param-bind): New method.
* share/txr/stdlib/doc-syms.tl: Updated with new hashes for
tree-bind and mac-param-bind, and inclusion of
mac-env-param-bind.
* tests/012/binding.tl: New file.
* txr.1: Documented.
|
|
|
|
|
|
|
|
|
|
| |
* unwind.h (UW_FRAME_ALIGN): Define on __amd64__, if compiled
by __clang__. This is because MMX instructions are used for
manipulating the stack which require 16 byte alignment.
This was discovered as a bus error crash on OpenBSD in the
tests/012/cont.tl test case, acessing otherwise perfectly
valid memory. The faulting address was only 8 byte aligned,
not 16.
|
|
|
|
|
| |
* share/txr/stdlib/quips.tl (%quips%): Song lyric parody
of あなたに夢中 by キャンディーズ.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* share/txr/stdlib/doc-syms.tl: New entry for end.
* share/txr/stdlib/match.tl (check, check-end, check-sym,
loosen, pat-len): New functions, taken from original local
functions of sme macro.
(sme): Refactored by hoisting local functions out. Some
local variable renaming.
(end): New pattern macro.
* tests/011/patmatch.tl: New test for end.
* txr.1: Documented.
|
|
|
|
|
|
|
|
| |
* utf8.c (utf8_from_buf, utf8_deocde): On 16 bit wchar_t, we
dont' have to throw on every value in the range 0xF0-0xFF.
Only the values 0xF0 through 0xF4 are potential UTF-8 bytes;
so we only need to error out on those. 0xF5 through 0xFF
are invalid bytes, which we can map into the 0xDCNN range.
|
|
|
|
|
| |
* tests/012/parse.tl: All the tests in this file blow up on
systems that don't have a full-blown character type.
|
|
|
|
|
|
|
| |
* share/txr/stdlib/compiler.tl (open-compile-streams): When
the output file cannot be opened, the diagnostic message
wrongly refers to the input stream object rather than the
output file path.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
LIT_ALIGN was introduced before there was SIZEOF_WCHAR_T.
The latter was introduced on suspicion that they might not
be the same. Since LIT_ALIGN is tied to SIZEOF_WCHAR_T
again there is no need for it to exist.
* configure (lit_align): Variable removed. Documentation
of lit-align argument removed. Alignment of wide literals test
removed. Not generating LIT_ALIGN in config.h any more.
* lib.h (LIT_ALIGN): Occurrences replaced with SIZEOF_WCHAR_T.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This reverts commit 0343c6f32c5bd8335e88595cb9d23506625b2586.
I don't see evidence that the claim in the commit is true:
that wide literals are not four-byte-aligned on Darwin in
spite of sizeof(wchar_t) being 4. Not even with the old clang
in my old VM where I first thought I discovered this.
* configure: do not set up LIT_ALIGN == 2 for Darwin.
* lib.h (litptr): Remove LIT_ALIGN < 4 && SIZEOF_WCHAR_T == 4
case.
* HACKING: Undocument bogus claim.
|
|
|
|
|
|
|
|
|
|
|
|
| |
On platforms where wchar_t literals have two byte alignment,
these misbehave incorrectly, failing to treat / as a path
separator. Thus (dir-name "a/b/c") is reported as ".".
Lack of test coverage, argh.
* stream.c (base_name, dir_name): Do not use wref macro on
wli() string literal; the offset is already built-in.
* txr.c (sysroot_init): Likewise.
|
|
|
|
|
|
|
| |
* lib.h (wli_noex): The first of three literals being
juxtaposed is missing the L prefix, leading to a mixture of
wide and regular literals. This is supported by C, but
let's avoid it.
|
|
|
|
|
|
|
|
|
|
| |
* configure (gcc_version, broken128): Formally declare
existing ad hoc variables.
(do_nopie): New variable.
Compiler version test moved up. We use the gcc version to
disable nopie, and check for clang to do the same.
Instead of checking for darwin and android to skip the nopie
stuff, we check do_nopie.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* tests/014/socket-basic.tl (%iters%): Also reduce to 2000 on
OpenBSD, to avoid the default limit on UDP datagram size.
* tests/017/glob-carray.tl: Use the BSD-style struct glob-t
on OpenBSD also.
* tests/017/glob-zarray.tl: Likewise.
* tests/018/chmod.tl (os): New global variable.
(test-sticky): s-isvtx not allowed for non-root user on
OpenBSD, so we falsify this variable.
* tests/common.tl (os-symbol): Add OpenBSD case, producing
:openbsd keyword symbol.
(libc): Let's just use (dlopen nil) for any platform that isn't
Cygwin or Cygnal.
|
|
|
|
|
|
| |
* configure: in a few tests, we are calling make as "make"
rather than via the $make variable. This fails when "make"
isn't GNU Make.
|
|
|
|
|
|
|
|
|
|
|
|
| |
* lisplib.c (match_instantiate): Intern sme symbol.
* share/txr/stdlib/doc-syms.tl: Update with sme entry.
* share/txr/stdlib/match.tl (sme): New defmatch macro.
* tests/011/patmatch.tl: New tests for sme.
* txr.1: Documented.
|
|
|
|
|
| |
* txr.1: The function is first, then the hash. Reported by
Ray Perry.
|
|
|
|
|
|
|
|
| |
* share/txr/stdlib/match.tl (defmatch): Pass *match-form* to
mac-param-bind so that the context is available to defmatch
macros via the :form parameter.
* txr.1: Documented use of :form in defmatch.
|
|
|
|
|
|
|
|
|
|
|
|
| |
Tested on OpenBSD amd64.
* socket.c: Add <sys/socket.h>. Test for AI_V4MAPPED and
AI_ALL being defined.
* sysif.c: Add <stdarg.h>. Test for EMULTIHOP, ENODATA,
ENOLINK, ENOSR, ENOSTR, EPIPE and ETIME.
* termios.c: est for OFILL, VTDLY, VT0 and VT1.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* share/txr/stdlib/error.tl (compile-error): Print the
error message on *stderr*, like we do with warnings.
This allows the programming environment to pick up the
error message and navigate to that line accordingly.
The error message is also output by the unhandled exception
logic but with a prefix that prevents parsing by the tooling.
To avoid sending double error messages to the interactive
user, we only issue the *stderr* message if *load-recursive*
is true.
* tests/common.tl (macro-time-let): New macro. This lets us
bind special variables around the macro-expansion of the body,
which is useful when expansion-time logic reacts to values
of special variables.
* tests/012/ifa.tl: Use macro-time-let to suppress *stderr*
around the expansion of the erroneous ifa form.
We now needs this because the error situation spits out a
message on *stderr*, in addition to throwing.
|
|
|
|
|
| |
* share/txr/stdlib/struct.tl (new-expander): Don't format
prefix into error message; compile-error does that.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* share/txr/stdlib/match.tl (compile-scan-match): New
function.
(compile-match): Hook scan operator into compiler.
* lisplib.c (match_set_entries): Ensure scan is interned in
usr package.
* txr.1: Documented.
* share/txr/stdlib/doc-syms.tl: Updated with new entry for
scan.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* lisplib.c (match_set_entries): Register defmatch
and *match-symbol* to autoload match.tl.
* share/txr/stdlib/doc-syms.tl: Updated with entries for
defmatch and *match-macro*.
* share/txr/stdlib/match.tl (*match-macro*): New special
variable holding hash.
(compile-match): Handle macros via *match-macro* hash.
(defmatch): New macro.
* txr.1: Documented.
* tags.tl: Recognize defmatch forms.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The maximum number of characters printed from a string
is too small, if it is directly taken from the stream-max-len
value. We are going to multiply it by 8, and clamp the
minimum characters at 24.
* lib.c (max_str_chars): New inline function.
(lazy_str_put, out_lazy_str, out_quasi_str): Use inline
function to determine maximum number of chracters to print.
Also bugfix here: decrement and test max_chr in the loop, not
max_len. This bug was copy-pasted across all these functions.
(obj_print_impl): Similarly revise the printing of strings.
* txr.1: Documentation updated.
|
|
|
|
|
|
| |
* gc.h (z): turn off. This is not achieving its purpose of
stopping spurious retention of objects, and adds a fraction
of a percent of execution overhead.
|
|
|
|
|
|
|
|
| |
* lib.c (dis): New function that we can call from gdb to
disassemble a VM function, if we know its address.
I've done this manually way too many times.
* lib.h (dis): Declared.
|
|
|
|
|
| |
* match.c (v_gather): Identify all required variables that are
missing, and list them all in the diagnostic.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This commit relies on parallel improvements
in man2html, up through commit
ac186529b6b5f80906c3215a67c98505db7bb156
"Implement .M2HT request for HTML passthrough."
* genman.txr: Add CSS block targetting the kbd element,
providing 3D styling for keyboard input.
* txr.1: Define two new macros, .key and .keyn.
These are defined in three different ways: in man page
output, we put square brackets around keystrokes.
In typeset groff output, we put a square border around
them using a box macro cribbed from groff documentation.
In HTML, we use .M2HT to wrap a <kbd> tag around the
keystrokes. Documentatio is updated to use these macros
for all keystrokes. We no longer separate keystroke
sequence elements with commas.
|
|
|
|
| |
* tests/012/compile.tl: Simplify code with regsub.
|
|
|
|
|
| |
* regex.c (regsub): When the regex argument is actually a function, we
must copy the string, because replace_str is destructive.
|
|
|
|
|
|
| |
* genvim.txr: the tl.vim file does not require a highlighting
association between txr_keyword and Keyword, since it lacks
the txr_keyword match group.
|