diff options
Diffstat (limited to 'CIAO/CIDLC/ExecutorMappingGenerator.cpp')
-rw-r--r-- | CIAO/CIDLC/ExecutorMappingGenerator.cpp | 128 |
1 files changed, 105 insertions, 23 deletions
diff --git a/CIAO/CIDLC/ExecutorMappingGenerator.cpp b/CIAO/CIDLC/ExecutorMappingGenerator.cpp index e5aa0a8b445..6ba0203a5af 100644 --- a/CIAO/CIDLC/ExecutorMappingGenerator.cpp +++ b/CIAO/CIDLC/ExecutorMappingGenerator.cpp @@ -471,13 +471,14 @@ namespace // struct MonolithEmitter : ComponentEmitter { - MonolithEmitter (Context& c, ostream& os) + MonolithEmitter (Context& c, ostream& os, CommandLine const& cl) : ComponentEmitter (c, os), monolith_name_emitter (c, os, "CCM_"), attribute (c, os), consumer (c, os), - provider (c, os), - type_name_emitter (c, os) + provider (c, os, cl), + type_name_emitter (c, os), + cl_ (cl) { edge_traverser (inherits); edge_traverser (defines); @@ -592,9 +593,21 @@ namespace struct Provider : Traversal::ProviderGet, Emitter { - Provider (Context& c, ostream& os) - : Emitter (c, os) + Provider (Context& c, ostream& os, CommandLine const& cl) + : Emitter (c, os), + cl_ (cl) + { + } + + virtual void + pre (Type& c) { + string enclosing = cl_.get_value ("lem-enclosing-module", ""); + + if (enclosing != "") + { + os << "::" << enclosing; + } } virtual void @@ -620,6 +633,9 @@ namespace { os << ";"; } + + private: + CommandLine const& cl_; }; Traversal::Inherits inherits; @@ -635,6 +651,7 @@ namespace Traversal::Belongs provider_belongs; FullTypeNameEmitter type_name_emitter; + CommandLine const& cl_; }; @@ -1101,8 +1118,9 @@ namespace struct HomeExplicitEmitter : HomeEmitter { - HomeExplicitEmitter (Context& c, ostream& os) - : HomeEmitter (c, os), name_emitter (c, os, "CCM_", "Explicit") + HomeExplicitEmitter (Context& c, ostream& os, CommandLine const& cl) + : HomeEmitter (c, os), name_emitter (c, os, "CCM_", "Explicit"), + cl_ (cl) { edge_traverser (inherits); inherits.node_traverser (name_emitter); @@ -1124,6 +1142,13 @@ namespace inherits_pre (Type&) { os << " : "; +/* + string enclosing = cl_.get_value ("lem-enclosing-module", ""); + + if (enclosing != "") + { + os << "::" << enclosing; + }*/ } virtual void @@ -1165,6 +1190,7 @@ namespace private: Traversal::Inherits inherits; NameMangler name_emitter; + CommandLine const& cl_; }; @@ -1433,7 +1459,7 @@ namespace virtual void inherits (Type& i) { - os << " : " << i.name (); + os << " : " << i.scoped_name (); } virtual void @@ -1509,9 +1535,10 @@ namespace struct ComponentContextEmitter : Traversal::ComponentExecutor, Emitter { - ComponentContextEmitter (Context& c, ostream& os) + ComponentContextEmitter (Context& c, ostream& os, CommandLine const& cl) : Emitter (c, os), - name_emitter_ (c, os, "CCM_", "_Context") + name_emitter_ (c, os, "CCM_", "_Context"), + cl_ (cl) { implements_traverser_.node_traverser (name_emitter_); } @@ -1524,6 +1551,14 @@ namespace // // os << "local interface "; os << "typedef "; + + string enclosing = cl_.get_value ("lem-enclosing-module", ""); + + if (enclosing != "") + { + os << "::" << enclosing; + } + Traversal::ComponentExecutor::implements (i, implements_traverser_); } @@ -1555,14 +1590,16 @@ namespace private: NameMangler name_emitter_; Traversal::Implements implements_traverser_; + CommandLine const& cl_; }; struct ComponentExecutorEmitter : Traversal::ComponentExecutor, Emitter { - ComponentExecutorEmitter (Context& c, ostream& os) + ComponentExecutorEmitter (Context& c, ostream& os, CommandLine const& cl) : Emitter (c, os), - name_emitter_ (c, os, "CCM_") + name_emitter_ (c, os, "CCM_"), + cl_ (cl) { implements_traverser_.node_traverser (name_emitter_); } @@ -1583,6 +1620,13 @@ namespace implements (Type& i) { os << " : "; + + string enclosing = cl_.get_value ("lem-enclosing-module", ""); + + if (enclosing != "") + { + os << "::" << enclosing; + } Traversal::ComponentExecutor::implements (i, implements_traverser_); @@ -1599,14 +1643,16 @@ namespace private: NameMangler name_emitter_; Traversal::Implements implements_traverser_; + CommandLine const& cl_; }; struct HomeExecutorEmitter : Traversal::HomeExecutor, Emitter { - HomeExecutorEmitter (Context& c, ostream& os) + HomeExecutorEmitter (Context& c, ostream& os, CommandLine const& cl) : Emitter (c, os), - name_emitter_ (c, os, "CCM_") + name_emitter_ (c, os, "CCM_"), + cl_ (cl) { implements_traverser_.node_traverser (name_emitter_); } @@ -1628,6 +1674,13 @@ namespace { os << " : "; + string enclosing = cl_.get_value ("lem-enclosing-module", ""); + + if (enclosing != "") + { + os << "::" << enclosing; + } + Traversal::HomeExecutor::implements (i, implements_traverser_); } @@ -1640,6 +1693,7 @@ namespace private: NameMangler name_emitter_; Traversal::Implements implements_traverser_; + CommandLine const& cl_; }; // @@ -1649,8 +1703,9 @@ namespace Traversal::BracketIncludes, Emitter { - IncludesEmitter (Context& c, ostream& os) - : Emitter (c, os) + IncludesEmitter (Context& c, ostream& os, CommandLine const& cl) + : Emitter (c, os), + cl_ (cl) { } @@ -1658,6 +1713,14 @@ namespace traverse (SemanticGraph::QuoteIncludes& qi) { os << "#include \"" << qi.file ().string () << "\"" << endl; + + string enclosing = cl_.get_value ("lem-enclosing-module", ""); + + if (enclosing != "") + { + os << endl << "module " << enclosing << endl + << "{"; + } } virtual void @@ -1665,6 +1728,9 @@ namespace { os << "#include <" << bi.file ().string () << ">" << endl; } + + private: + CommandLine const& cl_; }; } @@ -1693,6 +1759,14 @@ options (CL::Description& d) "Use provided regular expression when constructing " "name of local executor mapping file.", CL::OptionType::value)); + + d.add_option (CL::OptionDescription ( + "lem-enclosing-module", + "name", + "Adds an enclosing module to the entire IDL file " + "to disambiguate repeated code generation of " + "inherited facets.", + CL::OptionType::value)); } @@ -1942,7 +2016,7 @@ generate (CommandLine const& cl, { os << "#include <ciao/Contexts/Swapping/CIAO_UpgradeableContext.idl>" << endl; } - + Traversal::TranslationUnit unit; // Layer 1 @@ -1968,7 +2042,7 @@ generate (CommandLine const& cl, Traversal::ContainsRoot contains_root; Traversal::QuoteIncludes quote_includes; Traversal::BracketIncludes bracket_includes; - IncludesEmitter includes_emitter (ctx, os); + IncludesEmitter includes_emitter (ctx, os, cl); principal_region.edge_traverser (includes_emitter); @@ -2004,11 +2078,11 @@ generate (CommandLine const& cl, InterfaceEmitter interface_ (ctx, os); InterfaceFwdEmitter interface_fwd (ctx, os); - MonolithEmitter component_monolith (ctx, os); + MonolithEmitter component_monolith (ctx, os, cl); ContextEmitter component_context (ctx, os, cl); HomeImplicitEmitter home_implicit (ctx, os); - HomeExplicitEmitter home_explicit (ctx, os); + HomeExplicitEmitter home_explicit (ctx, os, cl); HomeMainEmitter home_main (ctx, os); defines.node_traverser (module); @@ -2050,9 +2124,9 @@ generate (CommandLine const& cl, //-- FullTypeNameEmitter type (ctx, os); - ComponentContextEmitter session_component_context (ctx, os); - ComponentExecutorEmitter session_component_executor (ctx, os); - HomeExecutorEmitter session_home_executor (ctx, os); + ComponentContextEmitter session_component_context (ctx, os, cl); + ComponentExecutorEmitter session_component_executor (ctx, os, cl); + HomeExecutorEmitter session_home_executor (ctx, os, cl); ContextPortEmitter port_context (ctx, os); ExplicitPortEmitter port_explicit (ctx, os); @@ -2095,5 +2169,13 @@ generate (CommandLine const& cl, // end unit.traverse (tu); + + string enclosing = cl.get_value ("lem-enclosing-module", ""); + + if (enclosing != "") + { + os << endl + << "};" << endl; + } } } |