summaryrefslogtreecommitdiff
path: root/m4/symtab.c
diff options
context:
space:
mode:
authorEric Blake <ebb9@byu.net>2007-12-06 22:14:22 -0700
committerEric Blake <ebb9@byu.net>2007-12-07 07:10:20 -0700
commitbcb92cf23ae09a5e3a0c8f5f8d2a991245918ede (patch)
tree1bab9dc424c75ad01af53363f8682a3a72cd6ff7 /m4/symtab.c
parentedff3edfb0438a3047fb7208a34404c3b76513e5 (diff)
downloadm4-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.c15
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