X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/blobdiff_plain/27d9de59634e853cac7adf09c9a7f82b3da5fcdc..60695e9923af9e74160575b5de0d5549808294b4:/src/print.sml diff --git a/src/print.sml b/src/print.sml index 1f661dd..7e38bb5 100644 --- a/src/print.sml +++ b/src/print.sml @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -*) + *) (* Pretty-printing Domtool configuration file ASTs *) @@ -58,7 +58,9 @@ fun p_typ' pn (t, _) = parenIf pn [p_typ' true t1, space 1, string "->", space 1, p_typ' true t2] | TAction (p, r1, r2) => parenIf pn [p_predBoxed p, space 1, p_record r1, space 1, - string "->", space 1, p_record r2] + string "=>", space 1, p_record r2] + | TNested (p, t) => + parenIf pn [p_pred' false p, space 1, string "=>", space 1, p_typ' false t] | TError => string "" | TUnif (_, ref (SOME t)) => p_typ' pn t @@ -97,23 +99,28 @@ fun p_exp (e, _) = string ":", space 1, dBox [string "(", p_typ t, string ")"], space 1, string "->", space 1, p_exp e, string ")"] + | EALam (x, c, e) => dBox [string "(\\\\", space 1, string x, space 1, + string ":", space 1, p_pred c, + space 1, string "->", space 1, p_exp e, string ")"] | EVar x => string x | EApp (e1, e2) => dBox [string "(", p_exp e1, break {nsp = 1, offset = 0}, p_exp e2, string ")"] + | ESkip => string "_" | ESet (x, e) => dBox [string x, space 1, string "=", space 1, p_exp e] | EGet (x1, x2, e) => dBox [dBox [string x1, space 1, string "<-", space 1, string x2, string ";", space 1], p_exp e] | ESeq es => dBox (valOf (foldr (fn (e, NONE) => SOME [p_exp e] - | (e, SOME ds) => SOME (dBox [p_exp e, string ";", space 1] :: ds)) + | (e, SOME ds) => SOME (dBox [p_exp e, string ";", newline] :: ds)) NONE es)) - | ELocal (ESeq [e1, e2], _) => dBox [string "let", space 1, - p_exp e1, space 1, - string "in", space 1, - p_exp e2, space 1, - string "end"] - | ELocal _ => raise Fail "Unexpected ELocal form" + | ELocal (e1, e2) => dBox [string "let", space 1, + p_exp e1, space 1, + string "in", space 1, + p_exp e2, space 1, + string "end"] + | EWith (e1, (ESkip, _)) => dBox [p_exp e1, space 1, string "with", space 1, string "end"] + | EWith (e1, e2) => dBox [p_exp e1, space 1, string "with", p_exp e2, space 1, string "end"] fun printd d = let @@ -125,4 +132,7 @@ fun printd d = SM.closeStream myStream end +fun preface (s, d) = printd (PD.hovBox (PD.PPS.Rel 0, + [PD.string s, PD.space 1, d])) + end