summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
* buf: provide way to work with on-stack buffers.Kaz Kylheku2017-08-162-3/+7
| | | | | | | | * buf.c (init_borrowed_buf): New function. (make_borrowed_buf): Reduced to wrapper around init_borrowed_buf. * buf.h (init_borrowed_buf): Declared.
* buf: new buffer stream.Kaz Kylheku2017-08-145-0/+397
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * buf.c (struct buf_strm): New struct type. (buf_strm_mark, int buf_strm_put_byte_callback, buf_strm_put_string, buf_strm_put_char, buf_strm_put_byte, buf_strm_get_byte_callback, buf_strm_get_char, buf_strm_get_byte, buf_strm_unget_char, buf_strm_unget_byte, buf_strm_seek, buf_strm_truncate, buf_strm_get_prop, buf_strm_set_prop, buf_strm_get_error, buf_strm_get_error_str): New static functions. (buf_strm_ops): New static struct. (buf_strm): New static function. (make_buf_stream, get_buf_from_stream): New functions. (buf_init): Register new intrinsic functiions make-buf-stream and get-buf-from-stream. Call fill_stream_ops on new buf_strm_ops to fill default operations in place of function pointers that have been left null. * buf.h (make_buf_stream, get_buf_from_stream): Declared. * lisplib.c (with_stream_set_entries): Add with-out-buf-stream and with-in-buf-stream to auto-load symbols for with-stream.tl module. * share/txr/stdlib/with-stream.tl (with-out-buf-stream, with-in-buf-stream): New macros. * txr.1: New section about buffer streams.
* buf: tiny code improvement.Kaz Kylheku2017-08-141-1/+1
| | | | | * buf.c (buf_grow): Use the previously calculated delta value, rather than re-evaluating the equivalent expression.
* bugfix: buf-put-ucharKaz Kylheku2017-08-141-1/+1
| | | | | * buf.c (buf_put_uchar): Fix wrong conversion that is causing this function to reject values in the 128-255 range.
* bugfix: seek-stream :from-end not working.Kaz Kylheku2017-08-141-1/+1
| | | | | * stream.h (enum strm_whence): Fix strm_end and strm_start being duplicate values; strm_end must map to SEEK_END.
* base64 funtions: factor out stream filtering internals.Kaz Kylheku2017-08-092-15/+37
| | | | | | | | | | | | | | | | The base64_encode and base64_decode functions internally work with streams. This change factors out those internals into separate functions (with the intent that these will be usefully exposed, in another commit). * filter.c (base64_stream_enc): New function, made out of the internals of base64_encode. (base64_encode): Simple wrapper for base64_stream_enc. (base64_stream_dec): New function, made out of the internals of base64_decode. (base64_decode): Simple wrapper for base64_stream_dec. * filter.h (base64_stream_enc, base64_stream_dec): Declared.
* ffi: new buf-carray function.Kaz Kylheku2017-08-083-0/+29
| | | | | | | | | * ffi.c (buf_carray): New function. (ffi_init): Registered buf-carray intrinsic. * ffi.c (buf_carray): Declared. * txr.1: Documented.
* New divides function.Kaz Kylheku2017-08-073-0/+53
| | | | | | | | | * arith.c (divides): New function. (arith_init): Intrinsic registered. * arith.h (divides): Declared. * txr.1: Documented.
* Make len a synonym for length.Kaz Kylheku2017-08-072-2/+10
| | | | | | | * eval.c (eval_init): Register the same function under length and len. * txr.1: Documented.
* New spl and tok: variants of tok-str and split-str.Kaz Kylheku2017-08-074-0/+86
| | | | | | | | * eval.c (eval_init): Register spl and tok intrinsics. * lib.c (spl, tok): New functions. * txr.1: Documented.
* tok-str requires two arguments, not just one.Kaz Kylheku2017-08-071-1/+1
| | | | * eval.c (eval_init): Fix incorrect registration of tok-str.
* bugfix: n-ary arith functions must check single arg.Kaz Kylheku2017-08-052-9/+60
| | | | | | | | | | | | | | | | We are allowing calls like (* "a") and (+ "a") without diagnosing that the argument isn't of a valid type. Note that (max "a") is fine beacause min and max use the less function; they are not strictly numeric. * lib.c (nary_op): Beef up function with additional argument for type checking the unary case. (unary_num, unary_arith, unary_int): New static functions. (plusv, mulv, logandv, logiorv): Use new nary_op interface. (gtv, ltv, gev, lev, numeqv, numneq): Check the first number. * lib.c (nary_op): Declaration updated.
* Add sum and prod convenience functions.Kaz Kylheku2017-08-054-0/+60
| | | | | | | | | | * eval.c (eval_init): prod and sum intrinsics registered. * lib.c (sum, prod): New functions. * lib.h (sum, prod): Declared. * txr.1: Documented.
* New functions digpow and digits.Kaz Kylheku2017-08-053-0/+143
| | | | | | | | | | | * arith.c (digcommon): New static function. (digpow, digits): New functions. (arith_init): New digpow and digits intrinsic functions registered. * arith.h (digpow, digits): Declared. * txr.1: New functions documented.
* Bugfix: (sys:expr . atom) bad syntax out of parser.Kaz Kylheku2017-08-021-1/+1
| | | | | | | | | | | | | * parser.y (expand_meta): Fix incorrect conversion of (sys:var x) when x is a non-bindable term to (sys:expr . x). Should be (sys:expr x). This doesn't have that much of an impact, I don't think. It prevent certain degenerate forms from working like @(bind x @"str"). The bad thing is that this particular one has a silent problem: @"str" wrongly evaluates to #\s. Neverheless, this doesn't seem worth the addition of a compat flag test; the odds of someone depending on @"str" producing #\s in some pattern language code see vanishingly low.
* Bi-directional string tree match for non-vars.Kaz Kylheku2017-08-022-2/+40
| | | | | | | | | | | | | | | | | | There is an inconsistency in @(bind) in that given @(bind x y) where x is a variable, both directions are tried for a string tree match. x could be tree of strings and y a string atom, or vice versa. But if x is just an atom, or a Lisp evaluation, then only one direction is tried. @(bind @(list "a" "b") "a") succeeds, but @(bind "a" @(list "a" "b")) fails. * match.c (dest_bind): Test both directions in the scalar and Lisp evaluated cases of the left hand side. Subject to compatibility, just in case. * txr.1: Compat note added.
* doc: aret description refers to ret.Kaz Kylheku2017-08-021-1/+1
| | | | | * txr.1: Fix description of aret, which wrongly refers to the ret macro.
* doc: explain qref and uref.Kaz Kylheku2017-08-021-6/+17
| | | | | * txr.1: Under the qref and uref operators, mention what these stand for and how the terminology is derived.
* doc: note about global symbol macros.Kaz Kylheku2017-08-021-0/+4
| | | | | * txr.1: Adding note that a symbol cannot be a global symbol macro and global variable at the same time.
* doc: missing formatting in qref equivalence.Kaz Kylheku2017-08-021-0/+2
| | | | | * txr.1: equivalence between .(qref ...) and (uref ...) now typeset properly in monospaced font.
* doc: mention listener in Lisp intro.Kaz Kylheku2017-08-021-4/+6
| | | | | | * txr.1: Remove clumsy "firstly, secondly, thirdly" because we need a "fourthly" which is too much. Intro now mentions that Lisp evaluation is also possible via the listener.
* doc: cross reference different #b.Kaz Kylheku2017-08-021-0/+13
| | | | | * txr.1: Note under #b binary number syntax that #b is also used for buffer literals, and vice versa.
* bugfix: spurious nils in pad function's output.Kaz Kylheku2017-08-021-5/+6
| | | | | | * eval.c (pad): Incoming sequence must be nullified, otherwise empty vectors and strings produce a spurious nil. This affects the weave function, which uses pad.
* genvim: ^ is constituent of identifiers.Kaz Kylheku2017-08-011-1/+1
| | | | | * genvim.txr (iskeyword): add ^ character. Now r^ and others are colorized properly.
* Evaluate doloop forms in an implicit tagbody.Kaz Kylheku2017-07-312-12/+22
| | | | | | | | | | This eliminates one incompatibility between doloop and ANSI CL do. * share/txr/stdlib/doloop.tl (sys:expand-doloop): Wrap body in tagbody form. * txr.1: Documentation updated.
* doc: note about label symbols in tagbody.Kaz Kylheku2017-07-311-0/+11
| | | | | * txr.1: Note added that a tagbody label may be any symbol whatsoever.
* Small code cleanup in tagbody.Kaz Kylheku2017-07-311-4/+3
| | | | | | | * share/txr/stdlib/tagbody.tl (tagbody): Reduce unnecessary use of DWIM brackets to parentheses in calculation of bblocks. Remove entry-lbl local variable, propagating its initform to its one and only use site.
* bugfix: tagbody mustn't expose anonymous block.Kaz Kylheku2017-07-301-8/+9
| | | | | | | | * share/txr/stdlib/tagbody.tl (tagbody): Use progn for the trivial case, and in the ordinary case, the sys:for-op special form directly rather than the for loop maro. sys:for-op doesn't introduce a block; the for macro is doing that.
* Optimize trivial tagbody.Kaz Kylheku2017-07-301-35/+37
| | | | | | | | | * share/txr/stdlib/tagbody.tl (tagbody): If the body contains no labels, then emit a simple block. Note that we should just be emitting a progn here; however, there is a bug in tagbody in that there is an anonymous block. This is not documented, and a consequence of the looping construct used. So for now we preserve that behavior in the reduced case.
* listener: handle incomplete buf literals.Kaz Kylheku2017-07-301-1/+23
| | | | | * parser.c (is_balanced_line): Handle #b'...' syntax with some new states and transitions.
* New macros doloop and doloop*.Kaz Kylheku2017-07-303-0/+236
| | | | | | | | | | * lisplib.c (doloop_set_entries, doloop_instantiate): New functions. (lisplib_init): Register autoload for doloop macros. * share/txr/stdlib/doloop.tl: New file. * txr.1: Documented.
* doc: grammar under Ranges.Kaz Kylheku2017-07-291-1/+1
| | | | * txr.1: Superfluous article a deleted, and sentence reworded.
* genvim: flag trailing junk in #x #o #b literals.Kaz Kylheku2017-07-291-9/+14
| | | | | | | | | | | * genvim.txr (txr_pnum): New match; matches a superset of the #x, #o and #b literals with the inclusion of trailing alphanumeric junk. Highlighted as Error. (txr_xnum, txr_onum, txr_bnum): New match categories, formed by renaming the previous #x, #o and #b matches. These are contained in txr_pnum, highlighted as Number. (txr_bracevar, txr_directive, txr_list, txr_bracket, txr_mlist, txr_mbracket): Include txr_pnum.
* doc: struct literals: bad syntax synopsis.Kaz Kylheku2017-07-291-1/+1
| | | | * txr.1: Fix incorrect #H prefix which should of course be #S.
* doc: grammar in setuid section.Kaz Kylheku2017-07-291-1/+1
| | | | * txr.1: anything code -> any code.
* genvim: flag invalid # syntax.Kaz Kylheku2017-07-281-0/+2
| | | | | | | * genvim.txr (txr_error): New match in this category for # followed by something other than H, S or R. Some characters other than these are valid after #, but are covered by explicit matches that occur later.
* genvim: fix buggy tl_ident containing #.Kaz Kylheku2017-07-281-1/+1
| | | | | | | * genvim.txr (tl_ident): Fix the incorrect match which allows things beginning with # to be categorized as identifier tokens. The new match reflects the true original intent: the match must not begin with #, but may contain #.
* genvim: highlight buffer literals.Kaz Kylheku2017-07-281-4/+11
| | | | | | | * genvim.txr (txr_buf_error, txr_buf_interior): New matches. (txr_list, txr_bracket, txr_mlist, txr_mbracket): Now also contain txr_buf. (txr_buf): New region, in the new txr_string matchgroup.
* genvim: bugfix for #x, #o and #b integer tokensKaz Kylheku2017-07-271-3/+3
| | | | | | | * genvim.txr (txr_num): Move the syn match definitions for hex, octal and binary integer tokens after tl_ident, which is a more general match that matches them also, and causes them to be colorized as symbols rather than numbers.
* lib: deprecate set-diff; extend set operations.Kaz Kylheku2017-07-264-20/+164
| | | | | | | | | | | | | | * eval.c (eval_init): Register set-diff under two names: set-diff and diff. Register new isec and uni intrinsics. * lib.c (isec, uni): New functions. * lib.h (isec, uni): Declared. * txr.1: Documented new uni and isec functions, new diff function name, and the deprecation of set-diff and its order guarantee w.r.t the left sequence.
* Version 183.txr-183Kaz Kylheku2017-07-197-928/+984
| | | | | | | | | | * RELNOTES: Updated. * configure, txr.1: Bumped version and date. * share/txr/stdlib/ver.tl: Likewise. * txr.vim, tl.vim, protsym.c: Regenerated.
* doc: fix bad *args-full* heading.Kaz Kylheku2017-07-191-1/+1
| | | | | | | * txr.1: We are missing an "and" in the heading for the section about the *args-full* and related variables. This was caught due to the fix in checkman.txr to handle Special variables sections.
* checkman: verify Special variables sections.Kaz Kylheku2017-07-191-4/+4
| | | | | | * checkman.txr (check-var): This pattern function must handle "Special variable{s,}" sections not only "Variable{s,}".
* doc: log-emerg et al are not special variables.Kaz Kylheku2017-07-191-2/+2
| | | | | * txr.1: the syslog-related constants are global lexical variables and so must not be documented as special variables.
* Named filters now stored in new *filters* hash.Kaz Kylheku2017-07-193-21/+64
| | | | | | | | | | | | | | | | * filter.c (filters): Global variable removed. (filter_s): New symbol variable. (filter_init): Remove gc-protection from removed variable. Intern the *filters* symbol. Use local variable for filters hash, create the *filters* special variable and store the hash into that. * filter.h (filters): Variable declaraton removed. (filters): New macro: expands to an expression designating the current value of *filters* in the dynamic environment. * txr.1: Documented *filters*, adding a forward reference to it from the description of filtering.
* gc: remove assertion from make_obj.Kaz Kylheku2017-07-191-1/+0
| | | | | | | * gc.c (make_obj): remove assertion that the object pulled from the free list is marked FREE. This hasn't proved to be valuable and adds a nonzero cost to a frequently executed path.
* doc: listener: parenthesis matching jumps forward also.Kaz Kylheku2017-07-181-1/+1
| | | | | | * txr.1: Under "Parentheses Matching" correct the introductory sentence which misleadingly claims that parenthesis matching jumps only backwards.
* doc: listener: remove bogus sentence.Kaz Kylheku2017-07-181-2/+1
| | | | | * txr.1: Under "Making a Selection", remove an unclear sentence which contributes nothing.
* doc: ffi out semantics wrongly refers to in semantics.Kaz Kylheku2017-07-181-1/+1
| | | | | | * txr.1: of course, the out operation of a type recursively invokes the out operation on embedded pointers, not the in operation.
* doc: *trace-output* font.Kaz Kylheku2017-07-181-1/+1
| | | | | * txr.1: Special varaible *trace-output* not typeset in typewriter font in heading.