From 71831dd45a882da63481da0a53cafdbc8b5ab019 Mon Sep 17 00:00:00 2001 From: jhugues Date: Sat, 29 Dec 2012 12:43:18 +0000 Subject: [PATCH] * Rework code to avoid name collision for MAST and Cheddar git-svn-id: https://tecsw.estec.esa.int/svn/taste/trunk/ocarina@6171 129961e7-ef38-4bb5-a8f7-c9a525a55882 --- .../ocarina-backends-cheddar-mapping.adb | 9 ++++-- src/backends/ocarina-backends-mast-main.adb | 22 ++++++------- src/backends/ocarina-backends-utils.adb | 31 +++++++++++++++++++ src/backends/ocarina-backends-utils.ads | 7 +++++ .../ocarina-backends-xml_common-mapping.adb | 12 +++++++ .../ocarina-backends-xml_common-mapping.ads | 3 ++ 6 files changed, 68 insertions(+), 16 deletions(-) diff --git a/src/backends/ocarina-backends-cheddar-mapping.adb b/src/backends/ocarina-backends-cheddar-mapping.adb index 99e8c588..2ffccfa2 100644 --- a/src/backends/ocarina-backends-cheddar-mapping.adb +++ b/src/backends/ocarina-backends-cheddar-mapping.adb @@ -348,7 +348,8 @@ package body Ocarina.Backends.Cheddar.Mapping is N := Make_XML_Node ("address_space"); -- name: computed from process instance name - P := Map_Node_Identifier_To_XML_Node ("name", Parent_Subcomponent (E)); + P := Map_Node_Identifier_To_XML_Node + ("name", Fully_Qualified_Instance_Name (E)); Append_Node_To_List (P, XTN.Subitems (N)); -- cpu_name: computed from the processor binding of the @@ -453,12 +454,14 @@ package body Ocarina.Backends.Cheddar.Mapping is -- address_space: name of the enclosing process P := Map_Node_Identifier_To_XML_Node ("address_space_name", - Get_Container_Process (Parent_Subcomponent (E))); + Fully_Qualified_Instance_Name + (Corresponding_Instance + (Get_Container_Process (Parent_Subcomponent (E))))); Append_Node_To_List (P, XTN.Subitems (N)); -- name: computed from thread instance name P := Map_Node_Identifier_To_XML_Node - ("name", Parent_Subcomponent (E)); + ("name", Fully_Qualified_Instance_Name (E)); Append_Node_To_List (P, XTN.Subitems (N)); -- capacity: computed from the Compute_Execution_Time property diff --git a/src/backends/ocarina-backends-mast-main.adb b/src/backends/ocarina-backends-mast-main.adb index be84d641..73eaba07 100644 --- a/src/backends/ocarina-backends-mast-main.adb +++ b/src/backends/ocarina-backends-mast-main.adb @@ -576,17 +576,15 @@ package body Ocarina.Backends.MAST.Main is Port_Shared_Resource_Op_List : List_Id; begin Set_Str_To_Name_Buffer (""); - Get_Name_String (Normalize_Name - (Name (Identifier (Parent_Subcomponent (E))))); - Add_Str_To_Name_Buffer ("_operations"); - Operation_Name := Name_Find; - - Set_Str_To_Name_Buffer (""); - Get_Name_String (Normalize_Name - (Name (Identifier (Parent_Subcomponent (E))))); + Get_Name_String (Fully_Qualified_Instance_Name (E)); Add_Str_To_Name_Buffer ("_sched_server"); Server_Sched_Name := Name_Find; + Set_Str_To_Name_Buffer (""); + Get_Name_String (Fully_Qualified_Instance_Name (E)); + Add_Str_To_Name_Buffer ("_operations"); + Operation_Name := Name_Find; + Prio := Get_Thread_Priority (E); if Prio = 0 then Prio := 1; @@ -609,13 +607,12 @@ package body Ocarina.Backends.MAST.Main is Append_Node_To_List (N, MTN.Declarations (MAST_File)); N := Make_Transaction - (Normalize_Name (Name (Identifier (Parent_Subcomponent (E)))), + (Fully_Qualified_Instance_Name (E), Regular); Append_Node_To_List (N, MTN.Declarations (MAST_File)); Set_Str_To_Name_Buffer (""); - Get_Name_String (Normalize_Name - (Name (Identifier (Parent_Subcomponent (E))))); + Get_Name_String (Fully_Qualified_Instance_Name (E)); Add_Str_To_Name_Buffer ("_activation_event"); Activation_Event_Name := Name_Find; @@ -662,8 +659,7 @@ package body Ocarina.Backends.MAST.Main is (Activation_Event, MTN.External_Events (N)); Set_Str_To_Name_Buffer (""); - Get_Name_String (Normalize_Name - (Name (Identifier (Parent_Subcomponent (E))))); + Get_Name_String (Fully_Qualified_Instance_Name (E)); Add_Str_To_Name_Buffer ("_output_event"); Output_Event_Name := Name_Find; diff --git a/src/backends/ocarina-backends-utils.adb b/src/backends/ocarina-backends-utils.adb index 279c6db7..631fdcbb 100644 --- a/src/backends/ocarina-backends-utils.adb +++ b/src/backends/ocarina-backends-utils.adb @@ -345,6 +345,37 @@ package body Ocarina.Backends.Utils is return Normalized_Name; end Normalize_Name; + ----------------------------------- + -- Fully_Qualified_Instance_Name -- + ----------------------------------- + + function Fully_Qualified_Instance_Name (E : Node_Id) return Name_Id is + Current_Node : Node_Id := Parent_Subcomponent (E); + Current_Name : Name_Id; + + begin + Set_Str_To_Name_Buffer (""); + Get_Name_String (Normalize_Name (Name (Identifier (Current_Node)))); + Current_Name := Name_Find; + Current_Node := Parent_Component (Current_Node); + + while Present (Current_Node) loop + exit when No (Parent_Subcomponent (Current_Node)); + + Get_Name_String (Normalize_Name + (Name + (Identifier + (Parent_Subcomponent (Current_Node))))); + Set_Str_To_Name_Buffer (Get_Name_String (Name_Find) + & "_" & Get_Name_String (Current_Name)); + Current_Name := Name_Find; + + Current_Node := Parent_Component (Parent_Subcomponent (Current_Node)); + end loop; + + return Current_Name; + end Fully_Qualified_Instance_Name; + ------------------ -- Is_Namespace -- ------------------ diff --git a/src/backends/ocarina-backends-utils.ads b/src/backends/ocarina-backends-utils.ads index 6e2b88b6..78c71571 100644 --- a/src/backends/ocarina-backends-utils.ads +++ b/src/backends/ocarina-backends-utils.ads @@ -71,6 +71,12 @@ package Ocarina.Backends.Utils is -- in most languages: a-z, 0-9, _. -- If Ada_Style is set to True, '.' is replaced by "__" + function Fully_Qualified_Instance_Name (E : Node_Id) return Name_Id; + -- Return a fully qualified name for component instance E, the + -- fully qualified name is built from + -- __ to avoid name + -- collision + ----------------------------------------------------- -- Routines that are common to the code generators -- ----------------------------------------------------- @@ -491,4 +497,5 @@ package Ocarina.Backends.Utils is return Boolean; function Get_Associated_Bus (Port : Node_Id) return Node_Id; + end Ocarina.Backends.Utils; diff --git a/src/backends/ocarina-backends-xml_common-mapping.adb b/src/backends/ocarina-backends-xml_common-mapping.adb index e00bf037..a38c74e1 100644 --- a/src/backends/ocarina-backends-xml_common-mapping.adb +++ b/src/backends/ocarina-backends-xml_common-mapping.adb @@ -132,4 +132,16 @@ package body Ocarina.Backends.XML_Common.Mapping is return N; end Map_Node_Identifier_To_XML_Node; + function Map_Node_Identifier_To_XML_Node + (Name : String; The_Node : Name_Id) return Node_Id + is + N, V : Node_Id; + begin + N := Make_XML_Node (Name); + V := Make_Defining_Identifier (The_Node); + Append_Node_To_List (V, Subitems (N)); + + return N; + end Map_Node_Identifier_To_XML_Node; + end Ocarina.Backends.XML_Common.Mapping; diff --git a/src/backends/ocarina-backends-xml_common-mapping.ads b/src/backends/ocarina-backends-xml_common-mapping.ads index 64ab72a3..5bec6333 100644 --- a/src/backends/ocarina-backends-xml_common-mapping.ads +++ b/src/backends/ocarina-backends-xml_common-mapping.ads @@ -49,4 +49,7 @@ package Ocarina.Backends.XML_Common.Mapping is (Name : String; The_Node : Node_Id) return Node_Id; -- Build a node whose structure is the_node'identifier + function Map_Node_Identifier_To_XML_Node + (Name : String; The_Node : Name_Id) return Node_Id; + end Ocarina.Backends.XML_Common.Mapping; -- GitLab