Changeset 12757
- Timestamp:
- 06/18/10 22:48:30 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abcl/src/org/armedbear/lisp/clos.lisp
r12756 r12757 164 164 (readers ()) 165 165 (writers ()) 166 (other-options ())) 166 (other-options ()) 167 (non-std-options ())) 167 168 (do ((olist (cdr spec) (cddr olist))) 168 169 ((null olist)) … … 209 210 (push-on-end `(setf ,(cadr olist)) writers)) 210 211 (t 211 (error 'program-error 212 "invalid initialization argument ~S for slot named ~S" 213 (car olist) name)))) 212 (push-on-end (car olist) non-std-options) 213 (push-on-end (cadr olist) non-std-options)))) 214 ; (error 'program-error 215 ; "invalid initialization argument ~S for slot named ~S" 216 ; (car olist) name)) 214 217 `(list 215 218 :name ',name … … 220 223 ,@(when readers `(:readers ',readers)) 221 224 ,@(when writers `(:writers ',writers)) 222 ,@other-options)))) 225 ,@other-options 226 ,@non-std-options)))) 223 227 224 228 (defun maybe-note-name-defined (name) … … 267 271 (%slot-definition-allocation slot-definition)) 268 272 273 (declaim (notinline (setf slot-definition-allocation))) 269 274 (defun (setf slot-definition-allocation) (value slot-definition) 270 275 (set-slot-definition-allocation slot-definition value)) … … 273 278 (%slot-definition-initargs slot-definition)) 274 279 280 (declaim (notinline (setf slot-definition-initargs))) 275 281 (defun (setf slot-definition-initargs) (value slot-definition) 276 282 (set-slot-definition-initargs slot-definition value)) … … 279 285 (%slot-definition-initform slot-definition)) 280 286 287 (declaim (notinline (setf slot-definition-initform))) 281 288 (defun (setf slot-definition-initform) (value slot-definition) 282 289 (set-slot-definition-initform slot-definition value)) … … 285 292 (%slot-definition-initfunction slot-definition)) 286 293 294 (declaim (notinline (setf slot-definition-initfunction))) 287 295 (defun (setf slot-definition-initfunction) (value slot-definition) 288 296 (set-slot-definition-initfunction slot-definition value)) … … 291 299 (%slot-definition-name slot-definition)) 292 300 301 (declaim (notinline (setf slot-definition-name))) 293 302 (defun (setf slot-definition-name) (value slot-definition) 294 303 (set-slot-definition-name slot-definition value)) … … 297 306 (%slot-definition-readers slot-definition)) 298 307 308 (declaim (notinline (setf slot-definition-readers))) 299 309 (defun (setf slot-definition-readers) (value slot-definition) 300 310 (set-slot-definition-readers slot-definition value)) … … 303 313 (%slot-definition-writers slot-definition)) 304 314 315 (declaim (notinline (setf slot-definition-writers))) 305 316 (defun (setf slot-definition-writers) (value slot-definition) 306 317 (set-slot-definition-writers slot-definition value)) … … 309 320 (%slot-definition-allocation-class slot-definition)) 310 321 322 (declaim (notinline (setf slot-definition-allocation-class))) 311 323 (defun (setf slot-definition-allocation-class) (value slot-definition) 312 324 (set-slot-definition-allocation-class slot-definition value)) … … 385 397 (:class 386 398 (unless (%slot-definition-location slot) 387 (let ((allocation-class ( %slot-definition-allocation-class slot)))399 (let ((allocation-class (slot-definition-allocation-class slot))) 388 400 (set-slot-definition-location slot 389 401 (if (eq allocation-class class) … … 397 409 (old-location (layout-slot-location old-layout slot-name))) 398 410 (unless old-location 399 (let* ((slot-definition (find slot-name (class-slots class) :key #'slot-definition-name))411 (let* ((slot-definition (find slot-name (class-slots class) :key 'slot-definition-name)) 400 412 (initfunction (slot-definition-initfunction slot-definition))) 401 413 (when initfunction … … 500 512 (class-precedence-list class))) 501 513 (all-names (remove-duplicates 502 (mapcar #'slot-definition-name all-slots))))514 (mapcar 'slot-definition-name all-slots)))) 503 515 (mapcar #'(lambda (name) 504 516 (funcall … … 508 520 class 509 521 (remove name all-slots 510 :key #'slot-definition-name522 :key 'slot-definition-name 511 523 :test-not #'eq))) 512 524 all-names))) … … 514 526 (defun std-compute-effective-slot-definition (class direct-slots) 515 527 (let ((initer (find-if-not #'null direct-slots 516 :key #'slot-definition-initfunction)))528 :key 'slot-definition-initfunction))) 517 529 (make-effective-slot-definition 518 530 class … … 525 537 nil) 526 538 :initargs (remove-duplicates 527 (mapappend #'slot-definition-initargs539 (mapappend 'slot-definition-initargs 528 540 direct-slots)) 529 541 :allocation (slot-definition-allocation (car direct-slots)) 530 :allocation-class (%slot-definition-allocation-class (car direct-slots))))) 542 :allocation-class (when (slot-boundp (car direct-slots) 543 'sys::allocation-class) 544 ;;for some classes created in Java 545 ;;(e.g. SimpleCondition) this slot is unbound 546 (slot-definition-allocation-class (car direct-slots)))))) 531 547 532 548 ;;; Standard instance slot access … … 590 606 (defun std-slot-exists-p (instance slot-name) 591 607 (not (null (find slot-name (class-slots (class-of instance)) 592 :key #'slot-definition-name))))608 :key 'slot-definition-name)))) 593 609 594 610 (defun slot-exists-p (object slot-name) … … 639 655 (setf (class-direct-slots class) slots) 640 656 (dolist (direct-slot slots) 641 (dolist (reader ( %slot-definition-readers direct-slot))657 (dolist (reader (slot-definition-readers direct-slot)) 642 658 (add-reader-method class reader (slot-definition-name direct-slot))) 643 (dolist (writer ( %slot-definition-writers direct-slot))659 (dolist (writer (slot-definition-writers direct-slot)) 644 660 (add-writer-method class writer (slot-definition-name direct-slot))))) 645 661 (setf (class-direct-default-initargs class) direct-default-initargs) … … 2316 2332 (declare (ignore slot-names)) ;;TODO? 2317 2333 (declare (ignore name initargs initform initfunction readers writers allocation)) 2318 (apply #'init-slot-definition slot args)) 2334 ;;For built-in slots 2335 (apply #'init-slot-definition slot args) 2336 ;;For user-defined slots 2337 (call-next-method)) 2319 2338 2320 2339 ;;; change-class … … 2333 2352 (when (instance-slot-p new-slot) 2334 2353 (let* ((slot-name (slot-definition-name new-slot)) 2335 (old-slot (find slot-name old-slots :key #'slot-definition-name)))2354 (old-slot (find slot-name old-slots :key 'slot-definition-name))) 2336 2355 ;; "The values of slots specified as shared in the class CFROM and as 2337 2356 ;; local in the class CTO are retained." … … 2356 2375 (remove-if #'(lambda (slot-name) 2357 2376 (slot-exists-p old slot-name)) 2358 (mapcar #'slot-definition-name2377 (mapcar 'slot-definition-name 2359 2378 (class-slots (class-of new)))))) 2360 2379 (check-initargs new added-slots initargs)
Note: See TracChangeset
for help on using the changeset viewer.