Function: cl-struct-slot-value--inliner

cl-struct-slot-value--inliner is a function defined in cl-macs.el.gz.

Signature

(cl-struct-slot-value--inliner INLINE--FORM STRUCT-TYPE SLOT-NAME INST)

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/cl-macs.el.gz
;; Closure converted to defun by helpful.
(defun cl-struct-slot-value--inliner
    (inline--form struct-type slot-name inst)
  (ignore inline--form)
  (catch 'inline--just-use
    (let*
	((exp struct-type)
	 (struct-type
	  (if
	      (macroexp-copyable-p exp)
	      exp
	    (make-symbol "struct-type")))
	 (body
	  (let*
	      ((exp slot-name)
	       (slot-name
		(if
		    (macroexp-copyable-p exp)
		    exp
		  (make-symbol "slot-name")))
	       (body
		(let*
		    ((exp inst)
		     (inst
		      (if
			  (macroexp-copyable-p exp)
			  exp
			(make-symbol "inst")))
		     (body
		      (list 'progn
			    (list 'unless
				  (list 'cl-typep inst struct-type)
				  (list 'signal
					(list 'quote 'wrong-type-argument)
					(list 'list struct-type inst)))
			    (list 'if
				  (list 'eq
					(list 'cl-struct-sequence-type struct-type)
					(list 'quote 'list))
				  (list 'nth
					(list 'cl-struct-slot-offset struct-type slot-name)
					inst)
				  (list 'aref inst
					(list 'cl-struct-slot-offset struct-type slot-name))))))
		  (if
		      (eq inst exp)
		      body
		    (macroexp-let*
		     (list
		      (list inst exp))
		     body)))))
	    (if
		(eq slot-name exp)
		body
	      (macroexp-let*
	       (list
		(list slot-name exp))
	       body)))))
      (if
	  (eq struct-type exp)
	  body
	(macroexp-let*
	 (list
	  (list struct-type exp))
	 body)))))