From 8be046d7b84f6949ecc0eb80abb4edb02dacae76 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 18 Aug 2008 15:48:45 +0200 Subject: [PATCH] Inform m4 whether a tag is a valid id. * src/output.c (is_identifier): New. (symbol_definitions_output): Use it to define tag_is_id. But maybe this should be done at m4 level? --- ChangeLog | 7 +++++++ src/output.c | 25 +++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/ChangeLog b/ChangeLog index 4d59ee03..2aa7ec7f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-11-11 Akim Demaille + + Inform m4 whether a tag is a valid id. + * src/output.c (is_identifier): New. + (symbol_definitions_output): Use it to define tag_is_id. + But maybe this should be done at m4 level? + 2008-11-11 Akim Demaille Test 214 was failing: it greps with a pattern containing [ ]* diff --git a/src/output.c b/src/output.c index a7003edf..afcec949 100644 --- a/src/output.c +++ b/src/output.c @@ -396,6 +396,26 @@ merger_output (FILE *out) } +/*----------------------------------. +| Whether S is a valid identifier. | +`----------------------------------*/ + +static bool +is_identifier (uniqstr s) +{ + static char const alphanum[26 + 26 + 1 + 10] = + "abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "_" + "0123456789"; + if (!s || ! memchr (alphanum, *s, sizeof alphanum - 10)) + return false; + for (++s; *s; ++s) + if (! memchr (alphanum, *s, sizeof alphanum)) + return false; + return true; +} + /*---------------------------------------. | Output the symbol definitions to OUT. | `---------------------------------------*/ @@ -414,6 +434,11 @@ symbol_definitions_output (FILE *out) obstack_1grow (&format_obstack, 0); \ key = obstack_finish (&format_obstack); + // Whether the tag is a valid identifier. + SET_KEY("tag_is_id"); + MUSCLE_INSERT_INT (key, is_identifier(sym->tag)); + + // The inner tag. SET_KEY("tag"); MUSCLE_INSERT_STRING (key, sym->tag); -- 2.45.2