summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorboris <boris@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-10-16 21:46:06 +0000
committerboris <boris@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-10-16 21:46:06 +0000
commita8ed7cf1b4e4e27f0b2357d2bc4d9d18bd3f40e5 (patch)
tree1ff8f750478a2bcb2a9884d17b00468552e42641
parent38ebb5703d9304ed2567c5b442aa8eb83624544a (diff)
downloadATCD-a8ed7cf1b4e4e27f0b2357d2bc4d9d18bd3f40e5.tar.gz
ChangeLogTag: Thu Oct 16 16:45:35 2003 Boris Kolpackov <boris@dre.vanderbilt.edu>
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/LexicalAnalyzer.cpp1
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/Makefile.archive4
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/Parser.cpp136
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/Parser.hpp36
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SemanticAction.hpp2
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Factory.hpp8
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Factory.hpp18
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Interface.hpp2
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Member.cpp18
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Member.hpp120
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Struct.cpp18
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Struct.hpp99
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Member.hpp35
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Struct.hpp38
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SyntaxTree.hpp2
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Makefile.alt4
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Member.cpp33
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Member.hpp61
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Operation.hpp6
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Struct.cpp118
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Struct.hpp148
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/Traversal.hpp2
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/Traversal/Makefile.alt2
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/Traversal/Member.cpp43
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/Traversal/Member.hpp55
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/Traversal/Struct.cpp45
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/Traversal/Struct.hpp113
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/Traversal/Typedef.hpp4
-rw-r--r--TAO/CIAO/CCF/CCF/IDL3/SyntaxTree/Operation.hpp10
-rw-r--r--TAO/CIAO/CCF/Documentation/TODO8
-rw-r--r--TAO/CIAO/CCF/Example/CIDL/LocalExecutorMapping/ExecutorMappingGenerator.cpp2
-rw-r--r--TAO/CIAO/CCF/Example/CIDL/LocalExecutorMapping/test-2.idl12
-rw-r--r--TAO/CIAO/CCF/Example/CIDL/LocalExecutorMapping/test-2_exec.idl.orig3
-rw-r--r--TAO/CIAO/ChangeLog44
34 files changed, 1212 insertions, 38 deletions
diff --git a/TAO/CIAO/CCF/CCF/IDL2/LexicalAnalyzer.cpp b/TAO/CIAO/CCF/CCF/IDL2/LexicalAnalyzer.cpp
index 586faa76387..2a0817b57b2 100644
--- a/TAO/CIAO/CCF/CCF/IDL2/LexicalAnalyzer.cpp
+++ b/TAO/CIAO/CCF/CCF/IDL2/LexicalAnalyzer.cpp
@@ -32,6 +32,7 @@ namespace CCF
keyword_table_.insert ("out" );
keyword_table_.insert ("sequence" );
keyword_table_.insert ("sinclude" );
+ keyword_table_.insert ("struct" );
keyword_table_.insert ("supports" );
keyword_table_.insert ("typedef" );
keyword_table_.insert ("typeid" );
diff --git a/TAO/CIAO/CCF/CCF/IDL2/Makefile.archive b/TAO/CIAO/CCF/CCF/IDL2/Makefile.archive
index e4793978cbd..2eb1e41b8df 100644
--- a/TAO/CIAO/CCF/CCF/IDL2/Makefile.archive
+++ b/TAO/CIAO/CCF/CCF/IDL2/Makefile.archive
@@ -17,9 +17,11 @@ cxx_translation_units := LexicalAnalyzer.cpp Parser.cpp
translated_units := SyntaxTree/BuiltIn.o \
SyntaxTree/Elements.o \
SyntaxTree/Interface.o \
+ SyntaxTree/Member.o \
SyntaxTree/Module.o \
SyntaxTree/Operation.o \
SyntaxTree/Sequence.o \
+ SyntaxTree/Struct.o \
SyntaxTree/Translation.o \
SyntaxTree/TypeId.o \
SyntaxTree/Typedef.o \
@@ -28,9 +30,11 @@ translated_units := SyntaxTree/BuiltIn.o \
translated_units += Traversal/BuiltIn.o \
Traversal/Elements.o \
Traversal/Interface.o \
+ Traversal/Member.o \
Traversal/Module.o \
Traversal/Operation.o \
Traversal/Sequence.o \
+ Traversal/Struct.o \
Traversal/Translation.o
translated_units += SemanticAction/Operation.o
diff --git a/TAO/CIAO/CCF/CCF/IDL2/Parser.cpp b/TAO/CIAO/CCF/CCF/IDL2/Parser.cpp
index 9873d5720e7..28dda99f4c6 100644
--- a/TAO/CIAO/CCF/CCF/IDL2/Parser.cpp
+++ b/TAO/CIAO/CCF/CCF/IDL2/Parser.cpp
@@ -32,22 +32,23 @@ namespace CCF
error_handler (context, dout),
- ABSTRACT ("abstract"),
- ATTRIBUTE ("attribute"),
- FACTORY ("factory"),
- IN ("in"),
- INCLUDE ("include"),
- INOUT ("inout"),
- INTERFACE ("interface"),
- LOCAL ("local"),
- MODULE ("module"),
- OUT ("out"),
- SEQUENCE ("sequence"),
- SINCLUDE ("sinclude"),
- SUPPORTS ("supports"),
- TYPEDEF ("typedef"),
- TYPEID ("typeid"),
- TYPEPREFIX ("typeprefix"),
+ ABSTRACT ("abstract" ),
+ ATTRIBUTE ("attribute" ),
+ FACTORY ("factory" ),
+ IN ("in" ),
+ INCLUDE ("include" ),
+ INOUT ("inout" ),
+ INTERFACE ("interface" ),
+ LOCAL ("local" ),
+ MODULE ("module" ),
+ OUT ("out" ),
+ SEQUENCE ("sequence" ),
+ SINCLUDE ("sinclude" ),
+ STRUCT ("struct" ),
+ SUPPORTS ("supports" ),
+ TYPEDEF ("typedef" ),
+ TYPEID ("typeid" ),
+ TYPEPREFIX ("typeprefix" ),
COLON (":"),
COMMA (","),
@@ -101,6 +102,19 @@ namespace CCF
act_interface_end (f.interface (), &SemanticAction::Interface::end),
+ // Member
+ //
+ //
+ act_member_begin (
+ f.member (), &SemanticAction::Member::begin),
+
+ act_member_declarator (
+ f.member (), &SemanticAction::Member::declarator),
+
+ act_member_end (
+ f.member (), &SemanticAction::Member::end),
+
+
// Module
//
//
@@ -126,6 +140,19 @@ namespace CCF
act_operation_end (f.operation (), &SemanticAction::Operation::end),
+ // Struct
+ //
+ //
+ act_struct_begin (f.struct_ (), &SemanticAction::Struct::begin),
+
+ act_struct_open_scope (
+ f.struct_ (), &SemanticAction::Scope::open_scope),
+
+ act_struct_close_scope (
+ f.struct_ (), &SemanticAction::Scope::close_scope),
+
+ act_struct_end (f.struct_ (), &SemanticAction::Struct::end),
+
// Typedef
//
@@ -189,6 +216,7 @@ namespace CCF
| extension
| local_type_decl
| module_decl
+ | struct_decl
| typedef_
| type_id
| type_prefix
@@ -283,9 +311,9 @@ namespace CCF
;
- //
// interface
//
+ //
abstract_interface_decl =
guard
(
@@ -383,9 +411,9 @@ namespace CCF
)
;
- //
// attribute
//
+ //
attribute_decl =
ATTRIBUTE
>> identifier[act_attribute_type]
@@ -394,9 +422,9 @@ namespace CCF
;
- //
// direction specifier
//
+ //
direction_specifier =
IN
| OUT
@@ -404,9 +432,28 @@ namespace CCF
;
+ // member
//
+ //
+ member_decl =
+ identifier[act_member_begin]
+ >> member_declarator_list
+ >> SEMI[act_member_end]
+ ;
+
+
+ member_declarator_list =
+ identifier[act_member_declarator]
+ >> *(
+ COMMA
+ >> identifier[act_member_declarator]
+ )
+ ;
+
+
// operation
//
+ //
operation_decl =
(identifier >> simple_identifier)[act_operation_begin]
>> LPAREN
@@ -431,6 +478,57 @@ namespace CCF
;
+ // struct
+ //
+ //
+ struct_decl =
+ guard
+ (
+ STRUCT
+ >> assertion ("struct name expected")
+ (
+ simple_identifier[act_struct_begin]
+ )
+ >> struct_decl_trailer
+
+ )[error_handler]
+ ;
+
+
+ struct_decl_trailer =
+ assertion ("\';\' or \'{\' expected",
+ f.struct_ (),
+ &SemanticAction::Struct::end)
+ (
+ SEMI[act_struct_end]
+ | (
+ LBRACE[act_struct_open_scope]
+ >> struct_body
+ >> assertion ("member or \'}\' expected",
+ f.struct_ (),
+ &SemanticAction::Struct::close_scope,
+ &SemanticAction::Struct::end,
+ RecoveryMethod::STANDARD,
+ DiagnosticType::BEFORE)
+ (
+ RBRACE[act_struct_close_scope]
+ )
+ >> assertion ("\';\' is missing",
+ f.struct_ (),
+ &SemanticAction::Struct::end,
+ RecoveryMethod::NONE)
+ (
+ SEMI[act_struct_end]
+ )
+ )
+ )
+ ;
+
+
+ struct_body =
+ +member_decl
+ ;
+
// typedef
//
//
diff --git a/TAO/CIAO/CCF/CCF/IDL2/Parser.hpp b/TAO/CIAO/CCF/CCF/IDL2/Parser.hpp
index d43dcaae5bd..390f8fb3184 100644
--- a/TAO/CIAO/CCF/CCF/IDL2/Parser.hpp
+++ b/TAO/CIAO/CCF/CCF/IDL2/Parser.hpp
@@ -311,6 +311,7 @@ namespace CCF
KeywordParser OUT;
KeywordParser SEQUENCE;
KeywordParser SINCLUDE;
+ KeywordParser STRUCT;
KeywordParser SUPPORTS;
KeywordParser TYPEDEF;
KeywordParser TYPEID;
@@ -363,10 +364,17 @@ namespace CCF
Rule direction_specifier;
+ Rule member_decl;
+ Rule member_declarator_list;
+
Rule operation_decl;
Rule operation_parameter_list;
Rule operation_parameter;
+ Rule struct_decl;
+ Rule struct_decl_trailer;
+ Rule struct_body;
+
Rule typedef_;
Rule typedef_type_spec;
Rule typedef_declarator_list;
@@ -441,6 +449,19 @@ namespace CCF
act_interface_end;
+ // Member
+ //
+ //
+ OneArgAction<IdentifierPtr, SemanticAction::Member>
+ act_member_begin;
+
+ OneArgAction<SimpleIdentifierPtr, SemanticAction::Member>
+ act_member_declarator;
+
+ NoArgAction<SemanticAction::Member>
+ act_member_end;
+
+
// Module
//
//
@@ -498,6 +519,21 @@ namespace CCF
NoArgAction<SemanticAction::Operation>
act_operation_end;
+ // Struct
+ //
+ //
+ OneArgAction<SimpleIdentifierPtr, SemanticAction::Struct>
+ act_struct_begin;
+
+ ScopeAction
+ act_struct_open_scope;
+
+ ScopeAction
+ act_struct_close_scope;
+
+ NoArgAction<SemanticAction::Struct>
+ act_struct_end;
+
// Typedef
//
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SemanticAction.hpp b/TAO/CIAO/CCF/CCF/IDL2/SemanticAction.hpp
index cc8a27311f9..d12d18e4911 100644
--- a/TAO/CIAO/CCF/CCF/IDL2/SemanticAction.hpp
+++ b/TAO/CIAO/CCF/CCF/IDL2/SemanticAction.hpp
@@ -9,8 +9,10 @@
#include "CCF/IDL2/SemanticAction/Elements.hpp"
#include "CCF/IDL2/SemanticAction/Include.hpp"
#include "CCF/IDL2/SemanticAction/Interface.hpp"
+#include "CCF/IDL2/SemanticAction/Member.hpp"
#include "CCF/IDL2/SemanticAction/Module.hpp"
#include "CCF/IDL2/SemanticAction/Operation.hpp"
+#include "CCF/IDL2/SemanticAction/Struct.hpp"
#include "CCF/IDL2/SemanticAction/Typedef.hpp"
#include "CCF/IDL2/SemanticAction/TypeId.hpp"
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Factory.hpp b/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Factory.hpp
index c19a7ae1f37..a25e0a31db7 100644
--- a/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Factory.hpp
+++ b/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Factory.hpp
@@ -14,8 +14,10 @@ namespace CCF
class Attribute;
class Include;
class Interface;
+ class Member;
class Module;
class Operation;
+ class Struct;
class Typedef;
class TypeId;
class TypePrefix;
@@ -38,12 +40,18 @@ namespace CCF
virtual Interface&
interface () = 0;
+ virtual Member&
+ member () = 0;
+
virtual Module&
module () = 0;
virtual Operation&
operation () = 0;
+ virtual Struct&
+ struct_ () = 0;
+
virtual Typedef&
typedef_ () = 0;
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Factory.hpp b/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Factory.hpp
index 0d0f5a49074..2b885c7694d 100644
--- a/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Factory.hpp
+++ b/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Factory.hpp
@@ -10,8 +10,10 @@
#include "CCF/IDL2/SemanticAction/Impl/Attribute.hpp"
#include "CCF/IDL2/SemanticAction/Impl/Include.hpp"
#include "CCF/IDL2/SemanticAction/Impl/Interface.hpp"
+#include "CCF/IDL2/SemanticAction/Impl/Member.hpp"
#include "CCF/IDL2/SemanticAction/Impl/Module.hpp"
#include "CCF/IDL2/SemanticAction/Impl/Operation.hpp"
+#include "CCF/IDL2/SemanticAction/Impl/Struct.hpp"
#include "CCF/IDL2/SemanticAction/Impl/Typedef.hpp"
#include "CCF/IDL2/SemanticAction/Impl/TypeId.hpp"
@@ -43,8 +45,10 @@ namespace CCF
attribute_ (trace_, scope_),
include_ (trace_, *this, r, scope_),
interface_ (trace_, scope_),
+ member_ (trace_, scope_),
module_ (trace_, scope_),
operation_ (trace_, scope_),
+ struct__ (trace_, scope_),
typedef__ (trace_, scope_),
type_id_ (trace_, scope_),
type_prefix_ (trace_, scope_)
@@ -69,6 +73,12 @@ namespace CCF
return interface_;
}
+ virtual SemanticAction::Member&
+ member ()
+ {
+ return member_;
+ }
+
virtual SemanticAction::Module&
module ()
{
@@ -81,6 +91,12 @@ namespace CCF
return operation_;
}
+ virtual SemanticAction::Struct&
+ struct_ ()
+ {
+ return struct__;
+ }
+
virtual SemanticAction::Typedef&
typedef_ ()
{
@@ -108,8 +124,10 @@ namespace CCF
Attribute attribute_;
Include include_;
Interface interface_;
+ Member member_;
Module module_;
Operation operation_;
+ Struct struct__;
Typedef typedef__;
TypeId type_id_;
TypePrefix type_prefix_;
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Interface.hpp b/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Interface.hpp
index e0cdeea6597..d199a39ddb9 100644
--- a/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Interface.hpp
+++ b/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Interface.hpp
@@ -259,6 +259,8 @@ namespace CCF
}
scope_->insert (decl);
+
+ name_ = SimpleName ("::"); //indicate that we are done
}
else
{
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Member.cpp b/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Member.cpp
new file mode 100644
index 00000000000..088bf03bd3f
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Member.cpp
@@ -0,0 +1,18 @@
+// file : CCF/IDL2/SemanticAction/Impl/Member.cpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "CCF/IDL2/SemanticAction/Impl/Member.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace SemanticAction
+ {
+ namespace Impl
+ {
+ }
+ }
+ }
+}
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Member.hpp b/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Member.hpp
new file mode 100644
index 00000000000..f3f5b9e89b1
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Member.hpp
@@ -0,0 +1,120 @@
+// file : CCF/IDL2/SemanticAction/Impl/Member.hpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef CCF_IDL2_SEMANTIC_ACTION_IMPL_MEMBER_HPP
+#define CCF_IDL2_SEMANTIC_ACTION_IMPL_MEMBER_HPP
+
+#include "CCF/IDL2/SyntaxTree/Member.hpp"
+#include "CCF/IDL2/SemanticAction/Member.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace SemanticAction
+ {
+ namespace Impl
+ {
+ //
+ //
+ //
+ class Member : public virtual SemanticAction::Member
+ {
+ public:
+ virtual
+ ~Member () throw () {}
+
+ Member (bool trace, SyntaxTree::ScopePtr& current)
+ : trace_ (trace),
+ scope_ (current),
+ type_ ("::") //@@ this is dirty
+ {
+ }
+
+ virtual void
+ begin (IdentifierPtr const& id)
+ {
+ if (trace_) cerr << "member " << id << endl;
+
+ using namespace SyntaxTree;
+
+ Name name (id->lexeme ());
+
+ struct Predicate : public DeclarationTable::ResolvePredicate
+ {
+ virtual bool
+ test (DeclarationPtr const& d) const throw ()
+ {
+ //@@ loosing information (completeness)
+ //
+
+ return d->is_a<TypeDecl> () &&
+ d->dynamic_type<TypeDecl> ()->complete ();
+ }
+ } p;
+
+ try
+ {
+ type_ = scope_->table ().resolve (
+ name,
+ scope_->name (),
+ scope_->peek_order (),
+ p);
+ }
+ catch (DeclarationTable::NameNotFound const&)
+ {
+ cerr << "error: invalid member declaration" << endl;
+ cerr << "no type with name \'"
+ << name << "\' visible from scope \'"
+ << scope_->name () << "\'" << endl;
+ }
+ catch (DeclarationTable::PredicateNotMet const&)
+ {
+ cerr << "error: invalid member declaration" << endl;
+ cerr << "no complete type with name \'"
+ << name << "\' visible from scope \'"
+ << scope_->name () << "\'" << endl;
+ }
+ }
+
+
+ virtual void
+ declarator (SimpleIdentifierPtr const& id)
+ {
+ if (trace_) cerr << " " << id << endl;
+
+ using namespace SyntaxTree;
+
+ if (type_ != ScopedName ("::"))
+ {
+ MemberDeclPtr member_ (
+ new MemberDecl (SimpleName (id->lexeme ()),
+ type_,
+ scope_));
+
+ scope_->insert (member_);
+ }
+ }
+
+ virtual void
+ end ()
+ {
+ if (trace_) cerr << "end" << endl;
+
+ // Indicate that we are done.
+ //
+ type_ = SyntaxTree::ScopedName ("::");
+ }
+
+ private:
+ bool trace_;
+ SyntaxTree::ScopePtr& scope_;
+ SyntaxTree::ScopedName type_;
+ };
+ }
+ }
+ }
+}
+
+#endif // CCF_IDL2_SEMANTIC_ACTION_IMPL_MEMBER_HPP
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Struct.cpp b/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Struct.cpp
new file mode 100644
index 00000000000..0506ab5e363
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Struct.cpp
@@ -0,0 +1,18 @@
+// file : CCF/IDL2/SemanticAction/Impl/Struct.cpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "CCF/IDL2/SemanticAction/Impl/Struct.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace SemanticAction
+ {
+ namespace Impl
+ {
+ }
+ }
+ }
+}
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Struct.hpp b/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Struct.hpp
new file mode 100644
index 00000000000..f744ca12886
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Impl/Struct.hpp
@@ -0,0 +1,99 @@
+// file : CCF/IDL2/SemanticAction/Impl/Struct.hpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef CCF_IDL2_SEMANTIC_ACTION_IMPL_STRUCT_HPP
+#define CCF_IDL2_SEMANTIC_ACTION_IMPL_STRUCT_HPP
+
+#include "CCF/IDL2/SyntaxTree/Struct.hpp"
+#include "CCF/IDL2/SemanticAction/Struct.hpp"
+#include "CCF/IDL2/SemanticAction/Impl/Elements.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace SemanticAction
+ {
+ namespace Impl
+ {
+ //
+ //
+ //
+ class Struct : public virtual SemanticAction::Struct,
+ public virtual ScopeBase<SyntaxTree::StructDeclPtr>
+ {
+ public:
+ virtual
+ ~Struct () throw () {}
+
+
+ Struct (bool trace,
+ SyntaxTree::ScopePtr& scope)
+ : ScopeBase<SyntaxTree::StructDeclPtr> (scope),
+ trace_ (trace),
+ name_ ("::") //@@ dirty
+ {
+ }
+
+ virtual void
+ begin (SimpleIdentifierPtr const& id)
+ {
+ if (trace_) cerr << "struct " << id << endl;
+ name_ = SyntaxTree::SimpleName (id->lexeme ());
+ }
+
+ virtual void
+ open_scope ()
+ {
+ if (trace_) cerr << "scope open" << endl;
+
+ using namespace SyntaxTree;
+
+ StructDefPtr s (new StructDef (name_, scope_));
+
+ scope_->insert (s);
+ push (s);
+ scope_ = s;
+
+ name_ = SimpleName ("::"); //indicate that we are done
+ }
+
+ virtual void
+ close_scope ()
+ {
+ scope_ = scope_->scope ();
+ if (trace_) cerr << "scope close" << endl;
+ }
+
+ virtual void
+ end ()
+ {
+ if (trace_) cerr << "end" << endl;
+
+ using namespace SyntaxTree;
+
+ if (name_ != SimpleName ("::"))
+ {
+ scope_->insert (
+ StructForwardDeclPtr(
+ new SyntaxTree::StructForwardDecl (name_, scope_)));
+
+ name_ = SimpleName ("::"); //indicate that we are done
+ }
+ else
+ {
+ pop ();
+ }
+ }
+
+ private:
+ bool trace_;
+ SyntaxTree::SimpleName name_;
+ };
+ }
+ }
+ }
+}
+
+#endif // CCF_IDL2_SEMANTIC_ACTION_IMPL_STRUCT_HPP
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Member.hpp b/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Member.hpp
new file mode 100644
index 00000000000..594e3625622
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Member.hpp
@@ -0,0 +1,35 @@
+// file : CCF/IDL2/SemanticAction/Member.hpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef CCF_IDL2_SEMANTIC_ACTION_MEMBER_HPP
+#define CCF_IDL2_SEMANTIC_ACTION_MEMBER_HPP
+
+#include "CCF/IDL2/SemanticAction/Elements.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace SemanticAction
+ {
+ class Member
+ {
+ public:
+ virtual
+ ~Member () throw () {}
+
+ virtual void
+ begin (IdentifierPtr const& id) = 0;
+
+ virtual void
+ declarator (SimpleIdentifierPtr const& id) = 0;
+
+ virtual void
+ end () = 0;
+ };
+ }
+ }
+}
+
+#endif // CCF_IDL2_SEMANTIC_ACTION_MEMBER_HPP
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Struct.hpp b/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Struct.hpp
new file mode 100644
index 00000000000..0ac9aaab095
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/SemanticAction/Struct.hpp
@@ -0,0 +1,38 @@
+// file : CCF/IDL2/SemanticAction/Struct.hpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef CCF_IDL2_SEMANTIC_ACTION_STRUCT_HPP
+#define CCF_IDL2_SEMANTIC_ACTION_STRUCT_HPP
+
+#include "CCF/IDL2/SemanticAction/Elements.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace SemanticAction
+ {
+ class Struct : public virtual Scope
+ {
+ public:
+ virtual
+ ~Struct () throw () {}
+
+ virtual void
+ begin (SimpleIdentifierPtr const& id) = 0;
+
+ virtual void
+ open_scope () = 0;
+
+ virtual void
+ close_scope () = 0;
+
+ virtual void
+ end () = 0;
+ };
+ }
+ }
+}
+
+#endif // CCF_IDL2_SEMANTIC_ACTION_STRUCT_HPP
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree.hpp b/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree.hpp
index 1ef90bc9715..735e607abff 100644
--- a/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree.hpp
+++ b/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree.hpp
@@ -8,8 +8,10 @@
#include "CCF/IDL2/SyntaxTree/Elements.hpp"
#include "CCF/IDL2/SyntaxTree/BuiltIn.hpp"
#include "CCF/IDL2/SyntaxTree/Interface.hpp"
+#include "CCF/IDL2/SyntaxTree/Member.hpp"
#include "CCF/IDL2/SyntaxTree/Module.hpp"
#include "CCF/IDL2/SyntaxTree/Operation.hpp"
+#include "CCF/IDL2/SyntaxTree/Struct.hpp"
#include "CCF/IDL2/SyntaxTree/Sequence.hpp"
#include "CCF/IDL2/SyntaxTree/Translation.hpp"
#include "CCF/IDL2/SyntaxTree/Typedef.hpp"
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Makefile.alt b/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Makefile.alt
index c55ae599f83..6e7c918412f 100644
--- a/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Makefile.alt
+++ b/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Makefile.alt
@@ -13,9 +13,11 @@ $(call include, $(UTILITY_ROOT)/BuildRules/Object.pre.rules)
cxx_translation_units := BuiltIn.cpp \
Elements.cpp \
Interface.cpp \
+ Member.cpp \
Module.cpp \
Operation.cpp \
- Sequence.cpp \
+ Sequence.cpp \
+ Struct.cpp \
Translation.cpp \
Typedef.cpp \
TypeId.cpp \
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Member.cpp b/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Member.cpp
new file mode 100644
index 00000000000..caf43db139f
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Member.cpp
@@ -0,0 +1,33 @@
+// file : CCF/IDL2/SyntaxTree/Member.cpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "CCF/IDL2/SyntaxTree/Member.hpp"
+
+using namespace Introspection;
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace SyntaxTree
+ {
+ namespace
+ {
+ TypeInfo
+ member_decl_init_ ()
+ {
+ TypeInfo ti (typeid (MemberDecl));
+ ti.add_base (
+ Access::PUBLIC, true, Declaration::static_type_info ());
+ return ti;
+ }
+
+ TypeInfo member_decl_ (member_decl_init_ ());
+ }
+
+ TypeInfo const& MemberDecl::
+ static_type_info () { return member_decl_; }
+ }
+ }
+}
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Member.hpp b/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Member.hpp
new file mode 100644
index 00000000000..87933f1d4cc
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Member.hpp
@@ -0,0 +1,61 @@
+// file : CCF/IDL2/SyntaxTree/Member.hpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef CCF_IDL2_SYNTAX_TREE_MEMBER_HPP
+#define CCF_IDL2_SYNTAX_TREE_MEMBER_HPP
+
+#include "CCF/IDL2/SyntaxTree/Elements.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace SyntaxTree
+ {
+ class MemberDecl : public virtual Declaration
+ {
+ public:
+ virtual
+ ~MemberDecl () throw () {}
+
+ MemberDecl (SimpleName const& name,
+ ScopedName const& type,
+ ScopePtr const& scope)
+ : Declaration (name, scope),
+ type_ (table (), type)
+
+ {
+ type_info (static_type_info ());
+ }
+
+ public:
+ TypeDeclPtr
+ type () const
+ {
+ return type_.resolve ();
+ }
+
+ public:
+ virtual std::string
+ declaration_class ()
+ {
+ return "member";
+ }
+
+ public:
+ static Introspection::TypeInfo const&
+ static_type_info ();
+
+ private:
+ TypeDeclRef type_;
+ };
+
+ typedef
+ StrictPtr<MemberDecl>
+ MemberDeclPtr;
+ }
+ }
+}
+
+#endif // CCF_IDL2_SYNTAX_TREE_MEMBER_HPP
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Operation.hpp b/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Operation.hpp
index 4c18575d728..d49b9e7bba6 100644
--- a/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Operation.hpp
+++ b/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Operation.hpp
@@ -35,7 +35,7 @@ namespace CCF
public:
TypeDeclPtr
- type ()
+ type () const
{
return type_.resolve ();
}
@@ -108,7 +108,7 @@ namespace CCF
}
TypeDeclPtr
- type ()
+ type () const
{
return type_.resolve ();
}
@@ -168,7 +168,7 @@ namespace CCF
public:
TypeDeclPtr
- type ()
+ type () const
{
return type_.resolve ();
}
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Struct.cpp b/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Struct.cpp
new file mode 100644
index 00000000000..4c0999cee8f
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Struct.cpp
@@ -0,0 +1,118 @@
+// file : CCF/IDL2/SyntaxTree/Struct.cpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "CCF/IDL2/SyntaxTree/Struct.hpp"
+
+using namespace Introspection;
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace SyntaxTree
+ {
+ // StructDecl
+ //
+ //
+
+ bool StructDecl::
+ complete () const
+ {
+ try
+ {
+ //@@ I probably should add something like exists into
+ // DeclTable.
+
+ //@@ gcc bug
+ table ().template lookup<StructDef> (name ());
+
+ return true;
+ }
+ catch (DeclarationTable::DeclarationNotFound const& e)
+ {
+ //@@ ICE
+ abort ();
+ }
+ catch (DeclarationTable::TypeMismatch const& e)
+ {
+ return false;
+ }
+ }
+
+ namespace
+ {
+ TypeInfo
+ struct_decl_init_ ()
+ {
+ TypeInfo ti (typeid (StructDecl));
+ ti.add_base (Access::PUBLIC,
+ true,
+ ForwardDeclarableTypeDecl::static_type_info ());
+ return ti;
+ }
+
+ TypeInfo struct_decl_ (struct_decl_init_ ());
+ }
+
+ TypeInfo const& StructDecl::
+ static_type_info () { return struct_decl_; }
+
+
+ // StructForwardDecl
+ //
+ //
+ namespace
+ {
+ TypeInfo
+ struct_forward_decl_init_ ()
+ {
+ TypeInfo ti (typeid (StructForwardDecl));
+
+ ti.add_base (
+ Access::PUBLIC, true, StructDecl::static_type_info ());
+
+ ti.add_base (
+ Access::PUBLIC, true, TypeForwardDecl::static_type_info ());
+
+ return ti;
+ }
+
+ TypeInfo struct_forward_decl_ (struct_forward_decl_init_ ());
+ }
+
+ TypeInfo const& StructForwardDecl::
+ static_type_info () { return struct_forward_decl_; }
+
+
+ // StructDef
+ //
+ //
+ namespace
+ {
+ TypeInfo
+ struct_def_init_ ()
+ {
+ TypeInfo ti (typeid (StructDef));
+
+ ti.add_base (
+ Access::PUBLIC, true, StructDecl::static_type_info ());
+
+ ti.add_base (
+ Access::PUBLIC, true, TypeDef::static_type_info ());
+
+ ti.add_base (
+ Access::PUBLIC, true, Scope::static_type_info ());
+
+ return ti;
+ }
+
+ TypeInfo struct_def_ (struct_def_init_ ());
+ }
+
+ TypeInfo const& StructDef::
+ static_type_info () { return struct_def_; }
+
+ }
+ }
+}
diff --git a/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Struct.hpp b/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Struct.hpp
new file mode 100644
index 00000000000..bb41c481b75
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/SyntaxTree/Struct.hpp
@@ -0,0 +1,148 @@
+// file : CCF/IDL2/SyntaxTree/Struct.hpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef CCF_IDL2_SYNTAX_TREE_STRUCT_HPP
+#define CCF_IDL2_SYNTAX_TREE_STRUCT_HPP
+
+#include "CCF/IDL2/SyntaxTree/Elements.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace SyntaxTree
+ {
+ //
+ //
+ //
+ class StructDecl : public virtual ForwardDeclarableTypeDecl
+ {
+ protected:
+ virtual
+ ~StructDecl () throw () {}
+
+ StructDecl ()
+ {
+ type_info (static_type_info ());
+ }
+
+ public:
+ virtual bool
+ complete () const;
+
+ public:
+ static Introspection::TypeInfo const&
+ static_type_info ();
+ };
+
+ typedef
+ StrictPtr<StructDecl>
+ StructDeclPtr;
+
+
+ //
+ //
+ //
+ class StructForwardDecl : public virtual StructDecl,
+ public virtual TypeForwardDecl
+ {
+ public:
+ virtual
+ ~StructForwardDecl () throw () {}
+
+ StructForwardDecl (SimpleName const& name, ScopePtr const& scope)
+ : Declaration (name, scope)
+ {
+ type_info (static_type_info ());
+ }
+
+ protected:
+ StructForwardDecl (SimpleName const& name,
+ Order const& order,
+ ScopePtr const& scope)
+ : Declaration (name, order, scope)
+ {
+ type_info (static_type_info ());
+ }
+
+ public:
+ virtual TypeDeclPtr
+ clone_typedef_temporary (SimpleName const& name,
+ Order const& order,
+ ScopePtr const& scope)
+ {
+ return TypeDeclPtr (new StructForwardDecl (name, order, scope));
+ }
+
+ public:
+ virtual std::string
+ declaration_class ()
+ {
+ return "struct";
+ }
+
+ public:
+ static Introspection::TypeInfo const&
+ static_type_info ();
+ };
+
+ typedef
+ StrictPtr<StructForwardDecl>
+ StructForwardDeclPtr;
+
+ //
+ //
+ //
+ class StructDef : public virtual StructDecl,
+ public virtual TypeDef,
+ public virtual Scope
+ {
+ public:
+ virtual
+ ~StructDef () throw () {}
+
+ StructDef (SimpleName const& name, ScopePtr const& scope)
+ : Declaration (name, scope)
+ {
+ type_info (static_type_info ());
+ }
+
+ protected:
+ StructDef (SimpleName const& name,
+ Order const& order,
+ ScopePtr const& scope)
+ : Declaration (name, order, scope)
+ {
+ type_info (static_type_info ());
+ }
+
+ public:
+ virtual TypeDeclPtr
+ clone_typedef_temporary (SimpleName const& name,
+ Order const& order,
+ ScopePtr const& scope)
+ {
+ return TypeDeclPtr (new StructDef (name, order, scope));
+ }
+
+ public:
+ virtual std::string
+ declaration_class ()
+ {
+ return "struct";
+ }
+
+ public:
+ static Introspection::TypeInfo const&
+ static_type_info ();
+ };
+
+ typedef
+ StrictPtr<StructDef>
+ StructDefPtr;
+ }
+ }
+}
+
+#endif // CCF_IDL2_SYNTAX_TREE_STRUCT_HPP
diff --git a/TAO/CIAO/CCF/CCF/IDL2/Traversal.hpp b/TAO/CIAO/CCF/CCF/IDL2/Traversal.hpp
index 3efa40686a7..8f92146e8da 100644
--- a/TAO/CIAO/CCF/CCF/IDL2/Traversal.hpp
+++ b/TAO/CIAO/CCF/CCF/IDL2/Traversal.hpp
@@ -8,9 +8,11 @@
#include "CCF/IDL2/Traversal/Elements.hpp"
#include "CCF/IDL2/Traversal/BuiltIn.hpp"
#include "CCF/IDL2/Traversal/Interface.hpp"
+#include "CCF/IDL2/Traversal/Member.hpp"
#include "CCF/IDL2/Traversal/Module.hpp"
#include "CCF/IDL2/Traversal/Operation.hpp"
#include "CCF/IDL2/Traversal/Sequence.hpp"
+#include "CCF/IDL2/Traversal/Struct.hpp"
#include "CCF/IDL2/Traversal/Translation.hpp"
#include "CCF/IDL2/Traversal/Typedef.hpp"
#include "CCF/IDL2/Traversal/TypeId.hpp"
diff --git a/TAO/CIAO/CCF/CCF/IDL2/Traversal/Makefile.alt b/TAO/CIAO/CCF/CCF/IDL2/Traversal/Makefile.alt
index dcd59368c3f..4cadfa560a2 100644
--- a/TAO/CIAO/CCF/CCF/IDL2/Traversal/Makefile.alt
+++ b/TAO/CIAO/CCF/CCF/IDL2/Traversal/Makefile.alt
@@ -13,9 +13,11 @@ $(call include, $(UTILITY_ROOT)/BuildRules/Object.pre.rules)
cxx_translation_units := BuiltIn.cpp \
Elements.cpp \
Interface.cpp \
+ Member.cpp \
Module.cpp \
Operation.cpp \
Sequence.cpp \
+ Struct.cpp \
Translation.cpp
diff --git a/TAO/CIAO/CCF/CCF/IDL2/Traversal/Member.cpp b/TAO/CIAO/CCF/CCF/IDL2/Traversal/Member.cpp
new file mode 100644
index 00000000000..298e028f86e
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/Traversal/Member.cpp
@@ -0,0 +1,43 @@
+// file : CCF/IDL2/Traversal/Member.cpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "CCF/IDL2/Traversal/Member.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace Traversal
+ {
+ void MemberDecl::
+ traverse (NodePtr const& n)
+ {
+ if (!delegate (n))
+ {
+ pre (n);
+ type (n);
+ post (n);
+ }
+ }
+
+
+ void MemberDecl::
+ pre (NodePtr const&)
+ {
+ }
+
+ void MemberDecl::
+ type (NodePtr const& n)
+ {
+ if (type_ != 0) type_->dispatch (n->type ());
+ else dispatch (n->type ());
+ }
+
+ void MemberDecl::
+ post (NodePtr const&)
+ {
+ }
+ }
+ }
+}
diff --git a/TAO/CIAO/CCF/CCF/IDL2/Traversal/Member.hpp b/TAO/CIAO/CCF/CCF/IDL2/Traversal/Member.hpp
new file mode 100644
index 00000000000..81757983686
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/Traversal/Member.hpp
@@ -0,0 +1,55 @@
+// file : CCF/IDL2/Traversal/Member.hpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef CCF_IDL2_TRAVERSAL_MEMBER_HPP
+#define CCF_IDL2_TRAVERSAL_MEMBER_HPP
+
+#include "CCF/IDL2/Traversal/Elements.hpp"
+#include "CCF/IDL2/SyntaxTree/Member.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace Traversal
+ {
+ struct MemberDecl : Traverser
+ {
+ typedef
+ SyntaxTree::MemberDeclPtr
+ NodePtr;
+
+ MemberDecl (Dispatcher* type = 0)
+ : type_ (type)
+ {
+ map (typeid (SyntaxTree::MemberDecl), this);
+ }
+
+ virtual bool
+ traverse (SyntaxTree::NodePtr const& n)
+ {
+ traverse (n->dynamic_type<SyntaxTree::MemberDecl> ());
+ return true;
+ }
+
+ virtual void
+ traverse (NodePtr const&);
+
+ virtual void
+ pre (NodePtr const&);
+
+ virtual void
+ type (NodePtr const&);
+
+ virtual void
+ post (NodePtr const&);
+
+ private:
+ Dispatcher* type_;
+ };
+ }
+ }
+}
+
+#endif // CCF_IDL2_TRAVERSAL_MEMBER_HPP
diff --git a/TAO/CIAO/CCF/CCF/IDL2/Traversal/Struct.cpp b/TAO/CIAO/CCF/CCF/IDL2/Traversal/Struct.cpp
new file mode 100644
index 00000000000..f709db2c9ec
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/Traversal/Struct.cpp
@@ -0,0 +1,45 @@
+// file : CCF/IDL2/Traversal/Struct.cpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "CCF/IDL2/Traversal/Struct.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace Traversal
+ {
+ // StructDef
+ //
+ //
+
+ void StructDef::
+ traverse (NodePtr const& n)
+ {
+ if (!delegate (n))
+ {
+ pre (n);
+ scope (n);
+ post (n);
+ }
+ }
+
+ void StructDef::
+ pre (NodePtr const&)
+ {
+ }
+
+ void StructDef::
+ scope (NodePtr const& n)
+ {
+ delegate_scope (n);
+ }
+
+ void StructDef::
+ post (NodePtr const&)
+ {
+ }
+ }
+ }
+}
diff --git a/TAO/CIAO/CCF/CCF/IDL2/Traversal/Struct.hpp b/TAO/CIAO/CCF/CCF/IDL2/Traversal/Struct.hpp
new file mode 100644
index 00000000000..f34344a9707
--- /dev/null
+++ b/TAO/CIAO/CCF/CCF/IDL2/Traversal/Struct.hpp
@@ -0,0 +1,113 @@
+// file : CCF/IDL2/Traversal/Struct.hpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef CCF_IDL2_TRAVERSAL_STRUCT_HPP
+#define CCF_IDL2_TRAVERSAL_STRUCT_HPP
+
+#include "CCF/IDL2/Traversal/Elements.hpp"
+#include "CCF/IDL2/SyntaxTree/Struct.hpp"
+
+namespace CCF
+{
+ namespace IDL2
+ {
+ namespace Traversal
+ {
+
+ //
+ //
+ //
+ struct StructDecl : Traverser
+ {
+ typedef
+ SyntaxTree::StructDeclPtr
+ NodePtr;
+
+ StructDecl ()
+ {
+ map (typeid (SyntaxTree::StructDecl), this);
+ }
+
+ virtual bool
+ traverse (SyntaxTree::NodePtr const& n)
+ {
+ traverse (n->dynamic_type<SyntaxTree::StructDecl> ());
+ return true;
+ }
+
+ virtual void
+ traverse (NodePtr const& n)
+ {
+ delegate (n);
+ }
+ };
+
+
+ //
+ //
+ //
+ struct StructForwardDecl : Traverser
+ {
+ typedef
+ SyntaxTree::StructForwardDeclPtr
+ NodePtr;
+
+ StructForwardDecl ()
+ {
+ map (typeid (SyntaxTree::StructForwardDecl), this);
+ }
+
+ virtual bool
+ traverse (SyntaxTree::NodePtr const& n)
+ {
+ traverse (n->dynamic_type<SyntaxTree::StructForwardDecl> ());
+ return true;
+ }
+
+ virtual void
+ traverse (NodePtr const& n)
+ {
+ delegate (n);
+ }
+ };
+
+
+ //
+ //
+ //
+ struct StructDef : ScopeTraverser
+ {
+ typedef
+ SyntaxTree::StructDefPtr
+ NodePtr;
+
+ StructDef ()
+ {
+ map (typeid (SyntaxTree::StructDef), this);
+ }
+
+ virtual bool
+ traverse (SyntaxTree::NodePtr const& n)
+ {
+ traverse (n->dynamic_type<SyntaxTree::StructDef> ());
+ return true;
+ }
+
+ virtual void
+ traverse (NodePtr const&);
+
+ virtual void
+ pre (NodePtr const&);
+
+ virtual void
+ scope (NodePtr const&);
+
+ virtual void
+ post (NodePtr const&);
+ };
+ }
+ }
+}
+
+#endif // CCF_IDL2_TRAVERSAL_STRUCT_HPP
diff --git a/TAO/CIAO/CCF/CCF/IDL2/Traversal/Typedef.hpp b/TAO/CIAO/CCF/CCF/IDL2/Traversal/Typedef.hpp
index 76f00170787..2c7736a8127 100644
--- a/TAO/CIAO/CCF/CCF/IDL2/Traversal/Typedef.hpp
+++ b/TAO/CIAO/CCF/CCF/IDL2/Traversal/Typedef.hpp
@@ -21,7 +21,7 @@ namespace CCF
struct TypedefDecl : Traverser
{
typedef
- SyntaxTree::StrictPtr<T>
+ SyntaxTree::TypedefDeclPtr
NodePtr;
TypedefDecl ()
@@ -35,7 +35,7 @@ namespace CCF
//@@ gcc bug
if (n->template is_a<T> ())
{
- traverse (n->template dynamic_type<T> ());
+ traverse (n);
return true;
}
else
diff --git a/TAO/CIAO/CCF/CCF/IDL3/SyntaxTree/Operation.hpp b/TAO/CIAO/CCF/CCF/IDL3/SyntaxTree/Operation.hpp
index 17b8c46565b..913b73c33ac 100644
--- a/TAO/CIAO/CCF/CCF/IDL3/SyntaxTree/Operation.hpp
+++ b/TAO/CIAO/CCF/CCF/IDL3/SyntaxTree/Operation.hpp
@@ -38,7 +38,7 @@ namespace CCF
public:
InterfaceDeclPtr
- type ()
+ type () const
{
return type_.resolve ();
}
@@ -86,7 +86,7 @@ namespace CCF
public:
TypeDeclPtr
- type ()
+ type () const
{
return type_.resolve ();
}
@@ -132,7 +132,7 @@ namespace CCF
public:
TypeDeclPtr
- type ()
+ type () const
{
return type_.resolve ();
}
@@ -179,7 +179,7 @@ namespace CCF
public:
TypeDeclPtr
- type ()
+ type () const
{
return type_.resolve ();
}
@@ -226,7 +226,7 @@ namespace CCF
public:
TypeDeclPtr
- type ()
+ type () const
{
return type_.resolve ();
}
diff --git a/TAO/CIAO/CCF/Documentation/TODO b/TAO/CIAO/CCF/Documentation/TODO
index 2c6ca5795da..a82edb08574 100644
--- a/TAO/CIAO/CCF/Documentation/TODO
+++ b/TAO/CIAO/CCF/Documentation/TODO
@@ -48,7 +48,7 @@ Legend:
since scoped name in general case denotes a bunch of declarations.
Same for TypePrefix.
-@@ Perhaps add reference to declaration table to every SyntaxTree::Node
+%% Perhaps add reference to declaration table to every SyntaxTree::Node
(and not just scopes).
@@ Replace all i++ with ++i.
@@ -63,7 +63,7 @@ Legend:
@%++ XML indentation buffer
-@@+++ Anonymous types and typedef's model (2)
+@%+++ Anonymous types and typedef's model (2)
@@+++ Introduction (injection) of names into scope
@@ -79,9 +79,9 @@ Legend:
%% IDL feature: built-in types
-@@ IDL feature: sequences; depends on 2,3
+@% IDL feature: sequences; depends on 2,3
-@@ IDL feature: struct
+%% IDL feature: struct
@% IDL feature: oprations (completion)
diff --git a/TAO/CIAO/CCF/Example/CIDL/LocalExecutorMapping/ExecutorMappingGenerator.cpp b/TAO/CIAO/CCF/Example/CIDL/LocalExecutorMapping/ExecutorMappingGenerator.cpp
index bc8227271de..9ab4992a1e9 100644
--- a/TAO/CIAO/CCF/Example/CIDL/LocalExecutorMapping/ExecutorMappingGenerator.cpp
+++ b/TAO/CIAO/CCF/Example/CIDL/LocalExecutorMapping/ExecutorMappingGenerator.cpp
@@ -405,7 +405,7 @@ namespace
traverse (ConsumesDeclPtr const& p)
{
os << "void push_" << p->name ().simple () << " ("
- << "in " << p->type()->name () << " ev);";
+ << "in " << p->type ()->name () << " ev);";
}
virtual void
diff --git a/TAO/CIAO/CCF/Example/CIDL/LocalExecutorMapping/test-2.idl b/TAO/CIAO/CCF/Example/CIDL/LocalExecutorMapping/test-2.idl
index 64d65d1e7d1..f2ef0b00126 100644
--- a/TAO/CIAO/CCF/Example/CIDL/LocalExecutorMapping/test-2.idl
+++ b/TAO/CIAO/CCF/Example/CIDL/LocalExecutorMapping/test-2.idl
@@ -14,13 +14,23 @@ module M2
};
typedef sequence<octet> OctetSeq;
+
+ struct S
+ {
+ long l;
+ OctetSeq octet_seq;
+ };
+
+ typedef sequence<S> S_Seq;
home H2 : M1::H1 manages C2
{
attribute long l;
attribute M::I i;
attribute OctetSeq seq;
- void foo (in long l, inout boolean b, out long ol, in M::I i, out unsigned long long ull);
+ attribute S_Seq s_seq;
+
+ void foo (in long l, inout boolean b, out long ol, in M::I i, out unsigned long long ull, inout S_Seq s_seq);
factory new (in long l, in OctetSeq s);
};
};
diff --git a/TAO/CIAO/CCF/Example/CIDL/LocalExecutorMapping/test-2_exec.idl.orig b/TAO/CIAO/CCF/Example/CIDL/LocalExecutorMapping/test-2_exec.idl.orig
index 7cffd205c67..19148a1b5f0 100644
--- a/TAO/CIAO/CCF/Example/CIDL/LocalExecutorMapping/test-2_exec.idl.orig
+++ b/TAO/CIAO/CCF/Example/CIDL/LocalExecutorMapping/test-2_exec.idl.orig
@@ -58,7 +58,8 @@ module M2
attribute long l;
attribute ::M::I i;
attribute ::M2::OctetSeq seq;
- void foo (in long l, inout boolean b, out long ol, in ::M::I i, out unsigned long long ull);
+ attribute ::M2::S_Seq s_seq;
+ void foo (in long l, inout boolean b, out long ol, in ::M::I i, out unsigned long long ull, inout ::M2::S_Seq s_seq);
::Components::EnterpriseComponent new (in long l, in ::M2::OctetSeq s);
};
diff --git a/TAO/CIAO/ChangeLog b/TAO/CIAO/ChangeLog
index a21320db5f2..1a8f7201c91 100644
--- a/TAO/CIAO/ChangeLog
+++ b/TAO/CIAO/ChangeLog
@@ -1,9 +1,51 @@
+Thu Oct 16 16:45:35 2003 Boris Kolpackov <boris@dre.vanderbilt.edu>
+
+ * CCF/CCF/IDL2/LexicalAnalyzer.cpp:
+ * CCF/CCF/IDL2/Makefile.archive:
+ * CCF/CCF/IDL2/Parser.cpp:
+ * CCF/CCF/IDL2/Parser.hpp:
+ * CCF/CCF/IDL2/SemanticAction.hpp:
+ * CCF/CCF/IDL2/SyntaxTree.hpp:
+ * CCF/CCF/IDL2/Traversal.hpp:
+ * CCF/CCF/IDL2/SemanticAction/Factory.hpp:
+ * CCF/CCF/IDL2/SemanticAction/Member.hpp:
+ * CCF/CCF/IDL2/SemanticAction/Struct.hpp:
+ * CCF/CCF/IDL2/SemanticAction/Impl/Factory.hpp:
+ * CCF/CCF/IDL2/SemanticAction/Impl/Interface.hpp:
+ * CCF/CCF/IDL2/SemanticAction/Impl/Member.cpp:
+ * CCF/CCF/IDL2/SemanticAction/Impl/Member.hpp:
+ * CCF/CCF/IDL2/SemanticAction/Impl/Struct.cpp:
+ * CCF/CCF/IDL2/SemanticAction/Impl/Struct.hpp:
+ * CCF/CCF/IDL2/SyntaxTree/Makefile.alt:
+ * CCF/CCF/IDL2/SyntaxTree/Member.cpp:
+ * CCF/CCF/IDL2/SyntaxTree/Member.hpp:
+ * CCF/CCF/IDL2/SyntaxTree/Operation.hpp:
+ * CCF/CCF/IDL2/SyntaxTree/Struct.cpp:
+ * CCF/CCF/IDL2/SyntaxTree/Struct.hpp:
+ * CCF/CCF/IDL2/Traversal/Makefile.alt:
+ * CCF/CCF/IDL2/Traversal/Member.cpp:
+ * CCF/CCF/IDL2/Traversal/Member.hpp:
+ * CCF/CCF/IDL2/Traversal/Struct.cpp:
+ * CCF/CCF/IDL2/Traversal/Struct.hpp:
+ * CCF/CCF/IDL2/Traversal/Typedef.hpp:
+ * CCF/CCF/IDL3/SyntaxTree/Operation.hpp:
+ * CCF/Example/CIDL/LocalExecutorMapping/ExecutorMappingGenerator.cpp:
+ Added support for struct.
+
+
+ * CCF/Example/CIDL/LocalExecutorMapping/test-2.idl:
+ * CCF/Example/CIDL/LocalExecutorMapping/test-2_exec.idl.orig:
+ Added a few structs for testing.
+
+ * CCF/Documentation/TODO: Marked some items as done or
+ partially done.
+
Thu Oct 16 12:55:06 2003 Boris Kolpackov <boris@dre.vanderbilt.edu>
* CCF/CCF/IDL2/SyntaxTree/ElementsCtor.cpp:
* CCF/CCF/IDL2/SyntaxTree/InterfaceCtor.cpp:
* CCF/CCF/IDL2/SyntaxTree/ValueTypeCtor.cpp: Added fake ctor
- definition for some compilers (like MSVC) that insist it
+ definition for some compilers (like MSVC) that insist they
should be defined (even though never used).
Thu Oct 16 12:07:01 2003 Boris Kolpackov <boris@dre.vanderbilt.edu>