summary refs log tree commit diff
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2020-12-29 17:13:14 -0500
committerJune McEnroe <june@causal.agency>2020-12-29 17:13:14 -0500
commit034c35a61d97bf7817707e044b2f159a7f517c27 (patch)
treeeb39b71e402d610ba3de6d28532159606a7b7396
parentMatch function-like macro definitions as IdentifierTag (diff)
downloadsrc-034c35a61d97bf7817707e044b2f159a7f517c27.tar.gz
src-034c35a61d97bf7817707e044b2f159a7f517c27.zip
Match C type declarations as IdentifierTag
-rw-r--r--bin/hilex/c.l14
1 files changed, 14 insertions, 0 deletions
diff --git a/bin/hilex/c.l b/bin/hilex/c.l
index 29988c3f..1eec5f31 100644
--- a/bin/hilex/c.l
+++ b/bin/hilex/c.l
@@ -22,6 +22,7 @@
 %}
 
 %s MacroLine MacroInclude MacroDefine
+%s TypeDecl
 %x CharLiteral StringLiteral
 
 ident [_[:alpha:]][_[:alnum:]]*
@@ -78,6 +79,19 @@ sizeof|(_A|alignof) {
 	return Number;
 }
 
+enum|struct|typedef|union {
+	BEGIN(TypeDecl);
+	return Keyword;
+}
+<TypeDecl>{ident}/[[:space:]]*("{"|"(") {
+	BEGIN(pop);
+	return IdentifierTag;
+}
+<TypeDecl>. {
+	BEGIN(pop);
+	REJECT;
+}
+
 auto|break|case|const|continue|default|do|else|enum|extern|for|goto|if|inline |
 register|restrict|return|static|struct|switch|typedef|union|volatile|while |
 (_A|a)lignas|_Atomic|_Generic|(_N|n)oreturn|(_S|s)tatic_assert |