| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
| |
which hold direct references to other objects and must be used
each time a mutation takes place.
* eval.c (op_dohash): invocations of mut macro removed.
Comment rewritten.
* lib.c (sort_list): Use set macro for mutating assignment.
Do not invoke mut on sorted list; it won't work anyway, because
it doesn't mean what the code wants it to mean: that the list will be
fully traversed during gc marking.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* gc.c (gc_push): New function.
* gc.h (gc_push): Declared.
* hash.c (pushhash): Use mpush.
* lib.c (push): Reverted to unsafe operation. TODO comment replaced
with warning.
(lazy_flatten_scan): push occurence commented as safe.
(lazy_stream_func): Unsafe push replaced with mpush.
* lib.h (mpush): New macro.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
causes CONFIG_GEN_GC to be defined as 1 in config.h.
* eval.c (op_defvar, dwim_loc, op_modplace, transform_op): Handle
mutating assignments via set macro.
(op_dohash): Inform gc about mutated variables. TODO here.
* filter.c (trie_add, trie_compress): Handle mutating assignments
via set macro.
* gc.c (BACKPTR_VEC_SIZE, FULL_GC_INTERVAL): New preprocessor symbols.
(backptr, backptr_idx, partial_gc_count, full): New static variables.
(make_obj): Initialize generation to zero.
(gc): Added logic for deciding between full and partial gc.
(gc_set, gc_mutated): New functions.
* gc.h (gc_set, gc_mutated): Declared.
* hash.c (hash_mark): Changed useless use of vecref_l to vecref.
(gethash_f): Use set when assigning through *found since it
is a possible mutation.
* lib.c (car_l, cdr_l, vecref_l): Got rid of loc macro uses. Using the
value properly is going to be the caller's responsibility.
(push): push may be a mutation, so use set.
(intern): Uset set to mutate a hash entry.
(acons_new_l, aconsq_new_l): Use set when replacing *list.
* lib.h (PTR_BIT): New preprocessor symbol.
(obj_common): New macro for defining common object fields.
type_t is split into two bitfields, half a pointer wide,
allowing for generation to be represented.
(struct any, struct cons, struct string, struct sym, struct package,
struct func, struct vec, struct lazy_cons, struct cobj, struct env,
struct bignum, struct flonum): Use obj_common macro to defined
common fields.
(loc): Macro removed.
(set, mut): Macros conditionally defined for real functionality.
(list_collect, list_collect_nconc, list_collect_append): Replace
mutating operations with set.
* match.c (dest_set, v_cat, v_output, v_filter): Replace
mutating operations with set.
* stream.c (string_in_get_line, string_in_get_char,
strlist_out_put_string, strlist_out_put_char): Replace mutating
operations with set.
* unwind.c (uw_register_subtype): Replace mutating operation with set.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
to places where we potentially assign a reference to a younger object
inside a field located in an older object (chronological
backreference) and also where we take the address of an object
field, making it possible that the user of the address will do so.
This patch does not take care of vectors.
No, this is not an April Fool's joke.
* eval.c (env_fbind, env_vbind, env_replace_vbind, lookup_var,
lookup_sym_lisp1): Use set macro instead of assignment.
* hash.c (hash_grow, set_hash_userdata, hash_next):
Use set macro instead of assignment.
* lib.c (rplaca, rplacd, string_extend, length_str, replace_str,
rehome_sym, lazy_stream_func, lazy_str, lazy_str_force,
lazy_str_force_upto, obj_init): Use set macro instead of assignment.
(car_l, cdr_l): Use loc instead of address-of operator.
* lib.h (set, loc): New macros.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(exptmod): Bugfix: was no normalizing the bignum, ouch.
Also was reporting "non-integral operands" for other
errors.
* eval.c (eval_init): Registered = intrinsic function.
* lib.c (numeqv): New function.
* lib.h (numeq, numeqv): Declared.
* txr.1: Documented expt, sqrt, isqrt, exptmod, fixnump, bignump,
integerp, floatp, numberp, zerop, evenp, oddp, >, <, >=, <= and =.
* txr.vim: Highlight =
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
exception if MPI fails.
(floorf, ceili): Map integer argument to itself.
(tang, asine, acosi): New functions.
* eval.c (eval_init): New intrinsics: tan, asin, acos.
* lib.h (tang, asine, acosi): Declared.
* txr.1: Documented gcd, abs, floor, ceil, sin, cos, tan
asin, acos, atan, log, and exp.
* txr.vim: Highlighting for tang, asine, acosi.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* filter.c (tonumber_k, tointeger_k, tofloat_k, hextoint_k):
New keyword variables.
(filter_init): New variables initialized; new filters registered.
* filter.h (tonumber_k, tointeger_k, tofloat_k, hextoint_k):
Declared.
* lib.c (num_str): New function.
* lib.h (num_str): Declared.
* txr.1: New filters documented.
|
|
|
|
|
|
|
|
|
|
| |
intrinsics.
* lib.c (match_str, match_str_tree): Default position to zero.
* txr.1: Doc stubs created.
* txr.vim: Highlighting for match-str and match-str-tree.
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (eval_init): expo registered as intrinsic exp.
* lib.h (expo): Declared.
* txr.1: Added to stub heading.
* txr.vim: Highlighting for exp.
|
|
|
|
|
| |
Not all numbers are integers now, and that situation
requires an integer.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
for the integer square root.
* arith.c (sqroot_fixnum): Renamed back to isqrt_fixnum.
(sqroot): Rewritten to handle only floating-point square root.
(isqrt): New function, based on previous sqroot,
handles only integers.
* eval.c (eval_init): New intrinsic, isqrt.
* lib.h (isqrt): New declaration.
* txr.1: Doc stubs.
* txr.vim: Highlighting for isqrt.
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (eval_init): New intrinsic functions registered:
floor, ceil, sin, cons, atan, log.
* lib.h (floorf, ceili, sine, cosi, atang, loga): Declared.
* txr.1: Doc stub section for new functions.
* txr.vim: Highighting added.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(divi): Uses to_float.
(zerop, gt, lt, ge, le, expt): Floating support.
(isqrt_fixnum): Static function renamed to sqroot_fixnum.
(isqrt): Renamed to sqroot. Floating support.
(evenp, oddp, exptmod, gcd): Work with integers, not floats.
* eval.c (eval_init): intrinsic registration of sqrt follows rename of
isqrt to sqroot.
* lib.h (isqrt): Declaration replaced.
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (eval_init): divi registered as / intrinsic.
* lib.h (divi): Declared.
* txr.1: divi added to stub heading.
* txr.vim: / operator highlighted.
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (eval_init): flo-int registered as intrinsic.
* lib.h (flo_int): Declared.
* mpi-patches/series: Added mpi-to-double to patch stack.
(mp_to_double): New MPI function.
* mpi-patches/mpi-to-double: New file.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
result is in the fixnum range.
Implemented FLNUM cases, except for adding a FLNUM
to BGNUM.
(minus, mul): Use num_fast when the cnum value is in the fixnum range.
(int_flo): New function.
* eval.c (eval_init): Register int-flo intrinsic.
* lib.c (c_flo): New function.
* lib.h (TYPE_SHIFT, TYPE_PAIR): New macros, carried over
from the lazy strings branch.
(c_flo, int_flo): Declared.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
version of intptr_t is available and should be generated in config.h
as uintptr_t.
* eval.c (eval_init): New intrinsic functions floatp,
integerp, flo-str.
* gc.c (finalize): Handle FLNUM case. Rearranged
cases so that all trivially returning cases are
together.
(mark): Handle FLNUM case.
* hash.c (hash_double): New function.
(equal_hash): Handle FLNUM via hash_double.
(eql_hash): Likewise.
* lib.c: <math.h> is included.
(float_s): New symbol variable.
(code2type, equal): Handle FLNUM case in switch.
(integerp): New function; does the same thing
as integerp before.
(numberp): Returns t for floats.
(flo, floatp, flo_str): New functions.
(obj_init): Initialize new float_s variable.
(obj_print, obj_pprint): Handle FLNUM case in switch.
Printing does not work yet; needs work in stream.c.
* lib.h (enum type): New enumeration FLNUM.
(struct flonum): New struct type.
(union obj): New member, fl.
(float_s, flo, floatp, integerp, flo_str): Declared.
* parser.l (FLO): New token pattern definition.
Scans to a NUMBER token.
Corrected uses of yylval.num to yylval.val.
* parser.y (%union): Removed num member from yystype.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
so we make the second one optional.
* filter.c (topercent_k, frompercent_k): New keyword
variables.
(url_encode, url_decode): Take a second parameter, space_plus.
This determines whether or not to apply the rule that
a space encodes as a + character.
(filter_init): Initialize new keyword variables, and register :topercent
and :frompercent filters. Fix the previous registrations of :tourl and
:fromurl using currying.
* filter.h (urlencode, urldecode): Declarations updated.
(topercent_k, frompercent_k): Declared.
* txr.1: Documented.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
simpler. A pseudo type code is introduced called NIL with value 0.
* lib.h (enum type): New enumeration value, NIL.
(type): Function accepts object nil and maps it to code NIL.
* eval.c (dwim_loc, op_dwim): test for nil obj and goto hack is gone,
just handle NIL in the switch.
* gc.c (make_obj, mark): Handle new NIL type code in switch.
* hash.c (equal_hash): Handle NIL in the switch instead of nil test.
* lib.c (code2type): Map new NIL type code to null.
(typeof, typecheck): Code simplified.
(class_check, car): Move nil test into switch.
(eql, equal, consp, bignump, stringp, lazy_stringp,
symbolp, functionp, vectorp, cobjp): Simplified.
(length, sub, ref, refset, replace, obj_print, obj_pprint): Handle NIL
in switch instead of nil test. goto hack removed from refset.
* match.c (do_match_line, do_output_line): switch condition simplified.
* regex.c (regexp): Simplified.
(regex_nfa): Assert condition simplified.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
chain, andf, orf, iff.
* lib.c (chainv): New function.
(do_and, do_or): Generalized to handle functions of
any arguments via apply.
(andf, orf): Turn do_and and do_or into variadic function instead of a
monadic function.
(do_iff): New static function.
(andv, orv, iff): New functions.
* lib.h (chainv, andv, orv, iff): New functions declared.
* txr.1: Doc stubs created.
* txr.vim: Updated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* txr.c (version): Bumped.
* txr.1: Bumped version and set date.
* configure (txr_ver): Bumped.
* eval.c (op_modplace): Fix warning about uninitialized variable.
No bug.
* filter.c: gcc compilation regresion: missing <stdio.h> breaks inclusion
of "stream.h" header. Strangely, didn't show up when configured for
compiling with g++ on Ubuntu.
* match.c (match_filter): Fixed ununsed variable warning.
* txr.vim: Bunch of missing keywords added.
* dep.mk: Regenerated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
quasiquoting. We cannot use the same symbol for the
literal form from the parser, and for the expanded form,
because this creates a confusion when there are multiple
nestings of quasiquote expansion.
* eval.c (vector_lit_s, vector_list_s, hash_lit_s): New symbol
variables.
(hash_construct_s): Relocated here from hash.c.
(expand_qquote): Part of bugfix: look for hash_lit_s
instead of has_construct_s. Translate to a hash_construct_s
form which is no longer recognizes as a hash literal.
Implementing recognition of a quasiquote vector literal,
handled similarly.
(eval_init): Initialize vector_lit_s, vector_list_s,
hash_list_s and hash_lit_s.
Use vector_list_s when registering vector_list function.
* eval.h (vector_lit_s, vector_list_s, hash_lit_s,
hash_constuct_s): Declared.
* hash.c (hash_construct_s): Variable removed
and relocated into eval.c.
(hash_init): Initialization of hash_construct_s removed.
* hash.h (hash_construct_s): Declaration removed.
* parser.y: (vector): Action updated to generate
a (vec-lit ...) form if the object contains unquotes,
otherwise generate a vector object.
(hash): Generate hash-lit form, not a
hash-construct form.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
to express dynamic hash table construction
* eval.c (expand_qquote): Recognize hash-construct
forms: expand the hash arguments and pairs separately,
then rewrite to a new hash-construct form.
(eval-init): hash-construct intrinsic function added.
* hash.c (hash_construct_s): New symbol variable.
(hash_construct): New function.
(hash_init): Initialize hash_construct_s.
* hash.h (hash_construct_s, hash_construct): Declared.
* parser.y (hash): Rule rewritten to emit either a literal
hash table object, or a hash-construct form, based on
whether quasiquote unquotes occur within the syntax.
(hash_from_notation): Function removed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (eval_init): New intrinsic functions: url-encode, url-decode.
* filter.c (tourl_k, fromurl_k): New keyword variables.
(is_url_reserved, digit_value): New static functions.
(url_encode, url_decode): New functions.
(filter_init): Intialize new keyword variables and register
new :tourl and :fromurl filters.
* filter.h (tourl_k, fromurl_k, url_encode, url_decode): Declared.
* txr.1: Updated.
* txr.vim: Likewise.
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (cons_find): New function.
(expand_op): Use cons_find rather than tree_find to look for
rest_gensym.
* regex.c (regsub): Rearranged arguments so that the string
is last. This is better for partial evaluaton via the op
operator.
* regex.h (regsub): Updated declaration.
|
|
|
|
|
|
|
|
| |
* regex.c (regsub): New function.
* regex.h (regsub): Declared.
* txr.1: Doc stub added.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* txr.c (version): Bumped.
* txr.1: Bumped version and set date.
* configure (txr_ver): Bumped.
* RELNOTES: Updated.
* txr.vim: Handle : symbol properly.
* eval.c (op_defun): Bugfix: documentation says that defun supports
the same parameter list as lambda, and that is the intent. But
this was broken, since op_defun was expecting the parameter list
to be a proper list containing only bindable symbols, ruling out
the use of the consing dot for rest parameter as well as the colon
keyword symbol for optional parmeters.
|
|
|
|
| |
* txr.1: Documented.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
that output has taken place and suppress the printing of bindings.
* debug.c (debug): std_output replaced with std_debug.
* eval.c (eval_init): Registered new *stddebug* variable.
* stream.c (std_debug): New variable.
(stdio_put_string): Check that stream is other than
std_debug, to determine that output has taken place.
* stream.h (std_debug): Declared.
* txr.1: Added *stddebug* to documentation stub heading.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* arith.h: Likewise.
* debug.c: Added copyright header.
* debug.h: Updated copyright year.
* eval.c: Likewise.
* eval.h: Likewise.
* filter.c: Likewise.
* filter.h: Likewise.
* gc.c: Likewise.
* gc.h: Likewise.
* hash.c: Likewise.
* hash.h: Likewise.
* lib.c: Likewise.
* lib.h: Likewise.
* match.c: Likewise.
* match.h: Likewise.
* parser.h: Likewise.
* regex.c: Likewise.
* regex.h: Likewise.
* stream.c: Likewise.
* stream.h: Likewise.
* txr.c: Likewise, and e-mail address.
* txr.h: Updated copyright year.
* unwind.c: Likewise.
* unwind.h: Likewise.
|
|
|
|
|
|
|
|
|
|
| |
* stream.c (struct strm_ops): New member, put_byte.
(stdio_put_byte): New function.
(stdio_ops, pipe_ops, string_in_ops, byte_in_ops,
string_out_ops, strlist_out_ops, dir_ops): Updated.
(put_byte): New function.
* stream.h (put_byte): Declared.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* txr.c (version): Bumped.
* txr.1: Bumped version and set date.
* configure (txr_ver): Bumped.
* RELNOTES: Updated.
* eval.c (eval_init): Updated.
* rand.c (rand): Function renamed to rnd due to a clash with
standard C library (that does not show up when compiling as C++).
* rand.h (rand): Declaration renamed to rnd.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (eval_error): Use source_loc_str to get source location.
* match.c (debuglf, sem_err, file_err): Likewise.
* parser.h (source_loc_str): Declared.
* parser.l (parse_init): form_to_ln_hash must be equal based now.
* parser.y (rl): Store new form of read-time source location info.
* txr.1: Documented load.
|
|
|
|
|
|
|
|
| |
deleted range of values. Missing del cases added for single
index cases.
* lib.c (quicksort): Fix pivot selection one more time.
(length): Fix bad argument in "not a sequence" error.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(eval_error): nostatic added to suppress a g++ warning.
(dwim_loc): Takes new value as the original unevaluated form so
it can control evaluation. Support for del operator added.
(op_modplace): Bugfixes: new value form was being unconditionally
evaluated and out of order w.r.t. other forms. Now there is
left to right order. The form is evaluated later, since for most
operators it is on the right, with the exception of push.
dwim places can now optionally control the evaluation of newform.
del operator supported in gethash case as a special case.
error case added for del: if it's not handled in gethash or
dwim_loc, it is an error.
(eval_init): del_s initialized, and del operator added to table.
* txr.vim: syntax highlighting for del.
* txr.1: Documented del.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and replace.
* lib.c (do_sort): Static function renamed to sort_list.
(swap, quicksort, sort_vec): New static functions.
(sort): Made generic over lists, vectors and strings.
(refset): New function.
* lib.h (sort): Declaration updated (parameter name change).
(refset): Declared.
* txr.1: Mention refset.
* txr.vim: Updated with refset.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* debug.c (help, show_bindings): put_string arguments reversed.
* eval.c (bind_args): Support colon notation in interpreted
function lambda lists for optional arguments. Improved error checking.
(apply): Allow optional arguments to be left out.
(dwim_loc): Reversed arguments to replace_str, replace_vec,
replace_list.
(eval_init): Numerous intrinsics now have arguments that are optional.
New function rand introduced which reverses arguments relative to
random. New intrinsic function hash introduced for alternative
construction of hashes.
* gc.c (sweep): Reversed arguments to put_char.
* hash.c (weak_keys_k, weak_vals_k, equal_based_k): New keyword
symbol variables.
(hashv): New function.
(hash_init): Intern new symbols.
* hash.h (weak_keys_k, weak_vals_k, equal_based_k, hashv): Declared.
* lib.c (colon_k): New keyword symbol variable.
(replace_list, replace_str, replace_vec): Arguments rearranged.
(tree_find): testfun becomes optional argument.
(int_str): base becomes optional argument.
(func_f0, func_f1, func_f2, func_f3, func_f4, func_n0,
func_n1, func_n2, func_n3, func_n4, func_f0v, func_f1v,
func_f2v, func_f3v, func_f4v, func_n0v, func_n1v,
func_n2v, func_n3v, func_n4v, func_interp): Initialize optargs to zero.
(func_n0o, func_n1o, func_n2o, func_n3o, func_n4o): New functions.
(cobj_print_op): Reversed arguments to put_string.
(find): testfun and keyfun become optional arguments.
(replace): Parameters rearranged and arguments rearranged in calls to
replace_list, replace_str and replace_vec.
(obj_init): colon_k initialized.
(obj_print, obj_pprint): Arguments reversed, and stream defaults
to std_output. Arguments reversed in calls to put_char and put_string.
(dump): Arguments reversed in call to put_char.
* lib.h (struct func): sizes of minparam, fixparam bitfields
adjusted. New bitfield optargs. New unnamed bitfield added so
the previous ones add up to 16 bits.
(colon_k): Declared.
(func_n0o, func_n1o, func_n2o, func_n3o, func_n4o): Declared.
(replace_list, replace_str, replace_vec, replace): Declarations updated.
* match.c (debuglf, dump_shell_string, dump_byte_string, dump_var,
do_output_line, extract): Reversed arguments to put_char and
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (subst_vars): Treat the variable as an arbitrary
expression rather than just a symbol.
* match.c (subst_vars): Likewise.
* parser.y (o_var): Further simplification. The first item in
an output var is an expr and not an IDENT.
* txr.1: Updated.
* txr.vim: Likewise.
|
|
|
|
|
| |
Here is a simpler way. We can let nil be treated as a list with a
simple goto. This solves all cases.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* match.c (v_do): Store match context.
(match_fun): New function.
* match.h (match_fun): Declared.
* stream.c (streamp): New function.
* stream.h (streamp): Declared.
* txr.1: Stub section for match-fun.
* txr.vim: Highlight match-fun.
|
|
|
|
|
|
|
|
|
| |
list, and not the atom nil.
* match.c (v_try): Do not transform an atomic exception x into
the list ((t . x)). Just to (x). This (t . x) representation is
a vestige of from the time when the exception consisted of the
old-style return values from txeval.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* eval.c (op_catch, expand_catch_clause,
expand_catch): New static functions.
(expand): Handle catch operator.
(eval_init): Added catch operator to op_table,
and registered new functions throw, throwf and error.
* txr.1: Documented catch operator and created
stub section for throw, throwf and error.
* txr.vim: Updated.
* unwind.c (uw_throwfv, uw_errorfv): New functions.
* unwind.h (uw_throwfv, uw_errorfv): Declared.
|
|
|
|
|
| |
range_star_v): Regression: handle the case where the range is
open-ended (to is nil).
|
|
|
|
|
|
|
|
|
|
|
| |
but the step is omitted, the step should be negative one
rather than one.
(range_star_v_func, range_star_v): New static functions.
(eval_init): New function, range*, registered.
* txr.1: Stub section for range is also for range*.
* txr.vim: Recognize range* function.
|
|
|
|
| |
not only if it achieves the endpoint, but if it crosses it.
|
|
|
|
|
|
| |
evaluates to nil, by building a form targetting the place,
and recursing into op_modplace. Also, optimization: don't use eval
on a form built from the operator; just go to op_modplace directly.
|
|
|
|
|
|
|
|
|
|
|
|
| |
in sys::var form) as variables. This allows interpretation of metanums
in quasiliterals, because these are replaced by variables in the
op expander.
* parser.l: Recognize METANUM in QSILIT state.
* parser.y (quasi_item): METANUM parsed in quasiliteral.
* txr.vim: Metanums highlighted properly.
|
|
|
|
| |
at least two arguments, rather than at least one.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
in debug reporting.
* debug.c (debug): New argument, base.
* debug.h (debug_check): New argument, base.
(debug): Declaration updated.
* eval.c (do_eval): Pass new argument of debug_check as nil.
* match.c (LOG_MISMATCH, LOG_MATCH): Take into account base
when displaying character position.
(do_match_line): Pass base position to debug_check.
(match_files): Pass nil as base to debug_check.
|