1 21 22 package org.armedbear.lisp; 23 24 public class StructureClass extends SlotClass 25 { 26 private StructureClass(Symbol symbol) 27 { 28 super(symbol, new Cons(BuiltInClass.STRUCTURE_OBJECT)); 29 } 30 31 public StructureClass(Symbol symbol, LispObject directSuperclasses) 32 { 33 super(symbol, directSuperclasses); 34 } 35 36 public LispObject typeOf() 37 { 38 return Symbol.STRUCTURE_CLASS; 39 } 40 41 public LispClass classOf() 42 { 43 return BuiltInClass.STRUCTURE_CLASS; 44 } 45 46 public LispObject typep(LispObject type) throws ConditionThrowable 47 { 48 if (type == Symbol.STRUCTURE_CLASS) 49 return T; 50 if (type == BuiltInClass.STRUCTURE_CLASS) 51 return T; 52 return super.typep(type); 53 } 54 55 public LispObject getDescription() throws ConditionThrowable 56 { 57 return new SimpleString(writeToString()); 58 } 59 60 public String writeToString() throws ConditionThrowable 61 { 62 StringBuffer sb = new StringBuffer ("#<STRUCTURE-CLASS "); 63 sb.append(symbol.writeToString()); 64 sb.append('>'); 65 return sb.toString(); 66 } 67 68 private static final Primitive4 MAKE_STRUCTURE_CLASS = 70 new Primitive4("make-structure-class", PACKAGE_SYS, false) 71 { 72 public LispObject execute(LispObject first, LispObject second, 73 LispObject third, LispObject fourth) 74 throws ConditionThrowable 75 { 76 Symbol symbol = checkSymbol(first); 77 LispObject directSlots = checkList(second); 78 LispObject slots = checkList(third); 79 Symbol include = checkSymbol(fourth); 80 StructureClass c = new StructureClass(symbol); 81 if (include != NIL) { 82 LispClass includedClass = LispClass.findClass(include); 83 if (includedClass == null) 84 return signal(new SimpleError("Class " + include + 85 " is undefined.")); 86 c.setCPL(new Cons(c, includedClass.getCPL())); 87 } else 88 c.setCPL(c, BuiltInClass.STRUCTURE_OBJECT, BuiltInClass.CLASS_T); 89 c.setDirectSlots(directSlots); 90 c.setEffectiveSlots(slots); 91 addClass(symbol, c); 92 return c; 93 } 94 }; 95 } 96 | Popular Tags |