Changeset 12528
- Timestamp:
- 03/13/10 21:47:59 (13 years ago)
- Location:
- branches/metaclass/abcl/src/org/armedbear/lisp
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/metaclass/abcl/src/org/armedbear/lisp/LispClass.java
r12527 r12528 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) … … 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 }; -
branches/metaclass/abcl/src/org/armedbear/lisp/Primitives.java
r12527 r12528 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(second).setName(checkSymbol(first)); 5337 if (second instanceof LispClass) 5338 ((LispClass)second).setName(checkSymbol(first)); 5339 else 5340 ((StandardObject)second).setInstanceSlotValue(StandardClass.symName, 5341 checkSymbol(first)); 5335 5342 return first; 5336 5343 } … … 5346 5353 @Override 5347 5354 public LispObject execute(LispObject arg) { 5348 Layout layout = checkClass(arg).getClassLayout(); 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 } … … 5363 5375 { 5364 5376 if (first == NIL || first instanceof Layout) { 5365 checkClass(second).setClassLayout(first); 5377 if (second instanceof LispClass) 5378 ((LispClass)second).setClassLayout(first); 5379 else 5380 ((StandardObject)second).setInstanceSlotValue(StandardClass.symLayout, first); 5366 5381 return first; 5367 5382 } … … 5379 5394 @Override 5380 5395 public LispObject execute(LispObject arg) { 5381 return checkClass(arg).getDirectSuperclasses(); 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(second).setDirectSuperclasses(first); 5412 { 5413 if (second instanceof LispClass) 5414 ((LispClass)second).setDirectSuperclasses(first); 5415 else 5416 ((StandardObject)second).setInstanceSlotValue(StandardClass.symDirectSuperclasses, first); 5397 5417 return first; 5398 5418 } … … 5408 5428 @Override 5409 5429 public LispObject execute(LispObject arg) { 5410 return checkClass(arg).getDirectSubclasses(); 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(second).setDirectSubclasses(first); 5447 { 5448 if (second instanceof LispClass) 5449 ((LispClass)second).setDirectSubclasses(first); 5450 else 5451 ((StandardObject)second).setInstanceSlotValue(StandardClass.symDirectSubclasses, first); 5427 5452 return first; 5428 5453 } … … 5438 5463 @Override 5439 5464 public LispObject execute(LispObject arg) { 5440 return checkClass(arg).getCPL(); 5465 if (arg instanceof LispClass) 5466 return ((LispClass)arg).getCPL(); 5467 else 5468 return ((StandardObject)arg).getInstanceSlotValue(StandardClass.symClassPrecedenceList); 5441 5469 } 5442 5470 }; … … 5451 5479 @Override 5452 5480 public LispObject execute(LispObject first, LispObject second) 5453 5454 { 5455 checkClass(second).setCPL(first); 5481 { 5482 if (second instanceof LispClass) 5483 ((LispClass)second).setCPL(first); 5484 else 5485 ((StandardObject)second).setInstanceSlotValue(StandardClass.symClassPrecedenceList, first); 5456 5486 return first; 5457 5487 } … … 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(second).setDirectMethods(first); 5516 { 5517 if (second instanceof LispClass) 5518 ((LispClass)second).setDirectMethods(first); 5519 else 5520 ((StandardObject)second).setInstanceSlotValue(StandardClass.symDirectMethods, first); 5487 5521 return first; 5488 5522 } … … 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 } … … 5531 5570 @Override 5532 5571 public LispObject execute(LispObject arg) { 5533 return checkClass(arg).isFinalized() ? T : NIL; 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(second).setFinalized(first != NIL); 5588 { 5589 if (second instanceof LispClass) 5590 ((LispClass)second).setFinalized(first != NIL); 5591 else 5592 ((StandardObject)second).setInstanceSlotValue(StandardClass.symFinalizedP, first); 5549 5593 return first; 5550 5594 } -
branches/metaclass/abcl/src/org/armedbear/lisp/SlotClass.java
r12527 r12528 309 309 }; 310 310 311 // ### compute-class-default-initargs312 private static final Primitive COMPUTE_CLASS_DEFAULT_INITARGS =313 new Primitive("compute-class-default-initargs", PACKAGE_SYS, true)314 {315 @Override316 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 };329 311 } -
branches/metaclass/abcl/src/org/armedbear/lisp/StandardClass.java
r12527 r12528 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 rivatestatic Symbol symClassPrecedenceList47 public static Symbol symClassPrecedenceList 48 48 = PACKAGE_MOP.intern("CLASS-PRECEDENCE-LIST"); 49 p rivatestatic Symbol symDirectMethods49 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 p rivatestatic Symbol symFinalizedP61 public static Symbol symFinalizedP 62 62 = PACKAGE_MOP.intern("FINALIZED-P"); 63 63 -
branches/metaclass/abcl/src/org/armedbear/lisp/StandardObjectFunctions.java
r12290 r12528 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 } -
branches/metaclass/abcl/src/org/armedbear/lisp/clos.lisp
r12527 r12528 289 289 ;;; finalize-inheritance 290 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 291 297 (defun std-finalize-inheritance (class) 292 298 (setf (class-precedence-list class) … … 332 338 (setf (class-layout class) 333 339 (make-layout class (nreverse instance-slots) (nreverse shared-slots)))) 334 (setf (class-default-initargs class) (compute-class-default-initargs class)) 340 (setf (class-default-initargs class) 341 (std-compute-class-default-initargs class)) 335 342 (setf (class-finalized-p class) t)) 336 343
Note: See TracChangeset
for help on using the changeset viewer.