task: metadata: install: pip install -e .
patch: diff --git a/pycparserext/ext_c_lexer.py b/pycparserext/ext_c_lexer.py
index eb237b6..0d740c9 100644
--- a/pycparserext/ext_c_lexer.py
+++ b/pycparserext/ext_c_lexer.py
@@ -65,7 +65,7 @@ _COMMON_KEYWORDS = [
     '__asm__', '__asm', 'asm']
 
 _GNU_KEYWORDS = [
-    '__typeof__', 'typeof',
+    '__typeof__', 'typeof', '__typeof',
     '__real__', '__imag__',
     '__builtin_types_compatible_p',
     '__const',
diff --git a/pycparserext/ext_c_parser.py b/pycparserext/ext_c_parser.py
index 157e63e..949b95d 100644
--- a/pycparserext/ext_c_parser.py
+++ b/pycparserext/ext_c_parser.py
@@ -512,6 +512,7 @@ class GnuCParser(_AsmAndAttributesMixin, CParserBase):
     def p_type_specifier_gnu_typeof_expr(self, p):
         """ type_specifier  : __TYPEOF__ LPAREN expression RPAREN
                             | TYPEOF LPAREN expression RPAREN
+                            | __TYPEOF LPAREN expression RPAREN
         """
         if isinstance(p[3], c_ast.TypeDecl):
             pass
@@ -521,6 +522,7 @@ class GnuCParser(_AsmAndAttributesMixin, CParserBase):
     def p_type_specifier_gnu_typeof_decl(self, p):
         """ type_specifier  : __TYPEOF__ LPAREN parameter_declaration RPAREN
                             | TYPEOF LPAREN parameter_declaration RPAREN
+                            | __TYPEOF LPAREN parameter_declaration RPAREN
         """
         p[0] = TypeOfDeclaration(p[1], p[3])
 

problem_statement: type cast parsing error in (__typeof(h))spa_meta_first(m) line, __typeof(h) type is not allowed by parser rules
Hello, while trying to run project https://gitlab.com/matpi/pipewire-py

I get an error 

```
State  : 484
Stack  : declaration_specifiers id_declarator declaration_list_opt brace_open unary_expression assignment_operator LPAREN expression RPAREN . LexToken(ID,'spa_meta_first',3,138)
ERROR: Error  : declaration_specifiers id_declarator declaration_list_opt brace_open unary_expression assignment_operator LPAREN expression RPAREN . LexToken(ID,'spa_meta_first',3,138)
Traceback (most recent call last):
  File "/home/oleks/projects/pipewire-py/bug/program.py", line 17, in <module>
    parser.parse(PREPROCESSED_SOURCE, debuglevel=True)
  File "/home/oleks/.local/lib/python3.12/site-packages/pycparserext/ext_c_parser.py", line 33, in parse
    return self.cparser.parse(text, lexer=self.clex, debug=debuglevel)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/oleks/.local/lib/python3.12/site-packages/pycparser/ply/yacc.py", line 327, in parse
    return self.parsedebug(input, lexer, debug, tracking, tokenfunc)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/oleks/.local/lib/python3.12/site-packages/pycparser/ply/yacc.py", line 601, in parsedebug
    tok = call_errorfunc(self.errorfunc, errtoken, self)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/oleks/.local/lib/python3.12/site-packages/pycparser/ply/yacc.py", line 193, in call_errorfunc
    r = errorfunc(token)
        ^^^^^^^^^^^^^^^^
  File "/home/oleks/.local/lib/python3.12/site-packages/pycparser/c_parser.py", line 1945, in p_error
    self._parse_error(
  File "/home/oleks/.local/lib/python3.12/site-packages/pycparser/plyparser.py", line 67, in _parse_error
    raise ParseError("%s: %s" % (coord, msg))
pycparser.plyparser.ParseError: :3:24: before: spa_meta_first
```

Here is the test python code with extracted code sample leading to the error

```
import pycparserext.ext_c_parser
import pycparserext.ext_c_generator

PREPROCESSED_SOURCE = """
static inline int spa_debugc_buffer(struct spa_debug_context *ctx, int indent, const struct spa_buffer *buffer) {
    (h) = (__typeof(h))spa_meta_first(m);
    
	for ((h) = (__typeof(h))spa_meta_first(m);	spa_meta_check(h, m);	(h)++) {

	}
	
	return 0;
}
"""

parser = pycparserext.ext_c_parser.GnuCParser(yacc_debug=True)
parser.parse(PREPROCESSED_SOURCE, debuglevel=True)
```

The error happens at `(h) = (__typeof(h))spa_meta_first(m);` because of **__typeof(h)** type casting which seems not considered as a valid cast type for a parser, but initial code source uses this construct and compiles fine. This is a pcpp.Preprocessor preprocessed code from https://gitlab.freedesktop.org/pipewire/pipewire/-/blob/master/spa/include/spa/buffer/meta.h?ref_type=heads#L90

Is this a parser bug?
repo: inducer/pycparserext
test_cmd: pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
test_patch: diff --git a/test/test_pycparserext.py b/test/test_pycparserext.py
index 183769f..bf03c3b 100644
--- a/test/test_pycparserext.py
+++ b/test/test_pycparserext.py
@@ -509,7 +509,7 @@ def test_node_visitor():
         "Asm": [0, 1],
         # PreprocessorLine is OpenCL, not GNU
         "PreprocessorLine": [0, 0],
-        "TypeOfDeclaration": [0, 4],
+        "TypeOfDeclaration": [0, 6],
         "TypeOfExpression": [0, 1],
         "FuncDeclExt": [0, 1],
     }
@@ -548,6 +548,7 @@ def test_node_visitor():
         __typeof__(a) _a = __builtin_types_compatible_p(long char, short int);
         __typeof__ (__typeof__ (char *)[4]) y;
         typeof (typeof (char *)[4]) z;
+        __typeof (__typeof (char *)[4]) g;
         asm("rdtsc" : "=A" (val));
         __attribute__((unused)) static int c;
     }
@@ -569,9 +570,11 @@ def test_typeof_reproduction():
     int func(int a, int b) {
         __typeof__(a) _a = a;
         typeof(b) _b = b;
+        __typeof(c) _c = c;
 
         __typeof__ (__typeof__ (char *)[4]) y;
         typeof (typeof (char *)[4]) z;
+        __typeof (__typeof (char *)[4]) g;
     }
     """
     assert _round_trip_matches(src)
@@ -581,10 +584,12 @@ def test_typeof_reproduction():
 
     # key is type of visit, value is
     # [actual # __typeof__, expected # __typeof__,
-    #   actual # typeof, expected # typeof]
+    #   actual # typeof, expected # typeof,
+    #   actual # __typeof, expected # __typeof
+    # ]
     visits = {
-        "TypeOfDeclaration": [0, 2, 0, 2],
-        "TypeOfExpression": [0, 1, 0, 1],
+        "TypeOfDeclaration": [0, 2, 0, 4],
+        "TypeOfExpression": [0, 1, 0, 2],
     }
 
     class TestVisitor(NodeVisitor):