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