Parse zero or more assembler qualifiers.
(parse-*-asm-qualifier parstate) → (mv erp quals span new-parstate)
That is, parse a
If there are no assembler qualifiers, we return an irrelevant span, which the caller does not use.
Function:
(defun parse-*-asm-qualifier (parstate) (declare (xargs :stobjs (parstate))) (declare (xargs :guard (parstatep parstate))) (let ((__function__ 'parse-*-asm-qualifier)) (declare (ignorable __function__)) (b* (((reterr) nil (irr-span) parstate) ((erp token span parstate) (read-token parstate)) ((unless (token-asm-qualifier-p token)) (b* ((parstate (if token (unread-token parstate) parstate))) (retok nil (irr-span) parstate))) (qual (token-to-asm-qualifier token)) ((erp quals last-span parstate) (parse-*-asm-qualifier parstate))) (retok (cons qual quals) (if quals (span-join span last-span) span) parstate))))
Theorem:
(defthm asm-qual-listp-of-parse-*-asm-qualifier.quals (b* (((mv acl2::?erp ?quals ?span ?new-parstate) (parse-*-asm-qualifier parstate))) (asm-qual-listp quals)) :rule-classes :rewrite)
Theorem:
(defthm spanp-of-parse-*-asm-qualifier.span (b* (((mv acl2::?erp ?quals ?span ?new-parstate) (parse-*-asm-qualifier parstate))) (spanp span)) :rule-classes :rewrite)
Theorem:
(defthm parstatep-of-parse-*-asm-qualifier.new-parstate (implies (parstatep parstate) (b* (((mv acl2::?erp ?quals ?span ?new-parstate) (parse-*-asm-qualifier parstate))) (parstatep new-parstate))) :rule-classes :rewrite)
Theorem:
(defthm parsize-of-parse-*-asm-qualifier-uncond (b* (((mv acl2::?erp ?quals ?span ?new-parstate) (parse-*-asm-qualifier parstate))) (<= (parsize new-parstate) (parsize parstate))) :rule-classes :linear)