12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091letread_lexbuf?(expand=false)?keep_poly?(xdebug=false)?(inherit_fields=false)?(inherit_variants=false)?(pos_fname="")?(pos_lnum=1)lexbuf=Atd_lexer.init_fnamelexbufpos_fnamepos_lnum;lethead,body=Atd_parser.full_moduleAtd_lexer.tokenlexbufinAtd_check.checkbody;letbody=ifinherit_fields||inherit_variantsthenAtd_inherit.expand_module_body~inherit_fields~inherit_variantsbodyelsebodyinlet(body,original_types)=ifexpandthenAtd_expand.expand_module_body?keep_poly~debug:xdebugbodyelse(body,Hashtbl.create0)in((head,body),original_types)letread_channel?expand?keep_poly?xdebug?inherit_fields?inherit_variants?pos_fname?pos_lnumic=letlexbuf=Lexing.from_channelicinletpos_fname=ifpos_fname=None&&ic==stdinthenSome"<stdin>"elsepos_fnameinread_lexbuf?expand?keep_poly?xdebug?inherit_fields?inherit_variants?pos_fname?pos_lnumlexbufletload_file?expand?keep_poly?xdebug?inherit_fields?inherit_variants?pos_fname?pos_lnumfile=letic=open_infileinletfinally()=close_in_noerricintryletpos_fname=matchpos_fnamewithNone->Somefile|Some_->pos_fnameinletast=read_channel?expand?keep_poly?xdebug?inherit_fields?inherit_variants?pos_fname?pos_lnumicinfinally();astwithe->finally();raiseeletload_string?expand?keep_poly?xdebug?inherit_fields?inherit_variants?pos_fname?pos_lnums=letlexbuf=Lexing.from_stringsinread_lexbuf?expand?keep_poly?xdebug?inherit_fields?inherit_variants?pos_fname?pos_lnumlexbufmoduleTsort=Atd_sort.Make(structtypet=Atd_ast.module_itemtypeid=string(* type name *)letiddef=let`Type(loc,(name,_,_),x)=definnameletto_stringname=nameend)lettsortl0=letignorable=["unit";"bool";"int";"float";"string";"abstract"]inletl=List.map(fundef->let`Type(loc,(name,_,_),x)=definletdeps=Atd_ast.extract_type_names~ignorablexin(def,deps))l0inList.rev(Tsort.sortl)