| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
| |
* stream.c (struct string_output): Renamed to string_out.
(string_out_stream_destroy, string_out_byte_callback,
string_out_put_char, strnig_out_put_string, string_out_put_byte,
make_string_output_stream, get_string_from_stream): Follow rename.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* stream.c (get_string_from_stream, get_list_from_stream,
stream_set_prop, stream_get_prop, close_stream, get_line,
get_char, get_byte, unget_char, unget_byte, put_string,
put_char, put_byte, flush_stream, seek_stream): Use cobj_handle and
cobj_ops instead of type_check and type_assert.
(get_indent_mode, test_set_indent_mode, set_indent_mode,
get_indent, set_indent, inc_indent, width_check): Use cobj_handle
and cobj_ops instead of stream->co.handle and stream->co.ops
for safety.
(vformat, format): Use class_check instead of type_check and
type_assert.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (op_error): New static function.
(macro_form_p, fboundp): Static to external.
(special_operator_p): New function.
(eval_init): Register macrolet and symacrolet to op_error.
These are recognized and processed by expand, but we want
them in the op table so they are reported by special_operator_p.
* eval.h (fboundp, macro_form_p, special_operator_p): Declared.
* hash.c (print_key_val): Break long lines on spaces
between pairs with stream_width_check.
(hash_print_op): Implement split and indented printing.
* lib.c (obj_print_impl): New static function, resulting
from a merge of obj_print and obj_pprint. Fixes some
wrong-way recursion bugs: obj_pprint recursed into obj_print
in some places. Adds support for multi-line printing of
vectors and lists, with indentation using the new
interfaces in streams.
* stream.c (strm_base_init): Update initializer.
(put_indent, indent_mode_put_string): New static functions.
(put_string): Use indent_mode_put_string in either of the
two indent modes.
(put_char): Implement indent mode.
(get_indent_mode, test_set_indent_mode,
set_indent_mode, get_indent, set_indent,
inc_indent, width_check): New functions.
* stream.h (enum indent_mode): New.
(struct strm_base): indent_on member becomes indent_mode.
New members data_width and code_width.
(get_indent_mode, test_set_indent_mode,
set_indent_mode, get_indent, set_indent,
inc_indent, width_check): Declared.
* tests/009/json.expected: Updated.
* tests/010/seq.expected: Likewise.
* tests/011/macros-2.expected: Likewise.
|
|
|
|
| |
fix on 2013-08-09.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In fact, the previosuly documented process is not correct and still
leaves a corruption problem under generational GC (which has been the
default for some time).
* HACKING: Document flaw in the initialization pattern previously
thought to be correct, and show fix.
* hash.c (copy_hash): Fix instance of incorrect pattern.
* regex.c (regex_compile): Likewise.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
we can give streams some common slots.
* stream.c (strm_base_init, strm_base_cleanup, strm_base_mark,
stream_destroy_op, stream_mark_op): New functions.
(null_ops): Switch to stream_destroy_op and stream_mark_op.
(make_null_stream): Associate a strm_base instance with the
cobj handle rather than a null pointer.
(struct stdio_handle): Inherit struct strm_base.
(stdio_stream_destroy): Clean up the strm_base part.
(stdio_stream_mark): Mark the strm_base part.
(make_stdio_stream_common): Initialize the strm_base part.
(struct dir_handle): Inherit struct strm_base.
(dir_destroy): Clean up the strm_base part.
(dir_mark): Mark the strm_base part.
(make_dir_stream): Initialize the strm_base part.
(struct string_in): New structure. Replaces ad-hoc cons
cell used for string input streams.
(string_in_stream_mark): Mark new structure.
(string_in_get_line, string_in_get_char, string_in_unget_char,
string_in_get_prop, string_in_get_error, make_string_input_stream):
Convert to new structure.
(string_in_ops): Switch to stream_destroy_op.
(struct byte_input): Inherit struct strm_base.
(byte_in_stream_destroy): No need to check handle for null.
No need to set handle to null after freeing: gc does it.
Clean up the strm_base part.
(byte_in_ops): Switch to stream_mark_op.
(make_string_byte_input_stream): Initialize the strm_base part.
(struct string_output): Inherit struct strm_base.
(string_out_stream_destroy): No need to check handle for null
since the logic elsewhere has changed.
Clean up the strm_base part.
No need to set handle to null.
(string_out_ops): Switch to stream_mark_op.
(make_string_output_stream): Initialize the strm_base part.
(get_string_from_stream): Don't free the handle.
Null out the buffer so->buf whose ownership passes to the string.
(struct strlist_out): New structure. Replaces ad-hoc cons cell
used for string list output stream.
(strlist_mark): Renamed to strlist_out_mark. Mark the strm_base
part.
(strlist_out_put_string, strlist_out_put_char,
make_strlist_output_stream, get_list_from_stream):
Convert to new structure.
(strlist_out_ops): Switch to stream_destroy_op.
Follow rename of strlist_mark.
(struct cat_strm): New structure, replacing ad-hoc list pointer
|
|
|
|
| |
destructor. This can catch some use-after-free errors.
|
|
|
|
| |
(stdio_stream_destroy, dir_destroy): Call close_stream directly.
|
|
|
|
|
|
| |
code for each stream type is together. Moving catenated
streams above utility functions, so they are together with
other stream definitions.
|
|
|
|
|
|
|
|
|
|
|
|
| |
* stream.c (enum align): New enum.
(vformat_align_pre, vformat_align_post): New static functions.
(vformat_num, vformat_str): Argument left renamed to align, and changed
to enum align. vformat_align_pre and vformat_align_post are called to
generate the correct padding for left, center and right alignment.
(vformat): Two-valued local variable left turned into three-valued
align. The ^ prefix on the width field is recognized.
* txr.1: Documented ^ width prefix.
|
|
|
|
| |
handle nil case in recursion.
|
|
|
|
|
| |
placelet as a way of writing place update macros.
Example added under placelet.
|
| |
|
| |
|
|
|
|
|
| |
Lists can be spliced and quoted. Metanums and metavars can
be prefixed by multiple @'s.
|
|
|
|
| |
Refer to source tree.
|
| |
|
|
|
|
|
|
| |
* tests/012/quasi.expected: New file.
* tests/012/quasi.tl: New file.
|
|
|
|
| |
tests in this directory.
|
| |
|
|
|
|
|
|
|
|
|
| |
* share/txr/stdlib/place.tl (place-form-p): Take
environment parameter. Expand the place form using sys:pl-expand.
* share/txr/stdlib/ifa.tl (ifa): Pass environment
to place-form-p.
(nthcdr): Pass environment down to place-form-p.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This means short, relative names are used for C source files when
compiling in the source directory.
* Makefile (CFLAGS): Exclude -iquote $(top_srcdir) arguments
if top_srcdir is blank. Remove slash after $(top_srcdir),
since the variable includes it now, if its value is not blank.
(SRCS, ABBREV, opt/%-win.o, lex.yy.c, y.tab.c, install): Remove slash
after $(top_srcdir).
(dbg/%.o, opt/%.o): Only include rules for depending
on $(top_srcdir)%.c prerequisite if top_srcdir is not blank.
In the blank case, the rules are redundant.
* configure: if configuring in the root of the source tree,
establish top_srcdir as blank, otherwise establish is as
an absolute path with a trailing slash.
|
|
|
|
|
|
|
|
|
|
|
| |
* Makefile (TESTS_OUT): Don't use find to hunt down tests;
but rather wildcard. This way common.tl is not mistakenly
identified as an independent test file.
* tests/012/ifa.tl: Removed test code, placed in new file
which is loaded.
* tests/common.tl: New file.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Makefile (CFLAGS): Search for mpi header in $(top_srcdir).
(ABBREV): Remove top_srcdir prefix from source names.
(dbg/%.o, opt/%.o): Extra set of pattern rules for searching
for prerequisites in $(top_srcdir) where primary C sources
are found and in the local dir where some generated C is found.
This way we don't rely on VPATH.
(opt/%.res): Bogus target removed.
(VPATH): Removed in favor of explicitly referencing $(top_srcdir).
Was causing problems for tests.
(lex.yy.c, y.tab.c): Prerequisites referenced in $(top_srcdir).
|
|
|
|
|
|
|
|
|
|
|
| |
word list literals and word list quasiliterals, except
in <= 109 compatibility mode. An escaped newline in
these literals, together with surrounding whitespace,
now produces a single space, except in <= 109
compatibility mode.
* txr.1: Documented new rules for WLL's and QLL's,
and added compatibility notes.
|
|
|
|
|
| |
Remove hard-coded txr-case symbols. Recognize operators registered
with in-line intern.
|
|
|
|
|
|
|
|
|
|
| |
* share/txr/stdlib/with-resources.tl: New file.
* lisplib.c (with_resource_set_entries, with_resources_instantiate):
New static functions.
(lisplib_init): Register new functions under dlt_register.
* txr.1: Document with-resources.
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (eval_init): Register nthcdr function.
* lib.c (nthcdr): New function.
* lib.h (nthcdr): Declared.
* share/txr/stdlib/place.tl (nthcdr): New defplace.
* txr.1: Documented.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (op_mac_param_bind): New static function.
(eval_init): Register mac-param-bind operator.
* share/txr/stdlib/place.tl (define-place-macro): Use
mac-param-bind inside a lambda instead of tb macro.
* txr.1: Document mac-param-bind.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (eval_init): Register second through tenth as intrinsic.
* gencadr.txr: New cadr.c changes encoded.
* lib.c (second, third, fourth, fifth, sixth): Functions
reimplemented using ref, so they are much more efficient
for vectors and strings.
(seventh, eighth, ninth, tenth): New functions.
* lib.h (seventh, eighth, ninth, tenth): Declared.
* share/txr/stdlib/place.tl: place macros defined for
second through tenth.
* txr.1: Documented.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
define-place-macro to list of names.
* share/txr/stdlib/place.tl (*place-macro*): New global hash.
(sys:tigger-load, sys:pl-expand): New functions.
(call-update-expander, call-clobber-expander, call-delete-expander):
Recognize and expand place macros.
(define-place-macro): New macro.
(first, rest): Places redefined using define-place-macro, replacing
the old hack of copying the expanders from one table entry to another.
* txr.1: Documented place macros.
|
|
|
|
|
| |
value returned when printing dwim forms, due to
mutating the obj variable.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* lib.c (init): Call cadr_init.
* lisplib.c (dl_table, set_dlt_entries, dlt_register): Externalize.
* lisplib.h (dl_table, set_dlt_entries, dlt_register): Declared.
* Makefile (OBJS): Add cadr.o.
* cadr.c: New file.
* cadr.h: New file.
* gencadr.txr: New file.
* share/txr/stdlib/cadr.tl: New file.
* txr.1: Document cadr accessors.
|
|
|
|
|
|
| |
semantics so that (del (cdr x)) is symmetric with (del (car x)).
* txr.1: Update documentation.
|
|
|
|
|
|
|
|
|
|
|
|
| |
* lib.c (split_func): New static function.
(partition_split_common): New static function, based on
on contents of partition function.
(partition): Now a wrapper around partition_split_common.
(split): New function.
* lib.h (split): Documented.
* txr.1: Documented split.
|
| |
|
| |
|
|
|
|
|
| |
stream should be the resolved name, not the abstract original,
so that error messages correlate to the file.
|
|
|
|
| |
allow "it" to be mutable when it denotes a place form.
|
|
|
|
| |
* lisplib.c (place_set_entries): Add place-form-p to list of names.
|
|
|
|
|
|
|
| |
* eval.c (sys_lisp1_value_s): New global symbol variable.
(expand_lisp1_value): New static function.
(do_expand): Use expand_lisp1_value.
(eval_init): Initialize sys_lisp1_value_s.
|
|
|
|
|
|
|
|
| |
* share/txr/stdlib/place.tl (placelet*): New macro.
* lisplib.c (place_set_entries): Add placelet* to list of names.
* txr.1: Updated to document placelet* and fix mistakes.
|
|
|
|
|
|
|
| |
ogetter-sym variable for caching the sequence; use the getter
for the sequence place to access it. Again, this is for placelet,
where the caching is visible. Another way to fix this is to
clobber the cache variable when updating the sequence place.
|
|
|
|
| |
* txr.1: Documented.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* lisplib.c (place_set_entries): Add placelet to list of names.
* share/txr/stdlib/place.tl (sys:placelet1, placelet): New macros.
(defplace dwim): Do not retrieve the
place's value into a local variable and have the getter
expand to that variable. Rather, have the getter retrieve the
value. A getter that refers to a cached copy breaks
the semantics of placelet, and any place operator which can
evaluate the location after it is stored.
* txr.1: Documented placelet.
|