+ ;; Eval to get the 'custom-group, -tag,
+ ;; -version, group-documentation etc properties.
+ (put (nth 1 expr) 'custom-where name)
+ (eval expr))
+ ;; Eval failed for some reason. Eg maybe the
+ ;; defcustom uses something defined earlier
+ ;; in the file (we haven't loaded the file).
+ ;; In most cases, we can still get the :group.
+ (error
+ (ignore-errors
+ (let ((group (cadr (memq :group expr))))
+ (and group
+ (eq (car group) 'quote)
+ (custom-add-to-group
+ (cadr group)
+ (nth 1 expr)
+ (intern (format "custom-%s"
+ (if (equal type "custom")
+ "variable"
+ type)))))))))))