Savannah Git Hosting - m4.git/log
Eric Blake [2008年3月13日 19:48:49 +0000 (13:48 -0600)]
Stage 19b: invert sense of bit for handling builtin tokens.
* m4/m4module.h (M4BUILTIN_ENTRY): New convenience macro.
(M4_BUILTIN_GROKS_MACRO): Rename...
(M4_BUILTIN_FLATTEN_ARGS): ...and invert sense.
(m4_symbol_value_groks_macro, m4_symbol_groks_macro): Likewise...
(m4_symbol_value_flatten_args, m4_symbol_flatten_args): ...to
this.
* m4/m4private.h (VALUE_MACRO_ARGS_BIT)
(m4_symbol_value_groks_macro): Likewise...
(VALUE_FLATTEN_ARGS_BIT, m4_symbol_value_flatten_args): ...to
this.
* m4/symtab.c (m4_symbol_value_groks_macro): Likewise...
(m4_symbol_value_flatten_args): ...to this.
* m4/macro.c (collect_arguments): Accomodate changed sense.
* m4/module.c (m4__module_open): Require arguments if flattening
is requested.
* m4/input.c (m4_push_string_finish): For now, flatten all
builtins pushed as back-references.
* modules/gnu.c (m4_builtin_table, builtin): Adjust all clients.
* modules/import.c (m4_builtin_table): Likewise.
* modules/load.c (m4_builtin_table): Likewise.
* modules/modtest.c (m4_builtin_table): Likewise.
* modules/mpeval.c (m4_builtin_table): Likewise.
* modules/perl.c (m4_builtin_table): Likewise.
* modules/shadow.c (m4_builtin_table): Likewise.
* modules/stdlib.c (m4_builtin_table): Likewise.
* modules/time.c (m4_builtin_table): Likewise.
* modules/m4.c (m4_builtin_table): Likewise.
(mkstemp): Undo #undef hack from 2006年10月23日, now that macro names
are stringized without preprocessor expansion.
* doc/m4.texinfo (Defn): Update comments to match reality.
(Debuglen): Update test now that user macros pass builtin tokens.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年3月13日 19:43:15 +0000 (13:43 -0600)]
Stage 19a: sort and cache builtins loaded by a module.
* m4/m4module.h (m4_set_symbol_value_builtin): Delete. Use
m4_builtin_find_by_* instead.
(m4_builtin_find_by_func): Change return type.
* m4/m4private.h (m4__builtin): New struct.
(m4_module): Add sorted list of loaded builtins.
(struct m4_symbol_value): Change type of builtin value.
(m4__set_symbol_value_builtin): New prototype and fast accessor.
(m4_get_symbol_value_func, m4_get_symbol_value_builtin): Adjust to
new field type.
* m4/symtab.c (m4_set_symbol_value_builtin): Rename...
(m4__set_symbol_value_builtin): ...and populate additional fields,
based on new type.
(m4_get_symbol_value_func, m4_get_symbol_value_builtin): Adjust to
new field type.
* m4/module.c (install_builtin_table): Use cached table.
(compare_builtin_CB): New helper function.
(m4__module_open): Populate table.
(module_remove): Free table.
* m4/builtin.c (compare_builtin_name_CB): New helper function.
(m4_builtin_find_by_name): Rewrite to use sorted table.
(m4_builtin_find_by_func): Change return type.
* m4/input.c (struct m4_input_block): Simplify u_b, since most
fields can be determined from builtin.
(builtin_peek, builtin_read, builtin_unget, init_builtin_token)
(m4__next_token): Alter parsing so that only init_builtin_token
consumes a builtin.
(builtin_print, m4_push_builtin): Adjust all users.
* tests/macros.at (Arity, defn, and freeze): Fix typo.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年3月13日 18:06:23 +0000 (12:06 -0600)]
Consistently cast malloc results, for C++ compilation.
* m4/builtin.c (m4_builtin_find_by_name): Add cast.
* m4/hash.c (m4_hash_new, m4_get_hash_iterator_next, node_new)
(m4_hash_resize, maybe_grow): Likewise.
* m4/m4.c (m4_create): Likewise.
* m4/macro.c (expand_macro): Likewise.
* m4/output.c (m4_tmpname): Likewise.
* m4/path.c (search_path_add): Likewise.
* m4/symtab.c (m4_symtab_create, m4_symbol_value_create)
(symtab_fetch): Likewise.
* m4/syntax.c (m4_syntax_create): Likewise.
* modules/gnu.c (regexp_compile): Likewise.
* src/main.c (main): Likewise.
* src/freeze.c (reload_frozen_state): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Fri, 7 Mar 2008 03:56:44 +0000 (20:56 -0700)]
Fix nested builtin(`shift',$@) regression from 2008年02月23日.
* m4/macro.c (make_argv_ref): Don't output expansion text when
making wrapper for builtin or indir.
* tests/builtins.at (builtin): New test.
* NEWS: Document the fix.
Reported by Andreas Schwab.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Wed, 5 Mar 2008 00:22:55 +0000 (17:22 -0700)]
The gnulib module free was deprecated.
* ltdl/m4/gnulib-cache.m4: Remove free module.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年2月29日 15:28:17 +0000 (08:28 -0700)]
Import news from 1.4.10b.
* NEWS: Update from branch.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年2月23日 02:54:48 +0000 (19:54 -0700)]
Stage 18: try harder to reuse argv in recursion.
* m4/macro.c (make_argv_ref): Avoid wrapping $@ when possible.
(m4_push_args): Let make_argv_ref take care of pending data.
* doc/m4.texinfo (Improved foreach): Tweak wording to match new
performance capability.
* tests/others.at (recursion): Add tests to avoid performance
regression.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年2月22日 19:57:57 +0000 (12:57 -0700)]
Update NEWS.
* NEWS: Document change to __gnu__ on 2008年02月11日.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年2月22日 12:43:04 +0000 (05:43 -0700)]
Stage 17: pass argv through quoted strings.
* m4/m4module.h (m4_arg_equal, m4_arg_len): Add parameter.
(M4ARGLEN): Adjust definition.
* m4/m4private.h (struct m4__symbol_chain): Add has_func member.
(struct m4_symbol_value): Add wrapper and has_func members.
(struct m4_macro_args): Add flatten and has_func members.
* m4/input.c (append_quote_token): Return argv refs inside quoted
strings.
(init_argv_symbol): Populate new fields.
* m4/macro.c (expand_argument, collect_arguments, make_argv_ref)
(m4_make_argv_ref): Likewise.
(arg_symbol, arg_mark, m4_is_arg_text, m4_is_arg_func): Use new
fields.
(m4_arg_equal, m4_arg_len): Handle quoted argv references, and add
new parameter.
* modules/m4.c (ifelse): Adjust caller.
Signed-off-by: Eric Blake <ebb9@byu.net>
Fix regression in argument collection, from 2008年01月21日.
* m4/input.c (m4__next_token): When DEBUG_INPUT is defined,
undo argument collection optimisation for strings, so that
m4_print_token doesn't abort when it otherwise receives an
unprintable M4_SYMBOL_VOID type token.
Eric Blake [2008年2月21日 04:37:30 +0000 (21:37 -0700)]
Stage 16: cache quotes and improve m4_arg_print.
* m4/m4module.h (m4_symbol_value_print, m4_symbol_print)
(m4_arg_print): Adjust prototypes.
(m4_dump_args): Delete.
(m4_push_wrapup): Split...
(m4_push_wrapup_init, m4_push_wrapup_finish): ...into these
prototypes.
* m4/m4private.h (struct m4_syntax_table): Add cached_quote
member.
(m4__quote_cache, m4__quote_uncache): New prototypes.
* m4/syntax.c (m4_syntax_create): Initialize the cache.
(m4__quote_cache): New function.
(m4_set_syntax): Update caller.
* m4/symtab.c (m4_symbol_value_print): Add parameter.
(m4_symbol_print, dump_symbol_CB): Adjust all callers.
* m4/utility.c (m4_dump_args): Delete; callers should use
m4_arg_print instead.
* m4/input.c (m4_push_wrapup_init, m4_push_wrapup_finish): Split
implementation, and allow embedded NUL.
(m4_print_token, pop_input, composite_print, composite_peek):
(composite_read, append_quote_token): Adjust all callers.
* m4/macro.c (trace_prepre, m4_arg_text, make_argv_ref):
Likewise.
(m4_arg_print): Add parameters.
(trace_pre): Rewrite in terms of m4_arg_print.
* modules/m4.c (errprint): Likewise.
(m4wrap): Rewrite to allow embedded NUL.
(dumpdef): Adjust caller.
* doc/m4.texinfo (Debuglen): Enhance debuglen test.
* tests/null.m4: Test for NUL in m4wrap.
* tests/null.out: Update expected output.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年2月21日 03:07:14 +0000 (20:07 -0700)]
Revert accidental checkin from previous patch.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年2月21日 00:11:02 +0000 (17:11 -0700)]
Fix out-of-bounds read for sanitized macro names, from 2008年02月06日.
* m4/utility.c (m4_verror_at_line): Properly terminate the string.
Reported by Ralf Wildenhues.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年2月20日 14:57:41 +0000 (07:57 -0700)]
* doc/m4.texinfo (Debuglen, Changesyntax): Fix typos.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年2月19日 19:18:05 +0000 (12:18 -0700)]
Clean up example on filtering defined symbols.
* doc/m4.texinfo (Foreach, Improved foreach): Document another
shortcoming in foreach.m4, and improve filter example by using
foreach2.m4.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年2月19日 15:59:45 +0000 (08:59 -0700)]
* src/main.c (usage): Fix typo.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年2月18日 13:24:08 +0000 (06:24 -0700)]
Avoid some magic numbers.
* m4/m4private.h (CHAR_EOF, CHAR_BUILTIN, CHAR_QUOTE, CHAR_ARGV)
(CHAR_RETRY): Define in terms of UCHAR_MAX.
* m4/syntax.c (m4_syntax_create, set_syntax_set)
(reset_syntax_set, check_is_single_quotes)
(check_is_single_comments, check_is_macro_escaped)
(m4_set_quotes, m4_set_comment): Likewise.
* modules/gnu.c (regexp_compile): Likewise.
* modules/m4.c (translit): Likewise.
* src/freeze.c (produce_syntax_dump): Likewise.
Reported by Ralf Wildenhues.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年2月16日 21:39:41 +0000 (14:39 -0700)]
Add regression test for multi-character quote recursion.
* examples/foreach2.m4: Use 0ドル rather than spelling out name.
* examples/foreachq2.m4: Likewise.
* examples/forloop2.m4: Likewise.
* examples/hanoi.m4: Likewise.
* examples/trace.m4: Likewise.
* doc/m4.texinfo (Improved forloop): Document advantage of 0ドル.
(Improved foreach): Adjust dump from file.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年2月16日 05:12:03 +0000 (22:12 -0700)]
Stage 15: return argv refs back to collect_arguments.
* m4/m4private.h (CHAR_ARGV): New input engine sentinel.
(enum m4__token_type): Add M4_TOKEN_ARGV.
(struct m4__symbol_chain): Add skip_last member to argv link.
(m4__next_token): Add parameter.
* m4/input.c (peek_char, file_peek, builtin_peek, string_peek)
(composite_peek, m4__next_token): Add new parameter.
(composite_read, append_quote_token): Support argv in quotes.
(init_argv_symbol): New function.
(m4__push_symbol, match_input, consume_syntax)
(m4__next_token_is_open, m4_print_token): Adjust callers.
* m4/macro.c (m4_macro_expand_input, m4__arg_adjust_refcount)
(arg_mark, m4_arg_text, make_argv_ref): Likewise.
(expand_argument, collect_arguments): Handle new token.
(arg_symbol): Drill through $@ reference.
* m4/syntax.c (set_quote_age): Detect disabled comments.
* m4/symtab.c (dump_symbol_CB) [DEBUG_SYM]: Fix debug code.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年2月15日 23:46:50 +0000 (16:46 -0700)]
* modules/gnu.c (regexp_compile): Use a fastmap for regex speed.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年2月14日 02:02:33 +0000 (19:02 -0700)]
Fix texinfo grammar.
* doc/m4.texinfo (Eval, Incompatibilities): Use @. after capital.
(History): Use @: after abbreviations.
(M4exit): Use correct Latin abbreviation.
(Dumpdef, Debugmode, Frozen file format 2): Use correct spacing
between sentences.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年2月11日 14:14:20 +0000 (07:14 -0700)]
Allow builtin text macros to specify number of arguments.
* m4/m4module.h (struct m4_macro): Add argument limits to builtin
text macros.
* m4/module.c (install_macro_table): Allow text macros to warn on
extra arguments.
* modules/gnu.c (m4_macro_table): Update all clients.
* modules/load.c (m4_macro_table): Likewise.
* modules/mpeval.c (m4_macro_table): Likewise.
* modules/perl.c (m4_macro_table): Likewise.
* modules/shadow.c (m4_macro_table): Likewise.
* modules/traditional.c (m4_macro_table): Likewise.
* modules/modtest.c (m4_macro_table): Likewise. Also add text
macros, for testing this.
* doc/m4.texinfo (Standard Modules): Update text, and enhance
test.
* tests/modules.at (modules: text): New test.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年2月11日 18:32:12 +0000 (11:32 -0700)]
Fix regression in command line -D option, from 2006年08月25日.
* m4/m4private.h (m4_symbol_value_create): Delete fast accessor.
* m4/m4module.h: Fix typo.
* m4/symtab.c (m4_symbol_value_create): Prime the maximum number
of arguments.
* tests/macros.at (Command line define): Enhance test.
* tests/others.at (nul character): Enhance test.
* tests/null.m4: Likewise.
* tests/null.out: Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年2月11日 18:19:18 +0000 (11:19 -0700)]
Use gnulib's git-merge-changelog driver when available.
* .gitattributes: Add merge attributes for ChangeLog.
* bootstrap: Install driver, if not already present.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Wed, 6 Feb 2008 19:01:29 +0000 (12:01 -0700)]
Fix security hole introduced 2007年11月23日.
* m4/utility.c (m4_verror_at_line): Properly escape macro names.
* src/main.c (main): Manage quoteargs defaults.
* doc/m4.texinfo (Indir): Document and test this.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Wed, 6 Feb 2008 18:17:29 +0000 (11:17 -0700)]
Using raw strtod is not portable.
* ltdl/m4/gnulib-cache.m4: Import the strtod module.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Sat, 2 Feb 2008 21:55:08 +0000 (14:55 -0700)]
Consistently use size_t for number of arguments.
* m4/m4module.h (m4_builtin_func): Alter prototype.
(struct m4_builtin): Adjust type of min_args, max_args.
(M4BUILTIN, M4BUILTIN_HANDLER): Adjust all builtins.
(m4_bad_argc, m4_dump_args, m4_macro_call, m4_arg_argc)
(m4_arg_symbol, m4_is_arg_text, m4_is_arg_func, m4_arg_text)
(m4_arg_equal, m4_arg_empty, m4_arg_len, m4_arg_func)
(m4_arg_print, m4_push_arg): Adjust all clients.
* m4/m4private.h (struct m4__symbol_chain, m4_symbol_value)
(m4_macro_args): Adjust type of various fields.
(m4__push_arg_quote): Adjust all clients.
* m4/input.c (m4_pop_wrapup): Likewise.
* m4/macro.c (m4_macro_call, trace_pre, make_argv_ref)
(arg_symbol, m4_arg_symbol, m4_is_arg_text, m4_is_arg_func)
(m4_arg_text, m4_arg_equal, m4_arg_empty, m4_arg_len)
(m4_arg_func, m4_arg_print, m4_make_argv_ref, m4_push_arg)
(m4__push_arg_quote, m4_push_args, m4_arg_argc): Likewise.
* m4/utility.c (m4_bad_argc, m4_dump_args): Likewise.
* modules/evalparse.c (m4_evaluate): Likewise.
* modules/gnu.c (changesyntax): Likewise.
* modules/m4.c (m4_dump_symbols, undefine, popdef, ifelse, defn)
(undivert, traceon, traceoff): Likewise.
* modules/m4.h (m4_dump_symbols_func): Likewise.
* modules/perl.c (perleval): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Sat, 2 Feb 2008 14:34:08 +0000 (07:34 -0700)]
Stage 14b: allow pushing argv references.
* m4/m4private.h (struct m4__symbol_chain): Add comma and quotes
fields.
(struct m4_macro_args): Add level field.
(m4__arg_adjust_refcount, m4__push_arg_quote): New prototypes.
* m4/input.c (m4__push_symbol, composite_peek, composite_read)
(composite_unget, composite_clean, composite_print): Support $@
refs.
* m4/macro.c (collect_arguments): Populate new field.
(expand_macro): Move argv cleanup...
(m4__arg_adjust_refcount): ...to this new function.
(m4_arg_symbol, m4_make_argv_ref, m4_push_arg): Factor...
(arg_symbol, make_argv_ref, m4__push_arg_quote): ...to these new
helper functions, to add parameters.
(m4_push_args): Adjust caller.
* m4/symtab.c (m4_symbol_value_print): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Sat, 2 Feb 2008 14:33:34 +0000 (07:33 -0700)]
Stage 14a: allow printing argv references.
* m4/m4module.h (m4_arg_print): New prototype.
(m4_symbol_value_print): Alter prototype.
* m4/input.c (struct input_funcs): Add parameter to peek_func.
(file_peek, builtin_peek, string_peek): Ignore new parameter.
(composite_peek): Ignore new parameter, for now.
(composite_clean, pop_input): Rework to minimize indirection, and
to avoid infinite recursion in next patch.
* m4/macro.c (trace_prepre, trace_pre): Adjust callers.
(m4_arg_print): New function.
* m4/symtab.c (m4_symbol_value_print): Update signature.
(m4_symbol_print): Update caller.
* m4/output.c (m4_shipout_string_trunc): Update comments.
* m4/syntax.c (set_quote_age): Require comma as argument separator
when dealing with $@ as a unit.
* tests/builtins.at (ifelse): Augment test.
* doc/m4.texinfo (Changesyntax): Document changesyntax deficiency.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Fri, 1 Feb 2008 05:22:32 +0000 (22:22 -0700)]
Kill hack for M4 1.4.4.
* configure.ac (AM_GNU_GETTEXT_INTL_SUBDIR): Delete, now that
we require new enough autoconf which in turn requires M4 1.4.5.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Fri, 1 Feb 2008 04:44:38 +0000 (21:44 -0700)]
Depend on new libtool to use non-recursive build.
* configure.ac (LT_PREREQ): Bump to alpha release version.
(LTDL_INIT): Choose nonrecursive mode. Perform sanity check that
installed libtool has correct symbols.
* Makefile.am (SUBDIRS): Drop ltdl, now that it is built from the
top level.
(AM_CPPFLAGS): Drop directories covered by libtool.
(AM_LDFLAGS): Drop -no-undefined, covered by libtool.
(include_HEADERS, noinst_LTLIBRARIES, EXTRA_LTLIBRARIES): New
macros, used by libtool.
(lib_LTLIBRARIES): Also used by libtool.
(ltdl/libltdlc.la): Delete, now that libtool does this.
* bootstrap: Mention new requirements.
(LIBTOOLIZE): Provide default program, and run libtoolize prior to
autoreconf.
(autoreconf): Also neutralize libtoolize, since it is run early.
* HACKING: Mention updated prerequisites.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Fri, 1 Feb 2008 04:35:27 +0000 (21:35 -0700)]
Fix whitespace.
Signed-off-by: Eric Blake <ebb9@byu.net>
Fix build failure if installed libltdl is used.
* Makefile.am (m4_libm4_la_DEPENDENCIES): Use $(LTDLDEPS).
Eric Blake [2008年1月28日 15:03:16 +0000 (08:03 -0700)]
Depend on newer autoconf, for testsuite -C dir.
* Makefile.am (CD_TESTDIR): Delete, no longer required.
(check-local, installcheck-local, clean-local-tests): Use new -C
option from autotest.
* configure.ac (AC_PREREQ): Bump to 2.61a.347.
* bootstrap: Mention new dependency.
* HACKING: Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年1月27日 04:39:25 +0000 (21:39 -0700)]
Stage 13: push composite text tokens.
* m4/m4private.h (m4__push_symbol): Adjust prototype.
* m4/input.c (m4__push_symbol): Add parameter, and support
composite tokens.
(append_quote_token): Add parameter, and support inlining of short
text.
(m4__next_token): Adjust caller.
* m4/macro.c (m4_push_arg, m4_push_args): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年1月26日 07:08:48 +0000 (00:08 -0700)]
Stage 12c: add macro for m4_arg_len.
* m4/m4module.h (M4ARGLEN): New macro.
* m4/macro.c (process_macro): Adjust all callers.
* m4/utility.c (m4_dump_args): Likewise.
* modules/m4.c (divert, maketemp, mkstemp, m4wrap, len, index)
(substr): Likewise.
* modules/gnu.c (builtin, indir, mkdtemp, patsubst, regexp)
(renamesyms): Likewise.
* modules/stdlib.c (setenv): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年1月26日 06:49:38 +0000 (23:49 -0700)]
Stage 12b: add m4_string_pair.
* m4/m4module.h (m4_string_pair): New type.
(m4_get_syntax_quotes, m4_get_syntax_comments): New prototypes.
(m4_symbol_value_print, m4_symbol_print, m4_shipout_string_trunc):
Alter signature.
* m4/m4private.h (struct m4_string): Delete.
(struct m4_syntax_table): Combine quote and comment members.
(m4_get_syntax_lquote, m4_get_syntax_rquote, m4_get_syntax_bcomm)
(m4_get_syntax_ecomm): Adjust accessors.
(m4_get_syntax_quotes, m4_get_syntax_comments): New fast
accessors.
* m4/symtab.c (m4_symbol_value_print, m4_symbol_print):
Alter signatures.
* m4/input.c (string_print, composite_print, m4_input_print):
All callers updated.
* m4/syntax.c (m4_syntax_delete, m4_set_syntax)
(check_is_single_quotes, m4_set_quotes, set_quote_age)
(m4_get_syntax_lquote, m4_get_syntax_rquote)
(m4_get_syntax_quotes, check_is_single_comments, m4_set_comment)
(m4_get_syntax_bcomm, m4_get_syntax_ecomm)
(m4_get_syntax_comments): Likewise.
* m4/macro.c (trace_prepre, trace_pre, m4_push_args): Likewise.
* m4/output.c (m4_shipout_string, m4_shipout_string_trunc):
Likewise.
* modules/m4.c (dumpdef, m4_make_temp): Likewise.
* src/freeze.c (produce_frozen_state): Likewise.
* tests/freeze.at (reloading unknown builtin): Update test.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年1月26日 05:45:17 +0000 (22:45 -0700)]
Stage 12a: make m4_symbol_chain a union.
* m4/m4private.h (enum m4__symbol_chain_type): New enum.
(struct m4_symbol_chain): Rename...
(struct m4__symbol_chain): ...to this, since it is internal.
* m4/symtab.c (m4_symbol_value_copy, m4_symbol_value_print): All
callers updated.
* m4/input.c (struct m4_input_block, m4__push_symbol)
(composite_peek, composite_read, composite_unget)
(composite_clean, m4__make_text_link, append_quote_token): Likewise.
* m4/macro.c (expand_macro, arg_mark, m4_arg_symbol, m4_arg_text)
(m4_arg_equal, m4_arg_len, m4_make_argv_ref, m4_push_arg)
(m4_push_args): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年1月24日 01:10:40 +0000 (18:10 -0700)]
Adjust to recent libtool interface change.
* configure.ac (LT_PREREQ): Require bleeding-edge libtool.
(LT_WITH_LTDL): Delete, now that it is obsolete.
(LTDL_INIT): Use new libtool macro.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年1月22日 20:35:00 +0000 (13:35 -0700)]
Rely on newer automake.
* configure.ac (AM_INIT_AUTOMAKE): Require 1.10.1, and add lzma
distribution.
* bootstrap: Update automake requirement.
(func_version): Fix --version output, broken since 2007年08月06日.
* HACKING: Likewise. Add lzma requirement.
* Makefile.am (clean-local-src): Not needed any more with newest
Automake.
(clean-local): Adjust.
* TODO: Remove completed item.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年1月22日 18:53:46 +0000 (11:53 -0700)]
Doc tweak.
* doc/m4.texinfo (Renamesyms): Avoid underfull hbox, and improve
example.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年1月21日 19:04:45 +0000 (12:04 -0700)]
Stage 11: full circle for single argument references.
Pass quoted strings through to argument collection in a single
action, so that an argument can be reused throughout macro
recursion if it remains unchanged.
Memory impact: noticeable improvement, due to more reuse in
argument collection stacks.
Speed impact: noticeable improvement, due to less copying.
* m4/m4module.h (m4_arg_text): Add parameter.
(M4ARG): Adjust.
* m4/m4private.h (CHAR_QUOTE): New input engine sentinel.
(m4__make_text_link): New prototype.
(struct m4_symbol_chain): Add quote_age member.
(struct m4_symbol_value): Add end member to chained symbol.
(struct m4_macro_args): Add wrapper member.
* m4/symtab.c (m4_symbol_value_print): Print composite tokens.
(m4_symbol_value_copy, m4_symbol_value_delete): Recognize
composite tokens.
* m4/input.c (make_text_link): Rename...
(m4__make_text_link): ...to this, and export.
(m4_push_string_finish): Adjust caller.
(make_text_link, m4__push_symbol): Update new field.
(file_read, builtin_read, string_read, composite_read, next_char):
Add parameter.
(m4_skip_line, match_input, consume_syntax): Adjust callers.
(append_quote_token): New function.
(m4__next_token): Pass quoted strings onto argument collection.
(m4_print_token) [DEBUG_INPUT]: Update.
* m4/macro.c (expand_argument): Collect composite arguments.
(collect_arguments): Update new field.
(expand_macro): Reduce ref-count of back-references after use.
(arg_mark, m4_arg_symbol, m4_make_argv_ref): Adjust to new member
names.
(m4_is_arg_text): Also recognize composite symbols as text.
(m4_arg_text, m4_arg_len): Merge composite symbols as needed.
(m4_arg_equal): Compare composite symbols.
(m4_push_arg, m4_push_args): Handle composite symbols.
(m4_arg_symbol): Relax assertion.
(process_macro): Use single-argument references.
* m4/output.c (m4_shipout_string_trunc): Update comment.
* tests/macros.at (Rescanning macros): Augment test.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年1月16日 14:28:32 +0000 (07:28 -0700)]
Stage 10: avoid extra copying of strings and comments.
* ltdl/m4/gnulib-cache.m4: Import intprops and vasnprintf-posix
modules.
* m4/m4private.h (m4__token_type): Adjust prototype.
* m4/input.c (m4__next_token): Support new parameter.
* m4/macro.c (m4_macro_expand_input, expand_token)
(expand_argument, collect_arguments): Adjust callers.
* modules/m4.c (ntoa): Tighten buffer size.
* m4/output.c (m4_tmpname): Guarantee no buffer overflow.
* modules/format.c (arg_int, arg_long, arg_double): New helper
functions, to detect overflow or unparsed characters.
(ARG_INT, ARG_LONG, ARG_STR, ARG_DOUBLE): Adjust to check for
missing or excess arguments.
(format): Likewise, and also output directly into obstack if there
is room.
* doc/m4.texinfo (History): Update for new year.
(Format): Test for new warnings.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年1月15日 04:55:45 +0000 (21:55 -0700)]
* TODO: Update with some newer URLs.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2008年1月15日 04:43:02 +0000 (21:43 -0700)]
Verify linear `index'.
* tests/builtins.at (index): New test.
(translit): Make test take longer, to make quadratic algorithms
more apparent.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Wed, 9 Jan 2008 16:37:50 +0000 (09:37 -0700)]
Give better summaries of StageN patches in ChangeLog.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2007年12月20日 17:56:29 +0000 (10:56 -0700)]
Stage 9: share rather than copy single-arg refs.
* ltdl/m4/gnulib-cache.m4: Import memmem and quote modules.
* m4/m4module.h (m4_arg_scratch): New prototype.
* m4/m4private.h (m4__push_symbol): Add parameter.
(m4_arg_scratch): Add fast accessor.
(struct m4): Add expansion_level member, taken...
* m4/macro.c (expansion_level): ...from here. Adjust all users.
(expand_argument): Minor cleanup.
(expand_macro): Track scratch space per macro call.
(m4_arg_scratch): New function.
(m4_make_argv_ref): Call new function.
(m4_push_arg): Push reference to 0ドル.
(m4_push_args): Rework separator usage, since separators will
usually be inlined.
(process_macro): Allow embedded NUL.
* m4/input.c (INPUT_INLINE_THRESHOLD): New define.
(m4__push_symbol): Add parameter. Inline short strings, and save
references through rescanning.
* m4/symtab.c (m4_set_symbol_value_text): Weaken assertion.
* modules/m4.c (errprint, index): Handle NUL transparently.
(dumpdef, translit): Use scratch space, rather than expansion
stack.
* modules/gnu.c (renamesyms, m4symbols): Likewise.
* tests/others.at (nul character): New test.
(iso8859): Quote absolute file name, remove XFAIL.
* tests/iso8859.m4: Avoid raw NUL in output.
* tests/null.m4: New file.
* tests/null.out: Likewise.
* tests/null.err: Likewise.
* Makefile.am (OTHER_FILES): Distribute new files.
* .gitattributes: Treat new files as text.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2007年12月17日 16:28:39 +0000 (09:28 -0700)]
Stage 8: extend life of references into argv.
* m4/system_.h (obstack_regrow): Delete.
* m4/m4private.h (struct m4_symbol_chain): Add level field.
(m4__push_symbol): Adjust prototype.
(m4__adjust_refcount): New prototype.
(DEBUG_MACRO) [DEBUG]: New debug control.
(struct m4__macro_arg_stacks): New structure.
(struct m4): Add arg_stacks, stacks_count fields.
* m4/m4module.h (m4_make_argv_ref): Add parameter.
* m4/macro.c (argc_stack, argv_stack): Delete, replaced by
context->arg_stacks.
(m4_macro_expand_input) [DEBUG_MACRO]: Add debug hooks,
conditional on M4_DEBUG_MACRO envvar.
(collect_arguments): Adjust signature.
(expand_macro): Rework obstack handling.
(m4__adjust_refcount, arg_mark): New functions.
(m4_make_argv_ref): Populate new field.
(m4_push_arg, m4_push_args): Track inuse.
(process_macro): One less cast.
* m4/m4.c (m4_delete): Clean up arg_stacks.
* m4/input.c (make_text_link): Use new field.
(m4__push_symbol, file_clean): Update signature.
(composite_read): Bump refcount when done with reference.
(composite_clean): New function.
(pop_input): Adjust caller.
* m4/debug.c (m4_debug_message): Make assertion match comment.
* modules/gnu.c (builtin, indir): Adjust callers.
* tests/builtins.at (ifelse): New test.
(exp): Move and rename...
* tests/others.at (countdown): ...to this.
* doc/m4.texinfo (Improved foreach): Fix tracing usage in
example.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2007年12月13日 18:47:55 +0000 (11:47 -0700)]
Yet more rewording.
* doc/m4.texinfo (Inhibiting Invocation): Missed one instance in
the previous patch.
Signed-off-by: Eric Blake <ebb9@byu.net>
(cherry picked from commit
da38cc2a2e8272f41366ed87aee5abe64e81c3f9)
Eric Blake [2007年12月13日 17:53:26 +0000 (10:53 -0700)]
Eric Blake [2007年12月11日 16:36:08 +0000 (09:36 -0700)]
Stage 7: use chained input support in input parser.
* m4/m4private.h (m4__push_symbol): New prototype.
(struct m4_symbol_chain): Add const-safety.
* m4/symtab.c (m4_symbol_value_print): Simplify.
(dump_symbol_CB): Update caller.
* m4/input.c (struct m4_input_block): Alter u_c member, first
introduced 2006年10月25日, but unused until now.
(composite_peek, composite_read, composite_unget)
(composite_print, init_builtin_token): Rewrite accordingly.
(m4_push_wrapup): No longer need trailing NUL.
(m4__push_symbol, make_text_link): New functions.
(m4_push_string_finish): Use them.
* m4/macro.c (m4_push_arg, m4_push_args): Likewise.
(expand_macro): Simplify logic of nesting_limit.
* src/main.c (main): Likewise.
* doc/m4.texinfo (Dumpdef): Augment test.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Sun, 9 Dec 2007 04:05:11 +0000 (21:05 -0700)]
Stage 6: convert builtins to push arg at a time.
* m4/m4module.h (m4_shipout_text): Rename...
(m4_divert_text): ...to this, to avoid confusion with m4_shipout_*
that does not worry about sync lines.
(m4_shipout_string_trunc): New prototype.
* m4/output.c (m4_shipout_text): Rename...
(m4_divert_text): ...to this.
(m4_shipout_string): Move guts...
(m4_shipout_string_trunc): ...to this new function.
* m4/macro.c (m4_push_arg, m4_push_args): New functions.
(expand_token, process_macro): Update callers.
* m4/input.c (string_print): Likewise.
* modules/m4.c (ifdef, ifelse, shift, substr, translit, divert):
Likewise.
* modules/gnu.c (patsubst): Likewise.
(debuglen): Use SIZE_MAX for unlimited debug length.
* src/main.c (main): Likewise.
* m4/m4.c (m4_create): Default max_debug_length to SIZE_MAX, not
zero.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Fri, 7 Dec 2007 21:11:21 +0000 (14:11 -0700)]
Minor security fix: Quote output of mkstemp.
* modules/m4.c (m4_make_temp): Produce quoted output.
* doc/m4.texinfo (Mkstemp, Mkdtemp): Update the documentation and
tests.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Fri, 7 Dec 2007 05:14:22 +0000 (22:14 -0700)]
Stage 5: add notion of quote age.
* m4/m4module.h (m4_get_symbol_value_quote_age): New prototype.
(m4_set_symbol_value_text): Adjust prototype.
(m4_has_syntax): Factor out the unsigned char cast.
* m4/m4private.h (struct m4_syntax_table): Add syntax_age and
quote_age members.
(m4__quote_age, m4__safe_quotes): New accessor macros, no need for
functions at this point.
(struct m4_symbol_value, struct m4_macro_args): Add quote_age
member.
(m4_set_symbol_value_text): Adjust fast accessor.
(m4_get_symbol_value_quote_age): New fast accessor.
* m4/symtab.c (m4_set_symbol_value_text): Add parameter.
(m4_get_symbol_value_quote_age): New function.
(m4_symbol_value_copy): Adjust callers.
* m4/macro.c (expand_token): Add parameter, and track quote age.
(expand_argument, collect_arguments): Track quote age.
(m4_macro_expand_input, process_macro, m4_make_argv_ref)
(m4_macro_expand_input): Update callers.
(m4_arg_text, m4_arg_len, m4_arg_func): Abort on type mismatch.
* m4/input.c: Comment cleanups.
(struct m4_input_block): Reduce size.
(m4__next_token): Report quote age.
(m4_push_builtin, init_builtin_token): Update callers.
* m4/utility.c (skip_space): Adjust callers.
* m4/module.c (install_macro_table): Likewise.
* m4/syntax.c (m4_set_syntax): Initialize and update quote age.
(m4_set_quotes, m4_set_comment): Detect no-op changes, and update
quote age.
(set_quote_age): New helper function.
(check_is_single_quotes, check_is_single_comments): Adjust
callers.
* src/freeze.c (reload_frozen_state): Likewise.
* src/main.c (main): Likewise.
* modules/m4.c (define, pushdef): No need to set macro text.
* tests/builtins.at (changequote, defn): New tests.
* examples/wrapfifo.m4: New file.
* examples/wraplifo.m4: New file.
* Makefile.am (dist_pkgdata_DATA): Distribute new examples.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Tue, 4 Dec 2007 16:00:30 +0000 (09:00 -0700)]
gnulib-tool doesn't recognize config.*.
* build-aux/.cvsignore: Explicitly ignore config.rpath, for gnulib-tool.
* build-aux/.gitignore: Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Tue, 4 Dec 2007 13:43:29 +0000 (06:43 -0700)]
Fix builds with OpenBSD make.
* Makefile.am (HELP2MAN): New macro.
(dist_man_MANS, doc/m4.1): Fix rules for building m4.1 into
srcdir.
* README: Update copyright.
* HACKING: Mention help2man and makeinfo dependencies.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2007年11月30日 04:26:22 +0000 (21:26 -0700)]
Stage 4: route indir, builtin through ref; make argv opaque.
* m4/system_.h (obstack_regrow): Fix precedence.
* m4/m4module.h (m4_arg_equal, m4_arg_empty, m4_make_argv_ref):
New prototypes.
(struct m4_macro_args): Move...
* m4/m4private.h (struct m4_macro_args): ...here, making it opaque
to modules. Add has_ref member.
(bool_bitfield): New helper typedef.
(struct m4_symbol_chain): Add flatten and len members.
* m4/macro.c (empty_symbol): New placeholder, for optimizing
comparison with empty string.
(m4_macro_expand_input): Initialize it.
(collect_arguments): Alter signature, and populate new fields.
(trace_pre, trace_post): Remove redundant parameter.
(expand_macro): Alter handling of obstacks.
(m4_arg_symbol): Account for wrapped argv.
(m4_arg_equal, m4_arg_empty, m4_make_argv_ref): New methods.
(m4_arg_text, m4_arg_len, m4_arg_func): Use new methods.
* modules/m4.c (ifelse, syscmd): Likewise.
* modules/evalparse.c (m4_evaluate): Likewise.
(undefine, popdef, m4_dump_symbols): Optimize.
* modules/gnu.c (builtin, indir, esyscmd, debugfile): Use new
methods.
(changesyntax, regexp): Optimize.
* m4/output.c (diversion_storage): Use typedef.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2007年11月28日 21:03:48 +0000 (14:03 -0700)]
Stage 3b: cache length, rather than computing it, in modules.
* m4/hash.c (m4_hash_remove): Avoid double free on remove
failure.
* m4/output.c (m4_shipout_string): Change semantics of len param.
(m4_shipout_int): Use cached length.
* m4/input.c (m4_push_string_finish): Likewise.
* modules/m4.h (m4_make_temp_func): Add parameter.
* m4/macro.c (expand_token, m4_arg_len): Use cached length.
(collect_arguments, expand_macro): Alter signature.
(trace_format): Don't use out-of-scope buffer.
(process_macro): All callers changed.
* m4/utility.c (m4_dump_args): Likewise.
* m4/symtab.c (m4_symbol_value_print): Likewise.
* modules/gnu.c (__file__, __program__, builtin, indir)
(m4symbols, mkdtemp, regexp_compile, regexp_substitute,
renamesyms, patsubst, regexp, regexp_compile): Likewise.
* modules/load.c (m4modules): Likewise.
* modules/m4.c (defn, m4wrap, maketemp, m4_make_temp)
(numb_obstack, ifdef, ifelse, divert, len, substr): Likewise.
* modules/perl.c (perleval): Likewise.
* modules/stdlib.c (getcwd, getenv, getlogin, getpwnam, getpwuid)
(hostname, uname, setenv): Likewise.
* modules/mpeval.c (numb_obstack): Likewise.
* src/freeze.c (dump_symbol_CB): Likewise.
* doc/m4.texinfo (Renamesyms, Dumpdef, Changesyntax): Adjust test.
* tests/builtins.at (mkstemp): Likewise.
* tests/others.at (iso8859): XFAIL this test, now that
length-based handling allows NUL through part but not all of M4.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2007年11月28日 13:45:20 +0000 (06:45 -0700)]
Stage 3a: cache length, rather than computing it, in libm4.
* m4/m4module.h (struct m4_macro_args): Cache length.
(m4_get_symbol_len, m4_get_symbol_value_len): New accessors.
(m4_set_symbol_value_text): Change signature.
* m4/m4private.h (struct m4_symbol_value): Store string length.
(m4_get_symbol_value_text, m4_get_symbol_value_placeholder)
(m4_set_symbol_value_placeholder): Update accordingly.
(m4_set_symbol_value_text): Change signature.
(m4_get_symbol_value_len): New accessor.
* m4/input.c (struct m4_input_block, string_peek, string_read)
(string_unget, string_print, m4_push_string_finish)
(m4_push_wrapup): Track length of string input.
(m4__next_token): Adjust all users of symbol text to track length,
too.
* m4/macro.c (expand_argument, collect_arguments): Likewise.
* m4/module.c (install_macro_table): Likewise.
* modules/gnu.c (builtin, indir): Likewise.
* modules/m4.c (define, pushdef): Likewise.
* src/main.c (main): Likewise.
* src/freeze.c (reload_frozen_state): Likewise.
* m4/symtab.c (m4_symbol_value_copy): Likewise.
(m4_get_symbol_value_len): New function.
(m4_get_symbol_value_text, m4_get_symbol_value_placeholder)
(m4_set_symbol_value_text, m4_set_symbol_value_placeholder):
Adjust implementation.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2007年11月27日 17:15:48 +0000 (10:15 -0700)]
Stage 2: use accessors, not direct reference, into argv.
* m4/m4private.h (m4_arg_argc): New fast accessor.
* m4/m4module.h (m4_arg_argc, m4_arg_symbol, m4_is_arg_text)
(m4_is_arg_func, m4_arg_text, m4_arg_len, m4_arg_func): New
prototypes.
(m4_builtin_func, M4BUILTIN, M4BUILTIN_HANDLER, m4_dump_args)
(m4_macro_call): Make argc unsigned.
(M4ARG): Use new accessors.
* modules/m4.c (define, pushdef): Likewise.
(undefine, popdef, ifelse, m4_dump_symbols, defn, undivert)
(traceon, traceoff): Make argc unsigned.
* modules/m4.h (m4_dump_symbols_func): Likewise.
* modules/evalparse.c (m4_evaluate): Likewise.
* modules/gnu.c (builtin, indir): Use new accessors.
(changesyntax): Make argc unsigned.
* modules/perl.c (perleval): Likewise.
* m4/utility.c (m4_dump_args): Use new accessors.
* m4/macro.c (trace_pre): Likewise.
(m4_arg_symbol, m4_arg_argc, m4_is_arg_text, m4_is_arg_func)
(m4_arg_text, m4_arg_len, m4_arg_func): New functions.
(expand_macro, trace_pre, trace_post, m4_macro_call): Update argc
usage.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2007年11月24日 23:23:47 +0000 (16:23 -0700)]
Stage 1: convert m4_symbol_value** into new object.
* ltdl/m4/gnulib-cache.m4: Import flexmember module.
* m4/m4module.h (m4_macro_args): New type, will be opaque to
modules later.
(m4_builtin_func, M4BUILTIN, M4BUILTIN_HANDLER, m4_dump_args)
(m4_macro_call): Alter signature to use m4_macro_args object.
(M4ARG): Redefine to access new struct.
* m4/m4private.h (M4_SYMBOL_COMP): New enumerator.
(struct m4_symbol_chain): New type.
(struct m4_symbol_value): Add chain alternative.
* m4/macro.c (collect_arguments): Build new struct.
(expand_macro, m4_macro_call, process_macro, trace_pre)
(trace_post): Adjust implementation to use it.
* m4/utility.c (m4_dump_args): Likewise.
* modules/gnu.c (builtin, indir): Likewise.
* modules/format.c (format): Likewise.
* modules/m4.h (m4_dump_symbols_func): Likewise.
* modules/m4.c (m4_dump_symbols, define, pushdef, defn, ifelse)
(shift, include, errprint, m4wrap): Likewise.
* modules/evalparse.c (m4_evaluate): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2007年11月24日 14:04:18 +0000 (07:04 -0700)]
Pass only macro name to utility functions.
* m4/m4module.h (m4_bad_argc, m4_numeric_arg): Adjust signature.
* m4/utility.c (m4_bad_argc, m4_numeric_arg): Adjust
implementation.
* m4/macro.c (m4_macro_call): Adjust callers.
* modules/gnu.c (builtin, debuglen): Likewise.
* modules/m4.c (ifelse, incr, decr, divert, undivert, m4exit)
(substr): Likewise.
* modules/evalparse.c (m4_evaluate): Likewise.
* modules/stdlib.c (setenv, getpwuid, srand): Likewise.
* modules/time.c (ctime, gmtime, localtime, mktime, strftime):
Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2007年11月23日 23:14:17 +0000 (16:14 -0700)]
Add macro name to debugfile messages.
* m4/m4module.h (m4_debug_set_output): Add parameter.
* m4/debug.c (m4_debug_set_output, set_debug_file): Pass macro
name through.
* modules/gnu.c (debugfile): Adjust caller.
* modules/m4.c (m4exit): Likewise.
* src/main.c (main): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2007年11月23日 22:18:40 +0000 (15:18 -0700)]
Factor out handling of macro name in error messages.
* m4/m4module.h (m4_error, m4_error_at_line, m4_warn)
(m4_warn_at_line): Add new parameter.
* m4/utility.c (m4_verror_at_line): New helper method.
(m4_error, m4_error_at_line, m4_warn, m4_warn_at_line): Add new
parameter.
(m4_bad_argc, m4_numeric_arg, m4_parse_truth_arg): All callers
changed.
* m4/debug.c: Likewise.
* m4/input.c: Likewise.
* m4/macro.c: Likewise.
* m4/module.c: Likewise.
* m4/output.c: Likewise.
* m4/path.c: Likewise.
* modules/evalparse.c: Likewise.
* modules/format.c: Likewise.
* modules/gnu.c: Likewise.
* modules/load.c: Likewise.
* modules/m4.c: Likewise.
* modules/mpeval.c: Likewise.
* src/freeze.c: Likewise.
* src/main.c: Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2007年11月14日 23:39:43 +0000 (16:39 -0700)]
Handle some defn corner cases differently.
* doc/m4.texinfo (Defn): Update documentation; although this still
doesn't match the branch, since it may be changed before 2.0.
* m4/macro.c (expand_argument): Consistently ignore builtins in
concatenation contexts.
* m4/m4private.h (m4__symbol_type): Fix C89 compliance bug.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2007年11月13日 21:08:16 +0000 (14:08 -0700)]
Fix memory leak in tail recursion.
* m4/input.c (pop_input): Add flag parameter and return type.
(next_char): Adjust caller.
(m4_push_string_init): Let go of memory earlier.
Signed-off-by: Eric Blake <ebb9@byu.net>
(cherry picked from commit
6bfe1ba306cacd8d9316647f3b9f276cf56b31a8)
Eric Blake [Wed, 7 Nov 2007 15:13:43 +0000 (08:13 -0700)]
More corner case testing.
* tests/macros.at (Rescanning macros): Test more corner cases.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Tue, 6 Nov 2007 13:29:27 +0000 (06:29 -0700)]
* build-aux/mkstamp: Rename from ltdl/config/mkstamp.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Tue, 6 Nov 2007 13:14:37 +0000 (06:14 -0700)]
* Makefile.am (tests/package.m4): Work around bash bug.
Reported by Ralf Wildenhues.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Mon, 5 Nov 2007 20:14:03 +0000 (13:14 -0700)]
Ignore bootstrap leftovers.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Mon, 5 Nov 2007 20:11:17 +0000 (13:11 -0700)]
For consistency with other GNU projects, use build-aux directory.
* configure.ac (AC_CONFIG_AUX_DIR): Change ltdl/config to
build-aux.
* bootstrap (config_aux_dir): Likewise.
* Makefile.am (config_aux_dir): Likewise.
* ltdl/m4/gnulib-cache.m4: Use --aux-dir option.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Sat, 3 Nov 2007 00:42:16 +0000 (18:42 -0600)]
Update some documentation about version control.
* NEWS: M4 is now stored in git.
* HACKING: Likewise.
* README: Likewise.
* bootstrap: Likewise.
* commit: Delete, now that CVS commits are no longer necessary.
* ltdl/config/mailnotify: No longer necessary; git's patch
generation and mail capability is more powerful.
Signed-off-by: Eric Blake <ebb9@byu.net>
(cherry picked from commit
0f7701a19187152180a0b9907fab29d152fc534a)
Eric Blake [Fri, 2 Nov 2007 23:03:01 +0000 (17:03 -0600)]
Update to recent gnulib changes.
* ltdl/m4/gnulib-cache.m4: Replace fprintf-posix, vasprintf-posix,
xprintf, and xvasprintf with xprintf-posix and xvasprintf-posix.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Thu, 1 Nov 2007 13:08:35 +0000 (07:08 -0600)]
Improve error message when early end of file occurs.
* doc/m4.texinfo (Macro Arguments, Changequote, Changecom)
(M4wrap): Adjust to new messages.
(Improved capitalize): Enhance test.
* m4/m4private.h (m4__next_token): Adjust prototype.
* m4/input.c (m4__next_token): Add new parameter, and improve
error message.
* m4/macro.c (m4_macro_expand_input, collect_arguments): Adjust
callers.
(expand_argument): Likewise, and add parameter.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2007年10月31日 14:50:30 +0000 (08:50 -0600)]
Test more corner cases.
* tests/macros.at (Rescanning macros): Beef up test.
* doc/m4.texinfo (Changecom): Beef up test.
(Improved foreach): Document alternate foreachq style.
* examples/foreachq3.m4: New file.
* examples/loop.m4: New file.
* Makefile.am (dist_pkgdata_DATA): Distribute them.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2007年10月29日 03:26:41 +0000 (21:26 -0600)]
More test coverage for autoconf usage patterns.
* doc/m4.texinfo (Shift): Document cond macro, and add new test.
* tests/macros.at (Rescanning macros): New test.
* tests/builtins.at (include): Augment test.
Signed-off-by: Eric Blake <ebb9@byu.net>
ChangeLog for previous commit.
* Makefile.am: Adjust getopt handling to latest gnulib layout.
Eric Blake [2007年10月27日 12:15:51 +0000 (06:15 -0600)]
Document one use of changequote(`(',`)').
* doc/m4.texinfo (Changequote): Add new test, based on recent
autoconf addition of m4_expand.
Signed-off-by: Eric Blake <ebb9@byu.net>
(cherry picked from commit
37e491acd84f447920057b1619ebab148adea8b1)
Fix 'make distcheck'.
* Makefile.am (dist_pkgdata_DATA): Add examples/capitalize2.m4.
Eric Blake [2007年10月22日 20:57:28 +0000 (14:57 -0600)]
Never let printf failures go undetected.
* ltdl/m4/gnulib-cache.m4: Augment with 'gnulib-tool --import
xprintf'.
* m4/system_.h: Include xprintf.h.
* m4/debug.c (m4_debug_message_prefix, m4_debug_message): Wrap all
use of printf, xprintf.
* m4/input.c [DEBUG_INPUT]: Likewise.
* m4/module.c [DEBUG_MODULES]: Likewise.
* m4/output.c (m4_shipout_text, m4_shipout_int)
(m4_freeze_diversions): Likewise.
* m4/path.c [DEBUG_INCL]: Likewise.
* m4/symtab.c [DEBUG_SYM]: Likewise.
* m4/syntax.c [DEBUG_SYNTAX]: Likewise.
* modules/modtest.c (export_test): Likewise.
* src/freeze.c (produce_resyntax_dump, produce_syntax_dump)
(produce_module_dump, dump_symbol_CB, produce_frozen_state):
Likewise.
* src/main.c (usage): Likewise.
* po/POTFILES.in: Adjust to new file.
* po/Makevars (XGETTEXT_OPTIONS): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2007年10月18日 16:45:16 +0000 (10:45 -0600)]
Fix 'm4 -F file -t undefined'.
* src/freeze.c (produce_symbol_dump): Skip trace placeholders.
* src/freeze.c (dump_symbol_CB): Also skip void symbols.
* tests/freeze.at (reloading unknown builtin): Test for this bug.
* m4/m4module.h (m4_symtab_apply): Add parameter.
* m4/symtab.c (m4_symtab_apply): Ignore trace placeholders when
requested.
(m4_symtab_delete, symtab_dump): Adjust callers.
* modules/m4.c (m4_dump_symbols): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Tue, 9 Oct 2007 19:55:37 +0000 (13:55 -0600)]
Fix regexp regression of 2007年09月29日.
* modules/gnu.c (substitute): Allow NULL buf when no
subexpressions were present.
(regexp): Handle \ escapes even with empty regex.
* doc/m4.texinfo (Regexp, Patsubst): Catch this bug.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Tue, 9 Oct 2007 18:16:29 +0000 (12:16 -0600)]
Cache regex compilation for another autoconf speedup.
* modules/gnu.c (gnu_buf): Replace...
(REGEX_CACHE_SIZE, regex_cache): ...with new declarations.
(m4_pattern_buffer): Add fields.
(m4_regexp_compile): Rename...
(regexp_compile): ...to this, and drop no_sub parameter.
Implement caching.
(M4FINISH_HANDLER): Clean up entire cache.
(m4_regexp_search): Rename...
(regex_search): ...to this, adjust to new struct contents, and add
no_sub parameter.
(m4_regexp_substitute): Rename...
(regexp_substitute): ...to this.
(substitute, patsubst, regexp, renamesyms): Adjust callers.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Sat, 6 Oct 2007 21:58:57 +0000 (15:58 -0600)]
Ignore some more files.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Tue, 2 Oct 2007 20:01:51 +0000 (14:01 -0600)]
Document quoting pitfalls in capitalize.
* doc/m4.texinfo (Patsubst): Use the examples directory. Also
document shortfall.
(Improved capitalize): New node.
* examples/capitalize.m4: Update to match manual.
* examples/capitalize2.m4: New file.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [Mon, 1 Oct 2007 22:40:12 +0000 (16:40 -0600)]
Another Autoconf usage pattern optimization.
* modules/m4.c (m4_index): Optimize search for one byte.
* doc/m4.texinfo (Index macro, Regexp, Patsubst): Test the new
code paths.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2007年9月30日 01:31:06 +0000 (19:31 -0600)]
Optimize for Autoconf usage pattern.
* modules/gnu.c (regexp, patsubst): Handle empty regex faster.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2007年9月29日 19:06:26 +0000 (13:06 -0600)]
Borrow idea from autoconf testsuite.
* tests/testsuite.at (AT_CHECK_M4): Slight optimization.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2007年9月24日 22:36:47 +0000 (16:36 -0600)]
Create .gitignore alongside .cvsignore.
* bootstrap (version control): Update to reflect git usage.
Signed-off-by: Eric Blake <ebb9@byu.net>
Eric Blake [2007年9月13日 14:03:42 +0000 (14:03 +0000)]
* AUTHORS: Fix typo.
Be consistent about using 'module' for m4_module types and
'handle' for lt_dlhandle types:
* m4/m4private.h (m4_symbol_value): Rename handle element to
method. Changed all references.
(VALUE_MODULE, SYMBOL_MODULE): Renamed from VALUE_HANDLE and
SYMBOL_HANDLE respectively. Changed all references.
* m4/m4module.h (M4INIT_HANDLER, M4FINISH_HANDLER): Ditto.
* m4/builtin.c (m4_builtin_find_by_name)
(m4_builtin_find_by_func): Use module as the parameter name for
pointers of type 'm4_module'.
* m4/module.c (module_remove, m4_get_module_name)
(install_builtin_table, install_macro_table)
(m4_module_make_resident, m4__module_next, m4_module_refcount):
Ditto.
* src/freeze.c (produce_module_dump): Ditto.
* m4/input.c (m4_input_block): Rename handle element to method.
Changed all references.
* m4/symtab.c (m4__symtab_remove_module_references): Ditto.
* modules/load.c: Use module as the variable name for pointers
of type 'm4_module'.
* modules/m4.c: Ditto.
* modules/perl.c: Ditto.
* modules/shadow.c: Ditto.
Eric Blake [Fri, 7 Sep 2007 22:37:46 +0000 (22:37 +0000)]
Add refcount builtin.
* modules/load.c (refcount): New builtin.
(m4modules): Use correct type.
* doc/m4.texinfo (Refcount): New section.
* m4/m4private.h (struct m4_module): Add refcount member.
(m4_module_refcount) [NDEBUG]: Add faster accessor macro.
* m4/module.c (m4_module_load): Add symbols to table on first
load by m4, regardless of other libltdl loads of same module.
(m4_module_refcount): Use new struct member, rather than relying
on libltdl count which might be inflated by unrelated loads.
(m4__module_interface): Optimize.
(m4__module_next, m4__module_find): Avoid assertions that could
trigger with unrelated libltdl loads.
(m4__module_open): Track m4 load count.
(m4__module_exit): Only unload what m4 loaded.
(module_remove): Track m4 unloads.
* NEWS: Document new builtin.
Eric Blake [Fri, 7 Sep 2007 20:59:36 +0000 (20:59 +0000)]
More conversion to m4_module*.
* src/freeze.c (produce_module_dump, dump_symbol_CB)
(reload_frozen_state): Use correct type.
* m4/input.c (struct m4_input_block): Likewise.
* m4/symtab.c (dump_symbol_CB): Likewise.
Eric Blake [Fri, 7 Sep 2007 13:07:59 +0000 (13:07 +0000)]
* AUTHORS: Simplify, to match libtool and autoconf layout.
* THANKS: Sync with branch.
Eric Blake [Thu, 6 Sep 2007 22:58:25 +0000 (22:58 +0000)]
Wrap lt_dlhandle in struct m4_module.
* m4/m4module.h (includes): No longer require clients to know
about lt_dlhandle.
(m4_module): New opaque declaration.
(m4_export): Delete unused type.
(M4INIT_HANDLER, M4FINISH_HANDLER, m4_module_init_func)
(m4_module_finish_func, m4_module_load, m4_get_module_name)
(m4_builtin_find_by_name, m4_builtin_find_by_func): Use new
wrapper.
(m4_module_makeresident, m4_module_refcount): New declarations.
* m4/m4private.h (includes): Move <ltdl.h> here.
(m4_module): New declaration. Simple for now, but intended for
growth.
(m4__module_open, m4__module_next, m4__module_find)
(m4__symtab_remove_module_references): Use new wrapper.
* m4/builtin.c (m4_builtin_find_by_name, m4_builtin_find_by_func):
Likewise.
* m4/module.c (m4_get_module_name, m4_module_import)
(m4_module_load): Likewise.
(install_builtin_table, install_macro_table): Likewise. Also,
change return type since these always returned NULL and no one
used the result.
(m4_module_makereside
* bootstrap (ltdl/m4/.cvsignore): Add xstrtol module macros.
* src/m4/.cvsignore: Add xstrtol module sources.
Work around a bug in darwin's awk:
* bootstrap (func_get_translations): Use $AWK instead of raw
`awk' so that the user can use an alternative implementation
if the first awk in PATH doesn't behave as expected.
(func_get_translations): The first awk script mangles the last
entry passed to it for at least the awk implementation shipped
with Darwin 8.10.1. Capture 3ドル into a variable too to work-
around that problem.
As gnulib xstrtol is only used by main, and unconditionally pulls
in a copy of getopt, undo bootstrap change from 2007年08月11日 below,
and copy the xstrtol code into src/ so that main() can use it
without pushing the extra code into libm4:
* bootstrap (src_modules): Add getopt and xstrtol modules.
* Makefile.am (src_m4_SOURCES): Add xstrtol sources.
* po/POTFILES.in: Move gnu/xstrtol-error.c to src/xstrtol-error.c.