- * The parser's bias towards considering things as functions whenever possible
- * makes nested parentheses tricky. (x) is considered to be part of a function
- * declarator until simplify_functions converts it. The problem is that
- * (((x))) is not valid as part of a function declarator, but it *is* valid
- * as an identifier enclosed 3 times in parentheses. This is complicated by
- * the fact that things like (((int))) are not valid anywhere.
+ * The main parser's bias towards considering things as functions whenever
+ * possible makes nested parentheses tricky. "(x)" is considered to be part
+ * of a function declarator until simplify_functions converts it. The problem
+ * is that "(((x)))" is not valid as part of a function declarator, but it _is_
+ * valid as either an identifier enclosed thrice in parentheses, or an abstract
+ * function declarator enclosed twice in parentheses.
+ *
+ * To avoid ambiguities, the main parser actually returns a function declarator
+ * for every pair of parentheses. The ones we need to look at consist of a
+ * single parameter with an empty specifier list (noting that every real
+ * function parameter will have at least one type specifier).
+ *
+ * There are two cases:
+ *
+ * - For (), the parser emits a parameter with a lone null declarator.
+ * This fake parameter simply gets deleted, leaving us with a normal
+ * function declarator with an empty identifier list.
+ *
+ * - Otherwise, the parameter's outermost declarator is not null. The
+ * function itself is deleted, replaced in the parse tree with the
+ * fake parameter's declarator.