|
@@ -407,18 +407,17 @@ module Pattern = struct
|
|
) pctx1.current_locals;
|
|
) pctx1.current_locals;
|
|
PatOr(pat1,pat2)
|
|
PatOr(pat1,pat2)
|
|
| EBinop(OpAssign,e1,e2) ->
|
|
| EBinop(OpAssign,e1,e2) ->
|
|
- let pat = make pctx t e2 in
|
|
|
|
- let rec loop e = match e with
|
|
|
|
|
|
+ let rec loop in_display e = match e with
|
|
| (EConst (Ident s),p) ->
|
|
| (EConst (Ident s),p) ->
|
|
let v = add_local s p in
|
|
let v = add_local s p in
|
|
|
|
+ if in_display then ignore(Typer.display_expr ctx e (mk (TLocal v) v.v_type p) (WithType t) p);
|
|
|
|
+ let pat = make pctx t e2 in
|
|
PatBind(v,pat)
|
|
PatBind(v,pat)
|
|
- | (EParenthesis e1,_) -> loop e1
|
|
|
|
- | (EDisplay(e1,_),_) ->
|
|
|
|
- ignore(Typer.handle_display ctx e (WithType t));
|
|
|
|
- loop e
|
|
|
|
|
|
+ | (EParenthesis e1,_) -> loop in_display e1
|
|
|
|
+ | (EDisplay(e1,_),_) -> loop true e1
|
|
| _ -> fail()
|
|
| _ -> fail()
|
|
in
|
|
in
|
|
- loop e1
|
|
|
|
|
|
+ loop false e1
|
|
| EBinop(OpArrow,e1,e2) ->
|
|
| EBinop(OpArrow,e1,e2) ->
|
|
let v = add_local "_" null_pos in
|
|
let v = add_local "_" null_pos in
|
|
let e1 = type_expr ctx e1 Value in
|
|
let e1 = type_expr ctx e1 Value in
|