summaryrefslogtreecommitdiff
path: root/modules/gnu.c
diff options
context:
space:
mode:
authorEric Blake <ebb9@byu.net>2007-11-28 06:45:20 -0700
committerEric Blake <ebb9@byu.net>2007-11-28 22:07:29 -0700
commit8e1fad3c14b6308edd5f61c1f8f0d5a0e6591547 (patch)
treebb8cf6c869bbd429f30ad8d49886beaa74bda991 /modules/gnu.c
parent5d2ce0f461d5d77cf098fefddaa2ac9c15a95a4b (diff)
downloadm4-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.c5
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);