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