- (make-class-type name)
- (let* ((duff nil)
- (class (make-sod-class name
- (restart-case
- (mapcar #'find-sod-class supers)
- (continue ()
- (setf duff t)
- (list (find-sod-class "SodObject"))))
- pset scanner))
+ (when name (make-class-type name))
+ (let* ((duff (null name))
+ (superclasses
+ (let ((superclasses (restart-case
+ (mapcar #'find-sod-class
+ (or supers (list "SodObject")))
+ (continue ()
+ (setf duff t)
+ (list (find-sod-class "SodObject"))))))
+ (find-duplicates (lambda (first second)
+ (declare (ignore second))
+ (setf duff t)
+ (cerror* "Class `~A' has duplicate ~
+ direct superclass `~A'"
+ name first))
+ superclasses)
+ (delete-duplicates superclasses)))
+ (synthetic-name (or name
+ (let ((var (synthetic-name)))
+ (unless pset
+ (setf pset (make-property-set)))
+ (unless (pset-get pset "nick")
+ (add-property pset "nick" var :type :id))
+ var)))
+ (class (make-sod-class synthetic-name superclasses pset scanner))