From 01a58bddc8605b5476759e59b957cc756a2bce15 Mon Sep 17 00:00:00 2001
From: Thibault Martin <thi.martin.pro@pm.me>
Date: Tue, 24 Sep 2024 14:42:37 +0200
Subject: [PATCH] [kernel] Name plugin parameter when registering extensions

---
 src/kernel_internals/typing/unfold_loops.ml     | 5 ++++-
 src/kernel_services/ast_queries/cil.ml          | 4 ++--
 src/kernel_services/ast_queries/logic_const.ml  | 2 +-
 src/kernel_services/ast_queries/logic_const.mli | 4 ++--
 src/kernel_services/ast_queries/logic_typing.ml | 8 ++++----
 src/plugins/eva/utils/eva_annotations.ml        | 2 +-
 tests/spec/Extend_recursive_preprocess.ml       | 4 ++--
 7 files changed, 16 insertions(+), 13 deletions(-)

diff --git a/src/kernel_internals/typing/unfold_loops.ml b/src/kernel_internals/typing/unfold_loops.ml
index db3d6da4d5b..7c4a4943d71 100644
--- a/src/kernel_internals/typing/unfold_loops.ml
+++ b/src/kernel_internals/typing/unfold_loops.ml
@@ -695,7 +695,10 @@ class do_it global_find_init ((force:bool),(times:int)) = object(self)
             (Logic_const.term (TConst (LStr "done")) (Ctype Cil_const.charPtrType)) ;
             Logic_const.tinteger number
           ] in
-        let ext = Logic_const.new_acsl_extension "unfold" (Some "kernel") loc false kind in
+        let ext =
+          Logic_const.new_acsl_extension ~plugin:(Some "kernel") "unfold" loc
+            false kind
+        in
         let annot =Logic_const.new_code_annotation (AExtended([],true,ext)) in
         Annotations.add_code_annot
           Emitter.end_user ~kf:(Option.get self#current_kf) sloop annot;
diff --git a/src/kernel_services/ast_queries/cil.ml b/src/kernel_services/ast_queries/cil.ml
index fe3a350ce80..f67e99e8860 100644
--- a/src/kernel_services/ast_queries/cil.ml
+++ b/src/kernel_services/ast_queries/cil.ml
@@ -1794,8 +1794,8 @@ and visitCilExtended vis orig =
   let visit = Extensions.visit orig.ext_name in
   let e' = doVisitCil vis id (visit ~plugin:orig.ext_plugin vis) childrenCilExtended orig.ext_kind in
   if Visitor_behavior.is_fresh vis#behavior then
-    Logic_const.new_acsl_extension orig.ext_name orig.ext_plugin orig.ext_loc
-      orig.ext_has_status e'
+    Logic_const.new_acsl_extension ~plugin:orig.ext_plugin orig.ext_name
+      orig.ext_loc orig.ext_has_status e'
   else if orig.ext_kind == e' then orig else {orig with ext_kind = e'}
 
 and childrenCilExtended vis p =
diff --git a/src/kernel_services/ast_queries/logic_const.ml b/src/kernel_services/ast_queries/logic_const.ml
index 2e52b0fdd74..91f440b76c3 100644
--- a/src/kernel_services/ast_queries/logic_const.ml
+++ b/src/kernel_services/ast_queries/logic_const.ml
@@ -58,7 +58,7 @@ let refresh_predicate p = { p with ip_id = PredicateId.next () }
 let new_identified_term t =
   { it_id = TermId.next (); it_content = t }
 
-let new_acsl_extension ext_name ext_plugin ext_loc ext_has_status ext_kind = {
+let new_acsl_extension ~plugin:ext_plugin ext_name ext_loc ext_has_status ext_kind = {
   ext_id = ExtendedId.next ();
   ext_name;
   ext_plugin;
diff --git a/src/kernel_services/ast_queries/logic_const.mli b/src/kernel_services/ast_queries/logic_const.mli
index 9de783d0643..32baab0045a 100644
--- a/src/kernel_services/ast_queries/logic_const.mli
+++ b/src/kernel_services/ast_queries/logic_const.mli
@@ -67,10 +67,10 @@ val new_predicate: ?kind:predicate_kind -> predicate -> identified_predicate
 (** creates a new acsl_extension with a fresh id.
     @see <https://frama-c.com/download/frama-c-plugin-development-guide.pdf>
     @since Chlorine-20180501
-    @begore the function took one less argument, [string option] which is now
+    @before the function took one less argument, [~plugin] which is now
     used to set the [ext_plugin] field.
 *)
-val new_acsl_extension: string -> string option -> location -> bool ->
+val new_acsl_extension: plugin:string option -> string -> location -> bool ->
   acsl_extension_kind -> acsl_extension
 
 (** Gives a new id to an existing predicate.
diff --git a/src/kernel_services/ast_queries/logic_typing.ml b/src/kernel_services/ast_queries/logic_typing.ml
index 6d56d016a25..dac950c3f04 100644
--- a/src/kernel_services/ast_queries/logic_typing.ml
+++ b/src/kernel_services/ast_queries/logic_typing.ml
@@ -3790,7 +3790,7 @@ struct
     in
     if Extensions.is_extension ~plugin name then
       let status , kind = Extensions.typer name ~plugin ~typing_context ~loc ps in
-      Logic_const.new_acsl_extension name plugin loc status kind
+      Logic_const.new_acsl_extension ~plugin name loc status kind
     else
       C.error
         loc "No type-checking function registered for extension %s" name
@@ -4502,8 +4502,8 @@ struct
 
     | LDextended (Ext_lexpr(name, plugin, content)) ->
       let typing_context = base_ctxt (Lenv.empty ()) in
-      let status,tcontent = Extensions.typer name ~plugin ~typing_context ~loc content in
-      let textended = Logic_const.new_acsl_extension name plugin loc status tcontent in
+      let status,tcontent = Extensions.typer ~plugin name ~typing_context ~loc content in
+      let textended = Logic_const.new_acsl_extension ~plugin name loc status tcontent in
       Some (Dextended (textended, [], loc))
 
     | LDextended (Ext_extension (name, plugin, kind, content)) ->
@@ -4511,7 +4511,7 @@ struct
       let status,tcontent =
         Extensions.typer_block name ~plugin ~typing_context ~loc (kind,content)
       in
-      let textended = Logic_const.new_acsl_extension name plugin loc status tcontent in
+      let textended = Logic_const.new_acsl_extension ~plugin name loc status tcontent in
       Some (Dextended (textended, [], loc))
 
   let annot = C.on_error
diff --git a/src/plugins/eva/utils/eva_annotations.ml b/src/plugins/eva/utils/eva_annotations.ml
index 0823af80570..4ed203a7404 100644
--- a/src/plugins/eva/utils/eva_annotations.ml
+++ b/src/plugins/eva/utils/eva_annotations.ml
@@ -116,7 +116,7 @@ struct
     let param = M.export annot in
     let plugin = Some "eva" in
     let extension =
-      Logic_const.new_acsl_extension name plugin loc false param
+      Logic_const.new_acsl_extension ~plugin name loc false param
     in
     let annot_node = Cil_types.AExtended ([], kind = Loop, extension) in
     let code_annotation = Logic_const.new_code_annotation annot_node in
diff --git a/tests/spec/Extend_recursive_preprocess.ml b/tests/spec/Extend_recursive_preprocess.ml
index be862c32953..a4a0b4bf026 100644
--- a/tests/spec/Extend_recursive_preprocess.ml
+++ b/tests/spec/Extend_recursive_preprocess.ml
@@ -14,10 +14,10 @@ let ext_typing_block typing_context loc_here node =
   match node.extended_node with
   | Ext_lexpr (name,plugin,data)  ->
     let status,kind = Logic_typing.get_typer ~plugin name ~typing_context ~loc:node.extended_loc data in
-    Logic_const.new_acsl_extension name plugin loc_here status kind
+    Logic_const.new_acsl_extension ~plugin name loc_here status kind
   | Ext_extension (name, plugin, id, data) ->
     let status,kind = Logic_typing.get_typer_block ~plugin name ~typing_context ~loc:node.extended_loc (id,data) in
-    Logic_const.new_acsl_extension name plugin loc_here status kind
+    Logic_const.new_acsl_extension ~plugin name loc_here status kind
 
 let  ext_typing_foo typing_context loc (s,d) =
   let block = List.map (ext_typing_block typing_context loc) d in
-- 
GitLab