| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
* txr.1: Remove text fragment, and clarify treatment of not,
null and false.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Already we have the situation that there is an if function and
an if macro, and same for and and or.
This change allows such situations to be programmer-defined.
* eval.c (op_defun): Don't remhash the name from the toplevel
macro bindings.
(op-defmacro): Don't remhash the name from the toplevel
function bindings.
* txr.1: Document the permissive behavior as dialect notes
under defmacro and defun.
|
|
|
|
|
|
|
|
|
| |
* eval.c (mboundp, mmakunbound): New static functions.
(eval_init): Registering mboundp and mmakunbound intrinsics.
* txr.1: Documenting new functions. Also clarifying that
fboundp checks for an operator macro binding (not a symbol
macro binding).
|
|
|
|
|
|
|
| |
* eval.c (eval_init): Register lookup_origin as macro-ancestor
intrinsic.
* txr.1: Documented.
|
|
|
|
|
| |
* txr.1: formatting fix in syntax section. Added explanation
that macro expansions inherit source loc info from expander.
|
|
|
|
|
| |
* txr.1: TXR pattern language condensed into fewer sections
with deeper nesting. Some sections renamed.
|
| |
|
|
|
|
|
| |
* txr.1: Under dwim operator, describe [...] notation
without asserting that it is preferred.
|
|
|
|
| |
* txr.1: Tense agreement, clarification. Italicize de facto.
|
| |
|
|
|
|
| |
* txr.1: replace colloquial word choice.
|
|
|
|
|
| |
* txr.1: Upgrade text under Callable Objects and Operator
dwim.
|
|
|
|
|
| |
* txr.1: There is no such function as range-regst.
This should be search-regst.
|
|
|
|
|
|
|
|
|
|
|
| |
* regex.c (range_regex): Return range.
(search_regst): Use appropriate accessors on
range returned by range_regex.
* lib.c (tok_where): Destructure range returned by
range_regex, using range_bind.
* txr.1: Documented changed behavior.
|
| |
|
|
|
|
|
|
| |
* genman.txr: TOC extraction code renames Index
to Contents, and adds expand/collapse links.
Javascript added to handle expand/collapse.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* stream.h (struct strm_ops): seek operation's second argument
is now just a val.
* stream.c (unimpl_seek, null_seek): Second argument is a val,
not cnum, to conform with function pointer in stream
structure.
(stdio_seek): Accept offset as val, which could be a fixnum
or bignum. Use new stdio_ftell and stdio_fseek functions
so large values work.
(seek_stream): No need to convert offset argument to cnum;
pass the val directly to seek virtual function.
* sysif.c (off_t_num, num_off_t, stdio_ftell,
stdio_fseek): New functions.
* sysif.h (OFF_T_MAX, OFF_T_MIN): New preprocessor symbols.
(off_t_num, num_off_t, stdio_ftell, stdio_fseek): Declared.
|
|
|
|
|
|
|
|
|
| |
* configure (lang_flags): _XOPEN_SOURCE is bumped from 600 to
700 so that fseeko and ftello are revealed in <stdio.h>
by glibc, and off_t is defined there too.
New configure tests for fseeko/ftello and for detecting
which macro, if any, do we add to lang_flags to enable
large file support (64 bit off_t).
|
|
|
|
| |
* configure (read_syms): Fix bad indentation.
|
|
|
|
|
|
|
|
|
|
|
| |
* struct.c (static_slot_ensure): Restructured function so that
the subtypes of stype are processed even if stype already has
the static slot. This way static-slot-ensure can be used to
overwrite a static slot value, not only establish one.
And thus defmeth can redefine methods.
* txr.1: Revamped static-slot-ensure doc, and added notes
about redefining to defmeth.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This bug doesn't affect static slots that are defined in
defstruct, because those get initialized in the new type by
the static init function.
The bug is that the values of static slots added later with
static_slot_ensure are not inherited by subtypes that are
created later still.
(Since static_slot_ensure propagates a slot to subtypes which
already exist, those types get the slot value.)
* struct.c (make_struct_type): Copy the contents of the
static slot array of the supertype into the new type,
so that static slot values are inherited. We can just use
memcpy because the ordering of static slots is the same
in the new type, and the inherited ones precede the
new ones, due to the way the all_slots list is combined.
* txr.1: Clarify inheritance of static slots.
|
|
|
|
|
|
| |
* struct.c (method_name): Don't return first match. Resolve to
most ancestral superclass which has that function in the
same slot.
|
|
|
|
|
| |
* eval.c (error_trace): Restructure loop. Suppress
"which is located at" message in first iteration.
|
|
|
|
|
| |
* genvim.txr: Indent new, lnew, meth, umeth
and usel forms like function calls.
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (op_defun): Handle (meth type name) syntax
in place of name via sys:defmeth function, which
is dynamically resolved and autoloaded as necessary.
(builtin_reject_test): When defun is being checked,
recognize a (method ...) form and allow it.
* struct.h (meth_s): Declaration added.
* txr.1: Documented new defun capability.
|
|
|
|
|
| |
* share/txr/stdlib/struct.tl (defmeth): Return the
symbol being defined.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The context form arguments become just context objects in
various places. When a context form is actually needed, or the
context's symbolic name, they must be retrieved via functions
applied to a context.
* debug.c (debug): form argument is now a context. Use
the ctx_form function to retrieve the form.
* debug.h (debug_check): Rename form parameter to ctx.
* eval.c (ctx_form, ctx_name): New functions.
(eval_error): Leftmost parameter is a context now.
Use ctx_form API to obtain the context form from
this object, from which the source location info
can then be retrieved as before.
(abbrev_ctx): Function removed.
(bind_args, bindings_helper, fbindings_helper): Convert
ctx_form argument to
ctx, and use the API to access name or form.
(do_eval, do_eval_args, eval, eval_args_lisp1,
eval_lisp1, eval_progn, eval_prog1): ctx_form param
renamed to ctx.
(funcall_interp): Pass the original interpreted
function as the context to bind_args, not the
extracted code. When ctx_name sees this object, it
will compute the function name, which was not possible
from the code being used as the context. This
is the big reason for all these changes.
* eval.h (eval_error): Declaration updated.
(ctx_form, ctx_name): Declared.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (env_vbind_special): Remove unused ctx_form
parameter.
(bind_args, bind_macro_params): Don't pass ctx_form to
env_vbind_special.
(apply): Remove unused ctx_form parameter.
(apply_intrinsic, applyv, mapcarv, mappendv,
lazy_mapcarv_func, mapdov, do_mapf): Don't pass nil third
argument to apply.
* eval.h (apply): Declaration updated.
* lib.c (do_juxt): Do not bind third argument of apply
to lin when currying; curry as two argument function.
(do_not): Do not pass third nil argument to apply.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (funcall_interp): Drop the env argument.
The fun argument is now the whole function object, not the
encapsulated code to be interpreted. We pull the
environment and code out of the object locally
and interpret as before.
* eval.h (funcall_interp): Declaration updated.
* lib.c (generic_funcall, funcall, funcall1, funcall2,
* funcall3, funcall4): Calls to funcall_interp simplified,
just passing fun.
|
|
|
|
|
|
|
|
|
| |
* eval.c (interp_fun): Function renamed to funcall_interp.
* eval.h (interp_fun): Declaration updated.
* lib.c (generic_funcall, funcall, funcall1, funcall2,
funcall3, funcall4): Calls to interp_fun updated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (func_get_name): Use try to use new method_name
function, if unable to get name from the lexical or
global environment for functions.
* struct.c (meth_s): New symbol variable.
(struct_init): Initialize meth_s variable.
(method_name): New function.
* struct.h (method_name): Declared.
* txr.1: Re-documented func-get-name.
|
|
|
|
|
|
|
|
|
|
| |
* RELNOTES: Updated.
* configure, txr.1: Bumped version and date.
* share/txr/stdlib/ver.tl: Likewise.
* txr.vim, tl.vim: Regenerated.
|
|
|
|
|
|
|
|
|
| |
* Makefile: include CONF_LDFLAGS in LDFLAGS.
* configure (conf_ldflags): New variable.
(gen_config_make): Generate CONF_LDFLAGS make variable.
New test which sets up conf_ldflags for a 16Mb stack
size if we are on Cygwin or MinGW.
|
|
|
|
|
|
|
|
| |
* lib.c (partition_split_common): nullify indices after
calling function, because function can put out an empty
sequence of non-list type. Use "not sequence" test
rather than "atom" on final index list, so that
vectors and strings can specify indices, as documented.
|
|
|
|
|
|
|
| |
* eval.c (bind_macro_params): On mismatch between atom
and param list, or insufficient parameters for list, report
which params are mismatched. In a nested destructuring
syntax, it is difficult to know.
|
|
|
|
|
|
|
|
| |
* lib.c (transpose): This function turns an input list
into an argument list which ends up in an args structure,
which potentially destroys it to prevent spurious retention.
The list must be copied. We don't use copy-list because
the function supports vectors.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (error_trace): New function. Consolidates
error reporting between unhandled exception handling
in uw_throw, and the catcher in the repl.
(op_defmacro, expand_macrolet): Propagate location info from
body to wrapping block, and to the macro binding. In the
latter function, also to the body that is wrapped by local
macros.
(do_expand, macroexpand_1): Propagate location info from macro
expander to expansion, only taking it from the form if the
macro doesn't supply it.
* eval.h (error_trace): Declared.
* parser.c (repl): Replace error reporting code with call to
error_trace.
* unwind.c (uw_throw): uw_throw: likewise.
|
|
|
|
| |
* eval.c (maybe_progn): rlcp info to generated progn cons.
|
|
|
|
|
|
| |
* eval.c (expand_qquote): Use rlcp_tree to propagate
source location more completely. Also, it was missing
in the quote case.
|
|
|
|
|
| |
* parser.y (rlcp_tree): Remove redunant test, around the for
loop, of a condition which is the same as its guard condition.
|
|
|
|
|
| |
* parser.y (hash, struct, range): Fix rlcp being wrongly used
to copy nonexistent line number info from an integer.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (origin_hash): New global variable.
(lookup_origin): New function.
(expand_macro): Enter original form into origin hash, keyed by
new form.
(eval_init): gc-protect and initialize origin_hash.
* eval.h (lookup_origin): Declared.
* parser.c (repl): Report chain of expansions from
last_form_evaled.
* unwind.c (uw_throw): Likewise.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
sethash mistakenly returns a boolean which indicates that the
value was newly added, rather than the documented behavior of
returning the new value.
* hash.c (sethash): return value rather than new_p.
* share/txr/stdlib/place.tl (defplace): The defplace form
now seturn the main symbol of the place being defined,
rather than returning whatever the last sethash call
returns.
(define-place-macro): Likewise.
(sys:register-simple-accessor): Likewise, so that defaccessor
returns the getter function's name.
|
|
|
|
|
|
| |
* share/txr/stdlib/struct.tl (sys:defmeth): New function.
Reacts to find-struct-type returning nil.
(defmeth): Logic moved into function.
|
|
|
|
|
|
|
|
|
|
|
| |
* lisplib.c (place_set_entries): New entry to trigger
autoloading for define-accessor.
* share/txr/stdlib/place.tl (sys:register-simple-accessor):
New function.
(define-accessor): New macro.
* txr.1: Documented define-accessor.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* args.h (args_set_fill): New inline function.
* eval.c (eval_init): Register window-map and window-mappend
intrinics.
* lib.c (wrap_k, reflect_k): New keyword variables.
(calc_win_size): New static function.
(window_map_list, window_map_vec): New static functions.
(window_map, window_mappend): New functions.
(obj_init): Initialize wrap_k and reflect_k.
* lib.h (window_map, window_mappend): Declared.
* txr.1: Documented window-map and window-mappend
|
|
|
|
|
|
|
|
|
|
| |
When the index argument is a function and it returns
an empty list, the functions behave incorrectly.
* lib.c (partition_split_common): Exchange order
of two operations. The handling of an empty indices list must
be done after testing for and calling the function which can
potentially produce that value.
|
|
|
|
|
|
| |
* struct.c (super): Fix regression from Oct 17.
When the argument is a struct instance, we must
return the supertype, not the type.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This change eliminates numerous cast expressions and a pointer
chase from some operations, though some, like the struct_type
function, end up chasing an extra pointer.
* struct.c (struct struct_type): New member, self.
(struct struct_inst): Type member changed from val to
struct struct_type *.
(make_struct_type): Initialize new self member.
(super): Obtain type from si->type->self rather than
si->type. There appears to be a bug here.
(make_struct, lazy_struct_init): Initialize type field with
struct pointer rather than type object. Add an assertion which
references the type parameter, to prevent the cobj call from
garbage collecting type.
(copy_struct, clear_struct, replace_struct, reset_struct,
(lookup_slot, slot, slotset, struct_type, uslot_fun,
umethod_fun, struct_inst_print, struct_inst_mark,
struct_inst_equal, struct_inst_hash, struct_inst_equalsub):
All updated to new way of referencing type structure
and type object.
|
|
|
|
|
|
|
|
|
|
| |
Seems like a good regression test case, combining
structs, macros, lambdas, recursion,
environments and syntactic places.
* tests/012/man-or-boy.tl: New file.
* tests/012/man-or-boy.expected: Likewise.
|