Basic constructor macro for vl-atom structures.
(make-vl-atom [:guts <guts>] [:finalwidth <finalwidth>] [:finaltype <finaltype>] [:atts <atts>])
This is the usual way to construct vl-atom structures. It simply conses together a structure with the specified fields.
This macro generates a new vl-atom structure from scratch. See also change-vl-atom, which can "change" an existing structure, instead.
This is an ordinary
Macro:
(defmacro make-vl-atom (&rest args) (std::make-aggregate 'vl-atom args '((:guts) (:finalwidth) (:finaltype) (:atts)) 'make-vl-atom nil))
Function:
(defun vl-atom (guts finalwidth finaltype atts) (declare (xargs :guard (and (vl-atomguts-p guts) (maybe-natp finalwidth) (vl-maybe-exprtype-p finaltype) (vl-atts-p atts)))) (declare (xargs :guard t)) (let ((__function__ 'vl-atom)) (declare (ignorable __function__)) (b* ((guts (mbe :logic (vl-atomguts-fix guts) :exec guts)) (finalwidth (mbe :logic (maybe-natp-fix finalwidth) :exec finalwidth)) (finaltype (mbe :logic (vl-maybe-exprtype-fix finaltype) :exec finaltype)) (atts (mbe :logic (vl-atts-fix atts) :exec atts))) (cons :atom (std::prod-cons (std::prod-cons guts finalwidth) (std::prod-cons finaltype atts))))))