;;; $Id: parsed-exp-extended.def,v 1.2 1999/04/26 20:15:44 leavens Exp $

(defrep parsed-exp datum)

(deftype unless-exp? (-> (parsed-exp) boolean))
(deftype make-unless-exp (-> (parsed-exp parsed-exp) parsed-exp))
(deftype unless-exp->test-exp (-> (parsed-exp) parsed-exp))
(deftype unless-exp->body (-> (parsed-exp) parsed-exp))

(deftype when-exp? (-> (parsed-exp) boolean))
(deftype make-when-exp (-> (parsed-exp parsed-exp) parsed-exp))
(deftype when-exp->test-exp (-> (parsed-exp) parsed-exp))
(deftype when-exp->body (-> (parsed-exp) parsed-exp))

(deftype cond-exp? (-> (parsed-exp) boolean))
(deftype make-cond-exp (-> ((list (clause parsed-exp parsed-exp))) parsed-exp))
(deftype cond-exp->clauses (-> (parsed-exp) (list (clause parsed-exp parsed-exp))))

(deftype case-exp? (-> (parsed-exp) boolean))
(deftype make-case-exp (-> (parsed-exp (list (one-case number parsed-exp))) parsed-exp))
(deftype case-exp->exp (-> (parsed-exp) parsed-exp))
(deftype case-exp->cases (-> (parsed-exp) (list (one-case number parsed-exp))))

(deftype repeat-exp? (-> (parsed-exp) boolean))
(deftype make-repeat-exp (-> (symbol parsed-exp parsed-exp) parsed-exp))
(deftype repeat-exp->var (-> (parsed-exp) symbol))
(deftype repeat-exp->final-val (-> (parsed-exp) parsed-exp))
(deftype repeat-exp->body (-> (parsed-exp) parsed-exp))

(deftype for? (-> (parsed-exp) boolean))
(deftype make-for (-> (symbol parsed-exp parsed-exp parsed-exp) parsed-exp))
(deftype for->var (-> (parsed-exp) symbol))
(deftype for->lower-exp (-> (parsed-exp) parsed-exp))
(deftype for->upper-exp (-> (parsed-exp) parsed-exp))
(deftype for->body (-> (parsed-exp) parsed-exp))

(deftype foreach? (-> (parsed-exp) boolean))
(deftype make-foreach (-> (symbol parsed-exp parsed-exp) parsed-exp))
(deftype foreach->var (-> (parsed-exp) symbol))
(deftype foreach->list-exp (-> (parsed-exp) parsed-exp))
(deftype foreach->body (-> (parsed-exp) parsed-exp))

(deftype while? (-> (parsed-exp) boolean))
(deftype make-while (-> (parsed-exp parsed-exp) parsed-exp))
(deftype while->test-exp (-> (parsed-exp) parsed-exp))
(deftype while->body (-> (parsed-exp) parsed-exp))

(deftype do-until? (-> (parsed-exp) boolean))
(deftype make-do-until (-> (parsed-exp parsed-exp) parsed-exp))
(deftype do-until->body (-> (parsed-exp) parsed-exp))
(deftype do-until->test-exp (-> (parsed-exp) parsed-exp))

(deftype run-while? (-> (parsed-exp) boolean))
(deftype make-run-while (-> (parsed-exp parsed-exp) parsed-exp))
(deftype run-while->body (-> (parsed-exp) parsed-exp))
(deftype run-while->test-exp (-> (parsed-exp) parsed-exp))

(deftype multiassign? (-> (parsed-exp) boolean))
(deftype make-multiassign (-> ((list symbol) (list parsed-exp)) parsed-exp))
(deftype multiassign->vars (-> (parsed-exp) (list symbol)))
(deftype multiassign->exps (-> (parsed-exp) (list parsed-exp)))

(deftype and-exp? (-> (parsed-exp) boolean))
(deftype make-and-exp (-> (parsed-exp parsed-exp) parsed-exp))
(deftype and-exp->left-exp (-> (parsed-exp) parsed-exp))
(deftype and-exp->right-exp (-> (parsed-exp) parsed-exp))

(deftype or-exp? (-> (parsed-exp) boolean))
(deftype make-or-exp (-> (parsed-exp parsed-exp) parsed-exp))
(deftype or-exp->left-exp (-> (parsed-exp) parsed-exp))
(deftype or-exp->right-exp (-> (parsed-exp) parsed-exp))

(deftype implies-exp? (-> (parsed-exp) boolean))
(deftype make-implies-exp (-> (parsed-exp parsed-exp) parsed-exp))
(deftype implies-exp->left-exp (-> (parsed-exp) parsed-exp))
(deftype implies-exp->right-exp (-> (parsed-exp) parsed-exp))

(deftype within-use? (-> (parsed-exp) boolean))
(deftype make-within-use (-> (parsed-exp (list (decl parsed-exp))) parsed-exp))
(deftype within-use->body (-> (parsed-exp) parsed-exp))
(deftype within-use->decls (-> (parsed-exp) (list (decl parsed-exp))))

(deftype with-do? (-> (parsed-exp) boolean))
(deftype make-with-do (-> ((list (decl parsed-exp)) parsed-exp) parsed-exp))
(deftype with-do->decls (-> (parsed-exp) (list (decl parsed-exp))))
(deftype with-do->body (-> (parsed-exp) parsed-exp))

