|
@@ -5,6 +5,9 @@ open TType
|
|
|
let monomorph_create_ref : (unit -> tmono) ref = ref (fun _ -> assert false)
|
|
|
let monomorph_bind_ref : (tmono -> t -> unit) ref = ref (fun _ _ -> assert false)
|
|
|
|
|
|
+let has_meta m ml = List.exists (fun (m2,_,_) -> m = m2) ml
|
|
|
+let get_meta m ml = List.find (fun (m2,_,_) -> m = m2) ml
|
|
|
+
|
|
|
(* Flags *)
|
|
|
|
|
|
let has_flag flags flag =
|
|
@@ -728,3 +731,16 @@ let resolve_typedef t =
|
|
|
| TInst (c,_) -> TClassDecl c
|
|
|
| TAbstract (a,_) -> TAbstractDecl a
|
|
|
| _ -> t
|
|
|
+
|
|
|
+(**
|
|
|
+ Check if type `t` has meta `m`.
|
|
|
+ Does not follow typedefs, monomorphs etc.
|
|
|
+*)
|
|
|
+let type_has_meta t m =
|
|
|
+ match t with
|
|
|
+ | TMono _ | TFun _ | TAnon _ | TDynamic _ | TLazy _ -> false
|
|
|
+ | TEnum ({ e_meta = metadata }, _)
|
|
|
+ | TInst ({ cl_meta = metadata }, _)
|
|
|
+ | TType ({ t_meta = metadata }, _)
|
|
|
+ | TAbstract ({ a_meta = metadata }, _) -> has_meta m metadata
|
|
|
+
|