Check if a declarator matches the target, and create the function wrapper if so.
(declor-wrap-fn-add-wrapper-def declor target-name
wrapper-name? blacklist specs)
→
(mv er? foundp wrapper? wrapper-name?$)If the
Function:
(defun declor-wrap-fn-add-wrapper-def (declor target-name wrapper-name? blacklist specs) (declare (xargs :guard (and (declorp declor) (identp target-name) (ident-optionp wrapper-name?) (ident-setp blacklist) (decl-spec-listp specs)))) (b* (((reterr) nil nil nil) ((unless (c$::ident-equiv (declor->ident declor) target-name)) (retok nil nil nil)) (wrapper-base-name (or wrapper-name? (ident (concatenate 'string "wrapper_" (let ((target-name-str (ident->unwrap target-name))) (if (stringp target-name-str) target-name-str "")))))) (wrapper-name (fresh-ident wrapper-base-name blacklist)) (arg-base-name (ident "arg")) ((mv - found-paramsp can-create-wrapperp wrapper-declor idents) (declor-wrap-fn-make-wrapper declor wrapper-name arg-base-name blacklist)) ((unless found-paramsp) (retok nil nil nil)) ((unless can-create-wrapperp) (retok t nil nil)) (wrapper-body (make-comp-stmt :items (list (make-block-item-stmt :stmt (make-stmt-return :expr? (make-expr-funcall :fun (make-expr-ident :ident target-name) :args (c$::ident-list-map-expr-ident idents)))))))) (retok t (make-fundef :specs (c$::declor-spec-list-make-static specs) :declor wrapper-declor :body wrapper-body :info nil) wrapper-name)))
Theorem:
(defthm maybe-msgp-of-declor-wrap-fn-add-wrapper-def.er? (b* (((mv ?er? ?foundp ?wrapper? ?wrapper-name?$) (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name? blacklist specs))) (maybe-msgp er?)) :rule-classes :rewrite)
Theorem:
(defthm booleanp-of-declor-wrap-fn-add-wrapper-def.foundp (b* (((mv ?er? ?foundp ?wrapper? ?wrapper-name?$) (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name? blacklist specs))) (booleanp foundp)) :rule-classes :type-prescription)
Theorem:
(defthm fundef-optionp-of-declor-wrap-fn-add-wrapper-def.wrapper? (b* (((mv ?er? ?foundp ?wrapper? ?wrapper-name?$) (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name? blacklist specs))) (fundef-optionp wrapper?)) :rule-classes :rewrite)
Theorem:
(defthm ident-optionp-of-declor-wrap-fn-add-wrapper-def.wrapper-name?$ (b* (((mv ?er? ?foundp ?wrapper? ?wrapper-name?$) (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name? blacklist specs))) (ident-optionp wrapper-name?$)) :rule-classes :rewrite)
Theorem:
(defthm fundefp-of-declor-wrap-fn-add-wrapper-def.wrapper?-under-iff (b* (((mv ?er? ?foundp ?wrapper? ?wrapper-name?$) (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name? blacklist specs))) (iff (fundefp wrapper?) wrapper?)))
Theorem:
(defthm identp-of-declor-wrap-fn-add-wrapper-def.wrapper-name?$ (b* (((mv ?er? ?foundp ?wrapper? ?wrapper-name?$) (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name? blacklist specs))) (equal (identp wrapper-name?$) (fundefp wrapper?))))
Theorem:
(defthm declor-wrap-fn-add-wrapper-def-of-declor-fix-declor (equal (declor-wrap-fn-add-wrapper-def (declor-fix declor) target-name wrapper-name? blacklist specs) (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name? blacklist specs)))
Theorem:
(defthm declor-wrap-fn-add-wrapper-def-declor-equiv-congruence-on-declor (implies (c$::declor-equiv declor declor-equiv) (equal (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name? blacklist specs) (declor-wrap-fn-add-wrapper-def declor-equiv target-name wrapper-name? blacklist specs))) :rule-classes :congruence)
Theorem:
(defthm declor-wrap-fn-add-wrapper-def-of-ident-fix-target-name (equal (declor-wrap-fn-add-wrapper-def declor (ident-fix target-name) wrapper-name? blacklist specs) (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name? blacklist specs)))
Theorem:
(defthm declor-wrap-fn-add-wrapper-def-ident-equiv-congruence-on-target-name (implies (c$::ident-equiv target-name target-name-equiv) (equal (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name? blacklist specs) (declor-wrap-fn-add-wrapper-def declor target-name-equiv wrapper-name? blacklist specs))) :rule-classes :congruence)
Theorem:
(defthm declor-wrap-fn-add-wrapper-def-of-ident-option-fix-wrapper-name? (equal (declor-wrap-fn-add-wrapper-def declor target-name (ident-option-fix wrapper-name?) blacklist specs) (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name? blacklist specs)))
Theorem:
(defthm declor-wrap-fn-add-wrapper-def-ident-option-equiv-congruence-on-wrapper-name? (implies (c$::ident-option-equiv wrapper-name? wrapper-name?-equiv) (equal (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name? blacklist specs) (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name?-equiv blacklist specs))) :rule-classes :congruence)
Theorem:
(defthm declor-wrap-fn-add-wrapper-def-of-ident-set-fix-blacklist (equal (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name? (ident-set-fix blacklist) specs) (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name? blacklist specs)))
Theorem:
(defthm declor-wrap-fn-add-wrapper-def-ident-set-equiv-congruence-on-blacklist (implies (c$::ident-set-equiv blacklist blacklist-equiv) (equal (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name? blacklist specs) (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name? blacklist-equiv specs))) :rule-classes :congruence)
Theorem:
(defthm declor-wrap-fn-add-wrapper-def-of-decl-spec-list-fix-specs (equal (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name? blacklist (decl-spec-list-fix specs)) (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name? blacklist specs)))
Theorem:
(defthm declor-wrap-fn-add-wrapper-def-decl-spec-list-equiv-congruence-on-specs (implies (c$::decl-spec-list-equiv specs specs-equiv) (equal (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name? blacklist specs) (declor-wrap-fn-add-wrapper-def declor target-name wrapper-name? blacklist specs-equiv))) :rule-classes :congruence)