@@ -290,75 +290,79 @@ type constant =
290290 | NativeInt of nativeint
291291 | Tuple of int * constant array * array_or_not
292292
293- let rec constant_equal a b =
294- match a, b with
295- | String a , String b -> Some (String. equal a b)
296- | NativeString a , NativeString b -> Some (Native_string. equal a b)
297- | Tuple (ta , a , _ ), Tuple (tb , b , _ ) ->
298- if ta <> tb || Array. length a <> Array. length b
299- then Some false
300- else
301- let same = ref (Some true ) in
302- for i = 0 to Array. length a - 1 do
303- match ! same, constant_equal a.(i) b.(i) with
304- | None , _ -> ()
305- | _ , None -> same := None
306- | Some s , Some c -> same := Some (s && c)
307- done ;
308- ! same
309- | Int a , Int b | Int32 a , Int32 b -> Some (Int32. equal a b)
310- | Int64 a , Int64 b -> Some (Int64. equal a b)
311- | NativeInt a , NativeInt b -> Some (Nativeint. equal a b)
312- | Float_array a , Float_array b -> Some (Array. equal Float. equal a b)
313- | Float a , Float b -> Some (Float. equal a b)
314- | String _ , NativeString _ | NativeString _ , String _ -> None
315- | Int _ , Float _ | Float _ , Int _ -> None
316- | Tuple ((0 | 254 ), _ , _ ), Float_array _ -> None
317- | Float_array _ , Tuple ((0 | 254 ), _ , _ ) -> None
318- | ( Tuple _
319- , ( String _
320- | NativeString _
321- | Int64 _
322- | Int _
323- | Int32 _
324- | NativeInt _
325- | Float _
326- | Float_array _ ) ) -> Some false
327- | ( Float_array _
328- , ( String _
329- | NativeString _
330- | Int64 _
331- | Int _
332- | Int32 _
333- | NativeInt _
334- | Float _
335- | Tuple _ ) ) -> Some false
336- | ( String _
337- , (Int64 _ | Int _ | Int32 _ | NativeInt _ | Float _ | Tuple _ | Float_array _ ) ) ->
338- Some false
339- | ( NativeString _
340- , (Int64 _ | Int _ | Int32 _ | NativeInt _ | Float _ | Tuple _ | Float_array _ ) ) ->
341- Some false
342- | ( Int64 _
343- , ( String _
344- | NativeString _
345- | Int _
346- | Int32 _
347- | NativeInt _
348- | Float _
349- | Tuple _
350- | Float_array _ ) ) -> Some false
351- | Float _ , (String _ | NativeString _ | Float_array _ | Int64 _ | Tuple (_ , _ , _ )) ->
352- Some false
353- | ( (Int _ | Int32 _ | NativeInt _)
354- , (String _ | NativeString _ | Float_array _ | Int64 _ | Tuple (_ , _ , _ )) ) ->
355- Some false
356- (* Note: the following cases should not occur when compiling to Javascript *)
357- | Int _, (Int32 _ | NativeInt _)
358- | Int32 _, (Int _ | NativeInt _)
359- | NativeInt _, (Int _ | Int32 _)
360- | (Int32 _ | NativeInt _), Float _
361- | Float _ , (Int32 _ | NativeInt _ ) -> None
293+ module Constant = struct
294+ type t = constant
295+
296+ let rec ocaml_equal a b =
297+ match a, b with
298+ | String a , String b -> Some (String. equal a b)
299+ | NativeString a , NativeString b -> Some (Native_string. equal a b)
300+ | Tuple (ta , a , _ ), Tuple (tb , b , _ ) ->
301+ if ta <> tb || Array. length a <> Array. length b
302+ then Some false
303+ else
304+ let same = ref (Some true ) in
305+ for i = 0 to Array. length a - 1 do
306+ match ! same, ocaml_equal a.(i) b.(i) with
307+ | None , _ -> ()
308+ | _ , None -> same := None
309+ | Some s , Some c -> same := Some (s && c)
310+ done ;
311+ ! same
312+ | Int a , Int b | Int32 a , Int32 b -> Some (Int32. equal a b)
313+ | Int64 a , Int64 b -> Some (Int64. equal a b)
314+ | NativeInt a , NativeInt b -> Some (Nativeint. equal a b)
315+ | Float_array a , Float_array b -> Some (Array. equal Float. ieee_equal a b)
316+ | Float a , Float b -> Some (Float. ieee_equal a b)
317+ | String _ , NativeString _ | NativeString _ , String _ -> None
318+ | Int _ , Float _ | Float _ , Int _ -> None
319+ | Tuple ((0 | 254 ), _ , _ ), Float_array _ -> None
320+ | Float_array _ , Tuple ((0 | 254 ), _ , _ ) -> None
321+ | ( Tuple _
322+ , ( String _
323+ | NativeString _
324+ | Int64 _
325+ | Int _
326+ | Int32 _
327+ | NativeInt _
328+ | Float _
329+ | Float_array _ ) ) -> Some false
330+ | ( Float_array _
331+ , ( String _
332+ | NativeString _
333+ | Int64 _
334+ | Int _
335+ | Int32 _
336+ | NativeInt _
337+ | Float _
338+ | Tuple _ ) ) -> Some false
339+ | ( String _
340+ , (Int64 _ | Int _ | Int32 _ | NativeInt _ | Float _ | Tuple _ | Float_array _ ) ) ->
341+ Some false
342+ | ( NativeString _
343+ , (Int64 _ | Int _ | Int32 _ | NativeInt _ | Float _ | Tuple _ | Float_array _ ) ) ->
344+ Some false
345+ | ( Int64 _
346+ , ( String _
347+ | NativeString _
348+ | Int _
349+ | Int32 _
350+ | NativeInt _
351+ | Float _
352+ | Tuple _
353+ | Float_array _ ) ) -> Some false
354+ | Float _ , (String _ | NativeString _ | Float_array _ | Int64 _ | Tuple (_ , _ , _ )) ->
355+ Some false
356+ | ( (Int _ | Int32 _ | NativeInt _)
357+ , (String _ | NativeString _ | Float_array _ | Int64 _ | Tuple (_ , _ , _ )) ) ->
358+ Some false
359+ (* Note: the following cases should not occur when compiling to Javascript *)
360+ | Int _, (Int32 _ | NativeInt _)
361+ | Int32 _, (Int _ | NativeInt _)
362+ | NativeInt _, (Int _ | Int32 _)
363+ | (Int32 _ | NativeInt _), Float _
364+ | Float _ , (Int32 _ | NativeInt _ ) -> None
365+ end
362366
363367type loc =
364368 | No
0 commit comments