123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262(*
Copyright 2013-2018 RIKEN
Copyright 2018-2020 Chiba Institude of Technology
Copyright 2020-2025 Codinuum Software Lab <https://codinuum.com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*)(* fortran/change.ml *)moduleTriple=Diffast_core.TriplemoduleChange_base=Diffast_core.Change_basemoduleInfo=Diffast_core.InfomoduleEdit=Diffast_core.EditmoduleF_label=Fortran_base.F_labelmoduleUID=Diffast_misc.UIDmoduleF(L:F_label.T)=structmoduleI=InfomoduleE=Edit(*let sprintf = Printf.sprintf*)includeChange_basemoduleCB=F(L)(* predicates *)letgetlab=L.getlabletis_namednd=L.is_named(getlabnd)letis_case_construct nd=L.is_case_construct(getlabnd)letis_do_constructnd=L.is_do_construct(getlabnd)letis_forall_constructnd=L.is_forall_construct(getlabnd)letis_if_constructnd=L.is_if_construct(getlabnd)letis_where_constructnd=L.is_where_construct(getlabnd)letis_derived_type_defnd=L.is_derived_type_def(getlabnd)letis_interface_blocknd=L.is_interface_block(getlabnd)letis_primarynd=L.is_primary(getlabnd)letis_exprnd=L.is_expr(getlabnd)letis_stmtnd=L.is_stmt(getlabnd)letis_if_stmtnd=L.is_if_stmt(getlabnd)letis_arithmetic_if_stmtnd=L.is_arithmetic_if_stmt(getlabnd)letis_if_then_stmtnd=L.is_if_then_stmt(getlabnd)letis_else_if_stmtnd=L.is_else_if_stmt(getlabnd)letis_else_stmtnd=L.is_else_stmt(getlabnd)letis_pp_directivend=L.is_pp_directive(getlabnd)letis_pp_definend=L.is_pp_define(getlabnd)letis_pp_includend=L.is_pp_include(getlabnd)letis_ocl_directivend=L.is_ocl_directive(getlabnd)letis_program_unitnd=L.is_program_unit(getlabnd)letis_blocknd=L.is_block(getlabnd)letis_sect_subscr_listnd=L.is_section_subscript_list(getlabnd)letis_ambiguousnd=L.is_ambiguous(getlabnd)letis_ifnd=is_if_stmtnd||is_arithmetic_if_stmtnd||is_if_then_stmtnd||is_else_if_stmtndletis_if_condnd=tryletpnd=nd#initial_parentinis_ifpnd&&is_expr ndwith_->falseletis_then_branchnd=tryletpnd=nd#initial_parentinis_if_then_stmtpnd&&is_blockndwith_->falseletis_else_if_branchnd=tryletpnd=nd#initial_parentinis_else_if_stmtpnd&&is_blockndwith_->falseletis_else_branchnd=tryletpnd=nd#initial_parentinis_else_stmtpnd&&is_blockndwith_->false(* *)letget_unittreend=tryletu=tree#get_nearest_containing_unitndinu#data#labelwithNot_found->""letids_to_strids=ifids=[]then""elsesprintf"{%s}"(String.concat","ids)letsubtree_to_strtreend=sprintf"[%s]"(tree#subtree_to_simple_stringnd#gindex)letget_desc1(*is_whole*)_treend=letids=tree#get_ident_use_listnd#gindexinletextra2=if(* is_whole *)truethensubtree_to_strtreendelse""innd#data#label^(ids_to_strids)^extra2letget_desc2tree1tree2nd1nd2=letids1=tree1#get_ident_use_listnd1#gindexinletids2=tree2#get_ident_use_listnd2#gindexinsprintf"%s%s%s -> %s%s%s"nd1#data#label(ids_to_strids1)(subtree_to_strtree1nd1)nd2#data#label(ids_to_strids2)(subtree_to_strtree2nd2)(* class Change.F.c *)classcoptionstree1tree2uidmappingeditsget_unitget_desc1get_desc2=object(self)inheritCB.coptionstree1tree2uidmappingeditsget_unitget_desc1get_desc2method!make_changes_list()=letmkt_del=self#mkt_deleted~category:Triple.ghostinletmkt_ins=self#mkt_inserted~category:Triple.ghostinletmkt_mod=self#mkt_modified~category:Triple.ghostinletmkt_chgto=self#mkt_changed_to~category:Triple.ghostinletmkt_ren=self#mkt_renamed~category:Triple.ghostinletmkt_mov=self#mkt_moved_to~category:Triple.ghostinletmkt_odrchg=self#mkt_order_changed~category:Triple.ghostin(* let mkt_chgcard _ = [] in *)[(* case-construct *)"case-construct removed",Smedium,(self#make_delete_stis_case_construct),mkt_del;"case-construct added",Smedium,(self#make_insert_stis_case_construct),mkt_ins;"case-construct modified",Smedium,(self#aggregate_changesis_case_construct),mkt_mod;(* do-construct *)"do-construct removed",Smedium,(self#make_delete_stis_do_construct),mkt_del;"do-construct added",Smedium,(self#make_insert_stis_do_construct),mkt_ins;"do-construct modified",Smedium,(self#aggregate_changesis_do_construct),mkt_mod;(* forall-construct *)"forall-construct removed",Smedium,(self#make_delete_stis_forall_construct),mkt_del;"forall-construct added",Smedium,(self#make_insert_stis_forall_construct),mkt_ins;"forall-construct modified",Smedium,(self#aggregate_changesis_forall_construct),mkt_mod;(* if-construct *)"if-construct removed",Smedium,(self#make_delete_stis_if_construct),mkt_del;"if-construct added",Smedium,(self#make_insert_stis_if_construct),mkt_ins;"if-construct modified",Smedium,(self#aggregate_changesis_if_construct),mkt_mod;(* where-construct *)"where-construct removed",Smedium,(self#make_delete_stis_where_construct),mkt_del;"where-construct added",Smedium,(self#make_insert_stis_where_construct),mkt_ins;"where-construct modified",Smedium,(self#aggregate_changesis_where_construct),mkt_mod;(* derived-type-def *)"derived-type-def removed",Smedium,(self#make_delete_stis_derived_type_def),mkt_del;"derived-type-def added",Smedium,(self#make_insert_stis_derived_type_def),mkt_ins;"derived-type-def modified",Smedium,(self#aggregate_changesis_derived_type_def),mkt_mod;(* interface-block *)"interface-block removed",Smedium,(self#make_delete_stis_interface_block),mkt_del;"interface-block added",Smedium,(self#make_insert_stis_interface_block),mkt_ins;"interface-block modified",Smedium,(self#aggregate_changesis_interface_block),mkt_mod;(* if-construct *)"if-condition modified",Smedium,(self#aggregate_changesis_if_cond),mkt_mod;"then-branch deleted",Smedium,(self#make_deleteis_then_branch),mkt_del;"then-branch inserted",Smedium,(self#make_insertis_then_branch),mkt_ins;"then-branch removed",Smedium,(self#make_delete_stis_then_branch),mkt_del;"then-branch added",Smedium,(self#make_insert_stis_then_branch),mkt_ins;"else-if-branch deleted",Smedium,(self#make_deleteis_else_if_branch),mkt_del;"else-if-branch inserted",Smedium,(self#make_insertis_else_if_branch),mkt_ins;"else-if-branch removed",Smedium,(self#make_delete_stis_else_if_branch),mkt_del;"else-if-branch added",Smedium,(self#make_insert_stis_else_if_branch),mkt_ins;"else-branch deleted",Smedium,(self#make_deleteis_else_branch),mkt_del;"else-branch inserted",Smedium,(self#make_insertis_else_branch),mkt_ins;"else-branch removed",Smedium,(self#make_delete_stis_else_branch),mkt_del;"else-branch added",Smedium,(self#make_insert_stis_else_branch),mkt_ins;(* define-directive *)"define-directive removed",Smedium,(self#make_delete_stis_pp_define),mkt_del;"define-directive added",Smedium,(self#make_insert_stis_pp_define),mkt_ins;"define-directive modified",Smedium,(self#aggregate_changesis_pp_define),mkt_mod;(* include-directive *)"include-directive removed",Smedium,(self#make_delete_stis_pp_include),mkt_del;"include-directive added",Smedium,(self#make_insert_stis_pp_include),mkt_ins;"include-directive modified",Smedium,(self#aggregate_changesis_pp_include),mkt_mod;(* pp-directive *)"pp-directive removed",Smedium,(self#make_delete_stis_pp_directive),mkt_del;"pp-directive added",Smedium,(self#make_insert_stis_pp_directive),mkt_ins;"pp-directive modified",Smedium,(self#aggregate_changesis_pp_directive),mkt_mod;(* ocl-directive *)"ocl-directive removed",Smedium,(self#make_delete_stis_ocl_directive),mkt_del;"ocl-directive added",Smedium,(self#make_insert_stis_ocl_directive),mkt_ins;"ocl-directive modified",Smedium,(self#aggregate_changesis_ocl_directive),mkt_mod;(* section-subscript-list *)"section-subscript-list modified",Smedium,(self#aggregate_changesis_sect_subscr_list),mkt_mod;(* ambiguous entity *)"ambiguous entity modified",Smedium,(self#aggregate_changesis_ambiguous),mkt_mod;(* others *)"(removed)",Slow,(self#make_delete_st(fun_->true)),mkt_del;"(added)",Slow,(self#make_insert_st(fun_->true)),mkt_ins;"(deleted)",Slow,(self#make_delete(fun_->true)),mkt_del;"(inserted)",Slow,(self#make_insert(fun_->true)),mkt_ins;"(moved)",Slow,(self#make_move(fun_->true)),mkt_mov;"(changed)",Slow,(self#make_changed_to(fun_->true)),mkt_chgto;"(renamed)",Slow,(self#make_renamingis_named),mkt_ren;"(order changed)",Slow,(self#make_order_change(fun_->true)),mkt_odrchg;](* end of method make_changes_list *)end(* of class Change.F.c *)letextractoptionstree1tree2uidmappingedits=letchg=newcoptionstree1tree2uidmappingeditsget_unitget_desc1get_desc2inletres=chg#extractinchg#recover_edits;resend(* of functor Change.F *)