Changeset 12576
- Timestamp:
- 03/28/10 20:13:14 (13 years ago)
- Location:
- trunk/abcl/src/org/armedbear/lisp
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/src/org/armedbear/lisp/Autoload.java
r12557 r12576 686 686 autoload(Symbol.SET_SCHAR, "StringFunctions"); 687 687 688 autoload(Symbol. SET_CLASS_SLOTS, "SlotClass");688 autoload(Symbol._SET_CLASS_SLOTS, "SlotClass"); 689 689 autoload(Symbol._CLASS_SLOTS, "SlotClass"); 690 690 -
trunk/abcl/src/org/armedbear/lisp/Condition.java
r12512 r12576 142 142 public LispObject typeOf() 143 143 { 144 LispClass c = getLispClass(); 145 if (c != null) 146 return c.getName(); 144 LispObject c = getLispClass(); 145 if (c instanceof LispClass) 146 return ((LispClass)c).getName(); 147 else if (c != null) 148 return Symbol.CLASS_NAME.execute(c); 147 149 return Symbol.CONDITION; 148 150 } … … 151 153 public LispObject classOf() 152 154 { 153 Lisp Classc = getLispClass();155 LispObject c = getLispClass(); 154 156 if (c != null) 155 157 return c; -
trunk/abcl/src/org/armedbear/lisp/Layout.java
r12513 r12576 38 38 public class Layout extends LispObject 39 39 { 40 private final Lisp ClasslispClass;40 private final LispObject lispClass; 41 41 public final EqHashTable slotTable; 42 42 … … 46 46 private boolean invalid; 47 47 48 public Layout(Lisp ClasslispClass, LispObject instanceSlots, LispObject sharedSlots)48 public Layout(LispObject lispClass, LispObject instanceSlots, LispObject sharedSlots) 49 49 { 50 50 this.lispClass = lispClass; … … 65 65 } 66 66 67 public Layout(Lisp ClasslispClass, LispObject[] instanceSlotNames,67 public Layout(LispObject lispClass, LispObject[] instanceSlotNames, 68 68 LispObject sharedSlots) 69 69 { … … 104 104 } 105 105 106 public Lisp ClassgetLispClass()106 public LispObject getLispClass() 107 107 { 108 108 return lispClass; … … 160 160 161 161 { 162 return new Layout(checkClass(first), checkList(second), 163 checkList(third)); 162 return new Layout(first, checkList(second), checkList(third)); 164 163 } 165 164 … … 236 235 237 236 { 238 237 final Layout layOutFirst = checkLayout(first); 239 238 final LispObject slotNames[] = layOutFirst.slotNames; 240 239 final int limit = slotNames.length; … … 264 263 public LispObject execute(LispObject arg) 265 264 { 266 final LispClass lispClass = checkClass(arg); 267 Layout oldLayout = lispClass.getClassLayout(); 268 Layout newLayout = new Layout(oldLayout); 269 lispClass.setClassLayout(newLayout); 270 oldLayout.invalidate(); 265 final LispObject lispClass = arg; 266 LispObject oldLayout; 267 if (lispClass instanceof LispClass) 268 oldLayout = ((LispClass)lispClass).getClassLayout(); 269 else 270 oldLayout = Symbol.CLASS_LAYOUT.execute(lispClass); 271 272 Layout newLayout = new Layout((Layout)oldLayout); 273 if (lispClass instanceof LispClass) 274 ((LispClass)lispClass).setClassLayout(newLayout); 275 else 276 Symbol.CLASS_LAYOUT.getSymbolSetfFunction() 277 .execute(newLayout, lispClass); 278 ((Layout)oldLayout).invalidate(); 271 279 return arg; 272 280 } -
trunk/abcl/src/org/armedbear/lisp/Lisp.java
r12524 r12576 1654 1654 } 1655 1655 1656 public final static LispClass checkClass(LispObject obj)1657 1658 {1659 if (obj instanceof LispClass)1660 return (LispClass) obj;1661 return (LispClass)// Not reached.1662 type_error(obj, Symbol.CLASS);1663 }1664 1665 1656 public final static Layout checkLayout(LispObject obj) 1666 1657 -
trunk/abcl/src/org/armedbear/lisp/LispClass.java
r12481 r12576 49 49 } 50 50 51 public static LispObject addClass(Symbol symbol, LispObject c) 52 { 53 synchronized (map) 54 { 55 map.put(symbol, c); 56 } 57 return c; 58 } 59 51 60 public static void removeClass(Symbol symbol) 52 61 { … … 69 78 { 70 79 final Symbol symbol = checkSymbol(name); 71 final Lisp Classc;72 synchronized (map) 73 { 74 c = (LispClass)map.get(symbol);80 final LispObject c; 81 synchronized (map) 82 { 83 c = map.get(symbol); 75 84 } 76 85 if (c != null) … … 180 189 } 181 190 182 public void setClassLayout(L ayout layout)183 { 184 classLayout = layout ;191 public void setClassLayout(LispObject layout) 192 { 193 classLayout = layout == NIL ? null : (Layout)layout; 185 194 } 186 195 … … 202 211 } 203 212 204 public finalboolean isFinalized()213 public boolean isFinalized() 205 214 { 206 215 return finalized; 207 216 } 208 217 209 public finalvoid setFinalized(boolean b)218 public void setFinalized(boolean b) 210 219 { 211 220 finalized = b; … … 292 301 public boolean subclassp(LispObject obj) 293 302 { 294 LispObject cpl = getCPL(); 303 return false; 304 } 305 306 public static boolean subclassp(LispObject cls, LispObject obj) 307 { 308 LispObject cpl; 309 310 if (cls instanceof LispClass) 311 cpl = ((LispClass)cls).getCPL(); 312 else 313 cpl = Symbol.CLASS_PRECEDENCE_LIST.execute(cls); 314 295 315 while (cpl != NIL) 296 316 { … … 299 319 cpl = ((Cons)cpl).cdr; 300 320 } 321 322 if (cls instanceof LispClass) 323 // additional checks (currently because of JavaClass) 324 return ((LispClass)cls).subclassp(obj); 325 301 326 return false; 302 327 } … … 341 366 return second; 342 367 } 343 final LispClass c = checkClass(second); 344 addClass(name, c); 368 addClass(name, second); 345 369 return second; 346 370 } … … 355 379 356 380 { 357 final LispClass c = checkClass(first); 358 return c.subclassp(second) ? T : NIL; 381 return LispClass.subclassp(first, second) ? T : NIL; 359 382 } 360 383 }; -
trunk/abcl/src/org/armedbear/lisp/LispObject.java
r12541 r12576 678 678 } 679 679 680 public LispObject getSymbolSetfFunction() 681 { 682 return type_error(this, Symbol.SYMBOL); 683 } 684 685 public LispObject getSymbolSetfFunctionOrDie() 686 { 687 return type_error(this, Symbol.SYMBOL); 688 } 689 680 690 public String writeToString() 681 691 { -
trunk/abcl/src/org/armedbear/lisp/Primitives.java
r12516 r12576 5317 5317 @Override 5318 5318 public LispObject execute(LispObject arg) { 5319 return checkClass(arg).getName(); 5319 if (arg instanceof LispClass) 5320 return ((LispClass)arg).getName(); 5321 5322 return ((StandardObject)arg).getInstanceSlotValue(StandardClass.symName); 5320 5323 } 5321 5324 }; … … 5332 5335 5333 5336 { 5334 checkClass(first).setName(checkSymbol(second)); 5335 return second; 5337 if (second instanceof LispClass) 5338 ((LispClass)second).setName(checkSymbol(first)); 5339 else 5340 ((StandardObject)second).setInstanceSlotValue(StandardClass.symName, 5341 checkSymbol(first)); 5342 return first; 5336 5343 } 5337 5344 }; 5338 5345 5339 5346 // ### class-layout 5340 private static final Primitive CLASS_LAYOUT = new pf_class_layout(); 5341 private static final class pf_class_layout extends Primitive { 5342 pf_class_layout() { 5343 super("class-layout", PACKAGE_SYS, true, "class"); 5344 } 5345 5346 @Override 5347 public LispObject execute(LispObject arg) { 5348 Layout layout = checkClass(arg).getClassLayout(); 5347 private static final Primitive CLASS_LAYOUT = new pf__class_layout(); 5348 private static final class pf__class_layout extends Primitive { 5349 pf__class_layout() { 5350 super("%class-layout", PACKAGE_SYS, true, "class"); 5351 } 5352 5353 @Override 5354 public LispObject execute(LispObject arg) { 5355 Layout layout; 5356 if (arg instanceof LispClass) 5357 layout = ((LispClass)arg).getClassLayout(); 5358 else 5359 layout = (Layout)((StandardObject)arg).getInstanceSlotValue(StandardClass.symLayout); 5360 5349 5361 return layout != null ? layout : NIL; 5350 5362 } … … 5362 5374 5363 5375 { 5364 if (second instanceof Layout) { 5365 checkClass(first).setClassLayout((Layout)second); 5366 return second; 5367 } 5368 return type_error(second, Symbol.LAYOUT); 5369 } 5370 }; 5371 5372 // ### class-direct-superclasses 5373 private static final Primitive CLASS_DIRECT_SUPERCLASSES = new pf_class_direct_superclasses(); 5374 private static final class pf_class_direct_superclasses extends Primitive { 5375 pf_class_direct_superclasses() { 5376 super("class-direct-superclasses", PACKAGE_SYS, true); 5377 } 5378 5379 @Override 5380 public LispObject execute(LispObject arg) { 5381 return checkClass(arg).getDirectSuperclasses(); 5376 if (first == NIL || first instanceof Layout) { 5377 if (second instanceof LispClass) 5378 ((LispClass)second).setClassLayout(first); 5379 else 5380 ((StandardObject)second).setInstanceSlotValue(StandardClass.symLayout, first); 5381 return first; 5382 } 5383 return type_error(first, Symbol.LAYOUT); 5384 } 5385 }; 5386 5387 // ### %class-direct-superclasses 5388 private static final Primitive _CLASS_DIRECT_SUPERCLASSES = new pf__class_direct_superclasses(); 5389 private static final class pf__class_direct_superclasses extends Primitive { 5390 pf__class_direct_superclasses() { 5391 super("%class-direct-superclasses", PACKAGE_SYS, true); 5392 } 5393 5394 @Override 5395 public LispObject execute(LispObject arg) { 5396 if (arg instanceof LispClass) 5397 return ((LispClass)arg).getDirectSuperclasses(); 5398 else 5399 return ((StandardObject)arg).getInstanceSlotValue(StandardClass.symDirectSuperclasses); 5382 5400 } 5383 5401 }; … … 5392 5410 @Override 5393 5411 public LispObject execute(LispObject first, LispObject second) 5394 5395 { 5396 checkClass(first).setDirectSuperclasses(second); 5397 return second; 5398 } 5399 }; 5400 5401 // ### class-direct-subclasses 5402 private static final Primitive CLASS_DIRECT_SUBCLASSES = new pf_class_direct_subclasses(); 5403 private static final class pf_class_direct_subclasses extends Primitive { 5404 pf_class_direct_subclasses() { 5405 super("class-direct-subclasses", PACKAGE_SYS, true); 5406 } 5407 5408 @Override 5409 public LispObject execute(LispObject arg) { 5410 return checkClass(arg).getDirectSubclasses(); 5412 { 5413 if (second instanceof LispClass) 5414 ((LispClass)second).setDirectSuperclasses(first); 5415 else 5416 ((StandardObject)second).setInstanceSlotValue(StandardClass.symDirectSuperclasses, first); 5417 return first; 5418 } 5419 }; 5420 5421 // ### %class-direct-subclasses 5422 private static final Primitive _CLASS_DIRECT_SUBCLASSES = new pf__class_direct_subclasses(); 5423 private static final class pf__class_direct_subclasses extends Primitive { 5424 pf__class_direct_subclasses() { 5425 super("%class-direct-subclasses", PACKAGE_SYS, true); 5426 } 5427 5428 @Override 5429 public LispObject execute(LispObject arg) { 5430 if (arg instanceof LispClass) 5431 return ((LispClass)arg).getDirectSubclasses(); 5432 else 5433 return ((StandardObject)arg).getInstanceSlotValue(StandardClass.symDirectSubclasses); 5411 5434 } 5412 5435 }; … … 5422 5445 @Override 5423 5446 public LispObject execute(LispObject first, LispObject second) 5424 5425 { 5426 checkClass(first).setDirectSubclasses(second); 5427 return second; 5447 { 5448 if (second instanceof LispClass) 5449 ((LispClass)second).setDirectSubclasses(first); 5450 else 5451 ((StandardObject)second).setInstanceSlotValue(StandardClass.symDirectSubclasses, first); 5452 return first; 5428 5453 } 5429 5454 }; … … 5438 5463 @Override 5439 5464 public LispObject execute(LispObject arg) { 5440 return checkClass(arg).getCPL(); 5441 } 5442 }; 5443 5444 // ### set-class-precedence-list 5445 private static final Primitive SET_CLASS_PRECEDENCE_LIST = new pf_set_class_precedence_list(); 5446 private static final class pf_set_class_precedence_list extends Primitive { 5447 pf_set_class_precedence_list() { 5448 super("set-class-precedence-list", PACKAGE_SYS, true); 5449 } 5450 5451 @Override 5452 public LispObject execute(LispObject first, LispObject second) 5453 5454 { 5455 checkClass(first).setCPL(second); 5456 return second; 5457 } 5458 }; 5459 5460 // ### class-direct-methods 5461 private static final Primitive CLASS_DIRECT_METHODS = new pf_class_direct_methods(); 5462 private static final class pf_class_direct_methods extends Primitive { 5463 pf_class_direct_methods() { 5464 super("class-direct-methods", PACKAGE_SYS, true); 5465 if (arg instanceof LispClass) 5466 return ((LispClass)arg).getCPL(); 5467 else 5468 return ((StandardObject)arg).getInstanceSlotValue(StandardClass.symPrecedenceList); 5469 } 5470 }; 5471 5472 // ### %set-class-precedence-list 5473 private static final Primitive _SET_CLASS_PRECEDENCE_LIST = new pf__set_class_precedence_list(); 5474 private static final class pf__set_class_precedence_list extends Primitive { 5475 pf__set_class_precedence_list() { 5476 super("%set-class-precedence-list", PACKAGE_SYS, true); 5477 } 5478 5479 @Override 5480 public LispObject execute(LispObject first, LispObject second) 5481 { 5482 if (second instanceof LispClass) 5483 ((LispClass)second).setCPL(first); 5484 else 5485 ((StandardObject)second).setInstanceSlotValue(StandardClass.symPrecedenceList, first); 5486 return first; 5487 } 5488 }; 5489 5490 // ### %class-direct-methods 5491 private static final Primitive _CLASS_DIRECT_METHODS = new pf__class_direct_methods(); 5492 private static final class pf__class_direct_methods extends Primitive { 5493 pf__class_direct_methods() { 5494 super("%class-direct-methods", PACKAGE_SYS, true); 5465 5495 } 5466 5496 5467 5497 @Override 5468 5498 public LispObject execute(LispObject arg) 5469 5470 { 5471 return checkClass(arg).getDirectMethods(); 5499 { 5500 if (arg instanceof LispClass) 5501 return ((LispClass)arg).getDirectMethods(); 5502 else 5503 return ((StandardObject)arg).getInstanceSlotValue(StandardClass.symDirectMethods); 5472 5504 } 5473 5505 }; … … 5482 5514 @Override 5483 5515 public LispObject execute(LispObject first, LispObject second) 5484 5485 { 5486 checkClass(first).setDirectMethods(second); 5487 return second; 5516 { 5517 if (second instanceof LispClass) 5518 ((LispClass)second).setDirectMethods(first); 5519 else 5520 ((StandardObject)second).setInstanceSlotValue(StandardClass.symDirectMethods, first); 5521 return first; 5488 5522 } 5489 5523 }; … … 5501 5535 5502 5536 { 5503 return checkClass(arg).getDocumentation(); 5537 if (arg instanceof LispClass) 5538 return ((LispClass)arg).getDocumentation(); 5539 else 5540 return ((StandardObject)arg).getInstanceSlotValue(StandardClass.symDocumentation); 5504 5541 } 5505 5542 }; … … 5515 5552 @Override 5516 5553 public LispObject execute(LispObject first, LispObject second) 5517 5518 { 5519 checkClass(first).setDocumentation(second); 5554 { 5555 if (first instanceof LispClass) 5556 ((LispClass)first).setDocumentation(second); 5557 else 5558 ((StandardObject)first).setInstanceSlotValue(StandardClass.symDocumentation, second); 5520 5559 return second; 5521 5560 } 5522 5561 }; 5523 5562 5524 // ### class-finalized-p 5525 private static final Primitive CLASS_FINALIZED_P = new pf_class_finalized_p(); 5526 private static final class pf_class_finalized_p extends Primitive { 5527 pf_class_finalized_p() { 5528 super("class-finalized-p", PACKAGE_SYS, true); 5529 } 5530 5531 @Override 5532 public LispObject execute(LispObject arg) { 5533 return checkClass(arg).isFinalized() ? T : NIL; 5563 // ### %class-finalized-p 5564 private static final Primitive _CLASS_FINALIZED_P = new pf__class_finalized_p(); 5565 private static final class pf__class_finalized_p extends Primitive { 5566 pf__class_finalized_p() { 5567 super("%class-finalized-p", PACKAGE_SYS, true); 5568 } 5569 5570 @Override 5571 public LispObject execute(LispObject arg) { 5572 if (arg instanceof LispClass) 5573 return ((LispClass)arg).isFinalized() ? T : NIL; 5574 else 5575 return ((StandardObject)arg).getInstanceSlotValue(StandardClass.symFinalizedP); 5534 5576 } 5535 5577 }; … … 5544 5586 @Override 5545 5587 public LispObject execute(LispObject first, LispObject second) 5546 5547 { 5548 checkClass(first).setFinalized(second != NIL); 5549 return second; 5588 { 5589 if (second instanceof LispClass) 5590 ((LispClass)second).setFinalized(first != NIL); 5591 else 5592 ((StandardObject)second).setInstanceSlotValue(StandardClass.symFinalizedP, first); 5593 return first; 5550 5594 } 5551 5595 }; … … 5560 5604 @Override 5561 5605 public LispObject execute(LispObject arg) { 5562 return arg instanceof LispClass ? T : NIL;5606 return (arg instanceof LispClass) ? T : arg.typep(Symbol.CLASS); 5563 5607 } 5564 5608 }; -
trunk/abcl/src/org/armedbear/lisp/SlotClass.java
r12513 r12576 179 179 // ### class-direct-slots 180 180 private static final Primitive CLASS_DIRECT_SLOTS = 181 new Primitive(" class-direct-slots", PACKAGE_SYS, true)181 new Primitive("%class-direct-slots", PACKAGE_SYS, true) 182 182 { 183 183 @Override … … 201 201 202 202 { 203 if ( firstinstanceof SlotClass) {204 ((SlotClass) first).setDirectSlotDefinitions(second);205 return second;203 if (second instanceof SlotClass) { 204 ((SlotClass)second).setDirectSlotDefinitions(first); 205 return first; 206 206 } 207 207 else { 208 return type_error( first, Symbol.STANDARD_CLASS);208 return type_error(second, Symbol.STANDARD_CLASS); 209 209 } 210 210 } … … 228 228 229 229 // ### set-class-slots 230 private static final Primitive SET_CLASS_SLOTS =231 new Primitive(Symbol. SET_CLASS_SLOTS, "class slot-definitions")230 private static final Primitive _SET_CLASS_SLOTS = 231 new Primitive(Symbol._SET_CLASS_SLOTS, "class slot-definitions") 232 232 { 233 233 @Override … … 235 235 236 236 { 237 if ( firstinstanceof SlotClass) {238 ((SlotClass) first).setSlotDefinitions(second);239 return second;237 if (second instanceof SlotClass) { 238 ((SlotClass)second).setSlotDefinitions(first); 239 return first; 240 240 } 241 241 else { 242 return type_error( first, Symbol.STANDARD_CLASS);242 return type_error(second, Symbol.STANDARD_CLASS); 243 243 } 244 244 } … … 247 247 // ### class-direct-default-initargs 248 248 private static final Primitive CLASS_DIRECT_DEFAULT_INITARGS = 249 new Primitive(" class-direct-default-initargs", PACKAGE_SYS, true)249 new Primitive("%class-direct-default-initargs", PACKAGE_SYS, true) 250 250 { 251 251 @Override … … 269 269 270 270 { 271 if ( firstinstanceof SlotClass) {272 ((SlotClass) first).setDirectDefaultInitargs(second);273 return second;274 } 275 return type_error( first, Symbol.STANDARD_CLASS);271 if (second instanceof SlotClass) { 272 ((SlotClass)second).setDirectDefaultInitargs(first); 273 return first; 274 } 275 return type_error(second, Symbol.STANDARD_CLASS); 276 276 } 277 277 }; … … 279 279 // ### class-default-initargs 280 280 private static final Primitive CLASS_DEFAULT_INITARGS = 281 new Primitive(" class-default-initargs", PACKAGE_SYS, true)281 new Primitive("%class-default-initargs", PACKAGE_SYS, true) 282 282 { 283 283 @Override … … 301 301 302 302 { 303 if (first instanceof SlotClass) { 304 ((SlotClass)first).setDefaultInitargs(second); 305 return second; 306 } 307 return type_error(first, Symbol.STANDARD_CLASS); 308 } 309 }; 310 311 // ### compute-class-default-initargs 312 private static final Primitive COMPUTE_CLASS_DEFAULT_INITARGS = 313 new Primitive("compute-class-default-initargs", PACKAGE_SYS, true) 314 { 315 @Override 316 public LispObject execute(LispObject arg) 317 318 { 319 final SlotClass c; 320 if (arg instanceof SlotClass) { 321 c = (SlotClass) arg; 322 } 323 else { 324 return type_error(arg, Symbol.STANDARD_CLASS); 325 } 326 return c.computeDefaultInitargs(); 327 } 328 }; 303 if (second instanceof SlotClass) { 304 ((SlotClass)second).setDefaultInitargs(first); 305 return first; 306 } 307 return type_error(second, Symbol.STANDARD_CLASS); 308 } 309 }; 310 329 311 } -
trunk/abcl/src/org/armedbear/lisp/SlotDefinition.java
r12521 r12576 70 70 slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = Keyword.INSTANCE; 71 71 } 72 72 73 public SlotDefinition(LispObject name, LispObject readers, 74 Function initFunction) 75 { 76 this(); 77 Debug.assertTrue(name instanceof Symbol); 78 slots[SlotDefinitionClass.SLOT_INDEX_NAME] = name; 79 slots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = initFunction; 80 slots[SlotDefinitionClass.SLOT_INDEX_INITFORM] = NIL; 81 slots[SlotDefinitionClass.SLOT_INDEX_INITARGS] = 82 new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName())); 83 slots[SlotDefinitionClass.SLOT_INDEX_READERS] = readers; 84 slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = Keyword.INSTANCE; 85 } 86 73 87 public static SlotDefinition checkSlotDefinition(LispObject obj) { 74 88 if (obj instanceof SlotDefinition) return (SlotDefinition)obj; … … 148 162 149 163 // ### set-slot-definition-initfunction 150 privatestatic final Primitive SET_SLOT_DEFINITION_INITFUNCTION =164 static final Primitive SET_SLOT_DEFINITION_INITFUNCTION = 151 165 new Primitive("set-slot-definition-initfunction", PACKAGE_SYS, true, 152 166 "slot-definition initfunction") … … 174 188 175 189 // ### set-slot-definition-initform 176 privatestatic final Primitive SET_SLOT_DEFINITION_INITFORM =190 static final Primitive SET_SLOT_DEFINITION_INITFORM = 177 191 new Primitive("set-slot-definition-initform", PACKAGE_SYS, true, 178 192 "slot-definition initform") -
trunk/abcl/src/org/armedbear/lisp/StandardClass.java
r12481 r12576 39 39 { 40 40 41 p rivatestatic Symbol symName = PACKAGE_MOP.intern("NAME");42 p rivatestatic Symbol symLayout = PACKAGE_MOP.intern("LAYOUT");43 p rivatestatic Symbol symDirectSuperclasses41 public static Symbol symName = PACKAGE_MOP.intern("NAME"); 42 public static Symbol symLayout = PACKAGE_MOP.intern("LAYOUT"); 43 public static Symbol symDirectSuperclasses 44 44 = PACKAGE_MOP.intern("DIRECT-SUPERCLASSES"); 45 p rivatestatic Symbol symDirectSubclasses45 public static Symbol symDirectSubclasses 46 46 = PACKAGE_MOP.intern("DIRECT-SUBCLASSES"); 47 p rivate static Symbol symClassPrecedenceList48 = PACKAGE_MOP.intern(" CLASS-PRECEDENCE-LIST");49 p rivatestatic Symbol symDirectMethods47 public static Symbol symPrecedenceList 48 = PACKAGE_MOP.intern("PRECEDENCE-LIST"); 49 public static Symbol symDirectMethods 50 50 = PACKAGE_MOP.intern("DIRECT-METHODS"); 51 p rivatestatic Symbol symDocumentation51 public static Symbol symDocumentation 52 52 = PACKAGE_MOP.intern("DOCUMENTATION"); 53 p rivatestatic Symbol symDirectSlots53 public static Symbol symDirectSlots 54 54 = PACKAGE_MOP.intern("DIRECT-SLOTS"); 55 p rivatestatic Symbol symSlots55 public static Symbol symSlots 56 56 = PACKAGE_MOP.intern("SLOTS"); 57 p rivatestatic Symbol symDirectDefaultInitargs57 public static Symbol symDirectDefaultInitargs 58 58 = PACKAGE_MOP.intern("DIRECT-DEFAULT-INITARGS"); 59 p rivatestatic Symbol symDefaultInitargs59 public static Symbol symDefaultInitargs 60 60 = PACKAGE_MOP.intern("DEFAULT-INITARGS"); 61 public static Symbol symFinalizedP 62 = PACKAGE_MOP.intern("FINALIZED-P"); 61 63 62 64 static Layout layoutStandardClass = … … 66 68 symDirectSuperclasses, 67 69 symDirectSubclasses, 68 sym ClassPrecedenceList,70 symPrecedenceList, 69 71 symDirectMethods, 70 72 symDocumentation, … … 72 74 symSlots, 73 75 symDirectDefaultInitargs, 74 symDefaultInitargs), 76 symDefaultInitargs, 77 symFinalizedP), 75 78 NIL) 76 79 { … … 87 90 setDirectSuperclasses(NIL); 88 91 setDirectSubclasses(NIL); 92 setClassLayout(layoutStandardClass); 89 93 setCPL(NIL); 90 94 setDirectMethods(NIL); … … 94 98 setDirectDefaultInitargs(NIL); 95 99 setDefaultInitargs(NIL); 100 setFinalized(false); 96 101 } 97 102 … … 101 106 symbol, directSuperclasses); 102 107 setDirectSubclasses(NIL); 108 setClassLayout(layoutStandardClass); 103 109 setCPL(NIL); 104 110 setDirectMethods(NIL); … … 108 114 setDirectDefaultInitargs(NIL); 109 115 setDefaultInitargs(NIL); 116 setFinalized(false); 110 117 } 111 118 … … 130 137 131 138 @Override 132 public void setClassLayout(L ayout newLayout)139 public void setClassLayout(LispObject newLayout) 133 140 { 134 141 setInstanceSlotValue(symLayout, newLayout); … … 148 155 149 156 @Override 157 public final boolean isFinalized() 158 { 159 return getInstanceSlotValue(symFinalizedP) != NIL; 160 } 161 162 @Override 163 public final void setFinalized(boolean b) 164 { 165 setInstanceSlotValue(symFinalizedP, b ? T : NIL); 166 } 167 168 @Override 150 169 public LispObject getDirectSubclasses() 151 170 { … … 162 181 public LispObject getCPL() 163 182 { 164 return getInstanceSlotValue(sym ClassPrecedenceList);183 return getInstanceSlotValue(symPrecedenceList); 165 184 } 166 185 … … 170 189 LispObject obj1 = cpl[0]; 171 190 if (obj1.listp() && cpl.length == 1) 172 setInstanceSlotValue(sym ClassPrecedenceList, obj1);191 setInstanceSlotValue(symPrecedenceList, obj1); 173 192 else 174 193 { … … 177 196 for (int i = cpl.length; i-- > 0;) 178 197 l = new Cons(cpl[i], l); 179 setInstanceSlotValue(sym ClassPrecedenceList, l);198 setInstanceSlotValue(symPrecedenceList, l); 180 199 } 181 200 } … … 253 272 } 254 273 255 274 @Override 275 public LispObject typeOf() 276 { 277 return Symbol.STANDARD_CLASS; 278 } 256 279 257 280 @Override … … 298 321 } 299 322 323 private static final LispObject standardClassSlotDefinitions() 324 { 325 // (CONSTANTLY NIL) 326 Function initFunction = new Function() { 327 @Override 328 public LispObject execute() 329 { 330 return NIL; 331 } 332 }; 333 334 return 335 list(helperMakeSlotDefinition("NAME", initFunction), 336 helperMakeSlotDefinition("LAYOUT", initFunction), 337 helperMakeSlotDefinition("DIRECT-SUPERCLASSES", initFunction), 338 helperMakeSlotDefinition("DIRECT-SUBCLASSES", initFunction), 339 helperMakeSlotDefinition("PRECEDENCE-LIST", initFunction), 340 helperMakeSlotDefinition("DIRECT-METHODS", initFunction), 341 helperMakeSlotDefinition("DIRECT-SLOTS", initFunction), 342 helperMakeSlotDefinition("SLOTS", initFunction), 343 helperMakeSlotDefinition("DIRECT-DEFAULT-INITARGS", initFunction), 344 helperMakeSlotDefinition("DEFAULT-INITARGS", initFunction), 345 helperMakeSlotDefinition("FINALIZED-P", initFunction)); 346 } 347 348 349 350 private static final SlotDefinition helperMakeSlotDefinition(String name, 351 Function init) 352 { 353 return 354 new SlotDefinition(PACKAGE_MOP.intern(name), // name 355 list(PACKAGE_MOP.intern("CLASS-" + name)), // readers 356 init); 357 } 358 300 359 private static final StandardClass addStandardClass(Symbol name, 301 360 LispObject directSuperclasses) … … 322 381 323 382 STANDARD_CLASS.setClassLayout(layoutStandardClass); 324 STANDARD_CLASS.setDirectSlotDefinitions( STANDARD_CLASS.getClassLayout().generateSlotDefinitions());383 STANDARD_CLASS.setDirectSlotDefinitions(standardClassSlotDefinitions()); 325 384 } 326 385 … … 617 676 618 677 // Condition classes. 678 STANDARD_CLASS.finalizeClass(); 619 679 ARITHMETIC_ERROR.finalizeClass(); 620 680 CELL_ERROR.finalizeClass(); -
trunk/abcl/src/org/armedbear/lisp/StandardGenericFunction.java
r12513 r12576 210 210 { 211 211 StringBuilder sb = new StringBuilder(); 212 sb.append(getLispClass().getName().writeToString()); 212 LispObject className; 213 LispObject lispClass = getLispClass(); 214 if (lispClass instanceof LispClass) 215 className = ((LispClass)lispClass).getName(); 216 else 217 className = Symbol.CLASS_NAME.execute(lispClass); 218 219 sb.append(className.writeToString()); 213 220 sb.append(' '); 214 221 sb.append(name.writeToString()); -
trunk/abcl/src/org/armedbear/lisp/StandardMethod.java
r12481 r12576 157 157 { 158 158 StringBuilder sb = new StringBuilder(); 159 sb.append(getLispClass().getName().writeToString()); 159 LispObject className; 160 LispObject lispClass = getLispClass(); 161 if (lispClass instanceof LispClass) 162 className = ((LispClass)lispClass).getName(); 163 else 164 className = Symbol.CLASS_NAME.execute(lispClass); 165 166 sb.append(className.writeToString()); 160 167 sb.append(' '); 161 168 sb.append(name.writeToString()); -
trunk/abcl/src/org/armedbear/lisp/StandardObject.java
r12513 r12576 47 47 48 48 49 protected StandardObject(Layout layout) 50 { 51 this(layout, layout.getLength()); 52 } 53 49 54 protected StandardObject(Layout layout, int length) 50 55 { … … 99 104 } 100 105 101 public final Lisp ClassgetLispClass()106 public final LispObject getLispClass() 102 107 { 103 108 return layout.getLispClass(); 109 } 110 111 private LispObject helperGetClassName() 112 { 113 final LispObject c1 = layout.getLispClass(); 114 if (c1 instanceof LispClass) 115 return ((LispClass)c1).getName(); 116 else 117 return LispThread.currentThread().execute(Symbol.CLASS_NAME, c1); 118 } 119 120 private LispObject helperGetCPL() 121 { 122 final LispObject c1 = layout.getLispClass(); 123 if (c1 instanceof LispClass) 124 return ((LispClass)c1).getCPL(); 125 else 126 return LispThread.currentThread().execute(Symbol.CLASS_PRECEDENCE_LIST, c1); 104 127 } 105 128 … … 111 134 // CLASS-OF if it has a proper name, and otherwise returns the class 112 135 // itself." 113 final LispClass c1 = layout.getLispClass(); 136 final LispObject c1 = layout.getLispClass(); 137 LispObject name; 138 if (c1 instanceof LispClass) 139 name = ((LispClass)c1).getName(); 140 else 141 name = LispThread.currentThread().execute(Symbol.CLASS_NAME, c1); 142 114 143 // The proper name of a class is "a symbol that names the class whose 115 144 // name is that symbol". 116 final LispObject name = c1.getName();117 145 if (name != NIL && name != UNBOUND_VALUE) 118 146 { 119 147 // TYPE-OF.9 120 final LispObject c2 = LispClass.findClass( checkSymbol(name));148 final LispObject c2 = LispClass.findClass(name, false); 121 149 if (c2 == c1) 122 150 return name; … … 138 166 if (type == StandardClass.STANDARD_OBJECT) 139 167 return T; 140 Lisp Classcls = layout != null ? layout.getLispClass() : null;168 LispObject cls = layout != null ? layout.getLispClass() : null; 141 169 if (cls != null) 142 170 { 143 171 if (type == cls) 144 172 return T; 145 if (type == cls.getName())173 if (type == helperGetClassName()) 146 174 return T; 147 LispObject cpl = cls.getCPL();175 LispObject cpl = helperGetCPL(); 148 176 while (cpl != NIL) 149 177 { 150 178 if (type == cpl.car()) 151 179 return T; 152 if (type == ((LispClass)cpl.car()).getName()) 153 return T; 180 181 LispObject otherName; 182 LispObject otherClass = cpl.car(); 183 if (otherClass instanceof LispClass) { 184 if (type == ((LispClass)otherClass).getName()) 185 return T; 186 } 187 else 188 if (type == LispThread 189 .currentThread().execute(Symbol.CLASS_NAME, otherClass)) 190 return T; 191 154 192 cpl = cpl.cdr(); 155 193 } … … 184 222 Debug.assertTrue(layout.isInvalid()); 185 223 Layout oldLayout = layout; 186 LispClass cls = oldLayout.getLispClass(); 187 Layout newLayout = cls.getClassLayout(); 224 LispObject cls = oldLayout.getLispClass(); 225 Layout newLayout; 226 227 if (cls instanceof LispClass) 228 newLayout = ((LispClass)cls).getClassLayout(); 229 else 230 newLayout = (Layout)Symbol.CLASS_LAYOUT.execute(cls); 231 188 232 Debug.assertTrue(!newLayout.isInvalid()); 189 StandardObject newInstance = new StandardObject( cls);233 StandardObject newInstance = new StandardObject(newLayout); 190 234 Debug.assertTrue(newInstance.layout == newLayout); 191 235 LispObject added = NIL; -
trunk/abcl/src/org/armedbear/lisp/StandardObjectFunctions.java
r12290 r12576 48 48 return new StandardClass(); 49 49 if (arg instanceof StandardClass) 50 return ((StandardClass)arg).allocateInstance(); 50 return ((StandardClass)arg).allocateInstance(); 51 if (arg.typep(StandardClass.STANDARD_CLASS) != NIL) { 52 Layout layout = (Layout)Symbol.CLASS_LAYOUT.execute(arg); 53 return new StandardObject(layout); 54 } 51 55 return type_error(arg, Symbol.STANDARD_CLASS); 52 56 } -
trunk/abcl/src/org/armedbear/lisp/Symbol.java
r12515 r12576 391 391 } 392 392 393 @Override 394 public final LispObject getSymbolSetfFunction() 395 { 396 return get(this, Symbol.SETF_FUNCTION, NIL); 397 } 398 399 400 @Override 393 401 public final LispObject getSymbolSetfFunctionOrDie() 394 395 402 { 396 403 LispObject obj = get(this, Symbol.SETF_FUNCTION, null); … … 2922 2929 2923 2930 // MOP. 2931 public static final Symbol CLASS_LAYOUT = 2932 PACKAGE_MOP.addInternalSymbol("CLASS-LAYOUT"); 2933 public static final Symbol CLASS_PRECEDENCE_LIST = 2934 PACKAGE_MOP.addInternalSymbol("CLASS-PRECEDENCE-LIST"); 2924 2935 public static final Symbol STANDARD_READER_METHOD = 2925 2936 PACKAGE_MOP.addExternalSymbol("STANDARD-READER-METHOD"); … … 2966 2977 public static final Symbol OUTPUT_OBJECT = 2967 2978 PACKAGE_SYS.addExternalSymbol("OUTPUT-OBJECT"); 2968 public static final Symbol SET_CLASS_SLOTS =2969 PACKAGE_SYS.addExternalSymbol(" SET-CLASS-SLOTS");2979 public static final Symbol _SET_CLASS_SLOTS = 2980 PACKAGE_SYS.addExternalSymbol("%SET-CLASS-SLOTS"); 2970 2981 public static final Symbol SETF_FUNCTION = 2971 2982 PACKAGE_SYS.addExternalSymbol("SETF-FUNCTION"); -
trunk/abcl/src/org/armedbear/lisp/clos.lisp
r12516 r12576 54 54 (export '(class-precedence-list class-slots)) 55 55 56 (defun class-slots (class) 57 (%class-slots class)) 56 ;; Don't use DEFVAR, because that disallows loading clos.lisp 57 ;; after compiling it: the binding won't get assigned to T anymore 58 (defparameter *clos-booting* t) 59 60 (defmacro define-class->%class-forwarder (name) 61 (let* (($name (if (consp name) (cadr name) name)) 62 (%name (intern (concatenate 'string 63 "%" 64 (if (consp name) 65 (symbol-name 'set-) "") 66 (symbol-name $name)) 67 (symbol-package $name)))) 68 `(progn 69 (declaim (notinline ,name)) 70 (defun ,name (&rest args) 71 (apply #',%name args))))) 72 73 (define-class->%class-forwarder class-name) 74 (define-class->%class-forwarder (setf class-name)) 75 (define-class->%class-forwarder class-slots) 76 (define-class->%class-forwarder (setf class-slots)) 77 (define-class->%class-forwarder class-direct-slots) 78 (define-class->%class-forwarder (setf class-direct-slots)) 79 (define-class->%class-forwarder class-layout) 80 (define-class->%class-forwarder (setf class-layout)) 81 (define-class->%class-forwarder class-direct-superclasses) 82 (define-class->%class-forwarder (setf class-direct-superclasses)) 83 (define-class->%class-forwarder class-direct-subclasses) 84 (define-class->%class-forwarder (setf class-direct-subclasses)) 85 (define-class->%class-forwarder class-direct-methods) 86 (define-class->%class-forwarder (setf class-direct-methods)) 87 (define-class->%class-forwarder class-precedence-list) 88 (define-class->%class-forwarder (setf class-precedence-list)) 89 (define-class->%class-forwarder class-finalized-p) 90 (define-class->%class-forwarder (setf class-finalized-p)) 91 (define-class->%class-forwarder class-default-initargs) 92 (define-class->%class-forwarder (setf class-default-initargs)) 93 (define-class->%class-forwarder class-direct-default-initargs) 94 (define-class->%class-forwarder (setf class-direct-default-initargs)) 95 96 (defun no-applicable-method (generic-function &rest args) 97 (error "There is no applicable method for the generic function ~S when called with arguments ~S." 98 generic-function 99 args)) 100 101 58 102 59 103 (defmacro push-on-end (value location) … … 86 130 (mapplist fun (cddr x))))) 87 131 88 (defsetf class-layout %set-class-layout)89 (defsetf class-direct-superclasses %set-class-direct-superclasses)90 (defsetf class-direct-subclasses %set-class-direct-subclasses)91 (defsetf class-direct-methods %set-class-direct-methods)92 (defsetf class-direct-slots %set-class-direct-slots)93 ;; (defsetf class-slots %set-class-slots)94 (defsetf class-direct-default-initargs %set-class-direct-default-initargs)95 (defsetf class-default-initargs %set-class-default-initargs)96 (defsetf class-finalized-p %set-class-finalized-p)97 132 (defsetf std-instance-layout %set-std-instance-layout) 98 133 (defsetf standard-instance-access %set-standard-instance-access) … … 254 289 ;;; finalize-inheritance 255 290 291 (defun std-compute-class-default-initargs (class) 292 (mapcan #'(lambda (c) 293 (copy-list 294 (class-direct-default-initargs c))) 295 (class-precedence-list class))) 296 256 297 (defun std-finalize-inheritance (class) 257 (set-class-precedence-list 258 class 298 (setf (class-precedence-list class) 259 299 (funcall (if (eq (class-of class) (find-class 'standard-class)) 260 300 #'std-compute-class-precedence-list 261 301 #'compute-class-precedence-list) 262 302 class)) 263 (dolist (class ( %class-precedence-list class))303 (dolist (class (class-precedence-list class)) 264 304 (when (typep class 'forward-referenced-class) 265 305 (return-from std-finalize-inheritance))) 266 (set -class-slots class306 (setf (class-slots class) 267 307 (funcall (if (eq (class-of class) (find-class 'standard-class)) 268 308 #'std-compute-slots 269 #'compute-slots) 270 class)) 309 #'compute-slots) class)) 271 310 (let ((old-layout (class-layout class)) 272 311 (length 0) 273 312 (instance-slots '()) 274 313 (shared-slots '())) 275 (dolist (slot ( %class-slots class))314 (dolist (slot (class-slots class)) 276 315 (case (%slot-definition-allocation slot) 277 316 (:instance … … 293 332 (old-location (layout-slot-location old-layout slot-name))) 294 333 (unless old-location 295 (let* ((slot-definition (find slot-name ( %class-slots class) :key #'%slot-definition-name))334 (let* ((slot-definition (find slot-name (class-slots class) :key #'%slot-definition-name)) 296 335 (initfunction (%slot-definition-initfunction slot-definition))) 297 336 (when initfunction … … 299 338 (setf (class-layout class) 300 339 (make-layout class (nreverse instance-slots) (nreverse shared-slots)))) 301 (setf (class-default-initargs class) (compute-class-default-initargs class)) 340 (setf (class-default-initargs class) 341 (std-compute-class-default-initargs class)) 302 342 (setf (class-finalized-p class) t)) 303 343 … … 393 433 (defun std-compute-slots (class) 394 434 (let* ((all-slots (mapappend #'class-direct-slots 395 ( %class-precedence-list class)))435 (class-precedence-list class))) 396 436 (all-names (remove-duplicates 397 437 (mapcar #'%slot-definition-name all-slots)))) … … 432 472 433 473 (defun find-slot-definition (class slot-name) 434 (dolist (slot ( %class-slots class) nil)474 (dolist (slot (class-slots class) nil) 435 475 (when (eq slot-name (%slot-definition-name slot)) 436 476 (return slot)))) … … 482 522 483 523 (defun std-slot-exists-p (instance slot-name) 484 (not (null (find slot-name ( %class-slots (class-of instance))524 (not (null (find slot-name (class-slots (class-of instance)) 485 525 :key #'%slot-definition-name)))) 486 526 … … 500 540 (declare (ignore metaclass)) 501 541 (let ((class (std-allocate-instance (find-class 'standard-class)))) 502 (%set-class-name class name) 503 (setf (class-direct-subclasses class) ()) 504 (setf (class-direct-methods class) ()) 542 (%set-class-name name class) 543 (%set-class-layout nil class) 544 (%set-class-direct-subclasses () class) 545 (%set-class-direct-methods () class) 505 546 (%set-class-documentation class documentation) 506 547 (std-after-initialization-for-classes class … … 538 579 (getf canonical-slot :name)) 539 580 540 (defun ensure-class (name &rest all-keys & allow-other-keys)581 (defun ensure-class (name &rest all-keys &key metaclass &allow-other-keys) 541 582 ;; Check for duplicate slots. 583 (remf all-keys :metaclass) 542 584 (let ((slots (getf all-keys :direct-slots))) 543 585 (dolist (s1 slots) … … 564 606 (error "Attempt to define a subclass of a built-in-class: ~S" class)))) 565 607 (let ((old-class (find-class name nil))) 566 (cond ((and old-class (eq name ( %class-name old-class)))608 (cond ((and old-class (eq name (class-name old-class))) 567 609 (cond ((typep old-class 'built-in-class) 568 610 (error "The symbol ~S names a built-in class." name)) … … 583 625 old-class))) 584 626 (t 585 (let ((class (apply #'make-instance-standard-class 586 (find-class 'standard-class) 627 (let ((class (apply (if metaclass 628 #'make-instance 629 #'make-instance-standard-class) 630 (or metaclass 631 (find-class 'standard-class)) 587 632 :name name all-keys))) 588 633 (%set-find-class name class) … … 832 877 gf) 833 878 (progn 834 (when (fboundp function-name) 879 (when (and (null *clos-booting*) 880 (fboundp function-name)) 835 881 (error 'program-error 836 882 :format-control "~A already names an ordinary function, macro, or special operator." … … 1781 1827 ))) 1782 1828 1783 (fmakunbound 'class-name) 1784 (fmakunbound '(setf class-name)) 1785 1786 (defgeneric class-name (class)) 1787 1788 (defmethod class-name ((class class)) 1789 (%class-name class)) 1790 1791 (defgeneric (setf class-name) (new-value class)) 1792 1793 (defmethod (setf class-name) (new-value (class class)) 1794 (%set-class-name class new-value)) 1795 1796 (when (autoloadp 'class-precedence-list) 1797 (fmakunbound 'class-precedence-list)) 1798 1799 (defgeneric class-precedence-list (class)) 1800 1801 (defmethod class-precedence-list ((class class)) 1802 (%class-precedence-list class)) 1829 (defmacro redefine-class-forwarder (name slot &optional alternative-name) 1830 (let* (($name (if (consp name) (cadr name) name)) 1831 (%name (intern (concatenate 'string 1832 "%" 1833 (if (consp name) 1834 (symbol-name 'set-) "") 1835 (symbol-name $name)) 1836 (find-package "SYS")))) 1837 (unless alternative-name 1838 (setf alternative-name name)) 1839 (if (consp name) 1840 `(progn ;; setter 1841 (defgeneric ,alternative-name (new-value class)) 1842 (defmethod ,alternative-name (new-value (class built-in-class)) 1843 (,%name new-value class)) 1844 (defmethod ,alternative-name (new-value (class forward-referenced-class)) 1845 (,%name new-value class)) 1846 (defmethod ,alternative-name (new-value (class structure-class)) 1847 (,%name new-value class)) 1848 (defmethod ,alternative-name (new-value (class standard-class)) 1849 (setf (slot-value class ',slot) new-value)) 1850 ,@(unless (eq name alternative-name) 1851 `((setf (get ',$name 'SETF-FUNCTION) 1852 (symbol-function ',alternative-name)))) 1853 ) 1854 `(progn ;; getter 1855 (defgeneric ,alternative-name (class)) 1856 (defmethod ,alternative-name ((class built-in-class)) 1857 (,%name class)) 1858 (defmethod ,alternative-name ((class forward-referenced-class)) 1859 (,%name class)) 1860 (defmethod ,alternative-name ((class structure-class)) 1861 (,%name class)) 1862 (defmethod ,alternative-name ((class standard-class)) 1863 (slot-value class ',slot)) 1864 ,@(unless (eq name alternative-name) 1865 `((setf (symbol-function ',$name) 1866 (symbol-function ',alternative-name)))) 1867 ) ))) 1868 1869 (redefine-class-forwarder class-name name) 1870 (redefine-class-forwarder (setf class-name) name) 1871 (redefine-class-forwarder class-slots slots) 1872 (redefine-class-forwarder (setf class-slots) slots) 1873 (redefine-class-forwarder class-direct-slots direct-slots) 1874 (redefine-class-forwarder (setf class-direct-slots) direct-slots) 1875 (redefine-class-forwarder class-layout layout) 1876 (redefine-class-forwarder (setf class-layout) layout) 1877 (redefine-class-forwarder class-direct-superclasses direct-superclasses) 1878 (redefine-class-forwarder (setf class-direct-superclasses) direct-superclasses) 1879 (redefine-class-forwarder class-direct-subclasses direct-subclasses) 1880 (redefine-class-forwarder (setf class-direct-subclasses) direct-subclasses) 1881 (redefine-class-forwarder class-direct-methods direct-methods !class-direct-methods) 1882 (redefine-class-forwarder (setf class-direct-methods) direct-methods !!class-direct-methods) 1883 (redefine-class-forwarder class-precedence-list precedence-list) 1884 (redefine-class-forwarder (setf class-precedence-list) precedence-list) 1885 (redefine-class-forwarder class-finalized-p finalized-p) 1886 (redefine-class-forwarder (setf class-finalized-p) finalized-p) 1887 (redefine-class-forwarder class-default-initargs default-initargs) 1888 (redefine-class-forwarder (setf class-default-initargs) default-initargs) 1889 (redefine-class-forwarder class-direct-default-initargs direct-default-initargs) 1890 (redefine-class-forwarder (setf class-direct-default-initargs) direct-default-initargs) 1803 1891 1804 1892 … … 1951 2039 1952 2040 (defmethod slot-exists-p-using-class ((class structure-class) instance slot-name) 1953 (dolist (dsd ( %class-slots class))2041 (dolist (dsd (class-slots class)) 1954 2042 (when (eq (sys::dsd-name dsd) slot-name) 1955 2043 (return-from slot-exists-p-using-class t))) … … 1987 2075 (defmethod allocate-instance ((class structure-class) &rest initargs) 1988 2076 (declare (ignore initargs)) 1989 (%make-structure ( %class-name class)1990 (make-list (length ( %class-slots class))2077 (%make-structure (class-name class) 2078 (make-list (length (class-slots class)) 1991 2079 :initial-element +slot-unbound+))) 1992 2080 … … 2013 2101 `(,instance ,@initargs) 2014 2102 (list instance))))) 2015 (slots ( %class-slots (class-of instance))))2103 (slots (class-slots (class-of instance)))) 2016 2104 (do* ((tail initargs (cddr tail)) 2017 2105 (initarg (car tail) (car tail))) … … 2096 2184 :format-control "Invalid initarg ~S." 2097 2185 :format-arguments (list initarg)))) 2098 (dolist (slot ( %class-slots (class-of instance)))2186 (dolist (slot (class-slots (class-of instance))) 2099 2187 (let ((slot-name (%slot-definition-name slot))) 2100 2188 (multiple-value-bind (init-key init-value foundp) … … 2121 2209 (defmethod change-class ((old-instance standard-object) (new-class standard-class) 2122 2210 &rest initargs) 2123 (let ((old-slots ( %class-slots (class-of old-instance)))2124 (new-slots ( %class-slots new-class))2211 (let ((old-slots (class-slots (class-of old-instance))) 2212 (new-slots (class-slots new-class)) 2125 2213 (new-instance (allocate-instance new-class))) 2126 2214 ;; "The values of local slots specified by both the class CTO and the class … … 2154 2242 (slot-exists-p old slot-name)) 2155 2243 (mapcar #'%slot-definition-name 2156 ( %class-slots (class-of new))))))2244 (class-slots (class-of new)))))) 2157 2245 (check-initargs new added-slots initargs) 2158 2246 (apply #'shared-initialize new added-slots initargs))) … … 2341 2429 (defmethod make-load-form ((class class) &optional environment) 2342 2430 (declare (ignore environment)) 2343 (let ((name ( %class-name class)))2431 (let ((name (class-name class))) 2344 2432 (unless (and name (eq (find-class name nil) class)) 2345 2433 (error 'simple-type-error … … 2356 2444 (error "Method combination error in CLOS dispatch:~% ~A" message))) 2357 2445 2446 (fmakunbound 'no-applicable-method) 2358 2447 (defgeneric no-applicable-method (generic-function &rest args)) 2359 2448 … … 2394 2483 (defgeneric function-keywords (method)) 2395 2484 2485 (setf *clos-booting* nil) 2486 2396 2487 (defgeneric class-prototype (class)) 2397 2488 -
trunk/abcl/src/org/armedbear/lisp/compiler-pass2.lisp
r12516 r12576 3403 3403 (CHAR= p2-test-char=) 3404 3404 (CHARACTERP p2-test-characterp) 3405 (CLASSP p2-test-classp)3406 3405 (CONSP p2-test-consp) 3407 3406 (CONSTANTP p2-test-constantp) … … 3543 3542 (defun p2-test-special-variable-p (form) 3544 3543 (p2-test-predicate form "isSpecialVariable")) 3545 3546 (defun p2-test-classp (form)3547 (p2-test-instanceof-predicate form +lisp-class-class+))3548 3544 3549 3545 (defun p2-test-symbolp (form) … … 4827 4823 (defun p2-characterp (form target representation) 4828 4824 (p2-instanceof-predicate form target representation +lisp-character-class+)) 4829 4830 (defun p2-classp (form target representation)4831 (p2-instanceof-predicate form target representation +lisp-class-class+))4832 4825 4833 4826 (defun p2-consp (form target representation) … … 8875 8868 (install-p2-handler 'char= 'p2-char=) 8876 8869 (install-p2-handler 'characterp 'p2-characterp) 8877 (install-p2-handler 'classp 'p2-classp)8878 8870 (install-p2-handler 'coerce-to-function 'p2-coerce-to-function) 8879 8871 (install-p2-handler 'cons 'p2-cons)
Note: See TracChangeset
for help on using the changeset viewer.