|
@@ -696,7 +696,6 @@ let unescape s =
|
|
|
loop false 0;
|
|
|
Buffer.contents b
|
|
|
|
|
|
-
|
|
|
let map_expr loop (e,p) =
|
|
|
let opt f o =
|
|
|
match o with None -> None | Some v -> Some (f v)
|
|
@@ -762,6 +761,34 @@ let map_expr loop (e,p) =
|
|
|
) in
|
|
|
(e,p)
|
|
|
|
|
|
+let iter_expr loop (e,p) =
|
|
|
+ let opt eo = match eo with None -> () | Some e -> loop e in
|
|
|
+ let exprs = List.iter loop in
|
|
|
+ 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;
|
|
|
+ | EArray(e1,e2) | EBinop(_,e1,e2) | EIn(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
|
|
|
+ | ECall(e1,el) -> loop e1; exprs el;
|
|
|
+ | EObjectDecl fl -> List.iter (fun (_,e) -> loop e) fl;
|
|
|
+ | ETry(e1,catches) ->
|
|
|
+ loop e1;
|
|
|
+ List.iter (fun (_,_,e) -> loop e) catches
|
|
|
+ | ESwitch(e1,cases,def) ->
|
|
|
+ loop e1;
|
|
|
+ List.iter (fun (el,eg,e) ->
|
|
|
+ exprs el;
|
|
|
+ opt eg;
|
|
|
+ opt e;
|
|
|
+ ) cases;
|
|
|
+ (match def with None -> () | Some e -> opt e);
|
|
|
+ | EFunction(_,f) ->
|
|
|
+ List.iter (fun (_,_,_,eo) -> opt eo) f.f_args;
|
|
|
+ opt f.f_expr
|
|
|
+ | EVars vl -> List.iter (fun (_,_,eo) -> opt eo) vl
|
|
|
+
|
|
|
let s_expr e =
|
|
|
let rec s_expr_inner tabs (e,_) =
|
|
|
match e with
|