diff options
author | Eric Blake <ebb9@byu.net> | 2007-12-06 22:14:22 -0700 |
---|---|---|
committer | Eric Blake <ebb9@byu.net> | 2007-12-07 07:10:20 -0700 |
commit | bcb92cf23ae09a5e3a0c8f5f8d2a991245918ede (patch) | |
tree | 1bab9dc424c75ad01af53363f8682a3a72cd6ff7 /m4/symtab.c | |
parent | edff3edfb0438a3047fb7208a34404c3b76513e5 (diff) | |
download | m4-bcb92cf23ae09a5e3a0c8f5f8d2a991245918ede.tar.gz |
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>
Diffstat (limited to 'm4/symtab.c')
-rw-r--r-- | m4/symtab.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/m4/symtab.c b/m4/symtab.c index 2f83f7b5..932a31fa 100644 --- a/m4/symtab.c +++ b/m4/symtab.c @@ -414,9 +414,10 @@ m4_symbol_value_copy (m4_symbol_value *dest, m4_symbol_value *src) if (m4_is_symbol_value_text (src)) { size_t len = m4_get_symbol_value_len (src); + unsigned int age = m4_get_symbol_value_quote_age (src); m4_set_symbol_value_text (dest, xmemdup (m4_get_symbol_value_text (src), - len + 1), len); + len + 1), len, age); } else if (m4_is_symbol_value_placeholder (src)) m4_set_symbol_value_placeholder (dest, @@ -662,6 +663,14 @@ m4_get_symbol_value_len (m4_symbol_value *value) return value->u.u_t.len; } +#undef m4_get_symbol_value_quote_age +unsigned int +m4_get_symbol_value_quote_age (m4_symbol_value *value) +{ + assert (value && value->type == M4_SYMBOL_TEXT); + return value->u.u_t.quote_age; +} + #undef m4_get_symbol_value_func m4_builtin_func * m4_get_symbol_value_func (m4_symbol_value *value) @@ -688,7 +697,8 @@ m4_get_symbol_value_placeholder (m4_symbol_value *value) #undef m4_set_symbol_value_text void -m4_set_symbol_value_text (m4_symbol_value *value, const char *text, size_t len) +m4_set_symbol_value_text (m4_symbol_value *value, const char *text, size_t len, + unsigned int quote_age) { assert (value && text); /* TODO - this assertion enforces NUL-terminated text with no @@ -701,6 +711,7 @@ m4_set_symbol_value_text (m4_symbol_value *value, const char *text, size_t len) value->type = M4_SYMBOL_TEXT; value->u.u_t.text = text; value->u.u_t.len = len; + value->u.u_t.quote_age = quote_age; } #undef m4_set_symbol_value_builtin |