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?
This commit is contained in:
Akim Demaille
2008-08-18 15:48:45 +02:00
parent de62edee66
commit 8be046d7b8
2 changed files with 32 additions and 0 deletions

View File

@@ -1,3 +1,10 @@
2008-11-11 Akim Demaille <demaille@gostai.com>
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 <demaille@gostai.com>
Test 214 was failing: it greps with a pattern containing [ ]*

View File

@@ -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);