+(export 'sod-initarg)
+(defclass sod-initarg ()
+ ((%class :initarg :class :type sod-class :reader sod-initarg-class)
+ (location :initarg :location :initform (file-location nil)
+ :type file-location :reader file-location)
+ (name :initarg :name :type string :reader sod-initarg-name)
+ (%type :initarg :type :type c-type :reader sod-initarg-type))
+ (:documentation
+ "Describes a keyword argument accepted by the initialization function."))
+
+(export 'sod-user-initarg)
+(defclass sod-user-initarg (sod-initarg)
+ ((default :initarg :default :type t :reader sod-initarg-default))
+ (:documentation
+ "Describes an initialization argument defined by the user."))
+
+(defmethod print-object ((initarg sod-user-initarg) stream)
+ (maybe-print-unreadable-object (initarg stream :type t)
+ (pprint-c-type (sod-initarg-type initarg) stream
+ (sod-initarg-name initarg))
+ (awhen (sod-initarg-default initarg)
+ (format stream " = ~A" it))))
+
+(export 'sod-slot-initarg)
+(defclass sod-slot-initarg (sod-initarg)
+ ((slot :initarg :slot :type sod-slot :reader sod-initarg-slot))
+ (:documentation
+ "Describes an initialization argument used to initialize a slot."))
+
+(defmethod print-object ((initarg sod-slot-initarg) stream)
+ (maybe-print-unreadable-object (initarg stream :type t)
+ (pprint-c-type (sod-initarg-type initarg) stream
+ (sod-initarg-name initarg))
+ (format stream " for ~A" (sod-initarg-slot initarg))))
+