summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/parser.mly8
-rw-r--r--src/parser2.mly4
-rw-r--r--src/pretty_print_sail.ml2
-rw-r--r--src/pretty_print_sail2.ml16
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] *)