2 * Copyright (c) Facebook, Inc. and its affiliates.
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the "hack" directory of this source tree.
14 let rec funpow n ~f ~init
=
18 funpow (n
- 1) ~f ~init
:(f init
)
20 let combine_opts keep_some combine x y
=
28 | (Some x
, Some y
) -> Some
(combine x y
)
29 | (None
, None
) -> None
31 let rec fold3 ~f ~init xs ys zs
=
32 List.Or_unequal_lengths.(
33 match (xs
, ys
, zs
) with
34 | ([], [], []) -> Ok init
35 | (x
:: xs
, y
:: ys
, z
:: zs
) ->
37 match fold3 ~f ~init xs ys zs
with
38 | Ok acc
-> Ok
(f acc x y z
)
41 | _
-> Unequal_lengths
)
43 let stmt_name = function
44 | A.Fallthrough
-> "Fallthrough"
47 | A.Continue
-> "Continue"
48 | A.Throw _
-> "Throw"
49 | A.Return _
-> "Return"
50 | A.Yield_break
-> "Yield_break"
51 | A.Awaitall _
-> "Awaitall"
54 | A.While _
-> "While"
55 | A.Using _
-> "Using"
57 | A.Switch _
-> "Switch"
58 | A.Foreach _
-> "Foreach"
61 | A.Block _
-> "Block"
62 | A.Markup _
-> "Markup"
63 | A.AssertEnv _
-> "AssertEnv"
65 let expr_name = function
66 | A.Darray _
-> "Darray"
67 | A.Varray _
-> "Varray"
68 | A.Shape _
-> "Shape"
69 | A.ValCollection _
-> "ValCollection"
70 | A.KeyValCollection _
-> "KeyValCollection"
75 | A.Omitted
-> "Omitted"
78 | A.Dollardollar _
-> "Dollardollar"
79 | A.Clone _
-> "Clone"
80 | A.Obj_get _
-> "Obj_get"
81 | A.Array_get _
-> "Array_get"
82 | A.Class_get _
-> "Class_get"
83 | A.Class_const _
-> "Class_const"
85 | A.FunctionPointer _
-> "FunctionPointer"
87 | A.Float _
-> "Float"
88 | A.String _
-> "String"
89 | A.String2 _
-> "String2"
90 | A.PrefixedString _
-> "PrefixedString"
91 | A.Yield _
-> "Yield"
92 | A.Await _
-> "Await"
93 | A.Tuple _
-> "Tuple"
97 | A.Binop _
-> "Binop"
103 | A.Record _
-> "Record"
107 | A.Callconv _
-> "Callconv"
108 | A.Import _
-> "Import"
109 | A.Collection _
-> "Collection"
110 | A.ExpressionTree _
-> "ExpressionTree"
111 | A.Lplaceholder _
-> "Lplaceholder"
112 | A.Fun_id _
-> "Fun_id"
113 | A.Method_id _
-> "Method_id"
114 | A.Method_caller _
-> "Method_caller"
115 | A.Smethod_id _
-> "Smethod_id"
117 | A.ET_Splice _
-> "ET_splice"
118 | A.EnumClassLabel _
-> "EnumClassLabel"
119 | A.ReadonlyExpr _
-> "Readonly"