| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
* txr.1: Add notes about environment handling when an
interpreted function is compiled, and how hlet/hlet* can be
used to obtain sharing.
|
|
|
|
| |
* txr.1: All missing item number periods added.
|
|
|
|
| |
* txr.1: Fix "implement implement".
|
|
|
|
|
|
|
|
| |
* share/txr/stdlib/awk.tl (sys:awk-expander): Do not impose
stricter restrictions on :name than the block mechanism
itself.
* txr.1: Documentation updated.
|
|
|
|
|
| |
* txr.1: The block implementation doesn't care whether blocks
are symbols; anything comparable with eq may be used.
|
|
|
|
|
|
|
| |
* lib.c (get_param_counts): If there are no optional
parameters, then the oa variable stays negative; we must turn
that into a zero, otherwise we return the bogus value -1 as
the number of optional arguments.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* genman.txr: dump contents of symhash into a doc-syms.tl
library file, as a defvarl form.
* lisplib.c (doc_instantiate, doc_set_entries): New static
functions.
(lisplib_init): Register autoload for doc-lookup module
to symbols doc and *doc-url*.
* share/txr/stdlib/doc-lookup.tl: New file.
* share/txr/stdlib/doc-syms.tl: Likewise.
* txr.1: Documented.
|
|
|
|
| |
* txr.1: Consistently capitalize Dialect Note
|
|
|
|
|
| |
* txr.1: Remove two unnecessary .PP directives and a blank
line before one.
|
|
|
|
|
|
| |
* txr.1: Don't use TP* for notes and dialect notes because it
doesn't fit these paragraphs that don't have an indented
margin.
|
|
|
|
| |
* txr.1: Add .PP to deindent after example.
|
|
|
|
|
| |
* txr.1: Fix grammar problem and wording for
--lisp and --compiled.
|
|
|
|
|
| |
* txr.1: Give the two -l and --lisp-bindings synonyms in the
same way was other synonyms, as two separate .IP items.
|
|
|
|
|
|
| |
* genman.txr: Use an alternative solution for dl.items
elemens which places short items to the left of their
definining text, while allowing long items to overhang.
|
|
|
|
|
|
|
|
| |
* checkman.txr (check-ip): New pattern function for checking
for IP, coIP and meIP macros followed by blank line. This
causes a formatting issue in HTML.
* txr.1: Fix numerous instances of problem caught by check-ip.
|
|
|
|
| |
* txr.1: add .RS/.RE pair in Quote and Quasiquote.
|
|
|
|
|
| |
* genman.txr: add CSS rules targeting <dl class="items">,
which are now supported in man2html.
|
|
|
|
|
|
| |
* txr.1: Under the summary of place-mutating operations,
rewrite the description of push which falsely claims that the
pushed item is returned.
|
|
|
|
|
|
| |
* share/txr/stdlib/compiler.tl (compiler (pop-closure-spy,
pop-access-spy)): The stack underflow checkt must be done by
checking top, not the incoming spy argument.
|
|
|
|
| |
* txr.1: Fix about :reflect wrongly referring to :wrap.
|
|
|
|
| |
* txr.1: indent-foff misspelled as intent-foff.
|
|
|
|
|
| |
* txr.1: Fix grammar, punctuation, formatting, and
cases of misspellings landing on dictionary words.
|
|
|
|
|
| |
* eval.c (do_expand): argument of fun is not in "operator
position"; fixed wording.
|
|
|
|
|
| |
* txr.1: Fix two occurrences of \*(TL being separated from a
period by a space in the ARGUMENTS AND OPTIONS section.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* share/txr/stdlib/compiler.tl (%param-info%): New global
variable.
(compiler comp-fun-form): Use get-param-info function to get
param-info object.
(get-param-info): Retrieve object from cache, using the
function as the key. If not found, create the entry.
(compiler-emit-warning): Use get-param-info.
* share/txr/stdlib/param.tl (struct param-info): Remove symbol
slot, replacing it with the function.
(param-info :postinit): No need to do symbol-function lookup;
the function is given.
|
|
|
|
|
| |
* share/txr/stdlib/compiler.tl (reduce-lisp, reduce-constant):
Propagate source location to rewritten forms.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch eliminates parentheses from the error messages,
as well as a leading ./ being added to relative paths.
The word "warning: " is moved into the error message, so that
it does not appear before the location.
Example, when doing (compile-file "path/to/foo.tl").
Before patch:
warning: (./path/to/foo.tl:37): unbound function foo
After:
path/to/foo.tl:37: warning: unbound function foo
Now when I compile out of Vim, it nicely jumps to errors in
Lisp code.
* eval.c (eval_exception): Drop parentheses from error
location, add colon.
(eval_warn): Prepend "warning: " to format string.
(eval_defr_warn): Drop parentheses from location, and
prepend "warning: " to format string.
* parser.c (repl-warning): Drop "warning:" prefix.
* share/txr/stdlib/compiler.tl (open-compile-streams): Do not
do parent substitution for relative paths if the parent path
is the empty string "", to avoid inserting ./ onto relative
paths in that case.
* share/txr/stdlib/error.tl (sys:loc): Drop parentheses and
space from location.
(compile-error) Separate location with colon and space.
(compile-warning, compile-defr-warning): Likewise and add
"warning: " prefix.
* unwind.c (uw_rthrow): Drop "warning: " prefix.
(uw_warningf): Add "warning: " prefix.
(uw_dump_deferred_warnings): Drop "warning: " prefix.
|
|
|
|
|
|
|
|
|
| |
* share/txr/stdlib/compiler.tl (expand-quasi-args): Here,
expand-quasi-mods is being called with the wrong number of
arguments. This was likely intended to be a recursive call to
expand-quasi-args. Let's convert it to that. Removing this
case also works, but it is nicer not to generate the
sys:fmt-simple call.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We implement rudimentary compile-time checking beween function
calls and function definitions.
* share/txr/stdlib/compiler.tl (dstruct frag): We add one more
optional BOA parameter, corresponding to a new slot.
This is used when compiling a lambda. A lambda fragment is
annotated with the parameter parser object which gives
information about its arguments.
(struct fbinding): New slot, pars. When processing a sys:fbind
or sys:lbind form, we decorate the lexical function bindings
with the parameter object pulled from the lambda fragment
that is compiled for each function binding.
(*unchecked-calls*): New special variable. This is used for
checking, at the end of the compilation unit, the arguments of
calls to functions that were not defined at the time of the
call.
(compiler comp-fbind): When processing the lambda expressions,
propagate the parameter object from the compiled lambda
fragment to the function binding.
(compiler comp-fun-form): On entry, look up the function being
called and if it is lexical or has a global definition, check
the arguments. If it has no definition, push information into
the *unchecked-calls* list to do the check later, if possible.
Also, there is a behavior change here now: optimizations are
now applied here only to functions that don't have a lexical
binding. Thus if the application lexically redefines a
standard function, and calls it, we won't try to optimize it.
(param-check): New function.
* share/txr/stdlib/param.tl (param-info): New struct. This
presents information about a global function in a similar way
to param-parser, using some of the same fields. With this
object we can check the call to a lexical function or global
function in a uniform way, using the same code.
|
|
|
|
|
|
|
|
|
|
|
| |
* share/txr/stdlib/compiler.tl (compiler comp-apply-call): The
conditions for constant-folding a call expressions are too
weak. The first argument could be a quoted symbol, which is a
constant expression, and so we end up wrongly evaluating
an expression like (call 'print '3) at compile time.
We can constant-fold if the first expression evaluates to a
symbol, which names a constant-foldable function, or else
if it evaluates to something which is not a bindable symbol.
|
|
|
|
|
|
|
|
|
|
| |
* RELNOTES: Updated.
* configure, txr.1: Bumped version and date.
* share/txr/stdlib/ver.tl: Bumped.
* txr.vim, tl.vim: Regenerated.
|
|
|
|
|
| |
* txr.1: Relationship between make-similiar-hash and copy-hash
is expressed more accurately.
|
|
|
|
|
| |
* lib.c (funcall, funcall1, funcall2, funcall3, funcall4):
Remove unnecessary braces.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
ifq tN t0 label0 ifq tN t0 label1
... ...
label0: --> ...
if tN label2
label1: label1:
... ...
* share/txr/stdlib/optimize.tl (basic-blocks
thread-jumps-block): Implement case. There are there are 56
"hits" for this in the standard library.
|
|
|
|
|
|
|
|
|
|
| |
I have experimented with several approaches, and found that
this one has an immeasurably small effect on performance,
below the noise floor.
* vm.c (vm_jmp): Call sig_check_fast whenever there is a
backwards branch.
(vm_execute): Check for signals once, on entry.
|
|
|
|
| |
* METALICENSE: yeras typo teported by P. A. Patience.
|
|
|
|
|
|
|
|
|
| |
* tests/014/socket-basic.tl (%iters%): New variable.
2000 on MacOS, 5000 elsewhere.
(client, server): Use %iters% instead of hard-coded 5000.
(test): Rename to sock-test, since it clashes with the test
macro coming from common.tl, which we neeed to for the
os-symbol function.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The MacOS sed doesn't accept semicolon termination for
commands involving defining labels or branching to labels.
This is not a new issue, but it is revealed on newer MacOS
because the sed now complains about unused labels.
In the sed command ':x; /whatever/ { ...; tx }', everything
after the initial : is interpreted as a label.
* Makefile (DEPGEN): Split the sed command's syntax up into
logical lines using multiple -e commands, applying some
formatting with indentation to try to keep it readable.
It looks like multiple -e options just glue together to
make a program, as if they were lines of code; one -e
can define a label referenced by another, and even the
closing brace can be treated as a separate command.
|
|
|
|
|
| |
* configure: Don't try to use -nopie in Darwin environments.
With newer clang on the M1, it generates nuisance warnings.
|
|
|
|
|
|
|
|
|
|
| |
* configure (lit_align): Also don't calculate lit_align as 2
on Darwin/arm64; that is a hack needed on 32 bit x86 Mac OS.
* jmp.S: Define DEFUN for Arm64 on Darwin. We have to use %%
as the statement separator; semicolons are comments.
Use the same __aarch64__ code for __arm64__. We just need
some Apple specific tidbits before and after.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Thanks to a recent discussion in the GNU Make mailing list
about some issue related to grouped patterns, I hit upon the
realization that the rule y.tab.h y.tab.c: parser.y has
a common stem, y, which can be exploited to write a pattern
rule. This is only active in maintainer mode; in user mode,
the y.tab.h and y.tab.c are separately produced from .shipped
files.
* Makefile (y.tab.h): Eliminate rule which detects a removed
y.tab.h.
(y.tab.c): Delete rule, replacing with new rule.
(%.tab.c %.tab.h): New pattern rule, which groups the targets
together.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The float type promotes to double when passed as
a variadic argument.
This patch adds internal FFI types which models that
promotion. It uses double for its C type, while still
performing the range checks for float.
Also, the types be-float and le-float are rejected from
being variadic arguments.
* share/txr/stdlib/ffi.tl (analyze-argtypes): Rewrite
function, adding validation and substitution for the
variadic part of the argument type list. Map float type to
double, and reject be-float and le-float.
* txr.1: Documented.
|
|
|
|
|
|
|
|
|
| |
* ffi.c (ffi_ushort_get): Add the missing align_sw_get macro
that checks for and handles misalignment.
Commit e539fbc2af3bd4a5bd4ca3d9b567862005509aa1 made on
2017-06-05 added these macros and fixes to numerous functions.
The commit message claims that ffi_ushort_get was among the
functions fixed, but no change was made to the function.
|
|
|
|
| |
* ffi.c (ffi_uchar_put): Fix for C90 compat and consistency.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When a jmp instruction is replaced by the end instruction
that it jumps to, or possibly by a two-instruction sequence
ending in end, there can be more opportunities to optimize.
For instance, the second reduction in a sequence like this:
mov t3, t5 mov t3, t5
jmp label --> end t3 --> end t5
...
label:
end t3
* share/txr/stdlib/optimize.tl (basic-blocks peephole-block):
If the end-propagation is done, we change the linkage of the
current block to indicate that it has no next blocks. We
add it to the rescan list and set the recalc flag so the
liveness information is updated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If a function has nothing but parameters that are not captured
in lexical closures, they can be converted registers. The
function then doesn't need a variable frame for its
parameters. This is similar to the eliminate-frame
optimization, and borrows the same code and logic.
* share/txr/stdlib/compiler.tl (compiler eliminate-frame): We
no longer assume that the code coming in starts with a frame
instruction we can eliminate using (cdr code) and an end
insruction we can eliminate with a trailing pattern.
This is because when this function is used for a lambda, this
is not the case; a lambda's variable frame is implicit,
created by the VM for any lambda with a nonzero frame size,
rather than by a frame instruction.
(compiler comp-let): In the call to eliminate-frame, we now
trim away the first and last instruction, to get rid of
the (frame ...) and (end ...).
(compiler comp-lambda-impl): Install a closure spy against the
variable frame to detect which variables are captured in
closures, similarly to in comp-let. Under the right
conditions, pass the code through eliminate-frame to turn
the variables into registers. The close instruction has to be
rewritten, because the frame size is now zero, and the number
of t registers has changed.
|
|
|
|
|
|
|
| |
* sysif.c (poll_wrap): Use seq_iter for efficience when
poll_list is a vector or other generalized sequence.
* txr.1: Change wording to say that poll-list is a sequence.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We have the situation that there are effectively two kinds of
spies: let constructs plant spies only in order to learn about
what variables are being captured, whereas lambdas plant spies
in order to intercept variable accesses (and to inform the
spies that are interested in what is captured). Let us split
these up into two separate types, with different methods,
in different stacks.
* share/txr/stdlib/compiler.tl (struct var-spy): Renamed to
closure-spy.
(var-spy accessed, var-spy assigned): Methods removed: the
closure-spy type has only the captured method.
(struct capture-var-spy): Renamed to accesss-spy.
(capture-var-spy var-spies): Renamed to access-spy
closure-spies.
(capture-var-spy captured): Method removed; the access spy is
doesn't receive captured calls.
(struct compiler): Slot var-spies removed, replaced with
closure-spies and access-spies.
(with-var-spy): Macro removed.
(with-spy): New function.
(with-closure-spy, with-access-spy): New macros.
(compiler push-var-spy, compiler pop-var-spy): Methods
removed.
(compiler push-closure-spy, compiler pop-closure-spy,
compiler push-access-spy, compiler pop-access-spy): New
methods.
(compiler comp-var, compiler comp-setq, compiler
comp-lisp1-setq, compiler comp-lisp1-value): Walk new
access-spies list rather than var-spies to report about
accesses and assignments.
(compiler comp-let): Use with-closure-spy macro rather than
with var-spy. The spy object is now a closure-spy type,
and the variable is cspy rather than vspy.
(compiler comp-lambda-impl): Use with-access-spy instead of
with-var-spy. The spy object is now of type access-spy.
It refers to the current me.closure-spies from the compiler.
|
|
|
|
|
|
|
|
|
| |
I'm giving up and just using a recursive make invocation
for the "retest" target.
* Makefile (retest): Depend on nothing. Remove the tst
directory and invoke make tests recursively.
(tests.clean): Target removed.
|
|
|
|
|
|
|
|
|
|
|
| |
The var-spy structure is only being used for detecting
captured variables, not assigned or accessed variables.
So the information about accessed and assigned is being
wastefully accumulated, never used.
* share/txr/stdlib/compiler.tl (struct var-spy): Remove slots
acc-vars and set-vars.
(var-spy accessed, var-spy assigned): Methods become no-ops.
|