+ (*| "#" [' ' '\t']* "endif" { TEndif (tokinfo lexbuf) }*)
+
+ | "#" [' ' '\t']* "else" [' ' '\t' '\n']
+ { TIfdefelse (no_ifdef_mark(), tokinfo lexbuf) }
+
+
+
+
+ (* ---------------------- *)
+ (* #define body *)
+ (* ---------------------- *)
+
+ (* only in cpp directives normally *)
+ | "\\" '\n' { TCppEscapedNewline (tokinfo lexbuf) }
+
+
+ | ((id as s) "...")
+ { TDefParamVariadic (s, tokinfo lexbuf) }
+
+
+ (* could generate separate token for #, ## and then extend grammar,
+ * but there can be ident in many different places, in expression
+ * but also in declaration, in function name. So having 3 tokens
+ * for an ident does not work well with how we add info in
+ * ast_c. So better to generate just one token, for now, just one info,
+ * even if have later to reanalyse those tokens and unsplit.
+ *
+ * todo: our heuristics in parsing_hacks rely on TIdent. So maybe
+ * an easier solution would be to augment the TIdent type such as
+ * TIdent of string * info * cpp_ident_additionnal_info
+ *)
+