Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file default.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160openPpxliblet_name_from_type_nametype_name=Printf.sprintf"default%s"@@Util.affix_from_type_name~kind:`Suffixtype_nameletexpr_from_lident~loc{txt;loc=err_loc}=matchtxtwith|Lidentname->Ast_builder.Default.pexp_ident~loc{txt=Lident(_name_from_type_namename);loc}|Ldot(lident,last)->Ast_builder.Default.pexp_ident~loc{txt=Ldot(lident,_name_from_type_namelast);loc}|Lapply_->Raise.errorf~loc:err_loc"unhandled longident"letrecexpr_from_core_type~loc{ptyp_desc;ptyp_loc;_}=matchptyp_descwith|Ptyp_constr({txt=Lident"bool";_},_)->Ok[%exprfalse]|Ptyp_constr({txt=Lident"int";_},_)->Ok[%expr0]|Ptyp_constr({txt=Lident"int32"|Ldot(Lident"Int32","t");_},_)->Ok[%expr0l]|Ptyp_constr({txt=Lident"int64"|Ldot(Lident"Int64","t");_},_)->Ok[%expr0L]|Ptyp_constr({txt=Lident"nativeint"|Ldot(Lident"Nativeint","t");_},_)->Ok[%expr0n]|Ptyp_constr({txt=Lident"float"|Ldot(Lident"Float","t");_},_)->Ok[%expr0.]|Ptyp_constr({txt=Lident"char"|Ldot(Lident"Char","t");_},_)->Ok[%expr'\x00']|Ptyp_constr({txt=Lident"string"|Ldot(Lident"String","t");_},_)->Ok[%expr""]|Ptyp_constr({txt=Lident"option";_},_)->Ok[%exprNone]|Ptyp_constr({txt=Lident"list";_},_)->Ok[%expr[]]|Ptyp_constr({txt=Lident"array";_},_)->Ok[%expr[||]]|Ptyp_constr({txt=Lident"result";_},[ok_type;error_type])->letopenUtil.Result_in(matchexpr_from_core_type~locok_typewith|Okok_arg->Ok[%exprOk[%eok_arg]]|Error_->expr_from_core_type~locerror_type>|=funerr_arg->[%exprError[%eerr_arg]])|Ptyp_constr(lident,_)->Ok(expr_from_lident~loclident)|Ptyp_tupletypes->letopenUtil.Result_inletexpr_list=List.map(expr_from_core_type~loc)typesinUtil.List_.all_okexpr_list>|=Ast_builder.Default.pexp_tuple~loc|Ptyp_alias(core_type,_)->expr_from_core_type~loccore_type|Ptyp_variant(fields,_,_)->(matchUtil.List_.find_ok~f:(expr_from_poly_variant_field~ptyp_loc~loc)fieldswith|Ok_asok->ok|Error`Empty->assertfalse|Error(`Lasterr)->letmsg=Printf.sprintf"can't derive default for any constructor from this polymorphic variant type, \
last error is: %s"(Loc_err.msgerr)inLoc_err.as_result~loc:ptyp_loc~msg)|Ptyp_var_->Loc_err.as_result~loc:ptyp_loc~msg:"can't derive default for unspecified type"|_->Loc_err.as_result~loc:ptyp_loc~msg:"can't derive default from this type"andexpr_from_poly_variant_field~ptyp_loc~loc=function|Rinherit_->Loc_err.as_result~loc:ptyp_loc~msg:"can't derive default for inherited variant"|Rtag({txt=ctor;_},_attributes,true(* accept constant ctor *),_)->Ok(Ast_builder.Default.pexp_variant~locctorNone)|Rtag({txt=ctor;_},_attributes,false,core_type::_)->letopenUtil.Result_inexpr_from_core_type~loccore_type>|=funexpr->Ast_builder.Default.pexp_variant~locctor(Someexpr)|Rtag(_label,_attributes,false,[])->(* cannot be associated with an empty list of types and not accept a constant ctor *)assertfalseletexpr_from_core_type_exn~loccore_type=Loc_err.ok_or_raise@@expr_from_core_type~loccore_typemoduleStr=structletvalue_expr_from_manifest~ptype_loc~locmanifest=matchmanifestwith|None->Raise.Default.errorf~loc:ptype_loc"can't derive default for an abstract type without a manifest"|Sometyp->expr_from_core_type_exn~loctypletfield_binding~loc{pld_name;pld_type;_}=letopenUtil.Result_inletlident={txt=Lidentpld_name.txt;loc}inexpr_from_core_type~locpld_type>|=funexpr->(lident,expr)letvalue_expr_from_labels~loclabels=letopenUtil.Result_inletfield_bindings=List.map(field_binding~loc)labelsinUtil.List_.all_okfield_bindings>|=funfield_bindings->Ast_builder.Default.pexp_record~locfield_bindingsNoneletvalue_expr_from_labels_exn~loclabels=Loc_err.ok_or_raise@@value_expr_from_labels~loclabelsletvalue_expr_from_constructor_tuple~loctypes=letopenUtil.Result_inletexpr_list=List.map(expr_from_core_type~loc)typesinmatchexpr_listwith|[]->OkNone|[expr]->expr>|=funexpr->Someexpr|_->Util.List_.all_okexpr_list>|=funexpr_list->Some(Ast_builder.Default.pexp_tuple~locexpr_list)letvalue_expr_from_constructor~loc{pcd_name={txt=constructor_name;_};pcd_args;_}=letopenUtil.Result_inmatchpcd_argswith|Pcstr_recordlabels->value_expr_from_labels~loclabels>|=funrecord_expr->Util.Expr.constructor~loc~constructor_name(Somerecord_expr)|Pcstr_tupletypes->value_expr_from_constructor_tuple~loctypes>|=Util.Expr.constructor~loc~constructor_nameletvalue_expr_from_constructor_list~has_params~ptype_loc~locconstructor_list=matchUtil.List_.find_ok~f:(value_expr_from_constructor~loc)constructor_listwith|Okexpr->expr|Error`Empty->Raise.Default.errorf~loc:ptype_loc"can't derive default for empty variant type"|Error(`Lasterr)->ifhas_paramsthenRaise.Default.errorf~loc:ptype_loc"can't derive default for this variant \
as all constructors have unspecified type arguments"elseLoc_err.raise_errletvalue_pat_from_name~loctype_name=letname=_name_from_type_nametype_nameinAst_builder.Default.ppat_var~loc{txt=name;loc}letfrom_td~loc{ptype_name;ptype_kind;ptype_manifest;ptype_loc;ptype_params;_}=lethas_params=ptype_params<>[]inletexpr=matchptype_kindwith|Ptype_abstract->value_expr_from_manifest~ptype_loc~locptype_manifest|Ptype_recordlabels->value_expr_from_labels_exn~loclabels|Ptype_variantconstructors->value_expr_from_constructor_list~has_params~ptype_loc~locconstructors|Ptype_open->Raise.Default.errorf~loc:ptype_loc"unhandled type kind"inletpat=value_pat_from_name~locptype_name.txtinletvalue_binding=Ast_builder.Default.value_binding~loc~pat~exprinAst_builder.Default.pstr_value~locNonrecursive[value_binding]letfrom_type_decl~loc~path:_(_rec_flag,tds)=List.map(from_td~loc)tdsendmoduleSig=structletfrom_td~loctd=letname={txt=_name_from_type_nametd.ptype_name.txt;loc}inlettype_=Util.core_type_from_type_decl~loctdinletvalue_description=Ast_builder.Default.value_description~loc~name~type_~prim:[]inAst_builder.Default.psig_value~locvalue_descriptionletfrom_type_decl~loc~path:_(_rec_flag,tds)=List.map(from_td~loc)tdsendletfrom_str_type_decl=Deriving.Generator.make_noargStr.from_type_declletfrom_sig_type_decl=Deriving.Generator.make_noargSig.from_type_decl