From 8e1fad3c14b6308edd5f61c1f8f0d5a0e6591547 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Wed, 28 Nov 2007 06:45:20 -0700 Subject: 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 --- modules/gnu.c | 5 +++-- modules/m4.c | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'modules') 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); diff --git a/modules/m4.c b/modules/m4.c index 37497e64..87584a2e 100644 --- a/modules/m4.c +++ b/modules/m4.c @@ -166,7 +166,7 @@ M4BUILTIN_HANDLER (define) m4_symbol_value *value = m4_symbol_value_create (); if (argc == 2) - m4_set_symbol_value_text (value, xstrdup ("")); + m4_set_symbol_value_text (value, xstrdup (""), 0); else m4_symbol_value_copy (value, m4_arg_symbol (argv, 2)); @@ -197,7 +197,7 @@ M4BUILTIN_HANDLER (pushdef) m4_symbol_value *value = m4_symbol_value_create (); if (argc == 2) - m4_set_symbol_value_text (value, xstrdup ("")); + m4_set_symbol_value_text (value, xstrdup (""), 0); else m4_symbol_value_copy (value, m4_arg_symbol (argv, 2)); -- cgit v1.2.1