Parsetree(3)

NAME
Parsetree - Abstract syntax tree produced by parsing

Module
Module Parsetree

Documentation

Module Parsetree
 : sig end

Abstract syntax tree produced by parsing

Warning: this module is unstable and part of Compiler_libs .

type constant =
 | Pconst_integer of string * char option
 | Pconst_char of char
 | Pconst_string of string * string option
 | Pconst_float of string * char option

  Extension points

type attribute = {
 attr_name : string Asttypes.loc ;
 attr_payload : payload ;
 attr_loc : Location.t ;
 }

type extension = string Asttypes.loc * payload

type attributes = attribute list

type payload =
 | PStr of structure
 | PSig of signature
 | PTyp of core_type
 | PPat of pattern * expression option

  Core language

type core_type = {
 ptyp_desc : core_type_desc ;
 ptyp_loc : Location.t ;
 ptyp_loc_stack : Location.t list ;
 ptyp_attributes : attributes ;
 }

type core_type_desc =
 | Ptyp_any
 | Ptyp_var of string
 | Ptyp_arrow of Asttypes.arg_label * core_type * core_type
 | Ptyp_tuple of core_type list
 | Ptyp_constr of Longident.t Asttypes.loc * core_type list
 | Ptyp_object of object_field list * Asttypes.closed_flag
 | Ptyp_class of Longident.t Asttypes.loc * core_type list
 | Ptyp_alias of core_type * string
 | Ptyp_variant of row_field list * Asttypes.closed_flag * Asttypes.label list option
 | Ptyp_poly of string Asttypes.loc list * core_type
 | Ptyp_package of package_type
 | Ptyp_extension of extension

type package_type = Longident.t Asttypes.loc * (Longident.t Asttypes.loc * core_type) list

type row_field = {
 prf_desc : row_field_desc ;
 prf_loc : Location.t ;
 prf_attributes : attributes ;
 }

type row_field_desc =
 | Rtag of Asttypes.label Asttypes.loc * bool * core_type list
 | Rinherit of core_type

type object_field = {
 pof_desc : object_field_desc ;
 pof_loc : Location.t ;
 pof_attributes : attributes ;
 }

type object_field_desc =
 | Otag of Asttypes.label Asttypes.loc * core_type
 | Oinherit of core_type

type pattern = {
 ppat_desc : pattern_desc ;
 ppat_loc : Location.t ;
 ppat_loc_stack : Location.t list ;
 ppat_attributes : attributes ;
 }

type pattern_desc =
 | Ppat_any
 | Ppat_var of string Asttypes.loc
 | Ppat_alias of pattern * string Asttypes.loc
 | Ppat_constant of constant
 | Ppat_interval of constant * constant
 | Ppat_tuple of pattern list
 | Ppat_construct of Longident.t Asttypes.loc * pattern option
 | Ppat_variant of Asttypes.label * pattern option
 | Ppat_record of (Longident.t Asttypes.loc * pattern) list * Asttypes.closed_flag
 | Ppat_array of pattern list
 | Ppat_or of pattern * pattern
 | Ppat_constraint of pattern * core_type
 | Ppat_type of Longident.t Asttypes.loc
 | Ppat_lazy of pattern
 | Ppat_unpack of string Asttypes.loc
 | Ppat_exception of pattern
 | Ppat_extension of extension
 | Ppat_open of Longident.t Asttypes.loc * pattern

type expression = {
 pexp_desc : expression_desc ;
 pexp_loc : Location.t ;
 pexp_loc_stack : Location.t list ;
 pexp_attributes : attributes ;
 }

type expression_desc =
 | Pexp_ident of Longident.t Asttypes.loc
 | Pexp_constant of constant
 | Pexp_let of Asttypes.rec_flag * value_binding list * expression
 | Pexp_function of case list
 | Pexp_fun of Asttypes.arg_label * expression option * pattern * expression
 | Pexp_apply of expression * (Asttypes.arg_label * expression) list
 | Pexp_match of expression * case list
 | Pexp_try of expression * case list
 | Pexp_tuple of expression list
 | Pexp_construct of Longident.t Asttypes.loc * expression option
 | Pexp_variant of Asttypes.label * expression option
 | Pexp_record of (Longident.t Asttypes.loc * expression) list * expression option
 | Pexp_field of expression * Longident.t Asttypes.loc
 | Pexp_setfield of expression * Longident.t Asttypes.loc * expression
 | Pexp_array of expression list
 | Pexp_ifthenelse of expression * expression * expression option
 | Pexp_sequence of expression * expression
 | Pexp_while of expression * expression
 | Pexp_for of pattern * expression * expression * Asttypes.direction_flag * expression
 | Pexp_constraint of expression * core_type
 | Pexp_coerce of expression * core_type option * core_type
 | Pexp_send of expression * Asttypes.label Asttypes.loc
 | Pexp_new of Longident.t Asttypes.loc
 | Pexp_setinstvar of Asttypes.label Asttypes.loc * expression
 | Pexp_override of (Asttypes.label Asttypes.loc * expression) list
 | Pexp_letmodule of string Asttypes.loc * module_expr * expression
 | Pexp_letexception of extension_constructor * expression
 | Pexp_assert of expression
 | Pexp_lazy of expression
 | Pexp_poly of expression * core_type option
 | Pexp_object of class_structure
 | Pexp_newtype of string Asttypes.loc * expression
 | Pexp_pack of module_expr
 | Pexp_open of open_declaration * expression
 | Pexp_letop of letop
 | Pexp_extension of extension
 | Pexp_unreachable

type case = {
 pc_lhs : pattern ;
 pc_guard : expression option ;
 pc_rhs : expression ;
 }

type letop = {
 let_ : binding_op ;
 ands : binding_op list ;
 body : expression ;
 }

type binding_op = {
 pbop_op : string Asttypes.loc ;
 pbop_pat : pattern ;
 pbop_exp : expression ;
 pbop_loc : Location.t ;
 }

type value_description = {
 pval_name : string Asttypes.loc ;
 pval_type : core_type ;
 pval_prim : string list ;
 pval_attributes : attributes ;
 pval_loc : Location.t ;
 }

type type_declaration = {
 ptype_name : string Asttypes.loc ;
 ptype_params : (core_type * Asttypes.variance) list ;
 ptype_cstrs : (core_type * core_type * Location.t) list ;
 ptype_kind : type_kind ;
 ptype_private : Asttypes.private_flag ;
 ptype_manifest : core_type option ;
 ptype_attributes : attributes ;
 ptype_loc : Location.t ;
 }

type type_kind =
 | Ptype_abstract
 | Ptype_variant of constructor_declaration list
 | Ptype_record of label_declaration list
 | Ptype_open

type label_declaration = {
 pld_name : string Asttypes.loc ;
 pld_mutable : Asttypes.mutable_flag ;
 pld_type : core_type ;
 pld_loc : Location.t ;
 pld_attributes : attributes ;
 }

type constructor_declaration = {
 pcd_name : string Asttypes.loc ;
 pcd_args : constructor_arguments ;
 pcd_res : core_type option ;
 pcd_loc : Location.t ;
 pcd_attributes : attributes ;
 }

type constructor_arguments =
 | Pcstr_tuple of core_type list
 | Pcstr_record of label_declaration list

type type_extension = {
 ptyext_path : Longident.t Asttypes.loc ;
 ptyext_params : (core_type * Asttypes.variance) list ;
 ptyext_constructors : extension_constructor list ;
 ptyext_private : Asttypes.private_flag ;
 ptyext_loc : Location.t ;
 ptyext_attributes : attributes ;
 }

type extension_constructor = {
 pext_name : string Asttypes.loc ;
 pext_kind : extension_constructor_kind ;
 pext_loc : Location.t ;
 pext_attributes : attributes ;
 }

type type_exception = {
 ptyexn_constructor : extension_constructor ;
 ptyexn_loc : Location.t ;
 ptyexn_attributes : attributes ;
 }

type extension_constructor_kind =
 | Pext_decl of constructor_arguments * core_type option
 | Pext_rebind of Longident.t Asttypes.loc

  Class language

type class_type = {
 pcty_desc : class_type_desc ;
 pcty_loc : Location.t ;
 pcty_attributes : attributes ;
 }

type class_type_desc =
 | Pcty_constr of Longident.t Asttypes.loc * core_type list
 | Pcty_signature of class_signature
 | Pcty_arrow of Asttypes.arg_label * core_type * class_type
 | Pcty_extension of extension
 | Pcty_open of open_description * class_type

type class_signature = {
 pcsig_self : core_type ;
 pcsig_fields : class_type_field list ;
 }

type class_type_field = {
 pctf_desc : class_type_field_desc ;
 pctf_loc : Location.t ;
 pctf_attributes : attributes ;
 }

type class_type_field_desc =
 | Pctf_inherit of class_type
 | Pctf_val of (Asttypes.label Asttypes.loc * Asttypes.mutable_flag * Asttypes.virtual_flag * core_type)
 | Pctf_method of (Asttypes.label Asttypes.loc * Asttypes.private_flag * Asttypes.virtual_flag * core_type)
 | Pctf_constraint of (core_type * core_type)
 | Pctf_attribute of attribute
 | Pctf_extension of extension

type 'a class_infos = {
 pci_virt : Asttypes.virtual_flag ;
 pci_params : (core_type * Asttypes.variance) list ;
 pci_name : string Asttypes.loc ;
 pci_expr : 'a ;
 pci_loc : Location.t ;
 pci_attributes : attributes ;
 }

type class_description = class_type class_infos

type class_type_declaration = class_type class_infos

type class_expr = {
 pcl_desc : class_expr_desc ;
 pcl_loc : Location.t ;
 pcl_attributes : attributes ;
 }

type class_expr_desc =
 | Pcl_constr of Longident.t Asttypes.loc * core_type list
 | Pcl_structure of class_structure
 | Pcl_fun of Asttypes.arg_label * expression option * pattern * class_expr
 | Pcl_apply of class_expr * (Asttypes.arg_label * expression) list
 | Pcl_let of Asttypes.rec_flag * value_binding list * class_expr
 | Pcl_constraint of class_expr * class_type
 | Pcl_extension of extension
 | Pcl_open of open_description * class_expr

type class_structure = {
 pcstr_self : pattern ;
 pcstr_fields : class_field list ;
 }

type class_field = {
 pcf_desc : class_field_desc ;
 pcf_loc : Location.t ;
 pcf_attributes : attributes ;
 }

type class_field_desc =
 | Pcf_inherit of Asttypes.override_flag * class_expr * string Asttypes.loc option
 | Pcf_val of (Asttypes.label Asttypes.loc * Asttypes.mutable_flag * class_field_kind)
 | Pcf_method of (Asttypes.label Asttypes.loc * Asttypes.private_flag * class_field_kind)
 | Pcf_constraint of (core_type * core_type)
 | Pcf_initializer of expression
 | Pcf_attribute of attribute
 | Pcf_extension of extension

type class_field_kind =
 | Cfk_virtual of core_type
 | Cfk_concrete of Asttypes.override_flag * expression

type class_declaration = class_expr class_infos

  Module language

type module_type = {
 pmty_desc : module_type_desc ;
 pmty_loc : Location.t ;
 pmty_attributes : attributes ;
 }

type module_type_desc =
 | Pmty_ident of Longident.t Asttypes.loc
 | Pmty_signature of signature
 | Pmty_functor of string Asttypes.loc * module_type option * module_type
 | Pmty_with of module_type * with_constraint list
 | Pmty_typeof of module_expr
 | Pmty_extension of extension
 | Pmty_alias of Longident.t Asttypes.loc

type signature = signature_item list

type signature_item = {
 psig_desc : signature_item_desc ;
 psig_loc : Location.t ;
 }

type signature_item_desc =
 | Psig_value of value_description
 | Psig_type of Asttypes.rec_flag * type_declaration list
 | Psig_typesubst of type_declaration list
 | Psig_typext of type_extension
 | Psig_exception of type_exception
 | Psig_module of module_declaration
 | Psig_modsubst of module_substitution
 | Psig_recmodule of module_declaration list
 | Psig_modtype of module_type_declaration
 | Psig_open of open_description
 | Psig_include of include_description
 | Psig_class of class_description list
 | Psig_class_type of class_type_declaration list
 | Psig_attribute of attribute
 | Psig_extension of extension * attributes

type module_declaration = {
 pmd_name : string Asttypes.loc ;
 pmd_type : module_type ;
 pmd_attributes : attributes ;
 pmd_loc : Location.t ;
 }

type module_substitution = {
 pms_name : string Asttypes.loc ;
 pms_manifest : Longident.t Asttypes.loc ;
 pms_attributes : attributes ;
 pms_loc : Location.t ;
 }

type module_type_declaration = {
 pmtd_name : string Asttypes.loc ;
 pmtd_type : module_type option ;
 pmtd_attributes : attributes ;
 pmtd_loc : Location.t ;
 }

type 'a open_infos = {
 popen_expr : 'a ;
 popen_override : Asttypes.override_flag ;
 popen_loc : Location.t ;
 popen_attributes : attributes ;
 }

type open_description = Longident.t Asttypes.loc open_infos

type open_declaration = module_expr open_infos

type 'a include_infos = {
 pincl_mod : 'a ;
 pincl_loc : Location.t ;
 pincl_attributes : attributes ;
 }

type include_description = module_type include_infos

type include_declaration = module_expr include_infos

type with_constraint =
 | Pwith_type of Longident.t Asttypes.loc * type_declaration
 | Pwith_module of Longident.t Asttypes.loc * Longident.t Asttypes.loc
 | Pwith_typesubst of Longident.t Asttypes.loc * type_declaration
 | Pwith_modsubst of Longident.t Asttypes.loc * Longident.t Asttypes.loc

type module_expr = {
 pmod_desc : module_expr_desc ;
 pmod_loc : Location.t ;
 pmod_attributes : attributes ;
 }

type module_expr_desc =
 | Pmod_ident of Longident.t Asttypes.loc
 | Pmod_structure of structure
 | Pmod_functor of string Asttypes.loc * module_type option * module_expr
 | Pmod_apply of module_expr * module_expr
 | Pmod_constraint of module_expr * module_type
 | Pmod_unpack of expression
 | Pmod_extension of extension

type structure = structure_item list

type structure_item = {
 pstr_desc : structure_item_desc ;
 pstr_loc : Location.t ;
 }

type structure_item_desc =
 | Pstr_eval of expression * attributes
 | Pstr_value of Asttypes.rec_flag * value_binding list
 | Pstr_primitive of value_description
 | Pstr_type of Asttypes.rec_flag * type_declaration list
 | Pstr_typext of type_extension
 | Pstr_exception of type_exception
 | Pstr_module of module_binding
 | Pstr_recmodule of module_binding list
 | Pstr_modtype of module_type_declaration
 | Pstr_open of open_declaration
 | Pstr_class of class_declaration list
 | Pstr_class_type of class_type_declaration list
 | Pstr_include of include_declaration
 | Pstr_attribute of attribute
 | Pstr_extension of extension * attributes

type value_binding = {
 pvb_pat : pattern ;
 pvb_expr : expression ;
 pvb_attributes : attributes ;
 pvb_loc : Location.t ;
 }

type module_binding = {
 pmb_name : string Asttypes.loc ;
 pmb_expr : module_expr ;
 pmb_attributes : attributes ;
 pmb_loc : Location.t ;
 }

  Toplevel

type toplevel_phrase =
 | Ptop_def of structure
 | Ptop_dir of toplevel_directive

type toplevel_directive = {
 pdir_name : string Asttypes.loc ;
 pdir_arg : directive_argument option ;
 pdir_loc : Location.t ;
 }

type directive_argument = {
 pdira_desc : directive_argument_desc ;
 pdira_loc : Location.t ;
 }

type directive_argument_desc =
 | Pdir_string of string
 | Pdir_int of string * char option
 | Pdir_ident of Longident.t
 | Pdir_bool of bool