Parse an argument list into structured, name/value arguments.
(json-to-comp-db-arguments arguments) → (mv erp arguments$)
Function:
(defun json-to-comp-db-arguments (arguments) (declare (xargs :guard (json::value-listp arguments))) (b* (((reterr) nil) (arguments (json::value-list-fix arguments)) ((when (endp arguments)) (retok nil)) (name-value? (first arguments)) ((unless (eq (json::value-kind name-value?) :string)) (retmsg$ "Expected string type in \"arguments\" array of ~ JSON compilation database entry. Found ~x0 instead." (json::value-kind name-value?))) (name-value?-str (json::value-string->get name-value?)) ((erp comp-db-arg rest-arguments) (b* (((reterr) nil nil) ((unless (member-equal name-value?-str *cc-options-space-sep*)) (b* (((mv erp argument?) (json-to-comp-db-try-parse-short-option name-value?-str)) ((unless erp) (retok argument? (rest arguments))) ((mv erp argument?) (json-to-comp-db-try-parse-equal-arg name-value?-str)) ((unless erp) (retok argument? (rest arguments)))) (retok (make-comp-db-arg :name name-value?-str :separator "" :value nil) (rest arguments)))) ((when (endp (rest arguments))) (retmsg$ "Argument ~x0 is not followed by a value." name-value?-str)) (value (second arguments)) ((unless (eq (json::value-kind value) :string)) (retmsg$ "Expected string type in \"arguments\" array of ~ JSON compilation database entry. Found ~x0 instead." (json::value-kind value))) (value-str (json::value-string->get value))) (retok (make-comp-db-arg :name name-value?-str :separator " " :value value-str) (rest (rest arguments))))) ((erp arguments$) (json-to-comp-db-arguments rest-arguments))) (retok (cons comp-db-arg arguments$))))
Theorem:
(defthm comp-db-arg-listp-of-json-to-comp-db-arguments.arguments$ (b* (((mv acl2::?erp ?arguments$) (json-to-comp-db-arguments arguments))) (comp-db-arg-listp arguments$)) :rule-classes :rewrite)
Theorem:
(defthm json-to-comp-db-arguments-of-value-list-fix-arguments (equal (json-to-comp-db-arguments (json::value-list-fix arguments)) (json-to-comp-db-arguments arguments)))
Theorem:
(defthm json-to-comp-db-arguments-value-list-equiv-congruence-on-arguments (implies (json::value-list-equiv arguments arguments-equiv) (equal (json-to-comp-db-arguments arguments) (json-to-comp-db-arguments arguments-equiv))) :rule-classes :congruence)