1 package kawa.lang;
2 import gnu.lists.*;
3 
4 /** A Pattern that will match a list of a given minimum length. */
5 
6 public class VarListPat extends Pattern {
7   /** Minimun length of list that will match. */
8   int min_length;
9 
VarListPat(int min)10   public VarListPat (int min) { min_length = min; }
11 
12   /** Succeeds of obj is a list with at least min_length elements.
13    * @param obj the object to match against
14    * @return true if the match succeeded.
15    * The elements vars[start_vars .. start_vars + min_length] contain
16    * the first min_length elements of obj followed by the
17    * min_length'th cdr of obj. */
match(Object obj, Object[] vars, int start_vars)18   public boolean match (Object obj, Object[] vars, int start_vars)
19   {
20     int i;
21     for (i = 0; i < min_length; i++)
22       {
23 	if (obj instanceof Pair)
24 	  {
25 	    Pair p = (Pair)obj;
26 	    vars[start_vars + i] = p.getCar();
27 	    obj = p.getCdr();
28 	  }
29 	else
30 	  return false;
31       }
32     vars [start_vars + i] = obj;
33     return true;
34   }
35 
varCount()36   public int varCount () { return min_length + 1; }
37 
print(Consumer out)38   public void print (Consumer out)
39   {
40     out.write("#<varlist-pattern min:");
41     out.writeInt(min_length);
42     out.write('>');
43   }
44 }
45