summaryrefslogtreecommitdiff
path: root/src/pretty_print_sail.ml
diff options
context:
space:
mode:
authorThomas Bauereiss2017-10-13 15:46:53 +0100
committerThomas Bauereiss2017-10-13 17:23:39 +0100
commit2ced2254c30061598a3e30f19131122213f3c18b (patch)
tree0bf3953156201d296830167692529f3e1c60e8b8 /src/pretty_print_sail.ml
parent31b19d42bba272eb358887ab31cb4e221c51060c (diff)
Improve debugging output
With -ddump_rewrite_ast, pretty-print Sail code after each rewriting step in addition to dumping the AST.
Diffstat (limited to 'src/pretty_print_sail.ml')
-rw-r--r--src/pretty_print_sail.ml20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/pretty_print_sail.ml b/src/pretty_print_sail.ml
index 0f8e482a..d346c801 100644
--- a/src/pretty_print_sail.ml
+++ b/src/pretty_print_sail.ml
@@ -177,7 +177,8 @@ let doc_exp, doc_let =
and starstar_exp ((E_aux(e,_)) as expr) = match e with
| E_app_infix(l,(Id_aux(Id "**",_) as op),r) ->
doc_op (doc_id op) (starstar_exp l) (app_exp r)
- | E_if _ | E_for _ | E_loop _ | E_let _ -> right_atomic_exp expr
+ | E_if _ | E_for _ | E_loop _ | E_let _
+ | E_internal_let _ | E_internal_plet _ -> right_atomic_exp expr
| _ -> app_exp expr
and right_atomic_exp ((E_aux(e,_)) as expr) = match e with
(* Special case: omit "else ()" when the else branch is empty. *)
@@ -208,6 +209,18 @@ let doc_exp, doc_let =
)) ^/^
exp exp4
| E_let(leb,e) -> doc_op (string "in") (let_exp leb) (exp e)
+ | E_internal_let (lexp, exp1, exp2) ->
+ let le =
+ prefix 2 1
+ (separate space [string "internal_let"; doc_lexp lexp; equals])
+ (exp exp1) in
+ doc_op (string "in") le (exp exp2)
+ | E_internal_plet (pat, exp1, exp2) ->
+ let le =
+ prefix 2 1
+ (separate space [string "internal_plet"; doc_pat pat; equals])
+ (exp exp1) in
+ doc_op (string "in") le (exp exp2)
| _ -> group (parens (exp expr))
and app_exp ((E_aux(e,_)) as expr) = match e with
| E_app(f,args) ->
@@ -303,6 +316,7 @@ let doc_exp, doc_let =
| E_app (_, _)|E_vector_access (_, _)|E_vector_subrange (_, _, _)
| E_cons (_, _)|E_field (_, _)|E_assign (_, _)
| E_if _ | E_for _ | E_loop _ | E_let _
+ | E_internal_let _ | E_internal_plet _
| E_vector_append _
| E_app_infix (_,
(* for every app_infix operator caught at a higher precedence,
@@ -346,8 +360,8 @@ let doc_exp, doc_let =
| E_internal_exp_user _ -> raise (Reporting_basic.err_unreachable Unknown ("internal_exp_user not rewritten away"))
| E_internal_cast ((_, Overload (_, _,_ )), _) | E_internal_exp _ -> assert false
*)
- | E_internal_let (lexp, exp1, exp2) ->
- separate space [string "internal let"; doc_lexp lexp; equals; exp exp1; string "in"; exp exp2]
+ | E_internal_return exp1 ->
+ separate space [string "internal_return"; exp exp1]
| _ -> failwith ("Cannot print: " ^ Ast_util.string_of_exp expr)
and let_exp (LB_aux(lb,_)) = match lb with
| LB_val(pat,e) ->