| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (car_s, cdr_s): New symbol variables.
(op_modplace): Cases for car and cdr added.
(expand_place): Likewise. Calls abort should the
cases fall through rather than returning 42.
(expand): Bugfix: for and for* case not propagating
source location info. Bugfix: expansion for do added.
(eval_init): car_s and cdr_s initialized and used
in place of previous intern calls.
* parser.y (elem): Removed wrong logic for expanding the
do form. It was expanding only the first argument.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(env_replace_vbind, bindings_helper): New static functions.
(op_let): Refactored to allow for let* form. Code for setting
up bindings moved into bindings helper, shared by for loop.
(op_for, expand_vars): New static functions.
(expand): Bugfix: let case was neglecting to walk the var
initialization forms. This is done via expand_vars now.
let_star_s added to this case to handle let* and let at
the same time. New case added for for and for*.
(eval_init): let_star_s, for_s, and for_star_s initialized,
and entered into op_table.
|
|
|
|
| |
* txr.vim: More highlighting.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (op_let): Bugfix: was not evaluating var init forms.
(reg_var): New static function.
(eval_init): Registered numerous stream functions and the
three standard streams.
* lib.c (obj_print, obj_pprint): Modified to return a value.
(init): eval_init called after stream_init, because eval
needs the three standrad streams prepared.
* lib.h (obj_print, obj_pprint): Declarations updated.
* stream.c (format): Support t as a shorthand for standard output.
(formatv, open_directory, open_file, open_pipe): New functions.
(w_opendir): New static function.
* stream.h (formatv, open_directory, open_file, open_pipe):
Declared.
* txr.vim: set iskeyword such that keyword can contain special
characters. Set b:current_syntax to "lisp".
(txl_keyword): New keyword category populated with TXR Lisp keywords
defined as separate category.
(txr_list): Contains txl_keyword.
(txr_meta): Contains txl_keyword and txr_list.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
fun operator.
* eval.c (apply_s): New symbol variable.
(apply): Handle functions specified as symbols. Use symbol from context
form in error reporting.
(apply_intrinsic): New function.
(interp_fun): Bugfix: removed evaluation of arguments, since
arguments are already evaluated.
(op_call): Simplified by not having to handle symbols,
since apply does.
(op_fun): New function.
(expand): Handle special form fun.
(mapcarv, mappendv): New functions.
(eval_init): Initialize apply_s. Register op_fun function
in op_table. Register mapcar, mappend and apply functions.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
New functions list, append and eval. Code walking framework for
expanding quasiquotes. quotes right now.
* eval.c (let_s, lambda_s, call_s, cond_s, if_s, and_s, or_s
defvar_s, defun_s, list_s, append_s): New symbol variables.
(eval_intrinsic, op_quote, expand_forms, expand_cond_pairs,
expand_place, expand_qquote): New static functions.
(expand): New external function.
(eval_init): Initialize new symbol variables. Use newly defined symbol
variables to register functions. Also, new functions: quote, append,
list and eval.
* eval.h (expand): Declared.
* lib.c (appendv): New function.
(obj_init): quote and splice operator symbols moved into system
package.
(obj_print, obj_pprint): Support for printing quotes and splices.
* lib.h (appendv): Declared.
* match.c (do_s): New symbol variable.
(syms_init): New variable initialized.
(dir_tales_init): New variable used instead of intern.
* match.h (do_s): Declared.
* parser.y (elem): @(do) form recognized and its argument passed
through the new expander.
(o_elem, quasi_item): Pass list through expander.
(list): Use choose_quote to decide whether to put
regular quote or quasiquote on quoted list.
(meta_expr): Fixed abstract syntax so the expression is a single
argument of the sys:expr, rather than multiple arguments.
(unquotes_occur, choose_quote): New static function.
|
|
|
|
| |
(strlit): Set location info.
|
|
|
|
|
|
|
|
|
|
|
| |
Lisp expressions can be interpolated into quasiliterals.
(extract_vars): Avoid recursing into expressions marked
with expr_s.
(do_output_line): Handle expr_s so that Lisp expressions
can be interpolated into output.
* parser.y (o_elem, quasi_items): Handle list expressions,
annotated with expr_s.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Lisp interpreter added.
* gc.c (finalize, mark_obj): Handle ENV objects.
* hash.c (struct hash): acons_new_l_fun function
pointer order of arguments change.
(equal_hash): Handle ENV.
(make_hash, gethash_l): Use cobj_handle for
type safety. Follow change in acons_new_l.
(gethash, gethash_f, remhash, hash_count,
hash_get_userdata, hash_set_userdata, hash_next): Use cobj_handle.
(gethash_n): New function.
* hash.h (gethash_n): Declared.
* lib.c (env_s): New symbol variable.
(code2type, equal): Handle ENV. (plusv, minusv, mul, mulv, trunc, mod,
gtv, ltv, gev, lev, maxv, minv, int_str): New functions.
(rehome_sym): New static function.
(func_f0, func_f1, func_f2, func_f3, func_f4, func_n0, func_n1,
func_n2, func_n3, func_n4): Initialize new fields of struct func.
(func_f0v, func_f1v, func_f2v, func_f3v, func_f4v,
func_n0v, func_n1v, func_n2v, func_n3v, func_n4v,
func_interp): New functions.
(apply): Function removed: sanely re-implemented in new eval.c file.
(funcall, funcall1, funcall2, funcall3, funcall4): Handle
variadic and interpreted functions.
(acons, acons_new, acons_new_l, aconsq_new, aconsq_new_l): Reordered
arguments for compatibility with Common Lisp acons.
(obj_init): Special hack to prepare hash_s symbol, which is
needed for type checking inside the hash table funtions invoked
by make_package, at a time when the symbol is not yet interned.
Initialize new env_s variable.
(obj_print, obj_pprint): Handle ENV. Fix confusing rendering of
of function type.
(init): Call new function eval_init.
* lib.h (enum type): New enumeration member ENV.
(struct func): functype member changed to bitfield.
New bitfied members minparam and variadic.
New members in f union: f0v, f1v, f2v, f3v,
f4v, n0v, n1v, n2v, n3v, n4v.
(struct env): New type.
(union obj): New member e of type struct env.
(env_s): Variable declared.
(plusv, minusv, mul, mulv, trunc, mod, gtv, ltv, gev, lev, maxv, minv,
|
|
|
|
|
| |
the case that :vars is explicitly specified as (). In this
case, no bindings escape from the collect.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* lib.h (getplist_f): Declared.
* match.c (v_collect, h_coll): Use getplist_f to distinguish
the case that :vars is explicitly specified as (). In this
case, no bindings escape from the collect.
* tests/008/soundex.txr: This test case broke due to using
:vars () and yet counting on the variable to exist.
* RELNOTES: Updated.
|
|
|
|
| |
generated function call.
|
|
|
|
|
|
| |
than rlcp. Added forgotten rlcp on result of optimize_text.
* RELNOTES: Updated.
|
|
|
|
|
|
|
|
|
|
| |
* txr.c (version): Bumped.
* txr.1: Bumped version and set date.
* configure (txr_ver): Bumped.
* RELNOES: Updated.
|
|
|
|
|
|
| |
syntax possibilities. A hash bang could be buried in a (text ...)
compound, or it could just be a string (thanks to the text form
optimization).
|
|
|
|
|
|
|
|
| |
strings, then replace the (text ...) by the catenation
of those strings.
* parser.y (optimize_text): New function.
(elem): Use optimize_text.
|
|
|
|
|
|
|
|
|
| |
fire for inputs that do not overflow.
* match.c (search_form): Fixed incorrect loop test which could
lead to nonterminating behavior.
* RELNOTES: Updated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
of text and regular expressions, that whole mixture is
considered to follow the variable and used for matching.
The earlier semantics change whereby a single unescaped
space denotes the regular expression / +/ broke the
simple case @a word. It caused the @a to be followed
not by the text " word" but by just the regular expression
element.
With this change @a word means that a is followed by
the regex / +/ and "word".
* match.c (text_s): New symbol variable.
(h_text): New function.
(syms_init): Initialize new symbol variable.
(dir_tables_init): Hook h_text into horizontal directives table.
* match.h (text_s): Declared.
* parser.y (text, texts): New nonterminals.
(elem): TEXT, SPACE and regex are now handled under texts
grammar production. All texts are run together and produce
an item which looks like (text items ...).
* txr.1, RELNOTES: Updated.
* txr.c (remove_hash_bang_line): Updated to find #! buried
in (text ...) syntax.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
position after the end of the line, otherwise we can never match
@(eol).
(h_eol): Bugfix: do not return t, but the line length.
* txr.1: Warn users about @var@(bind ...) pitfall.
* RELNOTES: Updated.
|
| |
|
|
|
|
|
|
|
|
| |
* txr.c (version): Bumped.
* txr.1: Bumped version and set date.
* configure (txr_ver): Bumped.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
* parser.y (repeat_clause, rep_elem): Allow empty body.
(yybadtoken): Handle unexpected newline with different message.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* match.c (h_coll, v_collect): Only throw an error about
missing required variables if the collect iteration collected some new
variables. This allows strict collects with :vars to have
some cases which explicitly match and skip unwanted material,
without binding variables. Also, print all missing variables in the
diagnostic.
* txr.1: Mention this special exception.
* RELNOTES: Updated.
|
|
|
|
|
|
|
|
| |
(TXR_ARGS): Specified for new test case.
* tests/008/soundex.expected: New file.
* tests/008/soundex.txr: New file.
|
| |
|
|
|
|
|
|
|
| |
* match.c (h_skip): Bugfix. Return the length of the line if
the skip is to the end of line, not the value t.
* txr.1: Clarify that @var@(skip)text is useless.
|
|
|
|
|
|
|
|
| |
the arguments individually. Now @(deffilter a b ..)
is possible where these evaluate to suitable
lists of strings.
* txr.1: Documented.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* lib.c (cdr_f): New global variable.
(funcall1, funcall2, funcall3, funcall4): Fix unterminated
arguments in uw_throwf call by using uw_throw instead.
(do_or): New static function.
(orf): New function.
(obj_init): gc_protect and initialize cdr_f.
* lib.h (cdr_f, orf): Declared.
* match.c (v_deffilter): Treat the table as forms to be evaluated which
must reduce to strings, rather than literal strings.
* txr.1: Documented.
|
|
|
|
| |
notation.
|
|
|
|
|
|
| |
must be on the same precedence level and right
associative. Without this consective braced
variables don't work, etc.
|
|
|
|
|
|
|
|
|
|
|
|
| |
the type field as accessible, not the whole object that
we are checking. Marking the whole object accessible hides
uninitialized field bugs!
* lib.c: And found a bug already: lazy_str was not completely
initializing all of the object fields (ls.prefix, ls.list)
before invoking memory allocating operations, making it
possible for the garbage collector to encounter uninitialized
object areas.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the garbage collector (uninitialized fields in function objects).
* Makefile: Defined TXR_ARGS and TXR_OPTS for new test case.
* hash.c (hash_begin): Construction of cobj modified to obey
the correct procedure described in HACKING.
* lib.c (func_n3, func_n4): These functions neglected to initialize
the env member of the function structure.
* tests/009/json.expected: New file.
* tests/009/json.txr: New file.
* tests/009/webapp.json: New file.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* match.c (resolve_k): New keyword symbol variable.
(h_parallel, v_parallel): Implement :resolve keyword in @(some)
directive.
(syms_init): New symbol variable initialized.
* parser.l: Allow (some) to have argument material.
* parser.y (some_clause, elem): SOME syntax adjusted.
* txr.1: Documented new :resolve keyword in @(some).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Lisp. The difference is that splice is spelled ,* because @
already means something, and that there is only one quote operator.
None of this does anything; it is only syntax.
* lib.c (quote_s, qquote_s, unquote_s, splice_s): New variables.
(obj_init): New variables initialized.
* lib.h (quote_s, qquote_s, unquote_s, splice_s): Declared.
* parser.l: Added recognition rules.
* parser.y (SPLICE): New symbolic token.
(list): Added new syntax for quote and splicing.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the bindings, not copy_alist. Otherwise functions cannot destructively
update a binding, which is useless. We want a function not to
manipulate the binding list, but to be able to manipulate the
contents of bindings.
(match_files_ctx): Declaration moved ahead of match_line.
(v_fun): Forward declaration added.
(match_line): Allow vertical functions to be called from
a horizontal context, in a limited way.
* txr.1: Mention the possibility of a call from a horizontal
context falling back on a vertical function.
|
|
|
|
| |
IDENT, otherwise @{var}@(foo) doesn't parse.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* match.c (search_form): bugfix: return correct match extent.
* parser.y: Adjusting associativity and precedence of directives, IDENT,
and grouping tokens once again. This is so that a var followed by
a directive will turn into one elem, rather than the var being
reduced to an elem first.
* txr.1: Revised documentation to mroe clearly define the concept
of a negative match, broken into subsections. Some sections
belonging to syntax were moved to an appropriate location.
Subsections added to description of form syntax.
Explanation of directive-driven syntax.
|
|
|
|
|
|
|
|
|
|
|
|
| |
Function calls following variables have searching semantics.
* match.c (ml_specline_pos, search_form): New static functions.
(h_var): Handle functions and regexes in a common way.
* parser.y: Adjusted precedence of IDENT and ( so that
@var@(func) are parsed into a single var element.
* txr.1: Documented.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
source locatio info.
(v_skip): Don't use specline for trace messages, because
it may be nil. Use the skip spec.
* parser.h (rl): Declared.
(rlcp): New inline function.
* parser.y (rl): Static declaration removed. Function becomes
extern.
(clause): Propagate location info from clause to clause list
backbone.
(collect_clause, COLL): Bugfix: car/cdr mixup in location info.
(elem): Use rlcp function to abbreviate code.
(o_elems_opt, o_elems_opt2, o_elem): Set location info.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
need the single quote in the Lisp way for suppressing evaluation,
eventually.
I'm going with a Scheme-compatible syntax for character literals.
It has a richer repertoire of standard character names than Common
Lisp, and has a x convention for coding characters in hex.
* lib.c (obj_print): Print characters in a Scheme-like way.
* parser.h (end_of_char): New function declared.
* parser.l (grammar): Implement rules for #\ syntax, with
involving new HASH_BACKSLASH token.
(end_of_regex): Enhancement: added check that end_of_regex is
called in correct state, like the one in end_of_char.
(end_of_char): New function.
* parser.y (repeat_rep_helper, o_elems_transform, define_transform,
lit_char_helper): Functions changed to static.
(rl): Function moved down, past the grammar section.
(HASH_BACKSLASH): New terminal symbol.
(chrlit): Grammar redesigned.
(char_from_name): New function.
* txr.1: Character syntax documented.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and the trailing material silently ignored.
For instance @(bind a 1)@(bind b 2). This was going to v_bind,
v_bind does not check for the trailing material and doe snot
call decline_s. The result was that b was not bound.
Correct behavior is to process these binds in match_line.
* match.c (match_line): Check if a directive IS found in the vertical
table, and if so report a different error message. The fallback
case is that there is no such function or directive.
(v_next): Do not check for obsolete syntax any more. This case
will not occur any more due to the following changes.
(match_files): Do not defer opening the file if the data starts
with an incorrectly written next directive.
Do not look up and process a vertical directive or function
call if it is followed by more material in the same line.
Thus vertical directives can longer receive trailing material.
This fixes the bug of horizontal directives being treated as
vertical
|
|
|
|
| |
Implemented better way of printing character context.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Makefile (OBJS): New object file debug.o.
* dep.mk: Updated.
* match.c (h_fun): Use debug_begin and debug_end macros
to set up a debug frame for backtracing.
(match_line, match_files): Call debug_check to give debugger a chance
to instrument call.
(v_fun): Use debug_begin and debug_end macros to set up a debug frame
for backtracing. Call debug_check to give debugger a chance to
instrument call.
* stream.c (struct strm_ops): New function pointer, flush.
(stdio_maybe_write_error): Wrong word in error message corrected.
(stdio_flush): New static function.
(stdio_ops, pipe_ops): New function entered into tables.
(flush_stream): New function.
* stream.h (flush_stream): Declared.
* txr.c (help): New options documented.
(main): call to debug_init added. New debug options parsed and
opt_debugger set accordingly.
* unwind.c (uw_push_debug, uw_current_frame): New function.
* unwind.h (uw_frtype): New enumeration member UW_DBG.
(struct uw_debug): New frame variant.
(union uw_frame): New member, db.
(uw_push_debug, uw_current_frame): Declared,
* debug.c: New file.
* debug.h: New file.
|
|
|
|
|
|
|
|
|
| |
"Eliminate line numbers from the abstract syntax
tree representation of the TXR query."
* match.c (match_funcall): Remove spurious object being
added to the front of a form where a line number used
to be.
|
|
|
|
| |
* txr.c: Likewise.
|