ocaml/tools/eqparsetree.ml

793 lines
30 KiB
OCaml

(**************************************************************************)
(* *)
(* OCaml *)
(* *)
(* Hongbo Zhang (University of Pennsylvania) *)
(* *)
(* Copyright 2007 Institut National de Recherche en Informatique et *)
(* en Automatique. *)
(* *)
(* All rights reserved. This file is distributed under the terms of *)
(* the GNU Lesser General Public License version 2.1, with the *)
(* special exception on linking described in the file LICENSE. *)
(* *)
(**************************************************************************)
(*
This module is mainly used to diff two parsetree, it helps to automate the
test for parsing/pprintast.ml
*)
open Parsetree
let curry f (g, h) = f g h
let eq_int : (int*int)->bool = curry (=)
let eq_char : (char*char)->bool=curry (=)
let eq_string : (string*string)->bool = curry (=)
let eq_int32 : (int32*int32)->bool=curry (=)
let eq_int64 : (int64*int64)->bool =curry (=)
let eq_nativeint : (nativeint*nativeint)->bool= curry (=)
let eq_bool :(bool*bool) -> bool = curry (=)
let eq_list mf_a (xs, ys) =
let rec loop =
function
| ([], []) -> true
| (x :: xs, y :: ys) -> (mf_a (x, y)) && (loop (xs, ys))
| (_, _) -> false
in loop (xs, ys)
let eq_option mf_a (x, y) =
match (x, y) with
| (None, None) -> true
| (Some x, Some y) -> mf_a (x, y)
| (_, _) -> false
module Location =struct
include Location
let eq_t : (t*t) -> bool = fun (_,_) -> true
end
module Longident = struct
include Longident
let rec eq_t : (t * t) -> 'result =
function
| (Lident a0, Lident b0) -> eq_string (a0, b0)
| (Ldot (a0, a1), Ldot (b0, b1)) ->
(eq_t (a0, b0)) && (eq_string (a1, b1))
| (Lapply (a0, a1), Lapply (b0, b1)) ->
(eq_t (a0, b0)) && (eq_t (a1, b1))
| (_, _) -> false
end
module Asttypes = struct
open Asttypes
let eq_constant : (constant * constant) -> 'result =
function
| (Const_int a0, Const_int b0) -> eq_int (a0, b0)
| (Const_char a0, Const_char b0) -> eq_char (a0, b0)
| (Const_string a0, Const_string b0) -> eq_string (a0, b0)
| (Const_float a0, Const_float b0) -> eq_string (a0, b0)
| (Const_int32 a0, Const_int32 b0) -> eq_int32 (a0, b0)
| (Const_int64 a0, Const_int64 b0) -> eq_int64 (a0, b0)
| (Const_nativeint a0, Const_nativeint b0) -> eq_nativeint (a0, b0)
| (_, _) -> false
let eq_rec_flag : (rec_flag * rec_flag) -> 'result =
function
| (Nonrecursive, Nonrecursive) -> true
| (Recursive, Recursive) -> true
| (Default, Default) -> true
| (_, _) -> false
let eq_direction_flag :
(direction_flag * direction_flag) -> 'result =
function
| (Upto, Upto) -> true
| (Downto, Downto) -> true
| (_, _) -> false
let eq_private_flag : (private_flag * private_flag) -> 'result =
function
| (Private, Private) -> true
| (Public, Public) -> true
| (_, _) -> false
let eq_mutable_flag : (mutable_flag * mutable_flag) -> 'result =
function
| (Immutable, Immutable) -> true
| (Mutable, Mutable) -> true
| (_, _) -> false
let eq_virtual_flag : (virtual_flag * virtual_flag) -> 'result =
function
| (Virtual, Virtual) -> true
| (Concrete, Concrete) -> true
| (_, _) -> false
let eq_override_flag : (override_flag * override_flag) -> 'result =
function
| (Override, Override) -> true
| (Fresh, Fresh) -> true
| (_, _) -> false
let eq_closed_flag : (closed_flag * closed_flag) -> 'result =
function
| (Closed, Closed) -> true
| (Open, Open) -> true
| (_, _) -> false
let eq_label : (label * label) -> 'result =
fun (a0, a1) -> eq_string (a0, a1)
let eq_loc :
'all_a0.
(('all_a0 * 'all_a0) -> 'result) ->
(('all_a0 loc) * ('all_a0 loc)) -> 'result =
fun mf_a ({ txt = a0; loc = a1 }, { txt = b0; loc = b1 }) ->
(mf_a (a0, b0)) && (Location.eq_t (a1, b1))
end
let rec eq_row_field : (row_field * row_field) -> 'result =
function
| (Rtag (a0, a1, a2), Rtag (b0, b1, b2)) ->
((Asttypes.eq_label (a0, b0)) && (eq_bool (a1, b1))) &&
(eq_list eq_core_type (a2, b2))
| (Rinherit a0, Rinherit b0) -> eq_core_type (a0, b0)
| (_, _) -> false
and eq_core_field_desc :
(core_field_desc * core_field_desc) -> 'result =
function
| (Pfield (a0, a1), Pfield (b0, b1)) ->
(eq_string (a0, b0)) && (eq_core_type (a1, b1))
| (Pfield_var, Pfield_var) -> true
| (_, _) -> false
and eq_core_field_type :
(core_field_type * core_field_type) -> 'result =
fun
({ pfield_desc = a0; pfield_loc = a1 },
{ pfield_desc = b0; pfield_loc = b1 })
-> (eq_core_field_desc (a0, b0)) && (Location.eq_t (a1, b1))
and eq_package_type : (package_type * package_type) -> 'result =
fun (a0, a1) ->
(fun ((a0, a1), (b0, b1)) ->
(Asttypes.eq_loc Longident.eq_t (a0, b0)) &&
(eq_list
(fun ((a0, a1), (b0, b1)) ->
(Asttypes.eq_loc Longident.eq_t (a0, b0)) &&
(eq_core_type (a1, b1)))
(a1, b1)))
(a0, a1)
and eq_core_type_desc :
(core_type_desc * core_type_desc) -> 'result =
function
| (Ptyp_any, Ptyp_any) -> true
| (Ptyp_var a0, Ptyp_var b0) -> eq_string (a0, b0)
| (Ptyp_arrow (a0, a1, a2), Ptyp_arrow (b0, b1, b2)) ->
((Asttypes.eq_label (a0, b0)) && (eq_core_type (a1, b1))) &&
(eq_core_type (a2, b2))
| (Ptyp_tuple a0, Ptyp_tuple b0) -> eq_list eq_core_type (a0, b0)
| (Ptyp_constr (a0, a1), Ptyp_constr (b0, b1)) ->
(Asttypes.eq_loc Longident.eq_t (a0, b0)) &&
(eq_list eq_core_type (a1, b1))
| (Ptyp_object a0, Ptyp_object b0) ->
eq_list eq_core_field_type (a0, b0)
| (Ptyp_class (a0, a1, a2), Ptyp_class (b0, b1, b2)) ->
((Asttypes.eq_loc Longident.eq_t (a0, b0)) &&
(eq_list eq_core_type (a1, b1)))
&& (eq_list Asttypes.eq_label (a2, b2))
| (Ptyp_alias (a0, a1), Ptyp_alias (b0, b1)) ->
(eq_core_type (a0, b0)) && (eq_string (a1, b1))
| (Ptyp_variant (a0, a1, a2), Ptyp_variant (b0, b1, b2)) ->
((eq_list eq_row_field (a0, b0)) && (eq_bool (a1, b1))) &&
(eq_option (eq_list Asttypes.eq_label) (a2, b2))
| (Ptyp_poly (a0, a1), Ptyp_poly (b0, b1)) ->
(eq_list eq_string (a0, b0)) && (eq_core_type (a1, b1))
| (Ptyp_package a0, Ptyp_package b0) -> eq_package_type (a0, b0)
| (_, _) -> false
and eq_core_type : (core_type * core_type) -> 'result =
fun
({ ptyp_desc = a0; ptyp_loc = a1 },
{ ptyp_desc = b0; ptyp_loc = b1 })
-> (eq_core_type_desc (a0, b0)) && (Location.eq_t (a1, b1))
let eq_class_infos :
'all_a0.
(('all_a0 * 'all_a0) -> 'result) ->
(('all_a0 class_infos) * ('all_a0 class_infos)) -> 'result =
fun mf_a
({
pci_virt = a0;
pci_params = a1;
pci_name = a2;
pci_expr = a3;
pci_variance = a4;
pci_loc = a5
},
{
pci_virt = b0;
pci_params = b1;
pci_name = b2;
pci_expr = b3;
pci_variance = b4;
pci_loc = b5
})
->
(((((Asttypes.eq_virtual_flag (a0, b0)) &&
((fun ((a0, a1), (b0, b1)) ->
(eq_list (Asttypes.eq_loc eq_string) (a0, b0)) &&
(Location.eq_t (a1, b1)))
(a1, b1)))
&& (Asttypes.eq_loc eq_string (a2, b2)))
&& (mf_a (a3, b3)))
&&
(eq_list
(fun ((a0, a1), (b0, b1)) ->
(eq_bool (a0, b0)) && (eq_bool (a1, b1)))
(a4, b4)))
&& (Location.eq_t (a5, b5))
let rec eq_pattern_desc : (pattern_desc * pattern_desc) -> 'result =
function
| (Ppat_any, Ppat_any) -> true
| (Ppat_var a0, Ppat_var b0) -> Asttypes.eq_loc eq_string (a0, b0)
| (Ppat_alias (a0, a1), Ppat_alias (b0, b1)) ->
(eq_pattern (a0, b0)) && (Asttypes.eq_loc eq_string (a1, b1))
| (Ppat_constant a0, Ppat_constant b0) ->
Asttypes.eq_constant (a0, b0)
| (Ppat_tuple a0, Ppat_tuple b0) -> eq_list eq_pattern (a0, b0)
| (Ppat_construct (a0, a1), Ppat_construct (b0, b1)) ->
((Asttypes.eq_loc Longident.eq_t (a0, b0)) &&
(eq_option eq_pattern (a1, b1)))
| (Ppat_variant (a0, a1), Ppat_variant (b0, b1)) ->
(Asttypes.eq_label (a0, b0)) && (eq_option eq_pattern (a1, b1))
| (Ppat_record (a0, a1), Ppat_record (b0, b1)) ->
(eq_list
(fun ((a0, a1), (b0, b1)) ->
(Asttypes.eq_loc Longident.eq_t (a0, b0)) &&
(eq_pattern (a1, b1)))
(a0, b0))
&& (Asttypes.eq_closed_flag (a1, b1))
| (Ppat_array a0, Ppat_array b0) -> eq_list eq_pattern (a0, b0)
| (Ppat_or (a0, a1), Ppat_or (b0, b1)) ->
(eq_pattern (a0, b0)) && (eq_pattern (a1, b1))
| (Ppat_constraint (a0, a1), Ppat_constraint (b0, b1)) ->
(eq_pattern (a0, b0)) && (eq_core_type (a1, b1))
| (Ppat_type a0, Ppat_type b0) ->
Asttypes.eq_loc Longident.eq_t (a0, b0)
| (Ppat_lazy a0, Ppat_lazy b0) -> eq_pattern (a0, b0)
| (Ppat_unpack a0, Ppat_unpack b0) ->
Asttypes.eq_loc eq_string (a0, b0)
| (_, _) -> false
and eq_pattern : (pattern * pattern) -> 'result =
fun
({ ppat_desc = a0; ppat_loc = a1 },
{ ppat_desc = b0; ppat_loc = b1 })
-> (eq_pattern_desc (a0, b0)) && (Location.eq_t (a1, b1))
let rec eq_structure_item_desc :
(structure_item_desc * structure_item_desc) -> 'result =
function
| (Pstr_eval a0, Pstr_eval b0) -> eq_expression (a0, b0)
| (Pstr_value (a0, a1), Pstr_value (b0, b1)) ->
(Asttypes.eq_rec_flag (a0, b0)) &&
(eq_list
(fun ((a0, a1), (b0, b1)) ->
(eq_pattern (a0, b0)) && (eq_expression (a1, b1)))
(a1, b1))
| (Pstr_primitive (a0, a1), Pstr_primitive (b0, b1)) ->
(Asttypes.eq_loc eq_string (a0, b0)) &&
(eq_value_description (a1, b1))
| (Pstr_type (a0, a1), Pstr_type (b0, b1)) ->
(Asttypes.eq_rec_flag (a0, b0)) &&
eq_list
(fun ((a0, a1), (b0, b1)) ->
(Asttypes.eq_loc eq_string (a0, b0)) &&
(eq_type_declaration (a1, b1)))
(a1, b1)
| (Pstr_exception (a0, a1), Pstr_exception (b0, b1)) ->
(Asttypes.eq_loc eq_string (a0, b0)) &&
(eq_exception_declaration (a1, b1))
| (Pstr_exn_rebind (a0, a1), Pstr_exn_rebind (b0, b1)) ->
(Asttypes.eq_loc eq_string (a0, b0)) &&
(Asttypes.eq_loc Longident.eq_t (a1, b1))
| (Pstr_module (a0, a1), Pstr_module (b0, b1)) ->
(Asttypes.eq_loc eq_string (a0, b0)) &&
(eq_module_expr (a1, b1))
| (Pstr_recmodule a0, Pstr_recmodule b0) ->
eq_list
(fun ((a0, a1, a2), (b0, b1, b2)) ->
((Asttypes.eq_loc eq_string (a0, b0)) &&
(eq_module_type (a1, b1)))
&& (eq_module_expr (a2, b2)))
(a0, b0)
| (Pstr_modtype (a0, a1), Pstr_modtype (b0, b1)) ->
(Asttypes.eq_loc eq_string (a0, b0)) &&
(eq_module_type (a1, b1))
| (Pstr_open a0, Pstr_open b0) ->
Asttypes.eq_loc Longident.eq_t (a0, b0)
| (Pstr_class a0, Pstr_class b0) ->
eq_list eq_class_declaration (a0, b0)
| (Pstr_class_type a0, Pstr_class_type b0) ->
eq_list eq_class_type_declaration (a0, b0)
| (Pstr_include a0, Pstr_include b0) -> eq_module_expr (a0, b0)
| (_, _) -> false
and eq_structure_item :
(structure_item * structure_item) -> 'result =
fun
({ pstr_desc = a0; pstr_loc = a1 },
{ pstr_desc = b0; pstr_loc = b1 })
-> (eq_structure_item_desc (a0, b0)) && (Location.eq_t (a1, b1))
and eq_structure : (structure * structure) -> 'result =
fun (a0, a1) -> eq_list eq_structure_item (a0, a1)
and eq_module_expr_desc :
(module_expr_desc * module_expr_desc) -> 'result =
function
| (Pmod_ident a0, Pmod_ident b0) ->
Asttypes.eq_loc Longident.eq_t (a0, b0)
| (Pmod_structure a0, Pmod_structure b0) -> eq_structure (a0, b0)
| (Pmod_functor (a0, a1, a2), Pmod_functor (b0, b1, b2)) ->
((Asttypes.eq_loc eq_string (a0, b0)) &&
(eq_module_type (a1, b1)))
&& (eq_module_expr (a2, b2))
| (Pmod_apply (a0, a1), Pmod_apply (b0, b1)) ->
(eq_module_expr (a0, b0)) && (eq_module_expr (a1, b1))
| (Pmod_constraint (a0, a1), Pmod_constraint (b0, b1)) ->
(eq_module_expr (a0, b0)) && (eq_module_type (a1, b1))
| (Pmod_unpack a0, Pmod_unpack b0) -> eq_expression (a0, b0)
| (_, _) -> false
and eq_module_expr : (module_expr * module_expr) -> 'result =
fun
({ pmod_desc = a0; pmod_loc = a1 },
{ pmod_desc = b0; pmod_loc = b1 })
-> (eq_module_expr_desc (a0, b0)) && (Location.eq_t (a1, b1))
and eq_with_constraint :
(with_constraint * with_constraint) -> 'result =
function
| (Pwith_type a0, Pwith_type b0) -> eq_type_declaration (a0, b0)
| (Pwith_module a0, Pwith_module b0) ->
Asttypes.eq_loc Longident.eq_t (a0, b0)
| (Pwith_typesubst a0, Pwith_typesubst b0) ->
eq_type_declaration (a0, b0)
| (Pwith_modsubst a0, Pwith_modsubst b0) ->
Asttypes.eq_loc Longident.eq_t (a0, b0)
| (_, _) -> false
and eq_modtype_declaration :
(modtype_declaration * modtype_declaration) -> 'result =
function
| (Pmodtype_abstract, Pmodtype_abstract) -> true
| (Pmodtype_manifest a0, Pmodtype_manifest b0) ->
eq_module_type (a0, b0)
| (_, _) -> false
and eq_signature_item_desc :
(signature_item_desc * signature_item_desc) -> 'result =
function
| (Psig_value (a0, a1), Psig_value (b0, b1)) ->
(Asttypes.eq_loc eq_string (a0, b0)) &&
(eq_value_description (a1, b1))
| (Psig_type (a0, a1), Psig_type (b0, b1)) ->
(Asttypes.eq_rec_flag (a0, b0)) &&
eq_list
(fun ((a0, a1), (b0, b1)) ->
(Asttypes.eq_loc eq_string (a0, b0)) &&
(eq_type_declaration (a1, b1)))
(a1, b1)
| (Psig_exception (a0, a1), Psig_exception (b0, b1)) ->
(Asttypes.eq_loc eq_string (a0, b0)) &&
(eq_exception_declaration (a1, b1))
| (Psig_module (a0, a1), Psig_module (b0, b1)) ->
(Asttypes.eq_loc eq_string (a0, b0)) &&
(eq_module_type (a1, b1))
| (Psig_recmodule a0, Psig_recmodule b0) ->
eq_list
(fun ((a0, a1), (b0, b1)) ->
(Asttypes.eq_loc eq_string (a0, b0)) &&
(eq_module_type (a1, b1)))
(a0, b0)
| (Psig_modtype (a0, a1), Psig_modtype (b0, b1)) ->
(Asttypes.eq_loc eq_string (a0, b0)) &&
(eq_modtype_declaration (a1, b1))
| (Psig_open a0, Psig_open b0) ->
Asttypes.eq_loc Longident.eq_t (a0, b0)
| (Psig_include a0, Psig_include b0) -> eq_module_type (a0, b0)
| (Psig_class a0, Psig_class b0) ->
eq_list eq_class_description (a0, b0)
| (Psig_class_type a0, Psig_class_type b0) ->
eq_list eq_class_type_declaration (a0, b0)
| (_, _) -> false
and eq_signature_item :
(signature_item * signature_item) -> 'result =
fun
({ psig_desc = a0; psig_loc = a1 },
{ psig_desc = b0; psig_loc = b1 })
-> (eq_signature_item_desc (a0, b0)) && (Location.eq_t (a1, b1))
and eq_signature : (signature * signature) -> 'result =
fun (a0, a1) -> eq_list eq_signature_item (a0, a1)
and eq_module_type_desc :
(module_type_desc * module_type_desc) -> 'result =
function
| (Pmty_ident a0, Pmty_ident b0) ->
Asttypes.eq_loc Longident.eq_t (a0, b0)
| (Pmty_signature a0, Pmty_signature b0) -> eq_signature (a0, b0)
| (Pmty_functor (a0, a1, a2), Pmty_functor (b0, b1, b2)) ->
((Asttypes.eq_loc eq_string (a0, b0)) &&
(eq_module_type (a1, b1)))
&& (eq_module_type (a2, b2))
| (Pmty_with (a0, a1), Pmty_with (b0, b1)) ->
(eq_module_type (a0, b0)) &&
(eq_list
(fun ((a0, a1), (b0, b1)) ->
(Asttypes.eq_loc Longident.eq_t (a0, b0)) &&
(eq_with_constraint (a1, b1)))
(a1, b1))
| (Pmty_typeof a0, Pmty_typeof b0) -> eq_module_expr (a0, b0)
| (_, _) -> false
and eq_module_type : (module_type * module_type) -> 'result =
fun
({ pmty_desc = a0; pmty_loc = a1 },
{ pmty_desc = b0; pmty_loc = b1 })
-> (eq_module_type_desc (a0, b0)) && (Location.eq_t (a1, b1))
and eq_class_declaration :
(class_declaration * class_declaration) -> 'result =
fun (a0, a1) -> eq_class_infos eq_class_expr (a0, a1)
and eq_class_field_desc :
(class_field_desc * class_field_desc) -> 'result =
function
| (Pcf_inher (a0, a1, a2), Pcf_inher (b0, b1, b2)) ->
((Asttypes.eq_override_flag (a0, b0)) &&
(eq_class_expr (a1, b1)))
&& (eq_option eq_string (a2, b2))
| (Pcf_valvirt a0, Pcf_valvirt b0) ->
(fun ((a0, a1, a2), (b0, b1, b2)) ->
((Asttypes.eq_loc eq_string (a0, b0)) &&
(Asttypes.eq_mutable_flag (a1, b1)))
&& (eq_core_type (a2, b2)))
(a0, b0)
| (Pcf_val a0, Pcf_val b0) ->
(fun ((a0, a1, a2, a3), (b0, b1, b2, b3)) ->
(((Asttypes.eq_loc eq_string (a0, b0)) &&
(Asttypes.eq_mutable_flag (a1, b1)))
&& (Asttypes.eq_override_flag (a2, b2)))
&& (eq_expression (a3, b3)))
(a0, b0)
| (Pcf_virt a0, Pcf_virt b0) ->
(fun ((a0, a1, a2), (b0, b1, b2)) ->
((Asttypes.eq_loc eq_string (a0, b0)) &&
(Asttypes.eq_private_flag (a1, b1)))
&& (eq_core_type (a2, b2)))
(a0, b0)
| (Pcf_meth a0, Pcf_meth b0) ->
(fun ((a0, a1, a2, a3), (b0, b1, b2, b3)) ->
(((Asttypes.eq_loc eq_string (a0, b0)) &&
(Asttypes.eq_private_flag (a1, b1)))
&& (Asttypes.eq_override_flag (a2, b2)))
&& (eq_expression (a3, b3)))
(a0, b0)
| (Pcf_constr a0, Pcf_constr b0) ->
(fun ((a0, a1), (b0, b1)) ->
(eq_core_type (a0, b0)) && (eq_core_type (a1, b1)))
(a0, b0)
| (Pcf_init a0, Pcf_init b0) -> eq_expression (a0, b0)
| (_, _) -> false
and eq_class_field : (class_field * class_field) -> 'result =
fun
({ pcf_desc = a0; pcf_loc = a1 }, { pcf_desc = b0; pcf_loc = b1
})
-> (eq_class_field_desc (a0, b0)) && (Location.eq_t (a1, b1))
and eq_class_structure :
(class_structure * class_structure) -> 'result =
fun
({ pcstr_self = a0; pcstr_fields = a1 },
{ pcstr_self = b0; pcstr_fields = b1 })
-> (eq_pattern (a0, b0)) && (eq_list eq_class_field (a1, b1))
and eq_class_expr_desc :
(class_expr_desc * class_expr_desc) -> 'result =
function
| (Pcl_constr (a0, a1), Pcl_constr (b0, b1)) ->
(Asttypes.eq_loc Longident.eq_t (a0, b0)) &&
(eq_list eq_core_type (a1, b1))
| (Pcl_structure a0, Pcl_structure b0) ->
eq_class_structure (a0, b0)
| (Pcl_fun (a0, a1, a2, a3), Pcl_fun (b0, b1, b2, b3)) ->
(((Asttypes.eq_label (a0, b0)) &&
(eq_option eq_expression (a1, b1)))
&& (eq_pattern (a2, b2)))
&& (eq_class_expr (a3, b3))
| (Pcl_apply (a0, a1), Pcl_apply (b0, b1)) ->
(eq_class_expr (a0, b0)) &&
(eq_list
(fun ((a0, a1), (b0, b1)) ->
(Asttypes.eq_label (a0, b0)) &&
(eq_expression (a1, b1)))
(a1, b1))
| (Pcl_let (a0, a1, a2), Pcl_let (b0, b1, b2)) ->
((Asttypes.eq_rec_flag (a0, b0)) &&
(eq_list
(fun ((a0, a1), (b0, b1)) ->
(eq_pattern (a0, b0)) && (eq_expression (a1, b1)))
(a1, b1)))
&& (eq_class_expr (a2, b2))
| (Pcl_constraint (a0, a1), Pcl_constraint (b0, b1)) ->
(eq_class_expr (a0, b0)) && (eq_class_type (a1, b1))
| (_, _) -> false
and eq_class_expr : (class_expr * class_expr) -> 'result =
fun
({ pcl_desc = a0; pcl_loc = a1 }, { pcl_desc = b0; pcl_loc = b1
})
-> (eq_class_expr_desc (a0, b0)) && (Location.eq_t (a1, b1))
and eq_class_type_declaration :
(class_type_declaration * class_type_declaration) -> 'result =
fun (a0, a1) -> eq_class_infos eq_class_type (a0, a1)
and eq_class_description :
(class_description * class_description) -> 'result =
fun (a0, a1) -> eq_class_infos eq_class_type (a0, a1)
and eq_class_type_field_desc :
(class_type_field_desc * class_type_field_desc) -> 'result =
function
| (Pctf_inher a0, Pctf_inher b0) -> eq_class_type (a0, b0)
| (Pctf_val a0, Pctf_val b0) ->
(fun ((a0, a1, a2, a3), (b0, b1, b2, b3)) ->
(((eq_string (a0, b0)) &&
(Asttypes.eq_mutable_flag (a1, b1)))
&& (Asttypes.eq_virtual_flag (a2, b2)))
&& (eq_core_type (a3, b3)))
(a0, b0)
| (Pctf_virt a0, Pctf_virt b0) ->
(fun ((a0, a1, a2), (b0, b1, b2)) ->
((eq_string (a0, b0)) && (Asttypes.eq_private_flag (a1, b1)))
&& (eq_core_type (a2, b2)))
(a0, b0)
| (Pctf_meth a0, Pctf_meth b0) ->
(fun ((a0, a1, a2), (b0, b1, b2)) ->
((eq_string (a0, b0)) && (Asttypes.eq_private_flag (a1, b1)))
&& (eq_core_type (a2, b2)))
(a0, b0)
| (Pctf_cstr a0, Pctf_cstr b0) ->
(fun ((a0, a1), (b0, b1)) ->
(eq_core_type (a0, b0)) && (eq_core_type (a1, b1)))
(a0, b0)
| (_, _) -> false
and eq_class_type_field :
(class_type_field * class_type_field) -> 'result =
fun
({ pctf_desc = a0; pctf_loc = a1 },
{ pctf_desc = b0; pctf_loc = b1 })
->
(eq_class_type_field_desc (a0, b0)) && (Location.eq_t (a1, b1))
and eq_class_signature :
(class_signature * class_signature) -> 'result =
fun
({ pcsig_self = a0; pcsig_fields = a1; pcsig_loc = a2 },
{ pcsig_self = b0; pcsig_fields = b1; pcsig_loc = b2 })
->
((eq_core_type (a0, b0)) &&
(eq_list eq_class_type_field (a1, b1)))
&& (Location.eq_t (a2, b2))
and eq_class_type_desc :
(class_type_desc * class_type_desc) -> 'result =
function
| (Pcty_constr (a0, a1), Pcty_constr (b0, b1)) ->
(Asttypes.eq_loc Longident.eq_t (a0, b0)) &&
(eq_list eq_core_type (a1, b1))
| (Pcty_signature a0, Pcty_signature b0) ->
eq_class_signature (a0, b0)
| (Pcty_arrow (a0, a1, a2), Pcty_arrow (b0, b1, b2)) ->
((Asttypes.eq_label (a0, b0)) && (eq_core_type (a1, b1))) &&
(eq_class_type (a2, b2))
| (_, _) -> false
and eq_class_type : (class_type * class_type) -> 'result =
fun
({ pcty_desc = a0; pcty_loc = a1 },
{ pcty_desc = b0; pcty_loc = b1 })
-> (eq_class_type_desc (a0, b0)) && (Location.eq_t (a1, b1))
and eq_exception_declaration :
(exception_declaration * exception_declaration) -> 'result =
fun (a0, a1) -> eq_list eq_core_type (a0, a1)
and eq_type_kind : (type_kind * type_kind) -> 'result =
function
| (Ptype_abstract, Ptype_abstract) -> true
| (Ptype_variant a0, Ptype_variant b0) ->
eq_list
(fun ((a0, a1, a2, a3), (b0, b1, b2, b3)) ->
(((Asttypes.eq_loc eq_string (a0, b0)) &&
(eq_list eq_core_type (a1, b1)))
&& (eq_option eq_core_type (a2, b2)))
&& (Location.eq_t (a3, b3)))
(a0, b0)
| (Ptype_record a0, Ptype_record b0) ->
eq_list
(fun ((a0, a1, a2, a3), (b0, b1, b2, b3)) ->
(((Asttypes.eq_loc eq_string (a0, b0)) &&
(Asttypes.eq_mutable_flag (a1, b1)))
&& (eq_core_type (a2, b2)))
&& (Location.eq_t (a3, b3)))
(a0, b0)
| (_, _) -> false
and eq_type_declaration :
(type_declaration * type_declaration) -> 'result =
fun
({
ptype_params = a0;
ptype_cstrs = a1;
ptype_kind = a2;
ptype_private = a3;
ptype_manifest = a4;
ptype_variance = a5;
ptype_loc = a6
},
{
ptype_params = b0;
ptype_cstrs = b1;
ptype_kind = b2;
ptype_private = b3;
ptype_manifest = b4;
ptype_variance = b5;
ptype_loc = b6
})
->
((((((eq_list (eq_option (Asttypes.eq_loc eq_string)) (a0, b0))
&&
(eq_list
(fun ((a0, a1, a2), (b0, b1, b2)) ->
((eq_core_type (a0, b0)) && (eq_core_type (a1, b1)))
&& (Location.eq_t (a2, b2)))
(a1, b1)))
&& (eq_type_kind (a2, b2)))
&& (Asttypes.eq_private_flag (a3, b3)))
&& (eq_option eq_core_type (a4, b4)))
&&
(eq_list
(fun ((a0, a1), (b0, b1)) ->
(eq_bool (a0, b0)) && (eq_bool (a1, b1)))
(a5, b5)))
&& (Location.eq_t (a6, b6))
and eq_value_description :
(value_description * value_description) -> 'result =
fun
({ pval_type = a0; pval_prim = a1; pval_loc = a2 },
{ pval_type = b0; pval_prim = b1; pval_loc = b2 })
->
((eq_core_type (a0, b0)) && (eq_list eq_string (a1, b1))) &&
(Location.eq_t (a2, b2))
and eq_expression_desc :
(expression_desc * expression_desc) -> 'result =
function
| (Pexp_ident a0, Pexp_ident b0) ->
Asttypes.eq_loc Longident.eq_t (a0, b0)
| (Pexp_constant a0, Pexp_constant b0) ->
Asttypes.eq_constant (a0, b0)
| (Pexp_let (a0, a1, a2), Pexp_let (b0, b1, b2)) ->
((Asttypes.eq_rec_flag (a0, b0)) &&
(eq_list
(fun ((a0, a1), (b0, b1)) ->
(eq_pattern (a0, b0)) && (eq_expression (a1, b1)))
(a1, b1)))
&& (eq_expression (a2, b2))
| Pexp_fun (a1, a1, a2, a3), Pexp_function (b0, b1, b2, b3) ->
((Asttypes.eq_label (a0, b0)) &&
(eq_option eq_expression (a1, b1)) &&
(eq_pattern a2 b2) &&
(eq_expression (a3, b3)))
| (Pexp_function (a0, a1, a2), Pexp_function (b0, b1, b2)) ->
(* FIX *)
eq_list
(fun ((a0, a1), (b0, b1)) ->
(eq_pattern (a0, b0)) && (eq_expression (a1, b1)))
(a2, b2)
| (Pexp_apply (a0, a1), Pexp_apply (b0, b1)) ->
(eq_expression (a0, b0)) &&
(eq_list
(fun ((a0, a1), (b0, b1)) ->
(Asttypes.eq_label (a0, b0)) &&
(eq_expression (a1, b1)))
(a1, b1))
| (Pexp_match (a0, a1), Pexp_match (b0, b1)) ->
(eq_expression (a0, b0)) &&
(eq_list
(fun ((a0, a1), (b0, b1)) ->
(eq_pattern (a0, b0)) && (eq_expression (a1, b1)))
(a1, b1))
| (Pexp_try (a0, a1), Pexp_try (b0, b1)) ->
(eq_expression (a0, b0)) &&
(eq_list
(fun ((a0, a1), (b0, b1)) ->
(eq_pattern (a0, b0)) && (eq_expression (a1, b1)))
(a1, b1))
| (Pexp_tuple a0, Pexp_tuple b0) -> eq_list eq_expression (a0, b0)
| (Pexp_construct (a0, a1), Pexp_construct (b0, b1)) ->
((Asttypes.eq_loc Longident.eq_t (a0, b0)) &&
(eq_option eq_expression (a1, b1)))
| (Pexp_variant (a0, a1), Pexp_variant (b0, b1)) ->
(Asttypes.eq_label (a0, b0)) &&
(eq_option eq_expression (a1, b1))
| (Pexp_record (a0, a1), Pexp_record (b0, b1)) ->
(eq_list
(fun ((a0, a1), (b0, b1)) ->
(Asttypes.eq_loc Longident.eq_t (a0, b0)) &&
(eq_expression (a1, b1)))
(a0, b0))
&& (eq_option eq_expression (a1, b1))
| (Pexp_field (a0, a1), Pexp_field (b0, b1)) ->
(eq_expression (a0, b0)) &&
(Asttypes.eq_loc Longident.eq_t (a1, b1))
| (Pexp_setfield (a0, a1, a2), Pexp_setfield (b0, b1, b2)) ->
((eq_expression (a0, b0)) &&
(Asttypes.eq_loc Longident.eq_t (a1, b1)))
&& (eq_expression (a2, b2))
| (Pexp_array a0, Pexp_array b0) -> eq_list eq_expression (a0, b0)
| (Pexp_ifthenelse (a0, a1, a2), Pexp_ifthenelse (b0, b1, b2)) ->
((eq_expression (a0, b0)) && (eq_expression (a1, b1))) &&
(eq_option eq_expression (a2, b2))
| (Pexp_sequence (a0, a1), Pexp_sequence (b0, b1)) ->
(eq_expression (a0, b0)) && (eq_expression (a1, b1))
| (Pexp_while (a0, a1), Pexp_while (b0, b1)) ->
(eq_expression (a0, b0)) && (eq_expression (a1, b1))
| (Pexp_for (a0, a1, a2, a3, a4), Pexp_for (b0, b1, b2, b3, b4)) ->
((((Asttypes.eq_loc eq_string (a0, b0)) &&
(eq_expression (a1, b1)))
&& (eq_expression (a2, b2)))
&& (Asttypes.eq_direction_flag (a3, b3)))
&& (eq_expression (a4, b4))
| (Pexp_constraint (a0, a1, a2), Pexp_constraint (b0, b1, b2)) ->
((eq_expression (a0, b0)) && (eq_option eq_core_type (a1, b1)))
&& (eq_option eq_core_type (a2, b2))
| (Pexp_when (a0, a1), Pexp_when (b0, b1)) ->
(eq_expression (a0, b0)) && (eq_expression (a1, b1))
| (Pexp_send (a0, a1), Pexp_send (b0, b1)) ->
(eq_expression (a0, b0)) && (eq_string (a1, b1))
| (Pexp_new a0, Pexp_new b0) ->
Asttypes.eq_loc Longident.eq_t (a0, b0)
| (Pexp_setinstvar (a0, a1), Pexp_setinstvar (b0, b1)) ->
(Asttypes.eq_loc eq_string (a0, b0)) &&
(eq_expression (a1, b1))
| (Pexp_override a0, Pexp_override b0) ->
eq_list
(fun ((a0, a1), (b0, b1)) ->
(Asttypes.eq_loc eq_string (a0, b0)) &&
(eq_expression (a1, b1)))
(a0, b0)
| (Pexp_letmodule (a0, a1, a2), Pexp_letmodule (b0, b1, b2)) ->
((Asttypes.eq_loc eq_string (a0, b0)) &&
(eq_module_expr (a1, b1)))
&& (eq_expression (a2, b2))
| (Pexp_assert a0, Pexp_assert b0) -> eq_expression (a0, b0)
| (Pexp_lazy a0, Pexp_lazy b0) -> eq_expression (a0, b0)
| (Pexp_poly (a0, a1), Pexp_poly (b0, b1)) ->
(eq_expression (a0, b0)) && (eq_option eq_core_type (a1, b1))
| (Pexp_object a0, Pexp_object b0) -> eq_class_structure (a0, b0)
| (Pexp_newtype (a0, a1), Pexp_newtype (b0, b1)) ->
(eq_string (a0, b0)) && (eq_expression (a1, b1))
| (Pexp_pack a0, Pexp_pack b0) -> eq_module_expr (a0, b0)
| (Pexp_open (a0, a1), Pexp_open (b0, b1)) ->
(Asttypes.eq_loc Longident.eq_t (a0, b0)) &&
(eq_expression (a1, b1))
| (_, _) -> false
and eq_expression : (expression * expression) -> 'result =
fun
({ pexp_desc = a0; pexp_loc = a1 },
{ pexp_desc = b0; pexp_loc = b1 })
-> (eq_expression_desc (a0, b0)) && (Location.eq_t (a1, b1))
let rec eq_directive_argument_desc :
(directive_argument_desc * directive_argument_desc) -> 'result =
function
| (Pdir_none, Pdir_none) -> true
| (Pdir_string a0, Pdir_string b0) -> eq_string (a0, b0)
| (Pdir_int a0, Pdir_int b0) -> eq_int (a0, b0)
| (Pdir_ident a0, Pdir_ident b0) -> Longident.eq_t (a0, b0)
| (Pdir_bool a0, Pdir_bool b0) -> eq_bool (a0, b0)
| (_, _) -> false
and eq_directive_argument :
(directive_argument * directive_argument) -> 'result =
fun
({pdira_desc = a0; pdira_loc = a1},
{pdira_desc = b0; pdira_loc = b1})
-> (eq_directive_argument_desc (a0, b0)) && (Location.eq_t (a1, b1))
and eq_toplevel_phrase :
(toplevel_phrase * toplevel_phrase) -> 'result =
function
| (Ptop_def a0, Ptop_def b0) -> eq_structure (a0, b0)
| (Ptop_dir a0, Ptop_dir a1) ->
Asttypes.eq_loc eq_string (a0.pdir_name, b0.pdir_name) &&
(eq_directive_argument (a1, b1))
| (_, _) -> false