| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(do_eval_args): Allow calls specified by improper lists
like (x y . z) where the z expression must evaluate to a list
that turns into addition arguments to be applied.
(transform_op, expand_op): New static functions.
(expand): Call expand_op.
(eval_init): Initialize rest_s and op_s. Use rest_s
to register rest function.
* lib.c (gensym): New function based on gensymv.
(gensymv): Now calls gensym.
* lib.h (gensym): Declared.
* parser.l: Parse @ followed by digits as a new kind of token,
METANUM.
* parser.y (METANUM): New token.
(meta_expr, exprs): Missing rlcp's added.
(expr): METANUM variant introduced.
(yybadtoken): Handle METANUM.
* txr.1: Documented one-symbol argument list of lambda.
Documented op. Closed some unbalanced parentheses.
* txr.vim: Highlight op.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(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.
|
|
|
|
|
| |
indexing arguments. The default value can be omitted,
defaulting to nil.
|
|
|
|
| |
* lib.c (replace_list): Fix code that is valid C++ but not C.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(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.
|