summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* * utf8.c (utf8_from_uc, utf8_decode): Use upper case for hex constants.Kaz Kylheku2012-02-022-25/+37
| | | | | | | If bytes decode to U+DCxx, treat this sequence as invalid. This way we can't be fooled by an attacker into accepting some U+DCxx which on output we will then convert to byte xx. (utf8_to_uc): Use upper case for hex constants.
* * utf8.c (utf8_to_uc, utf8_encode): Do not encode surrogate codeKaz Kylheku2012-02-022-8/+26
| | | | | | | points (U+DC00 to U+DCFF) as multi-byte UTF8 sequences. We use that range for invalid bytes on input, so on output the best thing to do is to reproduce the original bytes. E.g the code U+DCA0 will produce the byte A0.
* * txr.1: UTF-8 handling clarified.Kaz Kylheku2012-02-022-12/+20
|
* * utf8.c (utf8_from_uc, utf8_decode): Impose a minium value on theKaz Kylheku2012-02-023-8/+38
| | | | | | | decoded character based on which UTF-8 case it is from. This rejects overlong forms. * utf8.h (struct utf8_decoder): New member, wch_min.
* * txr.vim: Move error match before other cases and simplify.Kaz Kylheku2012-02-022-1/+7
| | | | Comment are colorized properly again.
* This test case would have caught the prior regression.Kaz Kylheku2012-02-025-0/+67
| | | | | | | | | | * Makefile (TXR_ARGS): Defined for new test case. * tests/010/align-columns.dat: New file. * tests/010/align-columns.expected: New file. * tests/010/align-columns.txr: New file.
* * match.c (format_field): Regression. Was not handling modifiersKaz Kylheku2012-02-022-21/+25
| | | | | which are compound expression (e.g. computed field widths). This was broken by the first commit of 2012-01-26.
* * eval.c (lookup_sym_lisp1): New function.Kaz Kylheku2012-02-014-23/+125
| | | | | | | | | | | | | | | (do_eval, do_eval_args): New static functions. (eval, eval_args): Become wrappers for do_eval and do_eval_args, respectively. (eval_lisp1, eval_args_lisp1): New static functions. (dwim_loc, op_dwim): Use eval_lisp1 and eval_args_lisp1 instead of eval and eval_args. * parser.y (meta_expr): Bugfix: expand the whole dwim expression, rather than its arguments, which are not an expression. * txr.1: Updated with notes that dwim really does Lisp-1 style evaluation.
* * txr.vim: More color categories. More accurate matching of @ elements.Kaz Kylheku2012-01-292-13/+22
|
* typo.Kaz Kylheku2012-01-281-1/+1
|
* * parser.l: Support hex and octal escapes in string and quasiliterals,Kaz Kylheku2012-01-273-2/+20
| | | | | | | as the documentation says. Also support an optional trailing ; delimiter in hex escapes. * txr.1: Documented.
* * txr.vim: Properly show @[...] inside quasiliteral.Kaz Kylheku2012-01-272-5/+11
|
* * eval.c (dwim_loc, op_dwim): Relax the requirement on hashKaz Kylheku2012-01-272-4/+10
| | | | | indexing arguments. The default value can be omitted, defaulting to nil.
* * hash.c (hash_begin): Missing type check added, otherwiseKaz Kylheku2012-01-273-4/+15
| | | | | | | | passing in an object that is not a hash results in corruption or crashing behavior. * lib.c (class_check): Improved to a one-step check with a clear message.
* * eval.c (op_modplace): Fix warning caught by gcc, but not g++.txr-55Kaz Kylheku2012-01-263-3/+9
| | | | * lib.c (replace_list): Fix code that is valid C++ but not C.
* Version 55txr-055Kaz Kylheku2012-01-265-4/+39
| | | | | | | | | | * txr.c (version): Bumped. * txr.1: Bumped version and set date. * configure (txr_ver): Bumped. * RELNOTES: Updated.
* Document that source for range assignment can be a string, vector or list.Kaz Kylheku2012-01-261-3/+9
|
* * lib.c (replace_list): Always convert the input items to a list,Kaz Kylheku2012-01-262-13/+45
| | | | | | | | | | | even in the trivial case that an empty list is being replaced. Allow a string to be the replacement (split into a list of characters). (replace_str): Bugfix in assignment from vector; wrong index used over source vector. (split_str): If the splitting set is empty, just split the string into characters instead of getting into an infinite loop. (replace_vec): Allow replacement source to be a string.
* * arith.c (plus, minus): Better wording in error messages.Kaz Kylheku2012-01-267-28/+168
| | | | | | | | | | | | | | | | | | * eval.c (dwim_loc): Assignments to string indices and ranges supported. New arguments for this purpose. (op_modplace): Use new dwim_loc interface for returned value. (op_dwim): Support assignment to string ranges. (eval_init): replace_str registered. * lib.c (string_extend): If the argument is a number, let it specify the amount by which to extend the string. (replace_str): New function. * lib.h (replace_str): Declared. * txr.1: Updated. * txr.vim: Updated.
* * lib.c (listref, listref_l): Negative indices must have semanticsKaz Kylheku2012-01-262-1/+9
| | | | consistent with vecref and ranges.
* * lib.c (cat_str): Throw error if one of the list elementsKaz Kylheku2012-01-262-1/+7
| | | | is not a character or string instead of silently returning nil.
* * txr.1: More discussion of ranges.Kaz Kylheku2012-01-262-0/+26
|
* * match.c (format_field): Removed useless use of cat_str (no longerKaz Kylheku2012-01-262-5/+22
| | | | | | | | | needed because str is already a string). The purpose was to reduce character to strings. (subst_vars): Some of the new logic in format_field must be replicated in the case when format_field is not called because the variable has no modifiers. Lists must be converted to a space-separated string. Bugfix here: occurence of pat and modifiers is not mutually exclusive.
* * eval.c (dwim_loc, dwim_op): Eliminated redundant re-evaluationKaz Kylheku2012-01-266-56/+146
| | | | | | | | | | | | | | | | | of range arguments. They are already evaluated since the cons expression is evaluates as part of the dwim arglist. Replaced some open code with function calls to the new listref and listref_l functions. (tostring, tostringp): made extern and moved to lib.c. * lib.c (listref, listref_l): New functions. (tostring, tostringp): moved here from eval.c. * lib.h (listref, listref_l, tostring, tostringp): Declared. * match.c (format_field): Handle index and range references. * txr.1: Documented new output variable syntax.
* * eval.c (dwim_loc): Handles full responsibility for assigningKaz Kylheku2012-01-253-21/+104
| | | | | | | | | | to list and array ranges. (op_modplace): Pass extra arguments to dwim_loc so it can do the job for ranges. If dwim_loc returns 0, it means that it did everything. (op_dwim): Support list and array ranges. * txr.1: Documented.
* * arith.c (zerop): Misspelling in error message.Kaz Kylheku2012-01-253-16/+37
| | | | | | | * lib.c (sub_list, replace_list, sub_vec, replace_vec): Allow the value t to specify one element past the end, so that t t refers to zero-length sequence just past the end of the array or list. Also, fixed out of bounds memmoves in replace_vec.
* * eval.c (eval_init): New functions registered.Kaz Kylheku2012-01-258-9/+224
| | | | | | | | | | | | | | | | | | * lib.c (sub_list, replace_list, vectorp): New functions. (sub_vec): Allow negative indices from end of array. (replace_vec): New function. * lib.h (sub_list, replace_list, vectorp, replace_vec): Declared. * parser.l (DOTDOT): Scan .. as new token. * parser.y (DOTDOT): New token. (expr): New syntax with DOTDOT. (yybadtoken): Handle DOTDOT. * txr.vim: Added new functions. Also missing append* and dwim. * txr.1: Updated.
* * txr.vim (txr_chr): Fix for highlighting named charactersKaz Kylheku2012-01-252-1/+6
| | | | like #\newline.
* * eval.c (dwim_s): New symbol variable.Kaz Kylheku2012-01-258-42/+360
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | (dwim_loc, op_dwim): New static functions. (op_modplace): Support assignment to dwim forms with the help of dwim_loc. (expand_place): Handle dwim places. (eval_init): Initialize dwim_s. Register dwim operator in op_table. * eval.h (dwim_s): Declared. * lib.c (chr_str, chr_str_set): Allow negative indices to index backwards from end of string. (vecref, vecref_l): Allow negative indices to index from rear of array. (obj_print, obj_pprint): Render (dwim ...) forms as [...]. * parser.l: Peoduce new METABKT token type for @[, and '[', ']' tokens. * parser.y (METABKT): New token. %type declaration for '['. (list): Support square-bracket style of list, translated into dwim form. (meta_expr): Support @[...] variant. (yybadtoken): Handle METABKT in switch. * txr.1: Documented [...] syntax and dwim operator. * txr.vim: Updated.
* Version 54txr-54Kaz Kylheku2012-01-215-4/+36
| | | | | | | | | | * txr.c (version): Bumped. * txr.1: Bumped version and set date. * configure (txr_ver): Bumped. * RELNOTES: Updated.
* * debug.c (help): Added missing help for w command.Kaz Kylheku2012-01-217-15/+43
| | | | | | | | | | | | | | | | | | | | (debug): In backtrace, show the renaming pairs for unbound variables (up_p_a_pairs) if they are present. * debug.h (debug_begin): Renamed to debug_frame. * eval.c (eval): Wrap debug_begin/debug_end around function dispatch, so TXR Lisp functions are included in backtraces. * match.c (h_fun): Follow rename of debug_begin to debug_frame. Pass in evaluated args, not the original ones. (v_fun): Likewise. * unwind.c (uw_push_debug): bindings argument renamed to env. Bugfix: args argument was being assigned to ub_p_a_pairs. * unwind.h (struct uw_debug): Member bindings renamed to env. (uw_push_debug): Declaration updated.
* * debug.c (last_command): Do not initialize with lit();Kaz Kylheku2012-01-212-2/+8
| | | | | this is not a constant expression in C. (debug): Handle the situation here.
* * debug.c (help): Filled in.Kaz Kylheku2012-01-212-5/+18
| | | | (debug): Some commands changed due to duplicates.
* * match.c (v_fun): Removing all debugging instrumentation.Kaz Kylheku2012-01-212-12/+15
| | | | | | | (match_files): Moving debug_check out of directive case so it covers all forms handled by loop. All this makes the n command in the debugger work better: not skip over function calls or horizontal material.
* Improved debugging. Debug nesting depth counter maintainedKaz Kylheku2012-01-219-44/+198
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | and used for next/step/finish stepping. * Makefile (OBJS): debug.o moved to OBJS-y or OBJS-. (OBJS-y, OBJS-): New variables. $(PROG): Depends on OBJS-y also. clean: clean $(OBJS-y). depend: include $(OBJS-y) in dependency generation. * configure: Underscores and dashes are interchangeable in configure variables. (yaccname_given, yacc_given): Default value is y, not yes. (debug_support): New config variable. (CONFIG_DEBUG_SUPPORT): New config.h symbol. * debug.c (debug_depth): New global variable. (debug_block_s): New symbol variable. (next_depth): New static variable. (debug): Renamed some commands. Introduced separate next, step and finish. (debug_init): debug_block_s initialized. * debug.h (debug_depth, debug_block_s): Declared. (debug_enter, debug_leave, debug_return): New macros. (debug_check, debug_init): Conditionally defined based on if this is a debug build. * dep.mk: Regenerated. * eval.c (eval): Instrumented with debug_enter, debug_leave, debug_return. * match.c (match_line, v_fun, match_files): Likewise. * txr.c (txr_main): Bail if -d or --debug used in build that lacks debug support.
* * debug.c (last_command): Initialize to empty string ratherKaz Kylheku2012-01-193-4/+44
| | | | | | | | | | | | | than nil, otherwise hitting enter tries to repeat the nil command. (show_bindings): New function. Prints all levels of bindings. (debug): Flip the corresponding print flags after printing the current form or data, so they are not printed for every prompt. On EOF from standard input, substitute the q command. If enter is hit and there is no last command, just re-print the prompt. The v command uses show_bindings to dump the environment. * eval.c (eval): When calling debug_check, pass the env objects, rather than the bindings it contains.
* * lib.c (car_l, cdr_l): Bugfix: do not call the lazy consKaz Kylheku2012-01-192-2/+13
| | | | force function if it is already nil, and set it to nil afterward.
* Minor edits.Kaz Kylheku2012-01-141-12/+13
|
* Remove junk.Kaz Kylheku2012-01-141-2/+0
|
* Spelling.Kaz Kylheku2012-01-141-1/+1
|
* Minor fixes, and removed last vestiges of references to the obsolescentKaz Kylheku2012-01-141-8/+11
| | | | variant of the @(next) syntax.
* Minor.Kaz Kylheku2012-01-141-6/+6
|
* Minor edits.Kaz Kylheku2012-01-121-2/+2
|
* Clarification.Kaz Kylheku2012-01-121-1/+3
|
* * eval.c (eval_init): Make lazy_appendv functionKaz Kylheku2012-01-123-7/+23
| | | | | | available as append*. * txr.1: Documented.
* Before releasing 53, there is this.txr-53Kaz Kylheku2012-01-112-1/+11
| | | | | | | * eval.c (c_var_mark): Bugfix: we cannot use cptr_get from within the garbage collector because of its type check. Bugfix: synchronize the shadow binding with the variable's current contents so we don't hang on to a stale object.
* Version 53Kaz Kylheku2012-01-115-3/+39
| | | | | | | | | | * txr.c (version): Bumped. * txr.1: Bumped version and set date. * configure (txr_ver): Bumped. * RELNOTES: Updated.
* TXR Lisp regression in C global variables.Kaz Kylheku2012-01-112-6/+47
| | | | | | | | | | | * eval.c (struct c_var): New struct type. (lookup_var, lookup_var_l): cptr type bindings now point to a struct c_var, which has to be handled properly here. (c_var_mark): New static function. (c_var_ops): New static struct. (reg_var): Register variables using struct c_var to provide a pointer to the location and a cached cons that can be returned as a binding.
* * eval.c (each_s, each_star_s, collect_each_s, collect_each_star_s):Kaz Kylheku2012-01-114-2/+131
| | | | | | | | | | | New symbol variables. (op_each): New static function. (expand): Handle the four new operators. (eval_init): Intern new symbols, register new operators. * txr.1: Documented each, each*, collect-each and collect-each*. * txr.vim: Updated.
* * eval.c (eval_init): list_str registered.Kaz Kylheku2012-01-116-1/+27
| | | | | | | | | | * lib.c (list_str): New function. * lib.h (list_str): Declared. * txr.1: Doc stub section created. * txr.vim: Updated.