diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/parser.mly | 8 | ||||
| -rw-r--r-- | src/parser2.mly | 4 | ||||
| -rw-r--r-- | src/pretty_print_sail.ml | 2 | ||||
| -rw-r--r-- | src/pretty_print_sail2.ml | 16 |
4 files changed, 19 insertions, 11 deletions
diff --git a/src/parser.mly b/src/parser.mly index 755c2cc7..5e4a2cad 100644 --- a/src/parser.mly +++ b/src/parser.mly @@ -869,6 +869,8 @@ eq_exp: | at_exp { $1 } /* XXX check for consistency */ + | eq_exp Eq at_exp + { eloc (E_app_infix($1,Id_aux(Id($2), locn 2 2), $3)) } | eq_exp EqEq at_exp { eloc (E_app_infix($1,Id_aux(Id($2), locn 2 2), $3)) } | eq_exp ExclEq at_exp @@ -905,6 +907,8 @@ eq_exp: eq_right_atomic_exp: | at_right_atomic_exp { $1 } + | eq_exp Eq at_right_atomic_exp + { eloc (E_app_infix($1,Id_aux(Id($2), locn 2 2), $3)) } | eq_exp EqEq at_right_atomic_exp { eloc (E_app_infix($1,Id_aux(Id($2), locn 2 2), $3)) } | eq_exp ExclEq at_right_atomic_exp @@ -1017,8 +1021,8 @@ letbind: patsexp_funcl: | atomic_pat Eq exp { peloc (Pat_exp($1,$3)) } - | atomic_pat When exp Eq exp - { peloc (Pat_when ($1, $3, $5)) } + | Lparen atomic_pat When exp Rparen Eq exp + { peloc (Pat_when ($2, $4, $7)) } funcl: | id patsexp_funcl diff --git a/src/parser2.mly b/src/parser2.mly index 500344ad..59c7f1c4 100644 --- a/src/parser2.mly +++ b/src/parser2.mly @@ -1001,8 +1001,8 @@ exp_list: funcl_patexp: | pat Eq exp { mk_pexp (Pat_exp ($1, $3)) $startpos $endpos } - | pat If_ exp0 Eq exp - { mk_pexp (Pat_when ($1, $3, $5)) $startpos $endpos } + | Lparen pat If_ exp Rparen Eq exp + { mk_pexp (Pat_when ($2, $4, $7)) $startpos $endpos } funcl: | id funcl_patexp diff --git a/src/pretty_print_sail.ml b/src/pretty_print_sail.ml index 68f414b3..3868502b 100644 --- a/src/pretty_print_sail.ml +++ b/src/pretty_print_sail.ml @@ -490,7 +490,7 @@ let doc_funcl (FCL_aux(FCL_Funcl(id,pexp),_)) = | Pat_aux (Pat_exp (pat,exp),_) -> group (doc_op equals (separate space [doc_id id; doc_atomic_pat pat]) (doc_exp exp)) | Pat_aux (Pat_when (pat,wh,exp),_) -> - group (doc_op equals (separate space [doc_id id; doc_atomic_pat pat; string "when"; doc_exp wh]) + group (doc_op equals (doc_id id ^^ space ^^ parens (separate space [doc_atomic_pat pat; string "when"; doc_exp wh])) (doc_exp exp)) let doc_fundef (FD_aux(FD_function(r, typa, efa, fcls),_)) = diff --git a/src/pretty_print_sail2.ml b/src/pretty_print_sail2.ml index 4d05e04d..0c531301 100644 --- a/src/pretty_print_sail2.ml +++ b/src/pretty_print_sail2.ml @@ -394,12 +394,12 @@ and doc_atomic_lexp (LEXP_aux (l_aux, _) as lexp) = | LEXP_vector_range (lexp, exp1, exp2) -> doc_atomic_lexp lexp ^^ brackets (separate space [doc_exp exp1; string ".."; doc_exp exp2]) | LEXP_memory (id, exps) -> doc_id id ^^ parens (separate_map (comma ^^ space) doc_exp exps) | _ -> parens (doc_lexp lexp) -and doc_pexps pexps = surround 2 0 lbrace (separate_map (comma ^^ hardline) (doc_pexp "=>") pexps) rbrace -and doc_pexp sym (Pat_aux (pat_aux, _)) = +and doc_pexps pexps = surround 2 0 lbrace (separate_map (comma ^^ hardline) doc_pexp pexps) rbrace +and doc_pexp (Pat_aux (pat_aux, _)) = match pat_aux with - | Pat_exp (pat, exp) -> separate space [doc_pat pat; string sym; doc_exp exp] + | Pat_exp (pat, exp) -> separate space [doc_pat pat; string "=>"; doc_exp exp] | Pat_when (pat, wh, exp) -> - separate space [doc_pat pat; string "if"; doc_exp wh; string sym; doc_exp exp] + separate space [doc_pat pat; string "if"; doc_exp wh; string "=>"; doc_exp exp] and doc_letbind (LB_aux (lb_aux, _)) = match lb_aux with | LB_val (pat, exp) -> @@ -407,8 +407,12 @@ and doc_letbind (LB_aux (lb_aux, _)) = let doc_funcl funcl = string "FUNCL" -let doc_funcl (FCL_aux (FCL_Funcl (id, pexp), _)) = - group (separate space [doc_id id; doc_pexp "=" pexp]) +let doc_funcl (FCL_aux (FCL_Funcl (id, Pat_aux (pexp,_)), _)) = + match pexp with + | Pat_exp (pat,exp) -> + group (separate space [doc_id id; doc_pat pat; equals; doc_exp exp]) + | Pat_when (pat,wh,exp) -> + group (separate space [doc_id id; parens (separate space [doc_pat pat; string "if"; doc_exp wh]); string "="; doc_exp exp]) let doc_default (DT_aux(df,_)) = match df with | DT_kind(bk,v) -> string "DT_kind" (* separate space [string "default"; doc_bkind bk; doc_var v] *) |
