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 /m4/module.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 'm4/module.c')
-rw-r--r-- | m4/module.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/m4/module.c b/m4/module.c index 4a65dbdb..afeece4f 100644 --- a/m4/module.c +++ b/m4/module.c @@ -193,8 +193,9 @@ install_macro_table (m4 *context, m4_module *module) for (; mp->name != NULL; mp++) { m4_symbol_value *value = m4_symbol_value_create (); + size_t len = strlen (mp->value); - m4_set_symbol_value_text (value, xstrdup (mp->value)); + m4_set_symbol_value_text (value, xmemdup (mp->value, len + 1), len); VALUE_MODULE (value) = module; m4_symbol_pushdef (M4SYMTAB, mp->name, value); |