summaryrefslogtreecommitdiff
path: root/CIAO/CIDLC/ExecutorMappingGenerator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'CIAO/CIDLC/ExecutorMappingGenerator.cpp')
-rw-r--r--CIAO/CIDLC/ExecutorMappingGenerator.cpp128
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;
+ }
}
}