From 44cfc12e497af4cbb43ce64e3e020cd5cf87ba10 Mon Sep 17 00:00:00 2001 From: boris Date: Tue, 21 Sep 2004 15:59:24 +0000 Subject: ChangeLogTag: Tue Sep 21 11:08:20 2004 Boris Kolpackov --- TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/ValueType.cpp | 21 ++++ TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/ValueType.hpp | 20 +++ TAO/CIAO/CCF/CCF/IDL2/Traversal/ValueType.hpp | 6 +- TAO/CIAO/CCF/CCF/IDL3/Parser.cpp | 44 ++++++- TAO/CIAO/CCF/CCF/IDL3/Parser.hpp | 18 +++ TAO/CIAO/CCF/CCF/IDL3/SemanticAction.hpp | 1 + .../CCF/IDL3/SemanticAction/EventTypeFactory.hpp | 32 +++++ TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Factory.hpp | 4 + .../IDL3/SemanticAction/Impl/EventTypeFactory.cpp | 139 +++++++++++++++++++++ .../IDL3/SemanticAction/Impl/EventTypeFactory.hpp | 42 +++++++ .../CCF/CCF/IDL3/SemanticAction/Impl/Factory.cpp | 1 + .../CCF/CCF/IDL3/SemanticAction/Impl/Factory.hpp | 9 ++ TAO/CIAO/CCF/CCF/IDL3/SemanticGraph/EventType.cpp | 21 ++++ TAO/CIAO/CCF/CCF/IDL3/SemanticGraph/EventType.hpp | 18 +++ TAO/CIAO/CCF/CCF/IDL3/Traversal/EventType.hpp | 10 +- TAO/CIAO/ChangeLog | 20 +++ 16 files changed, 402 insertions(+), 4 deletions(-) create mode 100644 TAO/CIAO/CCF/CCF/IDL3/SemanticAction/EventTypeFactory.hpp create mode 100644 TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Impl/EventTypeFactory.cpp create mode 100644 TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Impl/EventTypeFactory.hpp diff --git a/TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/ValueType.cpp b/TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/ValueType.cpp index f369e7d790d..ace6d65eac9 100644 --- a/TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/ValueType.cpp +++ b/TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/ValueType.cpp @@ -72,6 +72,27 @@ namespace CCF TypeInfo const& ConcreteValueType:: static_type_info () { return concrete_value_type_; } + + + // ValueTypeFactory + // + // + namespace + { + TypeInfo + value_type_factory_init_ () + { + TypeInfo ti (typeid (ValueTypeFactory)); + ti.add_base ( + Access::PUBLIC, true, TwoWayOperation::static_type_info ()); + return ti; + } + + TypeInfo value_type_factory_ (value_type_factory_init_ ()); + } + + TypeInfo const& ValueTypeFactory:: + static_type_info () { return value_type_factory_; } } } } diff --git a/TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/ValueType.hpp b/TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/ValueType.hpp index 377e70ab31f..15a2f0d867c 100644 --- a/TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/ValueType.hpp +++ b/TAO/CIAO/CCF/CCF/IDL2/SemanticGraph/ValueType.hpp @@ -6,6 +6,7 @@ #define CCF_IDL2_SEMANTIC_GRAPH_VALUE_TYPE_HPP #include "CCF/IDL2/SemanticGraph/Elements.hpp" +#include "CCF/IDL2/SemanticGraph/Operation.hpp" namespace CCF { @@ -81,6 +82,25 @@ namespace CCF type_info (static_type_info ()); } }; + + + // + // + // + class ValueTypeFactory : public virtual TwoWayOperation + { + public: + static Introspection::TypeInfo const& + static_type_info (); + + protected: + friend class Graph; + + ValueTypeFactory () + { + type_info (static_type_info ()); + } + }; } } } diff --git a/TAO/CIAO/CCF/CCF/IDL2/Traversal/ValueType.hpp b/TAO/CIAO/CCF/CCF/IDL2/Traversal/ValueType.hpp index 40be839503c..a99ee48e814 100644 --- a/TAO/CIAO/CCF/CCF/IDL2/Traversal/ValueType.hpp +++ b/TAO/CIAO/CCF/CCF/IDL2/Traversal/ValueType.hpp @@ -6,7 +6,7 @@ #define CCF_IDL2_TRAVERSAL_VALUE_TYPE_HPP #include "CCF/IDL2/Traversal/Elements.hpp" - +#include "CCF/IDL2/Traversal/Operation.hpp" #include "CCF/IDL2/SemanticGraph/ValueType.hpp" namespace CCF @@ -76,6 +76,10 @@ namespace CCF typedef ValueTypeTemplate ConcreteValueType; + + typedef + OperationTemplate + ValueTypeFactory; } } } diff --git a/TAO/CIAO/CCF/CCF/IDL3/Parser.cpp b/TAO/CIAO/CCF/CCF/IDL3/Parser.cpp index 4f2c8467376..1d04529c1fe 100644 --- a/TAO/CIAO/CCF/CCF/IDL3/Parser.cpp +++ b/TAO/CIAO/CCF/CCF/IDL3/Parser.cpp @@ -120,6 +120,17 @@ namespace CCF act_event_type_end ( f.event_type (), &SemanticAction::EventType::end), + // EventTypeFactory + // + act_event_type_factory_name ( + f.event_type_factory (), &SemanticAction::EventTypeFactory::name), + + act_event_type_factory_parameter ( + f.event_type_factory (), &SemanticAction::EventTypeFactory::parameter), + + act_event_type_factory_raises ( + f.event_type_factory (), &SemanticAction::EventTypeFactory::raises), + // Home // @@ -422,10 +433,41 @@ namespace CCF | attribute_decl | operation_decl | value_type_member_decl - | value_type_factory_decl + | event_type_factory_decl + ) + ; + + + // eventtype factory + // + // + event_type_factory_decl = + FACTORY + >> simple_identifier[act_event_type_factory_name] + >> LPAREN + >> event_type_factory_parameter_list + >> RPAREN + >> !(RAISES >> LPAREN >> event_type_factory_raises_list >> RPAREN) + >> SEMI + ; + + event_type_factory_parameter_list = + *( + event_type_factory_parameter + >> *(COMMA >> event_type_factory_parameter) ) ; + event_type_factory_parameter = + IN + >> (identifier >> simple_identifier)[act_event_type_factory_parameter] + ; + + event_type_factory_raises_list = + identifier[act_event_type_factory_raises] + >> *(COMMA >> identifier[act_event_type_factory_raises]) + ; + // // home // diff --git a/TAO/CIAO/CCF/CCF/IDL3/Parser.hpp b/TAO/CIAO/CCF/CCF/IDL3/Parser.hpp index ffce97c5601..39a11f022ca 100644 --- a/TAO/CIAO/CCF/CCF/IDL3/Parser.hpp +++ b/TAO/CIAO/CCF/CCF/IDL3/Parser.hpp @@ -68,6 +68,11 @@ namespace CCF Rule event_type_def_trailer; Rule event_type_body; + Rule event_type_factory_decl; + Rule event_type_factory_parameter_list; + Rule event_type_factory_parameter; + Rule event_type_factory_raises_list; + // home // Rule home_decl; @@ -183,6 +188,19 @@ namespace CCF NoArgAction act_event_type_end; + // EventTypeFactory + // + OneArgAction + act_event_type_factory_name; + + TwoArgAction + act_event_type_factory_parameter; + + OneArgAction + act_event_type_factory_raises; + // Home // diff --git a/TAO/CIAO/CCF/CCF/IDL3/SemanticAction.hpp b/TAO/CIAO/CCF/CCF/IDL3/SemanticAction.hpp index 021dbcc598e..ae0f9d21b2e 100644 --- a/TAO/CIAO/CCF/CCF/IDL3/SemanticAction.hpp +++ b/TAO/CIAO/CCF/CCF/IDL3/SemanticAction.hpp @@ -13,6 +13,7 @@ #include "CCF/IDL3/SemanticAction/Consumes.hpp" #include "CCF/IDL3/SemanticAction/Emits.hpp" #include "CCF/IDL3/SemanticAction/EventType.hpp" +#include "CCF/IDL3/SemanticAction/EventTypeFactory.hpp" #include "CCF/IDL3/SemanticAction/Home.hpp" #include "CCF/IDL3/SemanticAction/HomeFactory.hpp" #include "CCF/IDL3/SemanticAction/HomeFinder.hpp" diff --git a/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/EventTypeFactory.hpp b/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/EventTypeFactory.hpp new file mode 100644 index 00000000000..12514bb773e --- /dev/null +++ b/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/EventTypeFactory.hpp @@ -0,0 +1,32 @@ +// file : CCF/IDL3/SemanticAction/EventTypeFactory.hpp +// author : Boris Kolpackov +// cvs-id : $Id$ + +#ifndef CCF_IDL3_SEMANTIC_ACTION_EVENT_TYPE_FACTORY_HPP +#define CCF_IDL3_SEMANTIC_ACTION_EVENT_TYPE_FACTORY_HPP + +#include "CCF/IDL3/SemanticAction/Elements.hpp" + +namespace CCF +{ + namespace IDL3 + { + namespace SemanticAction + { + struct EventTypeFactory + { + virtual void + name (SimpleIdentifierPtr const& id) = 0; + + virtual void + parameter (IdentifierPtr const& type, + SimpleIdentifierPtr const& name) = 0; + + virtual void + raises (IdentifierPtr const& id) = 0; + }; + } + } +} + +#endif // CCF_IDL3_SEMANTIC_ACTION_EVENT_TYPE_FACTORY_HPP diff --git a/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Factory.hpp b/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Factory.hpp index 10e4635a64d..8dd3ae3d25f 100644 --- a/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Factory.hpp +++ b/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Factory.hpp @@ -20,6 +20,7 @@ namespace CCF struct Emits; struct Consumes; struct EventType; + struct EventTypeFactory; struct Home; struct HomeFactory; struct HomeFinder; @@ -48,6 +49,9 @@ namespace CCF virtual EventType& event_type () = 0; + virtual EventTypeFactory& + event_type_factory () = 0; + virtual Home& home () = 0; diff --git a/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Impl/EventTypeFactory.cpp b/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Impl/EventTypeFactory.cpp new file mode 100644 index 00000000000..db687181c61 --- /dev/null +++ b/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Impl/EventTypeFactory.cpp @@ -0,0 +1,139 @@ +// file : CCF/IDL3/SemanticAction/Impl/EventTypeFactory.cpp +// author : Boris Kolpackov +// cvs-id : $Id$ + +#include "CCF/IDL3/SemanticAction/Impl/EventTypeFactory.hpp" + +#include + +using std::cerr; +using std::endl; + + +namespace CCF +{ + namespace IDL3 + { + namespace SemanticAction + { + namespace Impl + { + using namespace SemanticGraph; + + EventTypeFactory:: + EventTypeFactory (Context& c) + : Base (c) + { + } + + void EventTypeFactory:: + name (SimpleIdentifierPtr const& id) + { + if (ctx.trace ()) cerr << " " << id << endl; + + f_ = 0; + + SemanticGraph::EventType& h ( + dynamic_cast(ctx.scope ())); + + SimpleName name (id->lexeme ()); + + f_ = &ctx.tu ().new_node (); + + ctx.tu ().new_edge (*f_, h); + ctx.tu ().new_edge (ctx.scope (), *f_, name); + } + + + void EventTypeFactory:: + parameter (IdentifierPtr const& type_id, + SimpleIdentifierPtr const& name_id) + { + if (ctx.trace ()) cerr << "parameter in " << " " + << type_id << " " << name_id << endl; + + if (f_ == 0) return; + + Name name (type_id->lexeme ()); + ScopedName from (ctx.scope ().scoped_name ()); + + try + { + try + { + Type& t (resolve (from, name, Flags::complete)); + + Parameter& p ( + ctx.tu ().new_node (name_id->lexeme ())); + + ctx.tu ().new_edge (p, t); + ctx.tu ().new_edge (*f_, p); + } + catch (Resolve const&) + { + cerr << "error: invalid parameter declaration" << endl; + throw; + } + } + catch (NotFound const&) + { + cerr << "no type with name \'" << name + << "\' visible from scope \'" << from << "\'" << endl; + } + catch (WrongType const&) + { + cerr << "declaration with name \'" << name + << "\' visible from scope \'" << from + << "\' is not a type declaration" << endl; + cerr << "using non-type as an factory parameter type is " + << "illegal" << endl; + } + catch (NotComplete const& e) + { + cerr << "type \'" << e.name () << "\' is not complete" << endl; + } + } + + void EventTypeFactory:: + raises (IdentifierPtr const& id) + { + if (ctx.trace ()) cerr << "raises " << id << endl; + + if (f_ == 0) return; + + Name name (id->lexeme ()); + ScopedName from (ctx.scope ().scoped_name ()); + + try + { + try + { + SemanticGraph::Exception& e ( + resolve (from, name)); + + ctx.tu ().new_edge (*f_, e); + } + catch (Resolve const&) + { + cerr << "error: invalid raises declaration" << endl; + throw; + } + } + catch (NotFound const&) + { + cerr << "no exception with name \'" << name + << "\' visible from scope \'" << from << "\'" << endl; + } + catch (WrongType const&) + { + cerr << "declaration with name \'" << name + << "\' visible from scope \'" << from + << "\' is not an exception declaration" << endl; + cerr << "using non-exception type in raises declaration is " + << "illegal" << endl; + } + } + } + } + } +} diff --git a/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Impl/EventTypeFactory.hpp b/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Impl/EventTypeFactory.hpp new file mode 100644 index 00000000000..1489651b7c8 --- /dev/null +++ b/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Impl/EventTypeFactory.hpp @@ -0,0 +1,42 @@ +// file : CCF/IDL3/SemanticAction/Impl/EventTypeFactory.hpp +// author : Boris Kolpackov +// cvs-id : $Id$ + +#ifndef CCF_IDL3_SEMANTIC_ACTION_IMPL_EVENT_TYPE_FACTORY_HPP +#define CCF_IDL3_SEMANTIC_ACTION_IMPL_EVENT_TYPE_FACTORY_HPP + +#include "CCF/IDL3/SemanticGraph/EventType.hpp" +#include "CCF/IDL3/SemanticAction/EventTypeFactory.hpp" +#include "CCF/IDL3/SemanticAction/Impl/Elements.hpp" + +namespace CCF +{ + namespace IDL3 + { + namespace SemanticAction + { + namespace Impl + { + struct EventTypeFactory : SemanticAction::EventTypeFactory, Base + { + EventTypeFactory (Context& c); + + virtual void + name (SimpleIdentifierPtr const& id); + + virtual void + parameter (IdentifierPtr const& type_id, + SimpleIdentifierPtr const& name_id); + + virtual void + raises (IdentifierPtr const& id); + + private: + SemanticGraph::EventTypeFactory* f_; + }; + } + } + } +} + +#endif // CCF_IDL3_SEMANTIC_ACTION_IMPL_EVENT_TYPE_FACTORY_HPP diff --git a/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Impl/Factory.cpp b/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Impl/Factory.cpp index 276272ae041..075955ecc2b 100644 --- a/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Impl/Factory.cpp +++ b/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Impl/Factory.cpp @@ -22,6 +22,7 @@ namespace CCF consumes_ (ctx_), emits_ (ctx_), event_type_ (ctx_), + event_type_factory_ (ctx_), home_ (ctx_), home_factory_ (ctx_), home_finder_ (ctx_), diff --git a/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Impl/Factory.hpp b/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Impl/Factory.hpp index 404f377c0f3..fc6b80a9a6b 100644 --- a/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Impl/Factory.hpp +++ b/TAO/CIAO/CCF/CCF/IDL3/SemanticAction/Impl/Factory.hpp @@ -16,6 +16,7 @@ #include "CCF/IDL3/SemanticAction/Impl/Emits.hpp" #include "CCF/IDL3/SemanticAction/Impl/Consumes.hpp" #include "CCF/IDL3/SemanticAction/Impl/EventType.hpp" +#include "CCF/IDL3/SemanticAction/Impl/EventTypeFactory.hpp" #include "CCF/IDL3/SemanticAction/Impl/Home.hpp" #include "CCF/IDL3/SemanticAction/Impl/HomeFactory.hpp" #include "CCF/IDL3/SemanticAction/Impl/HomeFinder.hpp" @@ -61,6 +62,13 @@ namespace CCF return event_type_; } + virtual EventTypeFactory& + event_type_factory () + { + return event_type_factory_; + } + + virtual SemanticAction::Home& home () { @@ -109,6 +117,7 @@ namespace CCF Consumes consumes_; Emits emits_; EventType event_type_; + EventTypeFactory event_type_factory_; Home home_; HomeFactory home_factory_; HomeFinder home_finder_; diff --git a/TAO/CIAO/CCF/CCF/IDL3/SemanticGraph/EventType.cpp b/TAO/CIAO/CCF/CCF/IDL3/SemanticGraph/EventType.cpp index 5054b1f2c3e..9348b024737 100644 --- a/TAO/CIAO/CCF/CCF/IDL3/SemanticGraph/EventType.cpp +++ b/TAO/CIAO/CCF/CCF/IDL3/SemanticGraph/EventType.cpp @@ -75,6 +75,27 @@ namespace CCF TypeInfo const& ConcreteEventType:: static_type_info () { return concrete_event_type_; } + + + // EventTypeFactory + // + // + namespace + { + TypeInfo + event_type_factory_init_ () + { + TypeInfo ti (typeid (EventTypeFactory)); + ti.add_base ( + Access::PUBLIC, true, EventTypeFactory::static_type_info ()); + return ti; + } + + TypeInfo event_type_factory_ (event_type_factory_init_ ()); + } + + TypeInfo const& EventTypeFactory:: + static_type_info () { return event_type_factory_; } } } } diff --git a/TAO/CIAO/CCF/CCF/IDL3/SemanticGraph/EventType.hpp b/TAO/CIAO/CCF/CCF/IDL3/SemanticGraph/EventType.hpp index d2c352fda80..5990e1e5884 100644 --- a/TAO/CIAO/CCF/CCF/IDL3/SemanticGraph/EventType.hpp +++ b/TAO/CIAO/CCF/CCF/IDL3/SemanticGraph/EventType.hpp @@ -71,6 +71,24 @@ namespace CCF type_info (static_type_info ()); } }; + + // + // + // + class EventTypeFactory : public virtual ValueTypeFactory + { + public: + static Introspection::TypeInfo const& + static_type_info (); + + protected: + friend class Graph; + + EventTypeFactory () + { + type_info (static_type_info ()); + } + }; } } } diff --git a/TAO/CIAO/CCF/CCF/IDL3/Traversal/EventType.hpp b/TAO/CIAO/CCF/CCF/IDL3/Traversal/EventType.hpp index 4eab9a361ad..941dfad76e6 100644 --- a/TAO/CIAO/CCF/CCF/IDL3/Traversal/EventType.hpp +++ b/TAO/CIAO/CCF/CCF/IDL3/Traversal/EventType.hpp @@ -6,6 +6,8 @@ #define CCF_IDL3_TRAVERSAL_EVENT_TYPE_HPP #include "CCF/IDL3/SemanticGraph/EventType.hpp" + +#include "CCF/IDL2/Traversal/Operation.hpp" #include "CCF/IDL3/Traversal/Elements.hpp" namespace CCF @@ -40,7 +42,7 @@ namespace CCF virtual void inherits_none (T&); - + virtual void supports (T&, EdgeDispatcherBase&); @@ -55,7 +57,7 @@ namespace CCF virtual void supports_none (T&); - + virtual void post (T&); @@ -75,6 +77,10 @@ namespace CCF typedef EventTypeTemplate ConcreteEventType; + + typedef + OperationTemplate + EventTypeFactory; } } } diff --git a/TAO/CIAO/ChangeLog b/TAO/CIAO/ChangeLog index 17f7528b23f..b0d5ffb8c89 100644 --- a/TAO/CIAO/ChangeLog +++ b/TAO/CIAO/ChangeLog @@ -1,3 +1,23 @@ +Tue Sep 21 11:08:20 2004 Boris Kolpackov + + * CCF/CCF/IDL2/SemanticGraph/ValueType.cpp: + * CCF/CCF/IDL2/SemanticGraph/ValueType.hpp: + * CCF/CCF/IDL2/Traversal/ValueType.hpp: + * CCF/CCF/IDL3/Parser.cpp: + * CCF/CCF/IDL3/Parser.hpp: + * CCF/CCF/IDL3/SemanticAction.hpp: + * CCF/CCF/IDL3/SemanticAction/EventTypeFactory.hpp: + * CCF/CCF/IDL3/SemanticAction/Factory.hpp: + * CCF/CCF/IDL3/SemanticAction/Impl/EventTypeFactory.cpp: + * CCF/CCF/IDL3/SemanticAction/Impl/EventTypeFactory.hpp: + * CCF/CCF/IDL3/SemanticAction/Impl/Factory.cpp: + * CCF/CCF/IDL3/SemanticAction/Impl/Factory.hpp: + * CCF/CCF/IDL3/SemanticGraph/EventType.cpp: + * CCF/CCF/IDL3/SemanticGraph/EventType.hpp: + * CCF/CCF/IDL3/Traversal/EventType.hpp: + + Added support for eventtype factories. + Tue Sep 21 07:39:12 UTC 2004 Johnny Willemsen * DAnCE/ciao/Context_Impl_Base.cpp: -- cgit v1.2.1