+ Name name = node.Attributes[Nfname].Value;
+ int nargs = 0, noptions = 0, nrest = 0;
+ XmlNode n;
+
+ node = node.FirstChild;
+ if (node != null && node.Name == Nargs)
+ {
+ for (XmlNode n = node.FirstChild; n != null; n = n.NextSibling)
+ {
+ if (n.Name == Noptional || n.Name == Nrest)
+ break;
+ nargs++;
+ }
+ if (n != null && n.Name == Noptional)
+ for (n = n.NextSibling; n != null; n = n.NextSibling)
+ {
+ if (n.Name == Nrest)
+ break;
+ noptions++;
+ }
+ if (n != null && n.Name == Nrest)
+ for (n = n.NextSibling; n != null; n = n.NextSibling)
+ nrest++;
+ min_arg = nargs;
+ max_arg = nargs + noptions + nrest;
+ if (nrest == 1)
+ max_arg = - max_arg;
+
+