|
@@ -219,6 +219,7 @@ and expr_def =
|
|
|
| EUntyped of expr
|
|
|
| EThrow of expr
|
|
|
| ECast of expr * type_hint option
|
|
|
+ | EIs of expr * type_hint
|
|
|
| EDisplay of expr * display_kind
|
|
|
| EDisplayNew of placed_type_path
|
|
|
| ETernary of expr * expr * expr
|
|
@@ -732,6 +733,10 @@ let map_expr loop (e,p) =
|
|
|
let e = loop e in
|
|
|
let t = opt type_hint t in
|
|
|
ECast (e,t)
|
|
|
+ | EIs (e,t) ->
|
|
|
+ let e = loop e in
|
|
|
+ let t = type_hint t in
|
|
|
+ EIs (e,t)
|
|
|
| EDisplay (e,f) -> EDisplay (loop e,f)
|
|
|
| EDisplayNew t -> EDisplayNew (tpath t)
|
|
|
| ETernary (e1,e2,e3) ->
|
|
@@ -753,7 +758,7 @@ let iter_expr loop (e,p) =
|
|
|
match e with
|
|
|
| EConst _ | EContinue | EBreak | EDisplayNew _ | EReturn None -> ()
|
|
|
| EParenthesis e1 | EField(e1,_) | EUnop(_,_,e1) | EReturn(Some e1) | EThrow e1 | EMeta(_,e1)
|
|
|
- | ECheckType(e1,_) | EDisplay(e1,_) | ECast(e1,_) | EUntyped e1 -> loop e1;
|
|
|
+ | ECheckType(e1,_) | EDisplay(e1,_) | ECast(e1,_) | EIs(e1,_) | EUntyped e1 -> loop e1;
|
|
|
| EArray(e1,e2) | EBinop(_,e1,e2) | EFor(e1,e2) | EWhile(e1,e2,_) | EIf(e1,e2,None) -> loop e1; loop e2;
|
|
|
| ETernary(e1,e2,e3) | EIf(e1,e2,Some e3) -> loop e1; loop e2; loop e3;
|
|
|
| EArrayDecl el | ENew(_,el) | EBlock el -> List.iter loop el
|
|
@@ -822,6 +827,7 @@ module Printer = struct
|
|
|
| EThrow e -> "throw " ^ s_expr_inner tabs e
|
|
|
| ECast (e,Some (t,_)) -> "cast (" ^ s_expr_inner tabs e ^ ", " ^ s_complex_type tabs t ^ ")"
|
|
|
| ECast (e,None) -> "cast " ^ s_expr_inner tabs e
|
|
|
+ | EIs (e,(t,_)) -> s_expr_inner tabs e ^ " is " ^ s_complex_type tabs t
|
|
|
| ETernary (e1,e2,e3) -> s_expr_inner tabs e1 ^ " ? " ^ s_expr_inner tabs e2 ^ " : " ^ s_expr_inner tabs e3
|
|
|
| ECheckType (e,(t,_)) -> "(" ^ s_expr_inner tabs e ^ " : " ^ s_complex_type tabs t ^ ")"
|
|
|
| EMeta (m,e) -> s_metadata tabs m ^ " " ^ s_expr_inner tabs e
|
|
@@ -1118,6 +1124,9 @@ module Expr = struct
|
|
|
| ECast(e1,_) ->
|
|
|
add "ECast";
|
|
|
loop e1;
|
|
|
+ | EIs(e1,_) ->
|
|
|
+ add "EIs";
|
|
|
+ loop e1;
|
|
|
| EDisplay(e1,dk) ->
|
|
|
add ("EDisplay " ^ (s_display_kind dk));
|
|
|
loop e1
|