Return the list of type/expression pairs to concatenate together to replace a key/value assignment pattern.
(vl-assignpattern-keyvalue-replacement lhs-type fields orig-x ctx warnings) → (mv successp pairs new-warnings)
Function:
(defun vl-assignpattern-keyvalue-replacement (lhs-type fields orig-x ctx warnings) (declare (xargs :guard (and (vl-datatype-p lhs-type) (vl-exprlist-p fields) (vl-expr-p orig-x) (vl-context-p ctx) (vl-warninglist-p warnings)))) (let ((__function__ 'vl-assignpattern-keyvalue-replacement)) (declare (ignorable __function__)) (b* ((warnings (vl-warninglist-fix warnings)) (ctx (vl-context-fix ctx)) (orig-x (vl-expr-fix orig-x)) (pdims (vl-datatype->pdims lhs-type)) (udims (vl-datatype->udims lhs-type)) ((unless (or (consp udims) (consp pdims))) (b* (((unless (eq (vl-datatype-kind lhs-type) :vl-struct)) (mv nil nil (warn :type :vl-assignpattern-elim-fail :msg "~a0: Positional assignment pattern must be in a ~ struct or array type context: ~a1" :args (list (vl-context-fix ctx) (vl-expr-fix orig-x))))) ((vl-struct lhs-type)) ((mv ok alist warnings) (vl-parse-keyval-pattern-struct fields lhs-type.members orig-x ctx warnings)) ((unless ok) (mv nil nil warnings)) ((unless (uniquep (alist-keys alist))) (mv nil nil (warn :type :vl-assignpattern-elim-fail :msg "~a0: Duplicate keys in assignment pattern: ~a1" :args (list ctx orig-x))))) (vl-keyvalue-pattern-collect-struct-replacements lhs-type.members alist orig-x ctx warnings))) (dim (if (consp udims) (car udims) (car pdims))) ((unless (and (not (eq dim :vl-unsized-dimension)) (vl-range-resolved-p dim))) (mv nil nil (warn :type :vl-assignpattern-elim-fail :msg "~a0: Unresolved packed dimensions in LHS datatype ~a1" :args (list (vl-context-fix ctx) (vl-datatype-fix lhs-type))))) ((mv ok alist warnings) (vl-parse-keyval-pattern-array fields dim orig-x ctx warnings)) ((unless ok) (mv nil nil warnings)) ((unless (uniquep (alist-keys alist))) (mv nil nil (warn :type :vl-assignpattern-elim-fail :msg "~a0: Duplicate keys in assignment pattern: ~a1" :args (list ctx orig-x)))) (new-datatype (if (consp udims) (vl-datatype-update-dims pdims (cdr udims) lhs-type) (vl-datatype-update-dims (cdr pdims) nil lhs-type))) (msb (vl-resolved->val (vl-range->msb dim))) (lsb (vl-resolved->val (vl-range->lsb dim))) (direction (if (< msb lsb) 1 -1))) (vl-keyvalue-pattern-collect-array-replacements (vl-range-size dim) msb direction new-datatype alist orig-x ctx warnings))))
Theorem:
(defthm booleanp-of-vl-assignpattern-keyvalue-replacement.successp (b* (((mv ?successp ?pairs ?new-warnings) (vl-assignpattern-keyvalue-replacement lhs-type fields orig-x ctx warnings))) (booleanp successp)) :rule-classes :type-prescription)
Theorem:
(defthm vl-type-expr-pairs-p-of-vl-assignpattern-keyvalue-replacement.pairs (b* (((mv ?successp ?pairs ?new-warnings) (vl-assignpattern-keyvalue-replacement lhs-type fields orig-x ctx warnings))) (vl-type-expr-pairs-p pairs)) :rule-classes :rewrite)
Theorem:
(defthm vl-warninglist-p-of-vl-assignpattern-keyvalue-replacement.new-warnings (b* (((mv ?successp ?pairs ?new-warnings) (vl-assignpattern-keyvalue-replacement lhs-type fields orig-x ctx warnings))) (vl-warninglist-p new-warnings)) :rule-classes :rewrite)
Theorem:
(defthm vl-exprlist-max-count-of-vl-assignpattern-keyvalue-replacement (< (vl-exprlist-max-count (alist-vals (mv-nth 1 (vl-assignpattern-keyvalue-replacement lhs-type fields orig-x ctx warnings)))) (vl-exprlist-count fields)) :rule-classes :linear)
Theorem:
(defthm sum-sizes-of-vl-assignpattern-keyvalue-replacement (b* (((mv ok pairs &) (vl-assignpattern-keyvalue-replacement lhs-type fields orig-x ctx warnings)) ((mv warning size) (vl-datatype-size lhs-type)) ((mv warning1 size-sum) (vl-type-expr-pairs-sum-datatype-sizes pairs))) (implies (and ok (not warning)) (and (not warning1) (equal size-sum size)))))
Theorem:
(defthm vl-assignpattern-keyvalue-replacement-of-vl-datatype-fix-lhs-type (equal (vl-assignpattern-keyvalue-replacement (vl-datatype-fix lhs-type) fields orig-x ctx warnings) (vl-assignpattern-keyvalue-replacement lhs-type fields orig-x ctx warnings)))
Theorem:
(defthm vl-assignpattern-keyvalue-replacement-vl-datatype-equiv-congruence-on-lhs-type (implies (vl-datatype-equiv lhs-type lhs-type-equiv) (equal (vl-assignpattern-keyvalue-replacement lhs-type fields orig-x ctx warnings) (vl-assignpattern-keyvalue-replacement lhs-type-equiv fields orig-x ctx warnings))) :rule-classes :congruence)
Theorem:
(defthm vl-assignpattern-keyvalue-replacement-of-vl-exprlist-fix-fields (equal (vl-assignpattern-keyvalue-replacement lhs-type (vl-exprlist-fix fields) orig-x ctx warnings) (vl-assignpattern-keyvalue-replacement lhs-type fields orig-x ctx warnings)))
Theorem:
(defthm vl-assignpattern-keyvalue-replacement-vl-exprlist-equiv-congruence-on-fields (implies (vl-exprlist-equiv fields fields-equiv) (equal (vl-assignpattern-keyvalue-replacement lhs-type fields orig-x ctx warnings) (vl-assignpattern-keyvalue-replacement lhs-type fields-equiv orig-x ctx warnings))) :rule-classes :congruence)
Theorem:
(defthm vl-assignpattern-keyvalue-replacement-of-vl-expr-fix-orig-x (equal (vl-assignpattern-keyvalue-replacement lhs-type fields (vl-expr-fix orig-x) ctx warnings) (vl-assignpattern-keyvalue-replacement lhs-type fields orig-x ctx warnings)))
Theorem:
(defthm vl-assignpattern-keyvalue-replacement-vl-expr-equiv-congruence-on-orig-x (implies (vl-expr-equiv orig-x orig-x-equiv) (equal (vl-assignpattern-keyvalue-replacement lhs-type fields orig-x ctx warnings) (vl-assignpattern-keyvalue-replacement lhs-type fields orig-x-equiv ctx warnings))) :rule-classes :congruence)
Theorem:
(defthm vl-assignpattern-keyvalue-replacement-of-vl-context-fix-ctx (equal (vl-assignpattern-keyvalue-replacement lhs-type fields orig-x (vl-context-fix ctx) warnings) (vl-assignpattern-keyvalue-replacement lhs-type fields orig-x ctx warnings)))
Theorem:
(defthm vl-assignpattern-keyvalue-replacement-vl-context-equiv-congruence-on-ctx (implies (vl-context-equiv ctx ctx-equiv) (equal (vl-assignpattern-keyvalue-replacement lhs-type fields orig-x ctx warnings) (vl-assignpattern-keyvalue-replacement lhs-type fields orig-x ctx-equiv warnings))) :rule-classes :congruence)
Theorem:
(defthm vl-assignpattern-keyvalue-replacement-of-vl-warninglist-fix-warnings (equal (vl-assignpattern-keyvalue-replacement lhs-type fields orig-x ctx (vl-warninglist-fix warnings)) (vl-assignpattern-keyvalue-replacement lhs-type fields orig-x ctx warnings)))
Theorem:
(defthm vl-assignpattern-keyvalue-replacement-vl-warninglist-equiv-congruence-on-warnings (implies (vl-warninglist-equiv warnings warnings-equiv) (equal (vl-assignpattern-keyvalue-replacement lhs-type fields orig-x ctx warnings) (vl-assignpattern-keyvalue-replacement lhs-type fields orig-x ctx warnings-equiv))) :rule-classes :congruence)