+
+
+/* Return the location of the left-hand side of a rule whose
+ right-hand side is RHS[1] ... RHS[N]. Ignore empty nonterminals in
+ the right-hand side, and return an empty location equal to the end
+ boundary of RHS[0] if the right-hand side is empty. */
+
+static YYLTYPE
+lloc_default (YYLTYPE const *rhs, int n)
+{
+ int i;
+ int j;
+ YYLTYPE r;
+ r.start = r.end = rhs[n].end;
+
+ for (i = 1; i <= n; i++)
+ if (! equal_boundaries (rhs[i].start, rhs[i].end))
+ {
+ r.start = rhs[i].start;
+
+ for (j = n; i < j; j--)
+ if (! equal_boundaries (rhs[j].start, rhs[j].end))
+ break;
+ r.end = rhs[j].end;
+
+ break;
+ }
+
+ return r;
+}
+
+
+/* Add a lex-param or a parse-param (depending on TYPE) with
+ declaration DECL and location LOC. */
+