+ private Xex.Variable[] parse_args (Xex.Domain domain, Xex.Symbol[] args)
+ {
+ int nfixed = 0;
+ int noptional = 0;
+ int nrest = 0;
+
+ if (args.Length > 0)
+ {
+ int i = 0;
+ for (i = 0; i < args.Length; i++, nfixed++)
+ if (args[i] == Qoptional || args[i] == Qrest)
+ break;
+ if (i < args.Length)
+ {
+ if (args[i] == Qoptional)
+ {
+ for (i++; i < args.Length; i++, noptional++)
+ if (args[i] == Qrest)
+ break;
+ if (i < args.Length)
+ nrest = 1;
+ }
+ }
+ min_args = nfixed;
+ max_args = nfixed + noptional + nrest;
+ this.args = new Variable[max_args];
+ int j;
+ for (i = j = 0; j < this.args.Length; i++)
+ if (args[i] != Qoptional || args[i] != Qrest)
+ this.args[j++] = domain.Defvar (args[i]);
+ }
+ else
+ {
+ min_args = max_args = 0;
+ }
+ with_var = false;
+ }
+