Converts a Leo expression from JSON AST to fixtype AST.
Function:
(defun j2f-ternary-expression (json-ifelse-expression) (declare (xargs :guard (json::memberp json-ifelse-expression))) (let ((__function__ 'j2f-ternary-expression)) (declare (ignorable __function__)) (b* (((unless (and (json::memberp json-ifelse-expression) (equal "Ternary" (json::member->name json-ifelse-expression)))) (mv t *error-cond*)) ((json::pattern (:object (:member "condition" test-expr) (:member "if_true" then-expr) (:member "if_false" else-expr))) (json::member->value json-ifelse-expression)) ((unless json::match?) (mv t *error-cond*)) ((mv erp-test leo-test) (j2f-expression test-expr)) ((mv erp-then leo-then) (j2f-expression then-expr)) ((mv erp-else leo-else) (j2f-expression else-expr)) ((when (or erp-test erp-then erp-else)) (mv t *error-cond*))) (mv nil (make-expression-cond :test leo-test :then leo-then :else leo-else)))))
Function:
(defun j2f-binop-expression (json-binop-expression) (declare (xargs :guard (json::memberp json-binop-expression))) (let ((__function__ 'j2f-binop-expression)) (declare (ignorable __function__)) (b* (((unless (and (json::memberp json-binop-expression) (equal "Binary" (json::member->name json-binop-expression)) (json::valuep (json::member->value json-binop-expression)) (equal :object (json::value-kind (json::member->value json-binop-expression))))) (mv t *error-binop*)) ((json::pattern (:object (:member "left" left_operand) (:member "right" right_operand) (:member "op" (:string opname)))) (json::member->value json-binop-expression)) ((unless json::match?) (mv t *error-binop*)) ((mv erp expression1) (j2f-expression left_operand)) ((when erp) (mv t *error-binop*)) ((mv erp expression2) (j2f-expression right_operand)) ((when erp) (mv t *error-binop*))) (mv nil (make-expression-binary :op (j2f-binop-name-to-binop opname) :arg1 expression1 :arg2 expression2)))))
Function:
(defun j2f-unary-expression (json-unary-expression) (declare (xargs :guard (json::memberp json-unary-expression))) (let ((__function__ 'j2f-unary-expression)) (declare (ignorable __function__)) (b* (((unless (and (json::memberp json-unary-expression) (equal "Unary" (json::member->name json-unary-expression)) (json::valuep (json::member->value json-unary-expression)) (equal :object (json::value-kind (json::member->value json-unary-expression))))) (mv t *error-unary-op*)) ((json::pattern (:object (:member "receiver" operand) (:member "op" (:string opname)))) (json::member->value json-unary-expression)) ((unless json::match?) (mv t *error-unary-op*)) ((mv erp expression) (j2f-expression operand)) ((when erp) (mv t *error-unary-op*))) (mv nil (make-expression-unary :op (j2f-unary-op-name-to-unop opname) :arg expression)))))
Function:
(defun j2f-function-call-expression-top (ident-w-span json-array-of-arg-exprs) (declare (xargs :guard (and (stringp ident-w-span) (json::valuep json-array-of-arg-exprs)))) (let ((__function__ 'j2f-function-call-expression-top)) (declare (ignorable __function__)) (b* (((unless (and (stringp ident-w-span) (json::valuep json-array-of-arg-exprs) (eq :array (json::value-kind json-array-of-arg-exprs)))) (mv t *error-expression*)) (cleaned-id-value (extract-identifier-name ident-w-span)) ((unless (identifier-string-p cleaned-id-value)) (mv t *error-expression*)) ((mv erp arg-exprs) (j2f-expression-list (json::value-array->elements json-array-of-arg-exprs))) ((when erp) (mv t *error-expression*))) (mv nil (make-expression-internal-call :fun (make-identifier :name cleaned-id-value) :args arg-exprs)))))
Function:
(defun j2f-function-call-expression (json-funcall-expression) (declare (xargs :guard (json::memberp json-funcall-expression))) (let ((__function__ 'j2f-function-call-expression)) (declare (ignorable __function__)) (b* (((unless (and (json::memberp json-funcall-expression) (equal "Call" (json::member->name json-funcall-expression)))) (mv t *error-expression*)) ((json::pattern (:object (:member "function" (:object (:member "Identifier" (:string ident-w-span)))) (:member "arguments" json-array-of-arg-exprs))) (json::member->value json-funcall-expression)) ((when (and json::match? (stringp ident-w-span) (json::valuep json-array-of-arg-exprs))) (j2f-function-call-expression-top ident-w-span json-array-of-arg-exprs))) (mv t *error-expression*))))
Function:
(defun j2f-expression-list (json-expressions) (declare (xargs :guard (json::value-listp json-expressions))) (let ((__function__ 'j2f-expression-list)) (declare (ignorable __function__)) (b* (((when (endp json-expressions)) (mv nil nil)) ((mv first-erp first-expr) (j2f-expression (car json-expressions))) ((mv rest-erp rest-exprs) (j2f-expression-list (cdr json-expressions)))) (mv (or first-erp rest-erp) (cons first-expr rest-exprs)))))
Function:
(defun j2f-expression (json-expression) (declare (xargs :guard (json::valuep json-expression))) (let ((__function__ 'j2f-expression)) (declare (ignorable __function__)) (if (equal :object (json::value-kind json-expression)) (if (and (= 1 (len (json::value-object->members json-expression))) (consp (json::value-object->members json-expression))) (let ((json-member (first (json::value-object->members json-expression)))) (if (equal "Call" (json::member->name json-member)) (j2f-function-call-expression json-member) (if (equal "Ternary" (json::member->name json-member)) (j2f-ternary-expression json-member) (if (equal "Binary" (json::member->name json-member)) (j2f-binop-expression json-member) (if (equal "Unary" (json::member->name json-member)) (j2f-unary-expression json-member) (if (equal "Literal" (json::member->name json-member)) (j2f-value-wrapper-expression json-member) (if (equal "value" (json::member->name json-member)) (j2f-value-expression json-member) (if (equal "Implicit" (json::member->name json-member)) (j2f-implicit-expression json-member) (if (equal "Expression" (json::member->name json-member)) (j2f-expression-expression json-member) (if (equal "Identifier" (json::member->name json-member)) (j2f-var-or-self-expression json-member) (if (equal "Integer" (json::member->name json-member)) (j2f-integer-literal-expression json-member) (if (equal "Boolean" (json::member->name json-member)) (j2f-boolean-literal-expression json-member) (if (equal "Field" (json::member->name json-member)) (j2f-field-literal-expression json-member) (if (equal "Group" (json::member->name json-member)) (j2f-group-literal-expression json-member) (if (equal "Address" (json::member->name json-member)) (j2f-address-literal-expression json-member) (mv t *error-expression*)))))))))))))))) (let ((json-members (json::value-object->members json-expression))) (if (and (< 1 (len json-members)) (equal "identifier" (json::member->name (first json-members)))) (j2f-var-or-self-expression-2 (first json-members)) (mv t *error-expression*)))) (mv t *error-expression*))))