Parsetree(3) Abstract syntax tree produced by parsing

Module

Module Parsetree

Documentation

Module Parsetree
 :  sig end

Abstract syntax tree produced by parsing

=== Extension points ===

type attribute = string Asttypes.loc * payload

type extension = string Asttypes.loc * payload

type attributes = attribute list

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

=== Core language ===

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

type core_type_desc =
 | Ptyp_any
 | Ptyp_var of string
 | Ptyp_arrow of Asttypes.label * core_type * core_type
 | Ptyp_tuple of core_type list
 | Ptyp_constr of Longident.t Asttypes.loc * core_type list
 | Ptyp_object of (string * attributes * core_type) 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 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 =
 | Rtag of Asttypes.label * attributes * bool * core_type list
 | Rinherit of core_type
 

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

type pattern_desc =
 | Ppat_any
 | Ppat_var of string Asttypes.loc
 | Ppat_alias of pattern * string Asttypes.loc
 | Ppat_constant of Asttypes.constant
 | Ppat_interval of Asttypes.constant * Asttypes.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
 

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

type expression_desc =
 | Pexp_ident of Longident.t Asttypes.loc
 | Pexp_constant of Asttypes.constant
 | Pexp_let of Asttypes.rec_flag * value_binding list * expression
 | Pexp_function of case list
 | Pexp_fun of Asttypes.label * expression option * pattern * expression
 | Pexp_apply of expression * (Asttypes.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 * string
 | Pexp_new of Longident.t Asttypes.loc
 | Pexp_setinstvar of string Asttypes.loc * expression
 | Pexp_override of (string Asttypes.loc * expression) list
 | Pexp_letmodule of string Asttypes.loc * module_expr * 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 * expression
 | Pexp_pack of module_expr
 | Pexp_open of Asttypes.override_flag * Longident.t Asttypes.loc * expression
 | Pexp_extension of extension
 

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

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 :  core_type list ;
 pcd_res :  core_type option ;
 pcd_loc :  Location.t ;
 pcd_attributes :  attributes ;
 }

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_attributes :  attributes ;
 }

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

type extension_constructor_kind =
 | Pext_decl of core_type list * 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.label * core_type * class_type
 | Pcty_extension of extension
 

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 (string * Asttypes.mutable_flag * Asttypes.virtual_flag * core_type)
 | Pctf_method of (string * 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.label * expression option * pattern * class_expr
 | Pcl_apply of class_expr * (Asttypes.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
 

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 option
 | Pcf_val of (string Asttypes.loc * Asttypes.mutable_flag * class_field_kind)
 | Pcf_method of (string 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 type_declaration list
 | Psig_typext of type_extension
 | Psig_exception of extension_constructor
 | Psig_module of module_declaration
 | 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_type_declaration = {
 pmtd_name :  string Asttypes.loc ;
 pmtd_type :  module_type option ;
 pmtd_attributes :  attributes ;
 pmtd_loc :  Location.t ;
 }

type open_description = {
 popen_lid :  Longident.t Asttypes.loc ;
 popen_override :  Asttypes.override_flag ;
 popen_loc :  Location.t ;
 popen_attributes :  attributes ;
 }

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 type_declaration
 | Pwith_modsubst of string 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 type_declaration list
 | Pstr_typext of type_extension
 | Pstr_exception of extension_constructor
 | Pstr_module of module_binding
 | Pstr_recmodule of module_binding list
 | Pstr_modtype of module_type_declaration
 | Pstr_open of open_description
 | 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 string * directive_argument
 

type directive_argument =
 | Pdir_none
 | Pdir_string of string
 | Pdir_int of int
 | Pdir_ident of Longident.t
 | Pdir_bool of bool