diff options
Diffstat (limited to 'ChangeLog')
-rw-r--r-- | ChangeLog | 1374 |
1 files changed, 1371 insertions, 3 deletions
@@ -26,15 +26,126 @@ 2012-12-01 Arnold D. Robbins <arnold@skeeve.com> - * eval.c (r_interpret): For op_assign_concat, if both strings + * interpret.h: For op_assign_concat, if both strings have WSTRCUR, then do the realloc() and append for the wide string too. Thanks to Janis Papanagnou <janis_papanagnou@hotmail.com> for the discussion in comp.lang.awk. +2012-11-30 Arnold D. Robbins <arnold@skeeve.com> + + * regcomp.c, regex.c, regex_internal.h, regexec.c: Sync + with GLIBC. Why not. + + * gawkapi.c (awk_bool_t): Change into an enum with awk_false and + awk_true values. + +2012-01-30 Andrew J. Schorr <aschorr@telemetry-investments.com> + + Further cleanups of macros in awk.h + + * awk.h (_r, _t): Remove declarations. + (unref, m_force_string): Remove macros. + (r_unref): Move declaration. + (r_force_string): Remove declaration. + (DEREF, force_string, force_number, unref): Now inline functions. + (POP_STRING, TOP_STRING): Back to macros. + * eval.c (_t): Remove definition. + * main.c (_r): Remove definition. + * node.c (r_force_string): Remove. + +2012-11-27 Arnold D. Robbins <arnold@skeeve.com> + + * builtin.c (do_fflush): Make fflush() and fflush("") both + flush everything. See the comment in the code. + +2012-11-24 Arnold D. Robbins <arnold@skeeve.com> + + Directory cleanup. + + * TODO.xgawk, FUTURES: Merged into TODO. + * TODO: More stuff added. + * Makefile.am (EXTRA_DIST): Updated. + +2012-11-22 Arnold D. Robbins <arnold@skeeve.com> + + Cleanup of awk.h. + + * array.c (r_in_array): Removed. + * awk.h (MALLOC_ARG_T): Replaced with size_t everywhere. + (S_ISREG, setsid): Moved to io.c. + (__extension__): Removed. + (INT32_BIT): Moved to cint_array.c. + (_t): Always declare. + (DO_LINT_INVALID, et al): Moved into an enum. + (POP_ARRAY, POP_PARAM, POP_SCALAR, TOP_SCALAR, dupnode, in_array): + Moved into inline functions. + (force_number, force_string): Simplified. + (ZOS_USS): Remove undef of DYNAMIC, it's handled in configure.ac. + * io.c (S_ISREG, setsid): Moved to here. + * cint_array.c (INT32_BIT): Moved to here. + * eval.c (_t): Always define. + * protos.h: Use size_t directly instead of MALLOC_ARG_T. + + Unrelated: + + * gawkapi.h: Add `awk_' prefix to structure tags where they + were missing. Document the full list of include files needed. + +2012-11-14 Arnold D. Robbins <arnold@skeeve.com> + + * io.c (do_find_source): On VMS, don't add the `/' separater. + Thanks to Anders Wallin. + + MPFR minor cleanup: + + * awk.h (mpfr_unset): Declare new function. + * mpfr.c (mpfr_unset): New function. + * node.c (r_unref): Call it instead of inline code. + * gawk_api.c (api_sym_update_scalar): Call it instead of inline code. + +2012-11-13 Arnold D. Robbins <arnold@skeeve.com> + + * symbol.c (get_symbols): Check type, not vname. Keeps + valgrind happy. Thanks to Andrew Schorr for noticing the problem. + 2012-11-10 Arnold D. Robbins <arnold@skeeve.com> * Update to bison 2.6.5. Various files regenerated. + * io.c (find_source): Add a default value for SHLIBEXT. + (read_with_timeout): For VMS also, just use read(). + +2012-11-10 John Haque <j.eh@mchsi.com> + + * int_array.c (int_copy): Initialize next pointer of newchain to null. + * eval.c (eval_condition): Force string context for an integer used + as array index. + +2012-11-10 Arnold D. Robbins <arnold@skeeve.com> + + * gawkapi.c (api_add_ext_func, api_awk_atexit, api_clear_array, + api_create_array, api_create_value, api_register_ext_version, + api_release_value, api_update_ERRNO_string, node_to_awk_value, + remove_element, run_ext_exit_handlers): Add null pointer checks. + Everywhere: Add / fixup leading comments. + + * interpret.h (Op_store_sub): If assigning to an unitialized variable + through SYMTAB, change it to Node_var. Add explanatory comments. + * symbol.c (get_symbol): Rationalized. Skip non-variables in SYMTAB. + +2012-11-04 Arnold D. Robbins <arnold@skeeve.com> + + * gawkapi.h: Minor documentation edit. + +2012-10-31 Arnold D. Robbins <arnold@skeeve.com> + + * awkgram.y (want_regexp): Use as a bool, not as an int. + * field.c: Fix a comment. + * gawkapi.h: Add comment to include <errno.h>. + * symbol.c (load_symbols): ``No automatic aggregate initialization.'' + Here too. Sigh again. + + * gawkapi.h: Minor documentation edits. 2012-11-27 Arnold D. Robbins <arnold@skeeve.com> @@ -45,10 +156,150 @@ * Update to bison 2.6.4. Various files regenerated. +2012-10-27 Arnold D. Robbins <arnold@skeeve.com> + + * gawkapi.h: Continuing the minor formatting / doc cleanups. + +2012-10-26 Arnold D. Robbins <arnold@skeeve.com> + + * gawkapi.h: Continuing the minor formatting / doc cleanups. + +2012-10-24 Arnold D. Robbins <arnold@skeeve.com> + + * gawkapi.h: Still more minor formatting / doc cleanups. + +2012-10-23 Arnold D. Robbins <arnold@skeeve.com> + + * gawkapi.h: More minor formatting / doc cleanups. + +2012-10-21 Arnold D. Robbins <arnold@skeeve.com> + + Fixes for z/OS from Dave Pitts. + + * awk.h (assoc_list_flags): No trailing comma on last enum value. + * gawkapi.h (awk_valtype_t): Ditto. + * symbol.c (lookup): ``No automatic aggregate initialization.'' Sigh. + + Unrelated: + + * gawkapi.h: Minor formatting / doc cleanups. + +2012-10-19 Arnold D. Robbins <arnold@skeeve.com> + + If SYMTAB is used, make sure ENVIRON and PROCINFO get loaded too. + + * awkgram.y (process_deferred): New function. Call it when program + is completely parsed. + (symtab_used): New variable. + (variable): Set it to true if SYMTAB is looked up. + * main.c (load_environ, load_procinfo): Make sure the routines are + only called once. + + Unrelated fixes: + + * awkgram.y (yylex): Check continue_allowed and break_allowed as + soon as they are seen in the scanner; the rules that check them + can not be reduced until after a token that allows them is seen, + leading to errors at execution time. + * interpret.h (Op_K_break, Op_K_continue, Op_jmp): Add asssertion + that pc->target_jmp is not NULL. + + * symbol.c (lookup): Correct a comment. + +2012-10-14 Arnold D. Robbins <arnold@skeeve.com> + + * gawkapi.h (IOBUF_PUBLIC): Renamed awk_input_buf_t. + (struct iobuf_public): Renamed struct awk_input. + * awk.h: Adjust. + 2012-10-13 Arnold D. Robbins <arnold@skeeve.com> * Update to Automake 1.12.4. Various files regenerated. +2012-10-11 Arnold D. Robbins <arnold@skeeve.com> + + * awk.h (dup_ent): New member for Node_param_list. + * symbol.c (install): For parameters, if this is a duplicate, chain + it off the original using the dup_ent pointer. + (remove_params): If there's a duplicate, remove it from the list. + + * awk.h: Fix flags to have unique numeric values. Oops. + +2012-10-10 Arnold D. Robbins <arnold@skeeve.com> + + * gawkapi.h: Add considerably more documentation. Rearrange order + of functions in the struct to make more sense, grouping related + functions together in a more logical order. + * gawkapi.c: Adjust as needed. + * ext.c (make_builtin): Adjust for name change in struct member. + +2012-10-05 Arnold D. Robbins <arnold@skeeve.com> + + * mbsupport.h: Add a bunch of undefs for z/OS. + +2012-10-04 Arnold D. Robbins <arnold@skeeve.com> + + * TODO.xgawk: Update. + * awk.h (make_str_node): Removed macro. + (make_string): Modified to call make_str_node. + (r_make_str_node): Renamed to make_str_node. + * gawkapi.c: Changed r_make_str_node to make_str_node everywhere. + * node.c (make_str_node): Renamed from make_str_node. + + Update to automake 1.12.4. + + * Makefile.in, aclocal.m4, awklib/Makefile.in, doc/Makefile.in, + extension/Makefile.in, extension/aclocal.m4, test/Makefile.in: + Regenerated. + + * interpret.h (Op_Subscript): Added lint warnings for FUNCTAB + and SYMTAB. + +2012-10-02 Arnold D. Robbins <arnold@skeeve.com> + + * awk.h (func_table): Declare. + * awkgram.y: If do_posix or do_traditional, then check for + delete on SYMTAB. Add check for delete on FUNCTAB, also. + * interpret.h (Op_Subscript): For FUNCTAB, return the element name + as its value too. Avoids lots of weirdness and allows indirect calls + after assignment from FUNCTAB["foo"] to work. + (Op_store_sub): Disallow assignment to elements of FUNCTAB. + (Op_indirect_func_all): Turn assert into check and fatal error. + * symbol.c (func_table): No longer static. + (lookup): If do_posix or do_traditional, skip the global table. + (release_all_vars): Clear func_table too. + +2012-09-25 Arnold D. Robbins <arnold@skeeve.com> + + First cut at SYMTAB and FUNCTAB. This does the following: + - Change symbol table handling to use gawk arrays. + - Store symbols in SYMTAB array and allow indirect access + through SYMTAB to variables, both getting and setting. + - List function names in FUNCTAB indexes; Values cannot be + used at the moment. + - No documentation yet. + + * awk.h (Node_hashnode, hnext, hname, hlength, hcode, hvalue): + Removed, not needed any more. + (init_symbol_table, symbol_table): Add declarations. + * awkgram.y: Disallow delete on SYMTAB, fix warning for tawk + extension if traditional. + * eval.c (nodetypes): Remove Node_hashnode element. + * interpret.h (Op_subscript, Op_store_sub): Handle SYMTAB and go + through to the actual value. + * main.c (main): Init Nnull_string earlier. Add call to + init_symbol_table(). + * profile.c (pp_str, pp_len): Change definitions. + (pp_next): New macro. + (pp_push, pp_pop): Adjust uses. + * symbol.c (variables): Removed. + (global_table, param_table, func_table, symbol_table, + installing_specials): New variables. + (lookup, make_params, install_params, remove_params, remove_symbol, + make_symbol, install, get_symbols, release_all_vars, append_symbol, + release_symbols, load_symbols): Rework logic considerably. + (init_symbol_table): New function. + 2012-09-23 Arnold D. Robbins <arnold@skeeve.com> `delete array' and `nextfile' are now in POSIX. @@ -59,14 +310,805 @@ and `nextfile'. (tokentab): Set flags to zero for nextfile. +2012-09-19 Arnold D. Robbins <arnold@skeeve.com> + + * symbol.c (load_symbols): Zero out the new node. Prevents assertion + failure on PPC Mac OS X. + +2012-09-14 Arnold D. Robbins <arnold@skeeve.com> + + Allow read-only access to built-in variables from extensions. + + * awk.h (NO_EXT_SET): New flag. + * gawkapi.c (api_sym_lookup, api_sym_update_real): Set flag if off + limits variable instead of failing. Adjust logic. + (api_sym_update_scalar, api_set_array_element, api_del_array_element, + api_release_flattened_array): Adjust logic. + * gawkapi.h: Adjust documentation. + + Provide PROCINFO["identifiers"]. Undocumented for now. + + * awk.h (load_symbols): Add declaration. + * awkgram.y (variable): Adjust comment formatting. + * main.c (main): Call load_symbols(). + * symbol.c (load_symbols): New function. + +2012-09-13 Arnold D. Robbins <arnold@skeeve.com> + + * configure.ac: Determination of DYNAMIC adjusted. Hopefully is + smarter for z/OS. + +2012-09-13 Dave Pitts <dpitts@cozx.com> + + * awk.h: Add defines for z/OS for newer types. + +2012-08-31 Arnold D. Robbins <arnold@skeeve.com> + + * gawkapi.c: Wrap various bits in #ifdef DYNAMIC so that + gawk will compile on systems without dynamic loading. + +2012-08-24 Arnold D. Robbins <arnold@skeeve.com> + + Add version facility to API. Thanks to Manuel Collado + for the idea. + + * awk.h (print_ext_versions): Declare. + Rearrange includes and decls to make more sense. + * gawkapi.h (register_ext_version): New API. + (dl_load_func): Add code for ext_version. + * gawkapi.c (api_register_ext_version, print_ext_versions): + New functions. + * main.c (do_version): New variable. + (optab): Set it for -v / --version. + (main): Set it in arg parsing switch. Call version() after the + extensions have been loaded. + +2012-08-22 Arnold D. Robbins <arnold@skeeve.com> + + Add output wrapper and two-way processor to extension API. + + * awk.h (struct redirect): Replace output FILE * with awk_output_buf_t. + (register_output_wrapper, register_two_way_processor): Declare. + * builtin.c (efwrite): Adjust logic to use rp->output data and + functions if rp is not NULL. Remove redundant declaration of function. + (do_fflush, do_printf, do_print, do_print_rec): Same adjustment. + * ext.c (make_builtin): Adjust error messages. + * gawkapi.c (api_register_output_wrapper, + api_register_two_way_processor): New functions. + (sym_update_real): Adjust code formatting. + * gawkapi.h (awk_input_parser_t): Make next pointer awk_const. + (awk_output_buf_t, awk_two_way_processor_t): New structs. + (api_register_output_wrapper, api_register_two_way_processor): New APIs. + (dl_load_func): Allow for empty function table (NULL elements). + * io.c (find_output_wrapper, init_output_wrapper, find_two_processor, + gawk_fwrite, gawk_ferror, gawk_fflush, gawk_fclose): New functions. + (redirect): Call init_output_wrapper, find_output_wrapper as needed. + Adjust use of rp->fp to rp->output.fp and also function calls. + (close_rp, close_redir, flush_io): Same adjustment. + (two_way_open): Same adjustment. Call find_two_way_processor, and + find_output_wrapper, as needed. + 2012-08-17 Arnold D. Robbins <arnold@skeeve.com> - * Update infrastructure to automake 1.12.3, bison 2.6.3. + * Update infrastructure: Automake 1.12.3 and bison 2.6.2. -2012-08-12 Arnold D. Robbins <arnold@skeeve.com> +2012-08-15 Arnold D. Robbins <arnold@skeeve.com> * dfa.c: Sync w/GNU grep. +2012-08-12 Arnold D. Robbins <arnold@skeeve.com> + + * gawkapi.h: Make the versions enum constants instead of defines. + +2012-08-11 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * awkgram.y (add_srcfile): It is now a fatal error to load the + same file with -f and -i (or @include). + * TODO.xgawk: Update to reflect this change. + +2012-08-10 Arnold D. Robbins <arnold@skeeve.com> + + * FUTURES, TODO.xgawk: Updates. + +2012-08-08 Arnold D. Robbins <arnold@skeeve.com> + + * configure.ac: Add -DNDEBUG to remove asserts if not developing. + + * gawkapi.h: Document how to build up arrays. + * gawkapi.c (api_sym_update): For an array, pass the new cookie + back out to the extension. + + * awk.h (IOBUF): Move struct stat into IOBUF_PUBLIC. + (os_isreadable): Change to take an IOBUF_PUBLIC. + * gawkapi.h (IOBUF_PUBLIC): Received struct stat. + (INVALID_HANDLE): Moves to here. + * io.c (iop_alloc): Stat the fd and fill in stat buf. + (iop_finish): Use passed in stat info. + +2012-08-05 Arnold D. Robbins <arnold@skeeve.com> + + * README.git: More stuff added. + +2012-08-01 Arnold D. Robbins <arnold@skeeve.com> + + * io.c (iop_finish): New function. + (iop_alloc): Add errno_val parameter. Move code into iop_finish. + Add large explanatory leading comment. + (after_beginfile): Rework logic. Check for input parser first, then + check for invalid iop. + (nextfile): Organize code better. Call iop_alloc then iop_finish. + (redirect): Call iop_alloc, find_input_parser, iop_finish. + (two_way_open): Call iop_alloc, find_input_parser, iop_finish. + (gawk_popen): Call iop_alloc, find_input_parser, iop_finish. + (find_input_parser): Set iop->valid if input parser takes control. + (get_a_record): Rework setting RT to use macros. + +2012-07-29 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * awk.h (set_RT_to_null, set_RT): Removed. + * gawkapi.h (api_set_RT): Removed. + (get_record): Signature changed in input parser struct. + * gawkapi.c (api_set_RT): Removed. + * io.c (set_RT_to_null, set_RT): Removed. + (get_a_record): Adjustments for new API for input parser. + +2012-07-29 Arnold D. Robbins <arnold@skeeve.com> + + * awk.h (os_isreadable): Adjust declaration. + (struct iobuf): Add new member `valid'. + * io.c (iop_alloc): Remove do_input_parsers parameter, it's + always true. Adjust logic to set things to invalid if could not + find an input parser. + (after_beginfile): Use valid member to check if iobuf is valid. + Don't clear iop->errcode. + (nextfile): Adjust logic to clear errcode if valid is true and + also to update ERRNO. + (redirect): Check iop->valid and cleanup as necessary, including + setting ERRNO. + (two_way_open): Ditto. + (gawk_popen): Ditto. + (devopen): Remove check for directory. + +2012-07-27 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * io.c (find_input_parser): Issue a warning if take_control_of fails. + +2012-07-27 Arnold D. Robbins <arnold@skeeve.com> + + * awk.h (set_RT): Change to take a NODE * parameter. + * io.c (set_RT): Change to take a NODE * parameter. + * gawkapi.h: Change open hook to input parser in comment. + * gawkapi.c (api_set_RT): Adjust call to set_RT. + +2012-07-26 Arnold D. Robbins <arnold@skeeve.com> + + * awk.h (set_RT_to_null, set_RT): Declare functions. + (os_isreadable): Declare function. + * io.c (set_RT_to_null, set_RT): New functions. + (iop_close): Init ret to zero. + * gawkapi.c (api_register_input_parser): Check for null pointer. + (api_set_RT): New function. + * gawkapi.h (api_set_RT): New function. + +2012-07-26 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * gawkapi.h (IOBUF_PUBLIC): Document the get_record and close_func + API. + (awk_input_parser_t) Change can_take_file argument to const, and + document the API. + * io.c (get_a_record): Document that the caller initializes *errcode + to 0, and remote the test for non-NULL errcode. + +2012-07-26 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * gawkapi.c (api_sym_update_scalar): Fix some minor bugs. Was + not updating AWK_NUMBER when valref != 1. And strings were not + freeing MPFR values. + +2012-07-25 Arnold D. Robbins <arnold@skeeve.com> + + Start refactoring of IOBUF handling and turn "open hooks" + into "input parsers". + + * awk.h (IOP_NOFREE_OBJ): Flag removed. + (register_input_parser): Renamed from register_open_hook. + * ext.c (load_ext): Make sure lib_name is not NULL. + * gawk_api.c (api_register_input_parser): Renamed from + api_register_open_hook. + * gawk_api.h (api_register_input_parser): Renamed from + api_register_open_hook. Rework structure to have "do you want it" + and "take control of it" functions. + * io.c (iop_alloc): Remove third argument which is IOBUF pointer. + Always malloc it. Remove use of IOP_NOFREE_OBJ everywhere. + (find_input_parser): Renamed from find_open_hook. + (nextfile): Don't use static IOBUF. + (iop_close): Call close_func first. Then close fd or remap it + if it's still not INVALID_HANDLE. + (register_input_parser): Renamed from register_open_hook. + Use a FIFO list and check if more than one parser will accept the + file. If so, fatal error. + +2012-07-25 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * configure.ac: Instead of using acl_shlibext for the shared library + extension, define our own variable GAWKLIBEXT with a hack to work + correctly on Mac OS X. + * Makefile.am (SHLIBEXT): Use the value of GAWKLIBEXT instead of + acl_shlibext. + +2012-07-24 Arnold D. Robbins <arnold@skeeve.com> + + * configure.ac: Add crude but small hack to make plug-ins work + on Mac OS X. + +2012-07-20 Arnold D. Robbins <arnold@skeeve.com> + + * gawkapi.h: Rework table to not take up so much space. + * gawkapi.c (api_sym_update_scalar): Rework optimization code + to clean up the function. + +2012-07-17 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * gawkapi.h: Add comments explaining new api_create_value and + api_release_value functions. + * gawkapi.c (sym_update_real): Allow updates with AWK_SCALAR and + AWK_VALUE_COOKIE types. After creating a regular variable, + remove the call to unref(node->var_value), since this is not + done elsewhere in the code (see, for example, main.c:init_vars). + If the update is for an existing variable, allow any val_type + except AWK_ARRAY (was previously disallowing AWK_SCALAR and + AWK_VALUE_COOKIE for no apparent reason). + (api_sym_update_scalar): The switch should return false for an + invalid val_type value, so change the AWK_ARRAY case to default. + (valid_subscript_type): Any scalar value is good, so accept any valid + type except AWK_ARRAY. + (api_create_value): Accept only AWK_NUMBER and AWK_STRING values. + Anything else should fail. + +2012-07-17 Arnold D. Robbins <arnold@skeeve.com> + + Speedup: + + * awk.h (r_free_wstr): Renamed from free_wstr. + (free_wstr): Macro to test the WSTRCUR flag first. + * node.c (r_free_wstr): Renamed from free_wstr. + + Support value cookies: + + * gawkapi.h (awk_val_type_t): Add AWK_VALUE_COOKIE. + (awk_value_cookie_t): New type. + (awk_value_t): Support AWK_VALUE_COOKIE. + (api_create_value, api_release_value): New function pointers. + * gawkapi.c (awk_value_to_node, api_sym_update_scalar, + valid_subscript_type): Handle AWK_VALUE_COOKIE. + (api_create_value, api_release_value): New functions. + +2012-07-16 Arnold D. Robbins <arnold@skeeve.com> + + * gawkapi.c (awk_value_to_node): Support AWK_SCALAR. + (api_sym_update_scalar): Performance improvements. + +2012-07-12 Arnold D. Robbins <arnold@skeeve.com> + + Allow creation of constants. Thanks to John Haque for the + implementation concept. + + * gawk_api.h (api_sym_constant): Create a constant. + * gawk_api.h (api_sym_update_real): Renamed from api_sym_update. + Add is_const paramater and do the right thing if true. + (api_sym_update, api_sym_constant): Call api_sym_update_real + in the correct way. + (set_constant): New function. + +2012-07-11 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * gawkapi.h: Fix typo in comment. + (awk_value_t): Type for scalar_cookie should be awk_scalar_t, + not awk_array_t. + (gawk_api): Add new api_sym_lookup_scalar function. + (sym_lookup_scalar): New wrapper macro for api_sym_lookup_scalar hook. + * gawkapi.c (api_sym_lookup_scalar): New function for faster scalar + lookup. + (api_impl): Add entry for api_sym_lookup_scalar. + +2012-07-11 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * gawkapi.c (awk_value_to_node): Change to a switch statement + so AWK_SCALAR or other invalid type is handled properly. + (valid_subscript_type): Test whether a value type is acceptable + for use as an array subscript (any scalar value will do). + (api_get_array_element, api_set_array_element, api_del_array_element): + Use new valid_subscript_type instead of restricting to string values. + +2012-07-11 Arnold D. Robbins <arnold@skeeve.com> + + Lots of API work. + + * gawkapi.h: Function pointer members renamed api_XXXX and + macros adjusted. More documentation. + (awk_valtype_t): New AWK_SCALAR enum for scalar cookies. + (awk_scalar_t): New type. + (awk_value_t): New member scalar_cookie. + (api_sym_update_scalar): New API function. + (erealloc): New macro. + (make_const_string): New macro, renamed from dup_string. + (make_malloced_string): New macro, renamed from make_string. + (make_null_string): New inline function. + (dl_load_func): Add call to init routine through pointer if + not NULL. + + * gawkapi.c (awk_value_to_node): Assume that string values came + from malloc. + (node_to_awk_value): Handle AWK_SCALAR. + (api_sym_update): Ditto. + (api_sym_update_scalar): New routine. + (api_get_array_element): Return false if the element doesn't exist. + Always unref the subscript. + (remove_element): New helper routine. + (api_del_array_element): Use it. + (api_release_flattened_array): Ditto. + (api_impl): Add the new routine. + +2012-07-11 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * gawkapi.c (api_sym_update): Allow val_type to be AWK_UNDEFINED + for setting a variable to "", i.e. dupnode(Nnull_string). + +2012-07-10 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * awkgram.y (add_srcfile): Lint warning message for a previously loaded + shared library should say "already loaded shared library" instead + of "already included source file". + +2012-07-08 Arnold D. Robbins <arnold@skeeve.com> + + * gawkapi.h (set_array_element): Use index + value instead + of element structure. Matches get_array_element. + (set_array_element_by_elem): New macro to use an element. + * gawkapi.c (api_set_array_element): Make the necessary adjustments. + +2012-07-04 Arnold D. Robbins <arnold@skeeve.com> + + * awkgram.y (tokentab): Remove limit on number of arguments + for "and", "or", and "xor". + * builtin.c (do_and, do_or, do_xor): Modify code to perform the + respective operation on any number of arguments. There must be + at least two. + +2012-06-29 Arnold D. Robbins <arnold@skeeve.com> + + * gawkapi.h: Improve the documentation of the return values + per Andrew Schorr. + +2012-06-25 Arnold D. Robbins <arnold@skeeve.com> + + * TODO.xgawk: Updated. + * awk.h (track_ext_func): Declared. + * awkgram.y (enum defref): Add option for extension function. + (struct fdesc): Add member for extension function. + (func_use): Handle extension function, mark as extension and defined. + (track_ext_func): New function. + (check_funcs): Update logic for extension functions. + * ext.c (make_builtin): Call track_ext_func. + +2012-06-24 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * TODO.xgawk: Most of IOBUF has been hidden. + * gawkapi.h (IOBUF): Remove declaration (now back in awk.h). + (IOBUF_PUBLIC): Declare new structure defining subset of IOBUF fields + that should be exposed to extensions. + (gawk_api): Update register_open_hook argument from IOBUF to + IOBUF_PUBLIC. + * awk.h (IOBUF): Restore declaration with 5 fields moved to new + IOBUF_PUBLIC structure. + (register_open_hook): Update open_func argument from IOBUF to + IOBUF_PUBLIC. + * gawkapi.c (api_register_open_hook): Ditto. + * io.c (after_beginfile, nextfile, iop_close, gawk_pclose): Some fields + such as fd and name are now inside the IOBUF public structure. + (struct open_hook): Update open_func argument from IOBUF to + (register_open_hook): Ditto. + (find_open_hook): opaque now inside IOBUF_PUBLIC. + (iop_alloc): fd and name now in IOBUF_PUBLIC. + (get_a_record): If the get_record hook returns EOF, set the IOP_AT_EOF + flag. Access fd inside IOBUF_PUBLIC. + (get_read_timeout): File name now inside IOBUF_PUBLIC. + * interpret.h (r_interpret): File name now inside IOBUF_PUBLIC. + * ext.c (load_ext): No need to call return at the end of a void + function. + +2012-06-24 Arnold D. Robbins <arnold@skeeve.com> + + * ext.c (load_ext): Don't retun a value from a void function. + * gawkapi.c (api_set_array_element): Set up vname and parent_array. + +2012-06-21 Arnold D. Robbins <arnold@skeeve.com> + + More API and cleanup: + + * awk.h (stopme): Make signature match other built-ins. + * awkgram.y (stopme): Make signature match other built-ins. + (regexp): Minor edit. + * gawkapi.c (api_set_argument): Remove unused variable. + Set parent_array field of array value. + * TODO.xgawk: Update some. + + Remove extension() builtin. + + * awk.h (do_ext): Removed. + (load_ext): Signature changed. + * awkgram.y (tokentab): Remove do_ext. + Change calls to do_ext. + * ext.c (load_ext): Make init function a constant. + * main.c (main): Change calls to do_ext. + +2012-06-20 Arnold D. Robbins <arnold@skeeve.com> + + Restore lost debugging function: + + * awkgram.y (stopme): Restore long lost debugging function. + * awk.h (stopme): Add declaration. + + API work: + + * ext.c (get_argument): Make extern. + * awk.h (get_argument): Declare it. + * gawkapi.c (api_set_argument): Call it. Finish off the logic. + (api_get_argument): Refine logic to use get_argument. + * gawkapi.h (set_argument): New API. + +2012-06-19 Arnold D. Robbins <arnold@skeeve.com> + + Remove code duplication in gawkapi.c from msg.c: + + * awk.h (err): Add `isfatal' first parameter. + * awkgram.y (err): Adjust all calls. + * msg.c (err): Adjust all calls. Move fatal code to here ... + (r_fatal): From here. + * gawkapi.c: Remove code duplication and adjust calls to `err'. + + Handle deleting elements of flattened array: + + * awk.h (get_argument): Remove declaration. + * ext.c (get_argument): Make static. + * gawkapi.h (awk_flat_array_t): Make opaque fields const. Add + more descriptive comments. + * gawkapi.c (release_flattened_array): Delete elements flagged + for deletion. Free the flattened array also. + + Add additional debugging when developing: + + * configure.ac: Add additional debugging flags. + * configure: Regenerated. + +2012-06-18 Arnold D. Robbins <arnold@skeeve.com> + + * gawkapi.h (get_array_element): Restore `wanted' paramater. + (awk_element_t): Use awk_value_t for index. Add awk_flat_array_t. + (flatten_array): Change signature to use awk_flat_array_t; + (release_flattened_array): Change signature to use awk_flat_array_t; + * gawkapi.c (api_sym_update): Handle case where variable exists already. + (api_get_array_element): Restore `wanted' paramater and pass it + on to node_to_awk_value. + (api_set_array_element): Revisse to match changed element type. + (api_flatten_array): Revise signature, implement. + (api_release_flattened_array): Revise signature, implement. + +2012-06-17 Arnold D. Robbins <arnold@skeeve.com> + + API Work: + + * gawkapi.h (get_array_element): Remove `wanted' parameter. + (r_make_string): Comment the need for `api' and `ext_id' parameters. + * gawkapi.c (api_sym_update): Move checks to front. + Initial code for handling arrays. Still needs work. + (api_get_array_element): Implemented. + (api_set_array_element): Additional checking code. + (api_del_array_element): Implemented. + (api_create_array): Implemented. + (init_ext_api): Force do_xxx values to be 1 or 0. + (update_ext_api): Ditto. + +2012-06-12 Arnold D. Robbins <arnold@skeeve.com> + + API Work: + + * gawkapi.h (awk_value_t): Restore union. + (get_curfunc_param): Renamed to get_argument. Return type changed + to awk_bool_t. Semantics better thought out and documented. + (awk_atexit, get_array_element): Return type now void. + (sym_lookup): Return type now void. Argument order rationalized. + * gawkapi.c (node_to_awk_value): Return type is now awk_bool_t. + Semantics now match table in gawkawpi.h. + (api_awk_atexit): Return type now void. + (api_sym_lookup): Return type is now awk_bool_t. Change parameter + order. + (api_get_array_element): Return type is now awk_bool_t. + + Further API implementations and fixes for extension/testext.c: + + * awk.h (final_exit): Add declaration. + * ext.c (load_ext): Change `func' to install_func. + * gawkapi.c: Add casts to void for id param in all functions. + (api_sym_update): Finish implementation. + (api_get_array_element): Start implementation. + (api_set_array_element): Add error checking. + (api_get_element_count): Add error checking, return the right value. + * main.c (main): Call final_exit instead of exit. + (arg_assign): Ditto. + * msg.c (final_exit): New routine to run the exit handlers and exit. + (gawk_exit): Call it. + * profile.c (dump_and_exit): Ditto. + +2012-06-10 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * TODO.xgawk: Addition of time extension moved to "done" section. + +2012-06-10 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * gawkapi.c (api_update_ERRNO_string): Treat boolean true as a request + for TRANSLATE, and false as DONT_TRANSLATE. + +2012-06-06 Arnold D. Robbins <arnold@skeeve.com> + + * cint_array.c (tree_print, leaf_print): Add additional casts + for printf warnings. + + * awk.h (update_ext_api): Add declaration. + * gawkapi.c (update_ext_api): New function. + * eval.c (set_LINT): Call update_ext_api() at the end. + * gawkapi.h: Document that do_XXX could change on the fly. + + * awk.h (run_ext_exit_handlers): Add declaration. + * msg.c (gawk_exit): Call it. + +2012-06-05 Arnold D. Robbins <arnold@skeeve.com> + + * ext.c (load_ext): Remove use of RTLD_GLOBAL. Not needed in new + scheme. Clean up error messages. + +2012-06-04 Arnold D. Robbins <arnold@skeeve.com> + + * configure.ac: Remove use of -export-dynamic for GCC. + * configure: Regenerated. + +2012-05-30 Arnold D. Robbins <arnold@skeeve.com> + + * main.c (is_off_limits_var): Minor coding style edit. + * gawkapi.c (awk_value_to_node): More cleanup. + (node_to_awk_value): Use `wanted' for decision making. + (api_sym_update): Start implementation. Needs more work. + General: More cleanup, comments. + * gawkapi.h (api_sym_update): Add additional comments. + +2012-05-29 Arnold D. Robbins <arnold@skeeve.com> + + * gawkapi.c (node_to_awk_value): Add third parameter indicating type + of value desired. Based on that, do force_string or force_number + to get the "other" type. + (awk_value_to_node): Clean up the code a bit. + (get_curfunc_param): Move forcing of values into node_to_awk_value. + (api_sym_lookup): Add third parameter indicating type of value wanted. + (api_get_array_element): Ditto. + * gawk_api.h: Additional comments and clarifications. Revise APIs + to take third 'wanted' argument as above. + (awk_value_t): No longer a union so that both values may be accessed. + All macros: Parenthesized the bodies. + * bootstrap.sh: Rationalize a bit. + +2012-05-26 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * Makefile.am (include_HEADERS): Add so gawkapi.h will be installed. + (base_sources): Add gawkapi.h so that it is in dist tarball. + * TODO.xgawk: Update. + * main.c (is_off_limits_var): Stop returning true for everything + except PROCINFO. + +2012-05-25 Arnold D. Robbins <arnold@skeeve.com> + + * main.c (is_off_limits_var): New function to check if a variable + is one that an extension function may not change. + * awk.h (is_off_limits_var): Declare it. + * gawkapi.c (api_sym_lookup): Use it. + + * bootstrap.sh: Touch various files in the extension directory also. + +2012-05-24 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * gawkapi.h (awk_param_type_t): Remove (use awk_valtype_t instead). + (awk_ext_func_t): Pass a result argument, and return an awk_value_t *. + (gawk_api.get_curfunc_param): Add a result argument. + (gawk_api.set_return_value): Remove obsolete function. + (gawk_api.sym_lookup, gawk_api.get_array_element): Add a result + argument. + (gawk_api.api_make_string, gawk_api.api_make_number): Remove hooks, + since access to gawk internal state is not required to do this. + (set_return_value): Remove obsolete macro. + (get_curfunc_param, sym_lookup, get_array_element): Add result argument. + (r_make_string, make_number): New static inline functions. + (make_string, dup_string): Revise macro definitions. + (dl_load_func): Remove global_api_p and global_ext_id args, + and fix SEGV by setting api prior to checking its version members. + (GAWK): Expand ifdef to include more stuff. + * gawkapi.c (node_to_awk_value): Add result argument. + (api_get_curfunc_param): Add result argument, and use awk_valtype_t. + (api_set_return_value): Remove obsolete function. + (awk_value_to_node): New global function to convert back into internal + format. + (api_add_ext_func): Simply call make_builtin. + (node_to_awk_value): Add result argument, and handle Node_val case. + (api_sym_lookup, api_get_array_element): Add result argument. + (api_set_array_element): Implement. + (api_make_string, api_make_number): Remove functions that belong on + client side. + (api_impl): Remove 3 obsolete entries. + * TODO.xgawk: Update to reflect progress. + * Makefile.am (base_sources): Add gawkapi.c. + * awk.h: Include gawkapi.h earlier. + (api_impl, init_ext_api, awk_value_to_node): Add declarations + so we can hook in new API. + (INSTRUCTION): Add new union type efptr for external functions. + (extfunc): New define for d.efptr. + (load_ext): Remove 3rd obj argument that was never used for anything. + (make_builtin): Change signature for new API. + * awkgram.y (load_library): Change 2nd argument to load_ext + from dlload to dl_load, and remove pointless 3rd argument. + * main.c (main): Call init_ext_api() before loading shared libraries. + Change 2nd argument to load_ext from dlload to dl_load, and remove + pointless 3rd argument. + * ext.c (do_ext): Remove pointless 3rd argument to load_ext. + (load_ext): Remove 3rd argument. Port to new API (change initialization + function signature). If initialization function fails, issue a warning + and return -1, else return 0. + (make_builtin): Port to new API. + * interpret.h (r_interpret): For Op_ext_builtin, call external functions + with an awk_value_t result buffer, and convert the returned value + to a NODE *. For Node_ext_func, code now in extfunc instead of builtin. + +2012-05-21 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * configure.ac: Remove libtool, and call configure in the + extension subdirectory. Change pkgextensiondir to remove the + version number, since the new API has builtin version checks. + * TODO.xgawk: Update. + * ltmain.sh: Removed, since libtool no longer used here. + +2012-05-19 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * TODO.xgawk: Update to reflect progress and new issues. + * main.c (main): Add -i (--include) option. + (usage): Ditto. + * awkgram.y (add_srcfile): Eliminate duplicates only for SRC_INC + and SRC_EXTLIB sources (i.e. -f duplicates should not be removed). + * io.c (find_source): Set DEFAULT_FILETYPE to ".awk" if not defined + elsewhere. + +2012-05-15 Arnold D. Robbins <arnold@skeeve.com> + + * awk.h: Include "gawkapi.h" to get IOBUF. + * gawkapi.h: Considerable updates. + * gawkapi.c: New file. Start at implementing the APIs. + +2012-05-13 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * TODO.xgawk: Update to reflect recent discussions and deletion of + extension/xreadlink.[ch]. + +2012-05-11 Arnold D. Robbins <arnold@skeeve.com> + + Sweeping change: Use `bool', `true', and `false' everywhere. + +2012-04-09 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * eval.c (unset_ERRNO): Fix memory management bug -- need to use + dupnode with Nnull_string. + +2012-04-08 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * Makefile.am (valgrind): Define VALGRIND instead of redefining AWK. + This allows test/Makefile.am to set up the command environment as + desired. + (valgrind-noleak): Ditto, plus set --leak-check=no instead of the + default summary setting. + +2012-04-07 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * TODO.xgawk: Update to reflect progress. + +2012-04-01 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * TODO.xgawk: Move valgrind-noleak item into "done" section. + * Makefile.am (valgrind-noleak): Add new valgrind rule that omits + the "--leak-check=full" option to help spot more serious problems. + +2012-04-01 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * TODO.xgawk: Move ERRNO item into "done" section. + * awk.h (update_ERRNO, update_ERRNO_saved): Remove declarations. + (update_ERRNO_int, enum errno_translate, update_ERRNO_string, + unset_ERRNO): Add new declarations. + * eval.c (update_ERRNO_saved): Renamed to update_ERRNO_int. + (update_ERRNO_string, unset_ERRNO): New functions. + * ext.c (do_ext): Use new update_ERRNO_string function. + * io.c (ERRNO_node): Remove redundant extern declaration (in awk.h). + (after_beginfile, nextfile): Replace update_ERRNO() with + update_ERRNO_int(errno). + (inrec): Replace update_ERRNO_saved with update_ERRNO_int. + (do_close): Use new function update_ERRNO_string. + (close_redir, do_getline_redir, do_getline): Replace update_ERRNO_saved + with update_ERRNO_int. + +2012-03-27 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * TODO.xgawk: Update to reflect debate about how to support Cygwin + and other platforms that cannot link shared libraries with unresolved + references. + * awkgram.y (add_srcfile): Minor bug fix: reverse sense of test + added by Arnold in last patch. + * configure.ac: AC_DISABLE_STATIC must come before AC_PROG_LIBTOOL. + +2012-03-26 Arnold D. Robbins <arnold@skeeve.com> + + Some cleanups. + + * awkgram.y (add_srcfile): Use whole messages, better for + translations. + * io.c (init_awkpath): Small style tweak. + * main.c (path_environ): Straighten out initial comment, fix + compiler warning by making `val' const char *. + +2012-03-25 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * configure.ac (AC_DISABLE_STATIC): Add this to avoid building useless + static extension libraries. + +2012-03-25 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * TODO.xgawk: New file listing completed and pending xgawk enhancements. + +2012-03-24 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * io.c (path_info): Fix white space. + (pi_awkpath, pi_awklibpath): Avoid structure initializers. + (do_find_source): Eliminate pointless parentheses. + (find_source): Leave a space after "&". + * main.c (load_environ): Fix typo in comment. + +2012-03-21 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * awkgram.y (LEX_LOAD): New token to support @load. + (grammar): Add rules to support @load. + (tokentab): Add "load". + (add_srcfile): Improve error message to distinguish between source files + and shared libraries. + (load_library): New function to load libraries specified with @load. + (yylex): Add support for LEX_LOAD (treated the same way as LEX_INCLUDE). + +2012-03-20 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * Makefile.am (EXTRA_DIST): Remove extension. + (SUBDIRS): Add extension so libraries will be built. + (DEFS): Define DEFLIBPATH and SHLIBEXT so we can find shared libraries. + * awk.h (deflibpath): New extern declaration. + * configure.ac: Add support for building shared libraries by adding + AC_PROG_LIBTOOL and AC_SUBST for acl_shlibext and pkgextensiondir. + (AC_CONFIG_FILES): Add extension/Makefile. + * io.c (pi_awkpath, pi_awklibpath): New static structures to contain + path information. + (awkpath, max_pathlen): Remove static variables now inside pi_awkpath. + (init_awkpath): Operate on path_info structure to support both + AWKPATH and AWKLIBPATH. No need for max_path to be static, since + this should be called only once for each environment variable. + (do_find_source): Add a path_info arg to specify which path to search. + Check the try_cwd parameter to decide whether to search the current + directory (not desirable for AWKLIBPATH). + (find_source): Choose appropriate path_info structure based on value + of the is_extlib argument. Set EXTLIB_SUFFIX using SHLIBEXT define + instead of hardcoding ".so". + * main.c (path_environ): New function to add AWKPATH or AWKLIBPATH + to the ENVIRON array. + (load_environ): Call path_environ for AWKPATH and AWKLIBPATH. + 2012-06-19 Arnold D. Robbins <arnold@skeeve.com> * main.c (main): Do setlocale to "C" if --characters-as-bytes. @@ -127,6 +1169,113 @@ * debug.c: Ditto. * command.y: Ditto. Some minor whitespace and comments cleanup. +2012-04-24 Arnold D. Robbins <arnold@skeeve.com> + + io.c cleanup and some speedup for RS as regexp parsing. + + * awk.h (Regexp): New members has_meta and maybe_long. + (enum redirval): Add redirect_none as value 0. + (remaybelong): Remove function declaration. + * awkgram.y: Use redirect_none instead of 0 for no redirect cases. + * io.c (go_getline_redir): Second arg now of type enum redirval. + Changed intovar into into_variable. + (comments and whitespace): Lots of general cleanup. + (socket_open): readle changed to read_len. + (two_way_open): Add additional calls to os_close_on_exec. + (rsrescan): Simplify code a bit and use RS->maybe_long. + * re.c (make_regexp): Set up new members in Regexp struct. + (remaybelong): Remove function. + (reisstring): Simplified code. + +2012-04-16 Eli Zaretskii <eliz@gnu.org> + + * io.c (read_with_timeout) [__MINGW32__]: Just call the blocking + 'read', as 'select' is only available for sockets. + * mpfr.c (set_ROUNDMODE) [!HAVE_MPFR]: Renamed from set_RNDMODE. + * main.c (load_procinfo): Declare name[] also when HAVE_MPFR is + defined even though HAVE_GETGROUPS etc. are not. + +2012-04-12 John Haque <j.eh@mchsi.com> + + * array.c, awk.h, awkgram.y, builtin.c, command.y, debug.c, + field.c, mpfr.c, profile.c: Change RND_MODE to ROUND_MODE. + +2012-04-11 John Haque <j.eh@mchsi.com> + + * main.c (varinit): Change RNDMODE to ROUNDMODE. + +2012-04-11 Arnold D. Robbins <arnold@skeeve.com> + + * main.c: Change --arbitrary-precision to --bignum. + +2012-04-02 John Haque <j.eh@mchsi.com> + + Add support for arbitrary-precision arithmetic. + + * mpfr.c: New file. + * awk.h (struct exp_node): Add union to handle different number types. + (MPFN, MPZN): New flag values. + (DO_MPFR, do_mpfr): New defines. + (PREC_node, RNDMODE_node): Add declarations. + (PRECISION, RND_MODE, MNR, MFNR, mpzval, do_ieee_fmt): Add declarations. + (make_number, str2number, format_val, cmp_numbers): Ditto. + (force_number): Change definition. + (Func_pre_exec, Func_post_exec): New typedefs. + (POP_NUMBER, TOP_NUMBER): Change definitions. + (get_number_ui, get_number_si, get_number_d, get_number_uj, + iszero, IEEE_FMT, mpg_float, mpg_integer, mpg_float, + mpg_integer): New defines. + * awkgram.y (tokentab): Add alternate function entries for MPFR/GMP. + (snode): Choose the appropriate function. + (negate_num): New function to negate a number. + (grammar): Use it. + (yylex): Adjust number handling code. + * array.c (value_info, asort_actual, sort_user_func): Adjust for + MPFR/GMP numbers. + (do_adump, indent): Minor changes. + (sort_up_index_number, sort_up_value_number, sort_up_value_type): Use + cmp_numbers() for numeric comparisons. + * builtin.c (mpz2mpfr): New function. + (format_tree): Adjust to handle MPFR and GMP numbers. + * eval.c (register_exec_hook): New function to manage interpreter hooks. + (num_exec_hook, pre_execute, post_execute): New and adjusted definitions. + (h_interpret): Renamed from debug_interpret. + (init_interpret): Changed to use the new name. + (flags2str): New entries for MPFN and MPZN. + (cmp_nodes): Reworked to use seperate routine for numeric comparisons. + (set_IGNORECASE, set_BINMODE, set_LINT, update_NR, update_FNR, + update_NF): Adjust code and some cleanup. + * field.c (rebuild_record): Field copying code reworked to handle + MPFR/GMP numbers. + (set_NF): Minor adjustment. + * io.c (INCREMENT_REC): New macro. + (inrec, do_getline): Use the new macro. + (nextfile, set_NR, set_FNR, get_read_timeout, pty_vs_pipe): Adjust code + to handle MPFR/GMP numbers. + * interpret.h (r_interpret): Adjust TOP_NUMBER/POP_NUMBER usage. + (EXEC_HOOK): New macro and definition. + (DEBUGGING): Removed. + * main.c (DEFAULT_PREC, DEFAULT_RNDMODE): New defines. + (opttab): New entry for option arbitrary-precision. + (main): Handle the new option. + (usage): Add to usage message. + (varinit): Add PREC and RNDMODE. + (load_procinfo): Install MPFR and GMP related items. + (version): Append MPFR and GMP versions to message. + * msg.c (err) : Adjust FNR handling with MPFR/GMP. + * node.c (r_format_val): Renamed from format_val. + (r_force_number): Return NODE * instead of AWKNUM. + (make_number, str2number, format_val, cmp_numpers: Defined and initialized. + (r_unref): Free MPFR/MPZ numbers. + (get_numbase): Renamed from isnondecimal and return the base. + (cmp_awknums): New function to compare two AWKNUMs. + * command.y (yylex): Adjust number handling code. + (grammar): Minor adjustments to handle negative numbers. + * debug.c (init_debug): New function. + (do_info, do_set_var, watchpoint_triggered, serialize, + initialize_watch_item, do_watch, print_watch_item): Minor adjustments. + (debug_pre_execute): Adjusted to handle MPFR and GMP numbers. + 2012-04-09 Arnold D. Robbins <arnold@skeeve.com> * INSTALL, config.guess, config.sub, depcomp, install-sh, @@ -244,12 +1393,92 @@ * dfa.c: Sync with GNU grep. +2012-01-02 Arnold D. Robbins <arnold@skeeve.com> + + * io.c (Read_can_timeout, Read_timeout, Read_default_timeout): + Renamed to use lower case. + Other minor stylistic edits. + +2012-01-01 John Haque <j.eh@mchsi.com> + + * awk.h (struct iobuf): New entry read_func. + * io.c (Read_can_timeout, Read_timeout, Read_default_timeout): + New variables. + (init_io): New routine to initialize the variables. + (in_PROCINFO): New "clever" routine to parse elements with indices + seperated by a SUPSEP. + (get_read_timeout): New routine to read timeout value for an IOBUF. + (read_with_timeout): New routine to read from a fd with a timeout. + (pty_vs_pipe): Use in_PROCINFO(). + (get_a_record): Set the timeout value and the read routine as necessary. + * main.c (main): Call init_io(). + +2011-12-31 Arnold D. Robbins <arnold@skeeve.com> + + * profile_p.c: Remove the file. + * msg.c (err): Remove check for name being dgawk. + 2011-12-31 Arnold D. Robbins <arnold@skeeve.com> * awk.h [STREQ, STREQN]: Remove macros. * awkgram.y, builtin.c, command.y, debug.c, eval.c, io.c, msg.c: Change all uses to call strcmp, strncmp. +2011-12-28 Arnold D. Robbins <arnold@skeeve.com> + + * int_array.c, str_array.c: Fix some compiler warnings 32/64 + bit system differences. + +2011-12-26 John Haque <j.eh@mchsi.com> + + Merge gawk, pgawk and dgawk into a single executable gawk. + + * awk.h (DO_PRETTY_PRINT, DO_PROFILE, DO_DEBUG, + do_pretty_print, do_debug): New defines. + (interpret): New variable, a pointer to an interpreter routine. + (enum exe_mode): Nuked. + * main.c (opttab): New options --pretty-print and --debug; + Remove option --command. + (usage): Update usage messages. + * interpret.h: New file. + * eval.c (r_interpret): Move to the new file. + (debug_interpret): New interpreter routine when debugging. + (init_interpret): New routine to initialize interpreter related + variables. + * eval_d.c, eval_p.c: Delete files. + * debug.c (interpret): Renamed to debug_prog. + (DEFAULT_PROMPT, DEFAULT_HISTFILE, DEFAULT_OPTFILE): Remove prefix 'd'. + * profile.c (init_profiling): Nuked. + * Makefile.am: Adjusted. + + Add command line option --load for loading extensions. + + * awk.h (srctype): Add new source type SRC_EXTLIB. + * ext.c(load_ext): New routine to load extension. + (do_ext): Adjust to use load_ext(). + * main.c (opttab): Add new option --load. + (main): Call load_ext() to load extensions. + (usage): Add usage message for the new option. + * io.c (get_cwd): New routine. + (do_find_source): Use the new routine. + (find_source): Handle new type SRC_EXTLIB. + * awkgram.y (parse_program, next_sourcefile): Skip type SRC_EXTLIB. + (add_srcfile): Adjust call to find_source. + * debug.c (source_find): Same. + + Unrelated: + + * ext.c (get_argument): Fixed argument parsing. + * array.c (null_array_func): Reworked array routines for an empty array. + * str_array.c, int_array.c: Make GCC happy, use %u instead of %lu + printf formats. + * eval.c (node_Boolean): New array for TRUE and FALSE nodes. + (init_interpret): Create the new nodes. + (eval_condition): Add test for the new nodes. + (setup_frame): Disable tail-recursion optimization when profiling. + * interpret.h (r_interpret): Use the boolean nodes instead of making + new ones when needed. + 2011-12-26 Arnold D. Robbins <arnold@skeeve.com> Finish Rational Range Interpretation (!) @@ -309,6 +1538,14 @@ 2011-10-25 Arnold D. Robbins <arnold@skeeve.com> + Merge with gawk_performance branch done. Additionally: + + * cint_array.c, int_array.c, str_array.c: Fix compiler complaints + about printf formats (signed / unsigned vs. %d / %u). + * eval.c (setup_frame): Add a missing return value. + +2011-10-25 Arnold D. Robbins <arnold@skeeve.com> + * Makefile.am (dist-hook): Use `cd $(srcdir)/pc' so that `make distcheck' works completely. * builtin.c (do_strftime): Add cast to long int in check @@ -380,10 +1617,25 @@ (remap_std_file): Per Eli's suggestion, removed the leading close of oldfd and will let dup2 do the close for us. +2011-10-11 John Haque <j.eh@mchsi.com> + + * symbol.c: Add licence notice. + * array.c (PREC_NUM, PREC_STR): Define as macros. + 2011-10-09 Arnold D. Robbins <arnold@skeeve.com> * dfa.c: Sync with GNU grep. +2011-10-07 John Haque <j.eh@mchsi.com> + + Tail recursion optimization. + * awkgram.y (grammar, mk_function): Recognize tail-recursive + calls. + * awk.h (tail_call, num_tail_calls): New defines. + * eval.c (setup_frame): Reuse function call stack for + tail-recursive calls. + (dump_fcall_stack): Reworked. + 2011-10-04 Arnold D. Robbins <arnold@skeeve.com> * awk.h, main.c (gawk_mb_cur_max): Make it a constant 1 when @@ -420,10 +1672,113 @@ * dfa.c: Sync with GNU grep. +2011-09-08 John Haque <j.eh@mchsi.com> + + Optimization for compound assignment, increment and + decrement operators; Avoid unref and make_number calls + when there is no extra references to the value NODE. + 2011-09-03 Arnold D. Robbins <arnold@skeeve.com> * dfa.c: Sync with GNU grep. +2011-08-31 John Haque <j.eh@mchsi.com> + + Grammar related changes: Simplify grammar for user-defined + functions and general cleanups. + + * symbol.c: New file. + * awkgram.y: Move symbol table related routines to the + new file. + (rule, func_name, function_prologue, param_list): Reworked. + (install_function, check_params): Do all error checkings + for the function name and parameters before installing in + the symbol table. + (mk_function): Finalize function definition. + (func_install, append_param, dup_params): Nuked. + * symbol.c (make_params): allocate function parameter nodes + for the symbol table. Use the hash node as Node_param_list; + Saves a NODE for each parameter. + (install_params): Install function parameters into the symbol + table. + (remove_params): Remove parameters out of the symbol table. + * awk.h (parmlist, FUNC): Nuked. + (fparms): New define. + + + Dynamically loaded function parameters are now handled like + those for a builtin. + + * awk.h (Node_ext_func, Op_ext_builtin): New types. + (Op_ext_func): Nuked. + * ext.c (make_builtin): Simplified. + (get_curfunc_arg_count): Nuked; Use the argument 'nargs' of + the extension function instead. + (get_argument, get_actual_argument): Adjust. + * eval.c (r_interpret): Update case Op_func_call for a dynamic + extension function. Handle the new opcode Op_ext_builtin. + * pprint (profile.c): Adjust. + + + Use a single variable to process gawk options. + + * awk.h (do_flags): New variable. + (DO_LINT_INVALID, DO_LINT_ALL, DO_LINT_OLD, DO_TRADITIONAL, + DO_POSIX, DO_INTL, DO_NON_DEC_DATA, DO_INTERVALS, + DO_PROFILING, DO_DUMP_VARS, DO_TIDY_MEM, + DO_SANDBOX): New defines. + (do_traditional, do_posix, do_intervals, do_intl, + do_non_decimal_data, do_profiling, do_dump_vars, + do_tidy_mem, do_sandbox, do_lint, + do_lint_old): Defined as macros. + * main.c: Remove definitions of the do_XX variables. Add + do_flags definition. + * debug.c (execute_code, do_eval, parse_condition): Save + do_flags before executing/parsing and restore afterwards. + + + Nuke PERM flag. Always increment/decrement the reference + count for a Node_val. Simplifies macros and avoids + occassional memory leaks, specially in the debugger. + + * awk.h (UPREF, DEREF, dupnode, unref): Simplified. + (mk_number): Nuked. + * (*.c): Increment the reference count of Nnull_string before + assigning as a value. + + + Revamped array handling mechanism for more speed and + less memory consumption. + + * awk.h (union bucket_item, BUCKET): New definitions. Used as + bucket elements for the hash table implementations of arrays; + 40% space saving in 32 bit x86. + (buckets, nodes, array_funcs, array_base, array_capacity, + xarray, alookup, aexists, aclear, aremove, alist, + acopy, adump, NUM_AFUNCS): New defines. + (array_empty): New macro to test for an empty array. + (assoc_lookup, in_array): Defined as macros. + (enum assoc_list_flags): New declaration. + (Node_ahash, NUMIND): Nuked. + * eval.c (r_interpret): Adjust cases Op_subscript, + Op_subscript_lhs, Op_store_var and Op_arrayfor_incr. + * node.c (dupnode, unref): Removed code related to Node_ahash. + * str_array.c: New file to handle array with string indices. + * int_array.c: New file to handle array with integer indices. + * cint_array.c: New file. Special handling of arrays with + (mostly) consecutive integer indices. + + + Memory pool management reworked to handle NODE and BUCKET. + + * awk.h (struct block_item, BLOCK, block_id): New definitions. + (getblock, freeblock): New macros. + (getbucket, freebucket): New macros to allocate and deallocate + a BUCKET. + (getnode, freenode): Adjusted. + * node.c (more_nodes): Nuked. + (more_blocks): New routine to allocate blocks of memory. + 2011-08-24 Arnold D. Robbins <arnold@skeeve.com> Fix pty co-process communication on Ubuntu GNU/Linux. @@ -556,6 +1911,19 @@ * pprint (profile.c): Add case for the new opcode. * print_instruction (debug.c): Ditto. + Take out translation for errno strings; extensions will + need to use their own domain. + + * awk.h (enum errno_translate): Removed. + (update_ERRNO_string): Remove second translate paramater. + * eval.c (update_ERRNO_string): Remove second translate paramater + and code that used it. + * gawkapi.h (api_update_ERRNO_string): Remove third translate + parameter. + * gawkapi.c (api_update_ERRNO_string): Remove third translate + paramater and change call to update_ERRNO_string. + * io.c (do_close): Fix call to update_ERRNO_string. + 2011-07-15 Arnold D. Robbins <arnold@skeeve.com> * awk.h: Typo fix: "loner" --> longer. Thanks to Nelson Beebe. |