diff options
author | Eric Blake <ebb9@byu.net> | 2007-11-28 06:45:20 -0700 |
---|---|---|
committer | Eric Blake <ebb9@byu.net> | 2007-11-28 22:07:29 -0700 |
commit | 8e1fad3c14b6308edd5f61c1f8f0d5a0e6591547 (patch) | |
tree | bb8cf6c869bbd429f30ad8d49886beaa74bda991 /modules/gnu.c | |
parent | 5d2ce0f461d5d77cf098fefddaa2ac9c15a95a4b (diff) | |
download | m4-8e1fad3c14b6308edd5f61c1f8f0d5a0e6591547.tar.gz |
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>
Diffstat (limited to 'modules/gnu.c')
-rw-r--r-- | modules/gnu.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/modules/gnu.c b/modules/gnu.c index 70c7cf60..560e0d5e 100644 --- a/modules/gnu.c +++ b/modules/gnu.c @@ -463,7 +463,7 @@ M4BUILTIN_HANDLER (builtin) for (i = 2; i < argc; i++) if (!m4_is_arg_text (argv, i)) m4_set_symbol_value_text (m4_arg_symbol (new_argv, i - 1), - ""); + "", 0); bp->func (context, obs, argc - 1, new_argv); free (new_argv); } @@ -707,7 +707,8 @@ M4BUILTIN_HANDLER (indir) if (!m4_symbol_groks_macro (symbol)) for (i = 2; i < argc; i++) if (!m4_is_arg_text (argv, i)) - m4_set_symbol_value_text (m4_arg_symbol (new_argv, i - 1), ""); + m4_set_symbol_value_text (m4_arg_symbol (new_argv, i - 1), + "", 0); m4_macro_call (context, m4_get_symbol_value (symbol), obs, argc - 1, new_argv); free (new_argv); |