(deftrans-defn-expr names bodies extra-args extra-args-names) → *
Function:
(defun deftrans-defn-expr (names bodies extra-args extra-args-names) (declare (xargs :guard (and (alistp names) (alistp bodies) (true-listp extra-args) (true-listp extra-args-names)))) (let ((__function__ 'deftrans-defn-expr)) (declare (ignorable __function__)) (deftrans-defn 'expr names bodies '((expr exprp)) extra-args (cons 'expr-case (cons 'expr (cons ':ident (cons (cons 'expr-ident (cons (cons (cdr (assoc-eq 'ident names)) (cons 'expr.unwrap extra-args-names)) 'nil)) (cons ':const (cons '(expr-fix expr) (cons ':string (cons '(expr-fix expr) (cons ':paren (cons (cons 'expr-paren (cons (cons (cdr (assoc-eq 'expr names)) (cons 'expr.unwrap extra-args-names)) 'nil)) (cons ':gensel (cons (cons 'make-expr-gensel (cons ':control (cons (cons (cdr (assoc-eq 'expr names)) (cons 'expr.control extra-args-names)) (cons ':assocs (cons (cons (cdr (assoc-eq 'genassoc-list names)) (cons 'expr.assocs extra-args-names)) 'nil))))) (cons ':arrsub (cons (cons 'make-expr-arrsub (cons ':arg1 (cons (cons (cdr (assoc-eq 'expr names)) (cons 'expr.arg1 extra-args-names)) (cons ':arg2 (cons (cons (cdr (assoc-eq 'expr names)) (cons 'expr.arg2 extra-args-names)) 'nil))))) (cons ':funcall (cons (cons 'make-expr-funcall (cons ':fun (cons (cons (cdr (assoc-eq 'expr names)) (cons 'expr.fun extra-args-names)) (cons ':args (cons (cons (cdr (assoc-eq 'expr-list names)) (cons 'expr.args extra-args-names)) 'nil))))) (cons ':member (cons (cons 'make-expr-member (cons ':arg (cons (cons (cdr (assoc-eq 'expr names)) (cons 'expr.arg extra-args-names)) '(:name expr.name)))) (cons ':memberp (cons (cons 'make-expr-memberp (cons ':arg (cons (cons (cdr (assoc-eq 'expr names)) (cons 'expr.arg extra-args-names)) '(:name expr.name)))) (cons ':complit (cons (cons 'make-expr-complit (cons ':type (cons (cons (cdr (assoc-eq 'tyname names)) (cons 'expr.type extra-args-names)) (cons ':elems (cons (cons (cdr (assoc-eq 'desiniter-list names)) (cons 'expr.elems extra-args-names)) '(:final-comma expr.final-comma)))))) (cons ':unary (cons (cons 'make-expr-unary (cons ':op (cons 'expr.op (cons ':arg (cons (cons (cdr (assoc-eq 'expr names)) (cons 'expr.arg extra-args-names)) 'nil))))) (cons ':sizeof (cons (cons 'expr-sizeof (cons (cons (cdr (assoc-eq 'tyname names)) (cons 'expr.type extra-args-names)) 'nil)) (cons ':sizeof-ambig (cons '(prog2$ (raise "Misusage error: ~x0." (expr-fix expr)) (expr-fix expr)) (cons ':alignof (cons (cons 'make-expr-alignof (cons ':type (cons (cons (cdr (assoc-eq 'tyname names)) (cons 'expr.type extra-args-names)) '(:uscores expr.uscores)))) (cons ':cast (cons (cons 'make-expr-cast (cons ':type (cons (cons (cdr (assoc-eq 'tyname names)) (cons 'expr.type extra-args-names)) (cons ':arg (cons (cons (cdr (assoc-eq 'expr names)) (cons 'expr.arg extra-args-names)) 'nil))))) (cons ':binary (cons (cons 'make-expr-binary (cons ':op (cons 'expr.op (cons ':arg1 (cons (cons (cdr (assoc-eq 'expr names)) (cons 'expr.arg1 extra-args-names)) (cons ':arg2 (cons (cons (cdr (assoc-eq 'expr names)) (cons 'expr.arg2 extra-args-names)) 'nil))))))) (cons ':cond (cons (cons 'make-expr-cond (cons ':test (cons (cons (cdr (assoc-eq 'expr names)) (cons 'expr.test extra-args-names)) (cons ':then (cons (cons (cdr (assoc-eq 'expr names)) (cons 'expr.then extra-args-names)) (cons ':else (cons (cons (cdr (assoc-eq 'expr names)) (cons 'expr.else extra-args-names)) 'nil))))))) (cons ':comma (cons (cons 'make-expr-comma (cons ':first (cons (cons (cdr (assoc-eq 'expr names)) (cons 'expr.first extra-args-names)) (cons ':next (cons (cons (cdr (assoc-eq 'expr names)) (cons 'expr.next extra-args-names)) 'nil))))) '(:cast/call-ambig (prog2$ (raise "Misusage error: ~x0." (expr-fix expr)) (expr-fix expr)) :cast/mul-ambig (prog2$ (raise "Misusage error: ~x0." (expr-fix expr)) (expr-fix expr)) :cast/add-ambig (prog2$ (raise "Misusage error: ~x0." (expr-fix expr)) (expr-fix expr)) :cast/sub-ambig (prog2$ (raise "Misusage error: ~x0." (expr-fix expr)) (expr-fix expr)) :cast/and-ambig (prog2$ (raise "Misusage error: ~x0." (expr-fix expr)) (expr-fix expr))))))))))))))))))))))))))))))))))))))))) '(:returns (new-expr exprp) :measure (expr-count expr)))))