Changeset 4650
- Timestamp:
- 11/05/03 01:48:52 (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/j/src/org/armedbear/lisp/clos.lisp
r4645 r4650 2 2 ;;; 3 3 ;;; Copyright (C) 2003 Peter Graves 4 ;;; $Id: clos.lisp,v 1. 6 2003-11-04 19:38:30piso Exp $4 ;;; $Id: clos.lisp,v 1.7 2003-11-05 01:48:52 piso Exp $ 5 5 ;;; 6 6 ;;; This program is free software; you can redistribute it and/or … … 74 74 (defsetf class-direct-methods %set-class-direct-methods) 75 75 (defsetf class-direct-slots %set-class-direct-slots) 76 (defsetf class-slots %set-class-slots) 77 (defsetf class-direct-default-initargs %set-class-direct-default-initargs) 78 (defsetf class-default-initargs %set-class-default-initargs) 76 79 (defsetf class-precedence-list %set-class-precedence-list) 77 (defsetf class-slots %set-class-slots)78 80 (defsetf std-instance-class %set-std-instance-class) 79 81 (defsetf std-instance-slots %set-std-instance-slots) … … 233 235 #'compute-slots) 234 236 class)) 237 (setf (class-default-initargs class) 238 (compute-class-default-initargs class)) 235 239 (values)) 240 241 (defun compute-class-default-initargs (class) 242 (mapappend #'class-direct-default-initargs 243 (class-precedence-list class))) 236 244 237 245 ;;; Class precedence lists … … 464 472 (std-allocate-instance class)) 465 473 466 (defun make-instance-standard-class (metaclass &key name direct-superclasses direct-slots 467 &allow-other-keys) 474 (defun make-instance-standard-class (metaclass 475 &key name direct-superclasses direct-slots 476 direct-default-initargs 477 &allow-other-keys) 468 478 (declare (ignore metaclass)) 469 479 (let ((class (std-allocate-instance (find-class 'standard-class)))) … … 472 482 (setf (class-direct-methods class) ()) 473 483 (std-after-initialization-for-classes class 484 :direct-superclasses direct-superclasses 474 485 :direct-slots direct-slots 475 :direct- superclasses direct-superclasses)486 :direct-default-initargs direct-default-initargs) 476 487 class)) 477 488 478 489 (defun std-after-initialization-for-classes (class 479 490 &key direct-superclasses direct-slots 491 direct-default-initargs 480 492 &allow-other-keys) 481 (let ((supers 482 (or direct-superclasses 483 (list (find-class 'standard-object))))) 493 (let ((supers (or direct-superclasses 494 (list (find-class 'standard-object))))) 484 495 (setf (class-direct-superclasses class) supers) 485 496 (dolist (superclass supers) 486 497 (push class (class-direct-subclasses superclass)))) 487 (let ((slots 488 (mapcar #'(lambda (slot-properties) 489 (apply #'make-direct-slot-definition 490 slot-properties)) 491 direct-slots))) 498 (let ((slots (mapcar #'(lambda (slot-properties) 499 (apply #'make-direct-slot-definition slot-properties)) 500 direct-slots))) 492 501 (setf (class-direct-slots class) slots) 493 502 (dolist (direct-slot slots) … … 498 507 (add-writer-method 499 508 class writer (slot-definition-name direct-slot))))) 509 (setf (class-direct-default-initargs class) direct-default-initargs) 500 510 (funcall (if (eq (class-of class) (find-class 'standard-class)) 501 511 #'std-finalize-inheritance … … 517 527 (let ((class (find-class name nil))) 518 528 (unless class 519 (setf class (apply #'make-instance-standard-class 520 (find-class 'standard-class):name name all-keys))529 (setf class (apply #'make-instance-standard-class (find-class 'standard-class) 530 :name name all-keys)) 521 531 (%set-find-class name class)) 522 532 class)) … … 1339 1349 (defmethod make-instance ((class standard-class) &rest initargs) 1340 1350 (let ((instance (allocate-instance class))) 1341 (apply #'initialize-instance instance initargs) 1351 (apply #'initialize-instance instance 1352 (append initargs (class-default-initargs class))) 1342 1353 instance)) 1343 1354 (defmethod make-instance ((class symbol) &rest initargs)
Note: See TracChangeset
for help on using the changeset viewer.