1 package gnu.jemacs.buffer; 2 import gnu.mapping.*; 3 import gnu.expr.*; 4 5 6 7 public class Mode extends ModuleBody 8 { 9 public Buffer buffer; 10 public Mode next; 11 12 public Buffer getBuffer() 13 { 14 return buffer; 15 } 16 17 public Object apply0(ModuleMethod proc) 18 { 19 return applyN(proc, Values.noArgs); 20 } 21 22 public Object apply1(ModuleMethod proc, Object arg1) 23 { 24 Object [] args = new Object [1]; 25 args[0] = arg1; 26 return applyN(proc, args); 27 } 28 29 public Object apply2(ModuleMethod proc, Object arg1, Object arg2) 30 { 31 Object [] args = new Object [2]; 32 args[0] = arg1; 33 args[1] = arg2; 34 return applyN(proc, args); 35 } 36 37 public Object apply3(ModuleMethod proc, 38 Object arg1, Object arg2, Object arg3) 39 { 40 Object [] args = new Object [3]; 41 args[0] = arg1; 42 args[1] = arg2; 43 args[2] = arg3; 44 return applyN(proc, args); 45 } 46 47 public Object apply4(ModuleMethod proc, 48 Object arg1, Object arg2, Object arg3, Object arg4) 49 { 50 Object [] args = new Object [4]; 51 args[0] = arg1; 52 args[1] = arg2; 53 args[2] = arg3; 54 args[3] = arg4; 55 return applyN(proc, args); 56 } 57 58 public Object applyN(ModuleMethod proc, Object [] args) 59 { 60 int count = args.length; 61 int num = proc.numArgs(); 62 if (count >= (num & 0xFFF) 63 && (num < 0 || count <= (num >> 12))) 64 { 65 switch (count) 66 { 67 case 0: 68 return apply0(proc); 69 case 1: 70 return apply1(proc, args[0]); 71 case 2: 72 return apply2(proc, args[0], args[1]); 73 case 3: 74 return apply3(proc, args[0], args[1], args[2]); 75 case 4: 76 return apply4(proc, args[0], args[1], args[2], args[3]); 77 } 78 } 79 throw new WrongArguments(proc, count); 80 } 81 } 82 | Popular Tags |