@@ -367,42 +367,46 @@ type constant =
367367 | Tuple of int * constant array * array_or_not
368368 | Int of int32
369369
370- let rec constant_equal a b =
371- match a, b with
372- | String a , String b -> Some (String. equal a b)
373- | NativeString a , NativeString b -> Some (Native_string. equal a b)
374- | Tuple (ta , a , _ ), Tuple (tb , b , _ ) ->
375- if ta <> tb || Array. length a <> Array. length b
376- then Some false
377- else
378- let same = ref (Some true ) in
379- for i = 0 to Array. length a - 1 do
380- match ! same, constant_equal a.(i) b.(i) with
381- | None , _ -> ()
382- | _ , None -> same := None
383- | Some s , Some c -> same := Some (s && c)
384- done ;
385- ! same
386- | Int64 a , Int64 b -> Some (Int64. equal a b)
387- | Float_array a , Float_array b -> Some (Array. equal Float. equal a b)
388- | Int a , Int b -> Some (Int32. equal a b)
389- | Float a , Float b -> Some (Float. equal a b)
390- | String _ , NativeString _ | NativeString _ , String _ -> None
391- | Int _ , Float _ | Float _ , Int _ -> None
392- | Tuple ((0 | 254 ), _ , _ ), Float_array _ -> None
393- | Float_array _ , Tuple ((0 | 254 ), _ , _ ) -> None
394- | Tuple _ , (String _ | NativeString _ | Int64 _ | Int _ | Float _ | Float_array _ ) ->
395- Some false
396- | Float_array _ , (String _ | NativeString _ | Int64 _ | Int _ | Float _ | Tuple _ ) ->
397- Some false
398- | String _ , (Int64 _ | Int _ | Float _ | Tuple _ | Float_array _ ) -> Some false
399- | NativeString _ , (Int64 _ | Int _ | Float _ | Tuple _ | Float_array _ ) -> Some false
400- | Int64 _ , (String _ | NativeString _ | Int _ | Float _ | Tuple _ | Float_array _ ) ->
401- Some false
402- | Float _ , (String _ | NativeString _ | Float_array _ | Int64 _ | Tuple (_ , _ , _ )) ->
403- Some false
404- | Int _ , (String _ | NativeString _ | Float_array _ | Int64 _ | Tuple (_ , _ , _ )) ->
405- Some false
370+ module Constant = struct
371+ type t = constant
372+
373+ let rec ocaml_equal a b =
374+ match a, b with
375+ | String a , String b -> Some (String. equal a b)
376+ | NativeString a , NativeString b -> Some (Native_string. equal a b)
377+ | Tuple (ta , a , _ ), Tuple (tb , b , _ ) ->
378+ if ta <> tb || Array. length a <> Array. length b
379+ then Some false
380+ else
381+ let same = ref (Some true ) in
382+ for i = 0 to Array. length a - 1 do
383+ match ! same, ocaml_equal a.(i) b.(i) with
384+ | None , _ -> ()
385+ | _ , None -> same := None
386+ | Some s , Some c -> same := Some (s && c)
387+ done ;
388+ ! same
389+ | Int64 a , Int64 b -> Some (Int64. equal a b)
390+ | Float_array a , Float_array b -> Some (Array. equal Poly. equal a b)
391+ | Int a , Int b -> Some (Int32. equal a b)
392+ | Float a , Float b -> Some (Poly. equal a b)
393+ | String _ , NativeString _ | NativeString _ , String _ -> None
394+ | Int _ , Float _ | Float _ , Int _ -> None
395+ | Tuple ((0 | 254 ), _ , _ ), Float_array _ -> None
396+ | Float_array _ , Tuple ((0 | 254 ), _ , _ ) -> None
397+ | Tuple _ , (String _ | NativeString _ | Int64 _ | Int _ | Float _ | Float_array _ ) ->
398+ Some false
399+ | Float_array _ , (String _ | NativeString _ | Int64 _ | Int _ | Float _ | Tuple _ ) ->
400+ Some false
401+ | String _ , (Int64 _ | Int _ | Float _ | Tuple _ | Float_array _ ) -> Some false
402+ | NativeString _ , (Int64 _ | Int _ | Float _ | Tuple _ | Float_array _ ) -> Some false
403+ | Int64 _ , (String _ | NativeString _ | Int _ | Float _ | Tuple _ | Float_array _ ) ->
404+ Some false
405+ | Float _ , (String _ | NativeString _ | Float_array _ | Int64 _ | Tuple (_ , _ , _ )) ->
406+ Some false
407+ | Int _ , (String _ | NativeString _ | Float_array _ | Int64 _ | Tuple (_ , _ , _ )) ->
408+ Some false
409+ end
406410
407411type loc =
408412 | No
0 commit comments