Changeset 14477
- Timestamp:
- 04/24/13 12:51:10 (10 years ago)
- Location:
- trunk/abcl/src/org/armedbear/lisp
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/src/org/armedbear/lisp/SlotDefinition.java
r14134 r14477 42 42 super(StandardClass.STANDARD_SLOT_DEFINITION, 43 43 StandardClass.STANDARD_SLOT_DEFINITION.getClassLayout().getLength()); 44 slots[SlotDefinitionClass.SLOT_INDEX_LOCATION] = NIL; 45 slots[SlotDefinitionClass.SLOT_INDEX_TYPE] = T; 46 slots[SlotDefinitionClass.SLOT_INDEX_DOCUMENTATION] = NIL; 47 } 48 49 public SlotDefinition(StandardClass clazz) { 50 // clazz layout needs to have SlotDefinitionClass layout as prefix 51 // or indexed slot access won't work 52 super(clazz, clazz.getClassLayout().getLength()); 53 slots[SlotDefinitionClass.SLOT_INDEX_LOCATION] = NIL; 54 } 55 56 public SlotDefinition(StandardClass clazz, LispObject name) { 57 // clazz layout needs to have SlotDefinitionClass layout as prefix 58 // or indexed slot access won't work 59 super(clazz, clazz.getClassLayout().getLength()); 60 slots[SlotDefinitionClass.SLOT_INDEX_NAME] = name; 61 slots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = NIL; 62 slots[SlotDefinitionClass.SLOT_INDEX_INITARGS] = 63 new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName())); 64 slots[SlotDefinitionClass.SLOT_INDEX_READERS] = NIL; 65 slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = Keyword.INSTANCE; 66 slots[SlotDefinitionClass.SLOT_INDEX_LOCATION] = NIL; 67 slots[SlotDefinitionClass.SLOT_INDEX_TYPE] = T; 68 slots[SlotDefinitionClass.SLOT_INDEX_DOCUMENTATION] = NIL; 69 } 70 44 setInstanceSlotValue(Symbol.LOCATION, NIL); 45 setInstanceSlotValue(Symbol._TYPE, T); 46 setInstanceSlotValue(Symbol._DOCUMENTATION, NIL); 47 } 48 49 public SlotDefinition(StandardClass clazz) { 50 // clazz layout needs to have SlotDefinitionClass layout as prefix 51 // or indexed slot access won't work 52 super(clazz, clazz.getClassLayout().getLength()); 53 setInstanceSlotValue(Symbol.LOCATION, NIL); 54 } 55 56 public SlotDefinition(StandardClass clazz, LispObject name) { 57 // clazz layout needs to have SlotDefinitionClass layout as prefix 58 // or indexed slot access won't work 59 super(clazz, clazz.getClassLayout().getLength()); 60 Debug.assertTrue(name instanceof Symbol); 61 setInstanceSlotValue(Symbol.NAME, name); 62 setInstanceSlotValue(Symbol.INITFUNCTION, NIL); 63 setInstanceSlotValue(Symbol.INITARGS, 64 new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName()))); 65 setInstanceSlotValue(Symbol.READERS, NIL); 66 setInstanceSlotValue(Symbol.ALLOCATION, Keyword.INSTANCE); 67 setInstanceSlotValue(Symbol.LOCATION, NIL); 68 setInstanceSlotValue(Symbol._TYPE, T); 69 setInstanceSlotValue(Symbol._DOCUMENTATION, NIL); 70 } 71 71 72 public SlotDefinition(LispObject name, LispObject readers) 72 73 { 73 74 this(); 74 75 Debug.assertTrue(name instanceof Symbol); 75 s lots[SlotDefinitionClass.SLOT_INDEX_NAME] = name;76 s lots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = NIL;77 s lots[SlotDefinitionClass.SLOT_INDEX_INITARGS] =78 new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName()));79 s lots[SlotDefinitionClass.SLOT_INDEX_READERS] = readers;80 s lots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = Keyword.INSTANCE;76 setInstanceSlotValue(Symbol.NAME, name); 77 setInstanceSlotValue(Symbol.INITFUNCTION, NIL); 78 setInstanceSlotValue(Symbol.INITARGS, 79 new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName()))); 80 setInstanceSlotValue(Symbol.READERS, readers); 81 setInstanceSlotValue(Symbol.ALLOCATION, Keyword.INSTANCE); 81 82 } 82 83 … … 86 87 this(); 87 88 Debug.assertTrue(name instanceof Symbol); 88 s lots[SlotDefinitionClass.SLOT_INDEX_NAME] = name;89 s lots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = NIL;90 s lots[SlotDefinitionClass.SLOT_INDEX_INITFORM] = initForm;91 s lots[SlotDefinitionClass.SLOT_INDEX_INITARGS] =92 new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName()));93 s lots[SlotDefinitionClass.SLOT_INDEX_READERS] = readers;94 s lots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = Keyword.INSTANCE;89 setInstanceSlotValue(Symbol.NAME, name); 90 setInstanceSlotValue(Symbol.INITFUNCTION, NIL); 91 setInstanceSlotValue(Symbol.INITFORM, initForm); 92 setInstanceSlotValue(Symbol.INITARGS, 93 new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName()))); 94 setInstanceSlotValue(Symbol.READERS, readers); 95 setInstanceSlotValue(Symbol.ALLOCATION, Keyword.INSTANCE); 95 96 } 96 97 … … 100 101 this(); 101 102 Debug.assertTrue(name instanceof Symbol); 102 s lots[SlotDefinitionClass.SLOT_INDEX_NAME] = name;103 s lots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = initFunction;104 s lots[SlotDefinitionClass.SLOT_INDEX_INITFORM] = NIL;105 s lots[SlotDefinitionClass.SLOT_INDEX_INITARGS] =106 new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName()));107 s lots[SlotDefinitionClass.SLOT_INDEX_READERS] = readers;108 s lots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = Keyword.INSTANCE;103 setInstanceSlotValue(Symbol.NAME, name); 104 setInstanceSlotValue(Symbol.INITFUNCTION, initFunction); 105 setInstanceSlotValue(Symbol.INITFORM, NIL); 106 setInstanceSlotValue(Symbol.INITARGS, 107 new Cons(PACKAGE_KEYWORD.intern(((Symbol)name).getName()))); 108 setInstanceSlotValue(Symbol.READERS, readers); 109 setInstanceSlotValue(Symbol.ALLOCATION, Keyword.INSTANCE); 109 110 } 110 111 … … 114 115 this(); 115 116 Debug.assertTrue(name instanceof Symbol); 116 s lots[SlotDefinitionClass.SLOT_INDEX_NAME] = name;117 s lots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = initFunction;118 s lots[SlotDefinitionClass.SLOT_INDEX_INITFORM] = NIL;119 s lots[SlotDefinitionClass.SLOT_INDEX_INITARGS] = initargs;120 s lots[SlotDefinitionClass.SLOT_INDEX_READERS] = readers;121 s lots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = Keyword.INSTANCE;117 setInstanceSlotValue(Symbol.NAME, name); 118 setInstanceSlotValue(Symbol.INITFUNCTION, initFunction); 119 setInstanceSlotValue(Symbol.INITFORM, NIL); 120 setInstanceSlotValue(Symbol.INITARGS, initargs); 121 setInstanceSlotValue(Symbol.READERS, readers); 122 setInstanceSlotValue(Symbol.ALLOCATION, Keyword.INSTANCE); 122 123 } 123 124 … … 132 133 StringBuilder sb = 133 134 new StringBuilder(Symbol.SLOT_DEFINITION.printObject()); 134 LispObject name = slots[SlotDefinitionClass.SLOT_INDEX_NAME]; 135 if (name != null && name != NIL) 136 { 137 sb.append(' '); 138 sb.append(name.printObject()); 139 } 135 LispObject name = getInstanceSlotValue(Symbol.NAME); 136 if (name != null && name != NIL) { 137 sb.append(' '); 138 sb.append(name.printObject()); 139 } 140 140 return unreadableString(sb.toString()); 141 141 } … … 177 177 { 178 178 StandardObject o = checkSlotDefinition(arg); 179 if (o instanceof SlotDefinition) 180 return o.slots[SlotDefinitionClass.SLOT_INDEX_NAME]; 181 else 182 return o.getInstanceSlotValue(Symbol.NAME); 179 return o.getInstanceSlotValue(Symbol.NAME); 183 180 } 184 181 }; … … 199 196 { 200 197 StandardObject o = checkSlotDefinition(first); 201 if (o instanceof SlotDefinition) 202 o.slots[SlotDefinitionClass.SLOT_INDEX_NAME] = second; 203 else 204 o.setInstanceSlotValue(Symbol.NAME, second); 198 o.setInstanceSlotValue(Symbol.NAME, second); 205 199 return second; 206 200 } … … 220 214 { 221 215 StandardObject o = checkSlotDefinition(arg); 222 if (o instanceof SlotDefinition) 223 return o.slots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION]; 224 else 225 return o.getInstanceSlotValue(Symbol.INITFUNCTION); 216 return o.getInstanceSlotValue(Symbol.INITFUNCTION); 226 217 } 227 218 }; … … 242 233 { 243 234 StandardObject o = checkSlotDefinition(first); 244 if (o instanceof SlotDefinition) 245 o.slots[SlotDefinitionClass.SLOT_INDEX_INITFUNCTION] = second; 246 else 247 o.setInstanceSlotValue(Symbol.INITFUNCTION, second); 235 o.setInstanceSlotValue(Symbol.INITFUNCTION, second); 248 236 return second; 249 237 } … … 264 252 { 265 253 StandardObject o = checkSlotDefinition(arg); 266 if (o instanceof SlotDefinition) 267 return o.slots[SlotDefinitionClass.SLOT_INDEX_INITFORM]; 268 else 269 return o.getInstanceSlotValue(Symbol.INITFORM); 254 return o.getInstanceSlotValue(Symbol.INITFORM); 270 255 } 271 256 }; … … 286 271 { 287 272 StandardObject o = checkSlotDefinition(first); 288 if (o instanceof SlotDefinition) 289 o.slots[SlotDefinitionClass.SLOT_INDEX_INITFORM] = second; 290 else 291 o.setInstanceSlotValue(Symbol.INITFORM, second); 273 o.setInstanceSlotValue(Symbol.INITFORM, second); 292 274 return second; 293 275 } … … 307 289 { 308 290 StandardObject o = checkSlotDefinition(arg); 309 if (o instanceof SlotDefinition) 310 return o.slots[SlotDefinitionClass.SLOT_INDEX_INITARGS]; 311 else 312 return o.getInstanceSlotValue(Symbol.INITARGS); 291 return o.getInstanceSlotValue(Symbol.INITARGS); 313 292 } 314 293 }; … … 329 308 { 330 309 StandardObject o = checkSlotDefinition(first); 331 if (o instanceof SlotDefinition) 332 o.slots[SlotDefinitionClass.SLOT_INDEX_INITARGS] = second; 333 else 334 o.setInstanceSlotValue(Symbol.INITARGS, second); 310 o.setInstanceSlotValue(Symbol.INITARGS, second); 335 311 return second; 336 312 } … … 351 327 { 352 328 StandardObject o = checkSlotDefinition(arg); 353 if (o instanceof SlotDefinition) 354 return o.slots[SlotDefinitionClass.SLOT_INDEX_READERS]; 355 else 356 return o.getInstanceSlotValue(Symbol.READERS); 329 return o.getInstanceSlotValue(Symbol.READERS); 357 330 } 358 331 }; … … 373 346 { 374 347 StandardObject o = checkSlotDefinition(first); 375 if (o instanceof SlotDefinition) 376 o.slots[SlotDefinitionClass.SLOT_INDEX_READERS] = second; 377 else 378 o.setInstanceSlotValue(Symbol.READERS, second); 348 o.setInstanceSlotValue(Symbol.READERS, second); 379 349 return second; 380 350 } … … 396 366 { 397 367 StandardObject o = checkSlotDefinition(arg); 398 if (o instanceof SlotDefinition) 399 return o.slots[SlotDefinitionClass.SLOT_INDEX_WRITERS]; 400 else 401 return o.getInstanceSlotValue(Symbol.WRITERS); 368 return o.getInstanceSlotValue(Symbol.WRITERS); 402 369 } 403 370 }; … … 418 385 { 419 386 StandardObject o = checkSlotDefinition(first); 420 if (o instanceof SlotDefinition) 421 o.slots[SlotDefinitionClass.SLOT_INDEX_WRITERS] = second; 422 else 423 o.setInstanceSlotValue(Symbol.WRITERS, second); 387 o.setInstanceSlotValue(Symbol.WRITERS, second); 424 388 return second; 425 389 } … … 441 405 { 442 406 StandardObject o = checkSlotDefinition(arg); 443 if (o instanceof SlotDefinition) 444 return o.slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION]; 445 else 446 return o.getInstanceSlotValue(Symbol.ALLOCATION); 407 return o.getInstanceSlotValue(Symbol.ALLOCATION); 447 408 } 448 409 }; … … 463 424 { 464 425 StandardObject o = checkSlotDefinition(first); 465 if (o instanceof SlotDefinition) 466 o.slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION] = second; 467 else 468 o.setInstanceSlotValue(Symbol.ALLOCATION, second); 426 o.setInstanceSlotValue(Symbol.ALLOCATION, second); 469 427 return second; 470 428 } … … 486 444 { 487 445 StandardObject o = checkSlotDefinition(arg); 488 if (o instanceof SlotDefinition) 489 return o.slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION_CLASS]; 490 else 491 return o.getInstanceSlotValue(Symbol.ALLOCATION_CLASS); 446 return o.getInstanceSlotValue(Symbol.ALLOCATION_CLASS); 492 447 } 493 448 }; … … 508 463 { 509 464 StandardObject o = checkSlotDefinition(first); 510 if (o instanceof SlotDefinition) 511 o.slots[SlotDefinitionClass.SLOT_INDEX_ALLOCATION_CLASS] = second; 512 else 513 o.setInstanceSlotValue(Symbol.ALLOCATION_CLASS, second); 465 o.setInstanceSlotValue(Symbol.ALLOCATION_CLASS, second); 514 466 return second; 515 467 } … … 529 481 { 530 482 StandardObject o = checkSlotDefinition(arg); 531 if (o instanceof SlotDefinition) 532 return o.slots[SlotDefinitionClass.SLOT_INDEX_LOCATION]; 533 else 534 return o.getInstanceSlotValue(Symbol.LOCATION); 483 return o.getInstanceSlotValue(Symbol.LOCATION); 535 484 } 536 485 }; … … 551 500 { 552 501 StandardObject o = checkSlotDefinition(first); 553 if (o instanceof SlotDefinition) 554 o.slots[SlotDefinitionClass.SLOT_INDEX_LOCATION] = second; 555 else 556 o.setInstanceSlotValue(Symbol.LOCATION, second); 502 o.setInstanceSlotValue(Symbol.LOCATION, second); 557 503 return second; 558 504 } … … 572 518 { 573 519 StandardObject o = checkSlotDefinition(arg); 574 if (o instanceof SlotDefinition) 575 return o.slots[SlotDefinitionClass.SLOT_INDEX_TYPE]; 576 else 577 return o.getInstanceSlotValue(Symbol._TYPE); 520 return o.getInstanceSlotValue(Symbol._TYPE); 578 521 } 579 522 }; … … 594 537 { 595 538 StandardObject o = checkSlotDefinition(first); 596 if (o instanceof SlotDefinition) 597 o.slots[SlotDefinitionClass.SLOT_INDEX_TYPE] = second; 598 else 599 o.setInstanceSlotValue(Symbol._TYPE, second); 539 o.setInstanceSlotValue(Symbol._TYPE, second); 600 540 return second; 601 541 } … … 615 555 { 616 556 StandardObject o = checkSlotDefinition(arg); 617 if (o instanceof SlotDefinition) 618 return o.slots[SlotDefinitionClass.SLOT_INDEX_DOCUMENTATION]; 619 else 620 return o.getInstanceSlotValue(Symbol._DOCUMENTATION); 557 return o.getInstanceSlotValue(Symbol._DOCUMENTATION); 621 558 } 622 559 }; … … 637 574 { 638 575 StandardObject o = checkSlotDefinition(first); 639 if (o instanceof SlotDefinition) 640 o.slots[SlotDefinitionClass.SLOT_INDEX_DOCUMENTATION] = second; 641 else 642 o.setInstanceSlotValue(Symbol._DOCUMENTATION, second); 576 o.setInstanceSlotValue(Symbol._DOCUMENTATION, second); 643 577 return second; 644 578 } -
trunk/abcl/src/org/armedbear/lisp/SlotDefinitionClass.java
r14134 r14477 38 38 public final class SlotDefinitionClass extends StandardClass 39 39 { 40 public static final int SLOT_INDEX_NAME = 0;41 public static final int SLOT_INDEX_INITFUNCTION = 1;42 public static final int SLOT_INDEX_INITFORM = 2;43 public static final int SLOT_INDEX_INITARGS = 3;44 public static final int SLOT_INDEX_READERS = 4;45 public static final int SLOT_INDEX_WRITERS = 5;46 public static final int SLOT_INDEX_ALLOCATION = 6;47 public static final int SLOT_INDEX_ALLOCATION_CLASS = 7;48 public static final int SLOT_INDEX_LOCATION = 8;49 public static final int SLOT_INDEX_TYPE = 9;50 public static final int SLOT_INDEX_DOCUMENTATION = 10;51 52 /**53 * For internal use only. This constructor hardcodes the layout of54 * the class, and can't be used to create arbitrary subclasses of55 * slot-definition since new slots get added at the beginning.56 */57 40 public SlotDefinitionClass(Symbol symbol, LispObject cpl) { 58 41 super(symbol, cpl); 59 Package pkg = PACKAGE_SYS;60 42 LispObject[] instanceSlotNames = { 61 43 Symbol.NAME, … … 80 62 // in its constructor; here we make Lisp-side subclasses of 81 63 // standard-*-slot-definition do the same. 82 LispObject locationSlot = slotDefinitions.nthcdr( SLOT_INDEX_LOCATION).car();64 LispObject locationSlot = slotDefinitions.nthcdr(8).car(); 83 65 SlotDefinition.SET_SLOT_DEFINITION_INITFORM.execute(locationSlot, NIL); 84 66 SlotDefinition.SET_SLOT_DEFINITION_INITFUNCTION.execute(locationSlot, StandardClass.constantlyNil); 67 // Fix initargs of TYPE, DOCUMENTATION slots. 68 LispObject typeSlot = slotDefinitions.nthcdr(9).car(); 69 SlotDefinition.SET_SLOT_DEFINITION_INITARGS.execute(typeSlot, list(internKeyword("TYPE"))); 70 LispObject documentationSlot = slotDefinitions.nthcdr(10).car(); 71 SlotDefinition.SET_SLOT_DEFINITION_INITARGS.execute(documentationSlot, list(internKeyword("DOCUMENTATION"))); 85 72 setDirectSlotDefinitions(slotDefinitions); 86 73 setSlotDefinitions(slotDefinitions); 87 // Fix initargs of TYPE, DOCUMENTATION slots.88 LispObject typeSlot = slotDefinitions.nthcdr(SLOT_INDEX_TYPE).car();89 SlotDefinition.SET_SLOT_DEFINITION_INITARGS.execute(typeSlot, list(internKeyword("TYPE")));90 LispObject documentationSlot = slotDefinitions.nthcdr(SLOT_INDEX_DOCUMENTATION).car();91 SlotDefinition.SET_SLOT_DEFINITION_INITARGS.execute(documentationSlot, list(internKeyword("DOCUMENTATION")));92 93 74 setFinalized(true); 94 75 }
Note: See TracChangeset
for help on using the changeset viewer.