summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorboris <boris@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-10-25 00:19:28 +0000
committerboris <boris@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-10-25 00:19:28 +0000
commitf91a1c6d0bcad68d10886424c7ec47bd098f5a2f (patch)
tree39901589e707eb0a23d1c206e7a304bb18867fad
parent9938fdef6c936443ad8bd69ae11a1492f5303cc8 (diff)
downloadATCD-f91a1c6d0bcad68d10886424c7ec47bd098f5a2f.tar.gz
ChangeLogTag: Fri Oct 24 19:16:21 2003 Boris Kolpackov <boris@dre.vanderbilt.edu>
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/Traversal/Elements.hpp2
-rw-r--r--TAO/CIAO/CCF/CCF/IDL2/Traversal/Typedef.hpp42
-rw-r--r--TAO/CIAO/CIDLC/Makefile.alt1
-rw-r--r--TAO/CIAO/CIDLC/ServantSourceGenerator.cpp2
-rw-r--r--TAO/CIAO/CIDLC/SizeTypeCalculator.cpp116
-rw-r--r--TAO/CIAO/CIDLC/SizeTypeCalculator.hpp21
-rw-r--r--TAO/CIAO/CIDLC/TypeNameEmitter.cpp7
-rw-r--r--TAO/CIAO/CIDLC/TypeNameEmitter.hpp1
-rw-r--r--TAO/CIAO/ChangeLog27
9 files changed, 199 insertions, 20 deletions
diff --git a/TAO/CIAO/CCF/CCF/IDL2/Traversal/Elements.hpp b/TAO/CIAO/CCF/CCF/IDL2/Traversal/Elements.hpp
index 6314650d860..442f11b2276 100644
--- a/TAO/CIAO/CCF/CCF/IDL2/Traversal/Elements.hpp
+++ b/TAO/CIAO/CCF/CCF/IDL2/Traversal/Elements.hpp
@@ -51,7 +51,7 @@ namespace CCF
virtual void
dispatch (SyntaxTree::NodePtr const& n);
- protected:
+ public:
class Ambiguous {};
diff --git a/TAO/CIAO/CCF/CCF/IDL2/Traversal/Typedef.hpp b/TAO/CIAO/CCF/CCF/IDL2/Traversal/Typedef.hpp
index f8484dc12fd..dae9925035c 100644
--- a/TAO/CIAO/CCF/CCF/IDL2/Traversal/Typedef.hpp
+++ b/TAO/CIAO/CCF/CCF/IDL2/Traversal/Typedef.hpp
@@ -49,30 +49,50 @@ namespace CCF
//
//
template <typename T>
- struct TypedefDecl : virtual TypedefDeclBase, Traverser
+ struct TypedefDecl : virtual TypedefDeclBase
{
typedef
SyntaxTree::StrictPtr<T>
NodePtr;
TypedefDecl ()
+ : thunk_ (this, typedef_decl)
{
- disp_.map (typeid (T), this);
- }
-
- virtual bool
- traverse (SyntaxTree::NodePtr const& n)
- {
- //@@ gcc bug
- traverse (typedef_decl, n->template dynamic_type<T> ());
- return true;
+ disp_.map (typeid (T), &thunk_);
}
virtual void
traverse (SyntaxTree::TypedefDeclPtr const& td, NodePtr const& n)
{
- delegate (n);
+ delegate (td);
}
+
+ private:
+
+ template <typename X>
+ struct TypedefDeclThunk : Traverser
+ {
+ TypedefDeclThunk (TypedefDecl<X>* t,
+ SyntaxTree::TypedefDeclPtr const& d)
+ : t_ (t),
+ d_ (d)
+ {
+ }
+
+ virtual bool
+ traverse (SyntaxTree::NodePtr const& n)
+ {
+ //@@ gcc bug
+ t_->traverse (d_, n->template dynamic_type<X> ());
+ return true;
+ }
+
+ private:
+ TypedefDecl<X>* t_;
+ SyntaxTree::TypedefDeclPtr const& d_;
+ };
+
+ TypedefDeclThunk<T> thunk_;
};
}
}
diff --git a/TAO/CIAO/CIDLC/Makefile.alt b/TAO/CIAO/CIDLC/Makefile.alt
index b3ea73502a8..e2a2a89c957 100644
--- a/TAO/CIAO/CIDLC/Makefile.alt
+++ b/TAO/CIAO/CIDLC/Makefile.alt
@@ -13,6 +13,7 @@ $(call include, $(UTILITY_ROOT)/BuildRules/Executable.pre.rules)
cxx_translation_units := DescriptorGenerator.cpp \
ExecutorMappingGenerator.cpp \
RepositoryIdGenerator.cpp \
+ SizeTypeCalculator.cpp \
ServantGenerator.cpp \
ServantHeaderGenerator.cpp \
ServantSourceGenerator.cpp \
diff --git a/TAO/CIAO/CIDLC/ServantSourceGenerator.cpp b/TAO/CIAO/CIDLC/ServantSourceGenerator.cpp
index c2ee1df02bb..6b5579091f1 100644
--- a/TAO/CIAO/CIDLC/ServantSourceGenerator.cpp
+++ b/TAO/CIAO/CIDLC/ServantSourceGenerator.cpp
@@ -225,7 +225,7 @@ namespace
post (OperationDeclPtr const& d)
{
bool void_return_type = d->type ()->is_a<IDL2::SyntaxTree::VoidDecl> ();
-
+
// @@@ (JP) Must add support for user exceptions.
os << endl
<< (d->begin () == d->end () ? STRS[ENV_SNGL_SRC] : STRS[ENV_SRC])
diff --git a/TAO/CIAO/CIDLC/SizeTypeCalculator.cpp b/TAO/CIAO/CIDLC/SizeTypeCalculator.cpp
new file mode 100644
index 00000000000..1b45d5d4a7c
--- /dev/null
+++ b/TAO/CIAO/CIDLC/SizeTypeCalculator.cpp
@@ -0,0 +1,116 @@
+// file : CIDLC/SizeTypeCalculator.cpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "SizeTypeCalculator.hpp"
+
+#include "CCF/CIDL/SyntaxTree.hpp"
+#include "CCF/CIDL/Traversal.hpp"
+
+#include <stack>
+
+using namespace CCF::CIDL;
+using namespace SyntaxTree;
+
+namespace
+{
+ char const* const
+ variable_size_label = "variable-size";
+}
+
+namespace
+{
+ class Calculator : public Traversal::StringDecl,
+ public Traversal::StructDecl,
+ public Traversal::MemberDecl
+ {
+ public:
+ Calculator ()
+ : Traversal::MemberDecl (this)
+ {
+ push (false);
+ }
+
+
+ public:
+ virtual void
+ traverse (StringDeclPtr const&)
+ {
+ top () = true;
+ }
+
+ virtual void
+ traverse (StructDeclPtr const& s)
+ {
+ if (s->context ().count (variable_size_label))
+ {
+ top () = s->context ().get<bool> (variable_size_label);
+ }
+ else
+ {
+ Traversal::StructDecl::traverse (s);
+ }
+ }
+
+ virtual void
+ pre (StructDeclPtr const& s)
+ {
+ push (false);
+ }
+
+ virtual void
+ post (StructDeclPtr const& s)
+ {
+ bool r (top ());
+
+ s->context ().set (variable_size_label, r);
+
+ pop ();
+
+ if (r) top () = r;
+ }
+
+ private:
+ void
+ push (bool v)
+ {
+ stack_.push (v);
+ }
+
+ bool&
+ top ()
+ {
+ return stack_.top ();
+ }
+
+ void
+ pop ()
+ {
+ stack_.pop ();
+ }
+
+ private:
+ std::stack<bool> stack_;
+ };
+}
+
+
+void SizeTypeCalculator::
+calculate (TranslationUnitPtr const& u)
+{
+ Calculator c;
+
+ Traversal::Module module;
+ module.add_scope_delegate (&c);
+
+ Traversal::FileScope file_scope;
+ file_scope.add_scope_delegate (&module);
+ file_scope.add_scope_delegate (&c);
+
+ Traversal::TranslationRegion region (&file_scope);
+
+ Traversal::TranslationUnit unit;
+ unit.add_content_delegate (&region);
+
+ unit.dispatch (u);
+}
diff --git a/TAO/CIAO/CIDLC/SizeTypeCalculator.hpp b/TAO/CIAO/CIDLC/SizeTypeCalculator.hpp
new file mode 100644
index 00000000000..c9397f72e5b
--- /dev/null
+++ b/TAO/CIAO/CIDLC/SizeTypeCalculator.hpp
@@ -0,0 +1,21 @@
+// file : CIDLC/SizeTypeCalculator.hpp
+// author : Boris Kolpackov <boris@dre.vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef CIDLC_SIZE_TYPE_CALCULATOR_HPP
+#define CIDLC_SIZE_TYPE_CALCULATOR_HPP
+
+
+//@@ Don't really need this. just forward declaration of
+// TranslationUnit would be enough.
+//
+#include "CCF/CIDL/SyntaxTree.hpp"
+
+class SizeTypeCalculator
+{
+public:
+ void
+ calculate (CCF::CIDL::SyntaxTree::TranslationUnitPtr const&);
+};
+
+#endif // CIDLC_SIZE_TYPE_CALCULATOR_HPP
diff --git a/TAO/CIAO/CIDLC/TypeNameEmitter.cpp b/TAO/CIAO/CIDLC/TypeNameEmitter.cpp
index 1672ecdf534..bc15db2d3dc 100644
--- a/TAO/CIAO/CIDLC/TypeNameEmitter.cpp
+++ b/TAO/CIAO/CIDLC/TypeNameEmitter.cpp
@@ -244,6 +244,12 @@ INArgTypeNameEmitter::traverse (StringDeclPtr const&)
}
void
+INArgTypeNameEmitter::traverse (TypedefDeclPtr const &, StringDeclPtr const&)
+{
+ os << "const char *";
+}
+
+void
INArgTypeNameEmitter::traverse (WstringDeclPtr const&)
{
os << "const ::CORBA::WChar *";
@@ -520,4 +526,3 @@ OUTArgTypeNameEmitter::traverse (SequenceDeclPtr const& s)
{
os << s->name () << "_out";
}
-
diff --git a/TAO/CIAO/CIDLC/TypeNameEmitter.hpp b/TAO/CIAO/CIDLC/TypeNameEmitter.hpp
index b5dbb34f3ac..faab63a332e 100644
--- a/TAO/CIAO/CIDLC/TypeNameEmitter.hpp
+++ b/TAO/CIAO/CIDLC/TypeNameEmitter.hpp
@@ -99,6 +99,7 @@ public:
virtual void traverse (FloatDeclPtr const&);
virtual void traverse (DoubleDeclPtr const&);
virtual void traverse (StringDeclPtr const&);
+ virtual void traverse (TypedefDeclPtr const&, StringDeclPtr const&);
virtual void traverse (WstringDeclPtr const&);
virtual void traverse (ObjectDeclPtr const&);
virtual void traverse (ValueBaseDeclPtr const&);
diff --git a/TAO/CIAO/ChangeLog b/TAO/CIAO/ChangeLog
index 5ba9bdcb707..5a4ccffc041 100644
--- a/TAO/CIAO/ChangeLog
+++ b/TAO/CIAO/ChangeLog
@@ -1,9 +1,24 @@
+Fri Oct 24 19:16:21 2003 Boris Kolpackov <boris@dre.vanderbilt.edu>
+
+ * CCF/CCF/IDL2/Traversal/Elements.hpp:
+ * CCF/CCF/IDL2/Traversal/Typedef.hpp: Fixed inheritance ambiguity.
+
+ * CIDLC/Makefile.alt:
+ * CIDLC/ServantSourceGenerator.cpp:
+ * CIDLC/TypeNameEmitter.cpp:
+ * CIDLC/TypeNameEmitter.hpp: Added some methods for
+ typedef testing.
+
+ * CIDLC/SizeTypeCalculator.cpp:
+ * CIDLC/SizeTypeCalculator.hpp: Added initial implementation
+ of fixed/variable type size calculation.
+
Fri Oct 24 18:17:21 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
* CCF/CCF/IDL2/IDL2.vcproj:
-
+
Added new front end files to the project.
-
+
* CCF/CCF/IDL2/SemanticAction.hpp:
* CCF/CCF/IDL2/Traversal.hpp:
* CCF/CCF/IDL2/SemanticAction/Impl/Member.hpp:
@@ -14,13 +29,13 @@ Fri Oct 24 18:17:21 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
* CCF/CCF/IDL2/SyntaxTree/Struct.cpp:
* CCF/CCF/IDL2/SyntaxTree/Typedef.hpp:
* CCF/CCF/IDL2/SyntaxTree/ValueTypeCtor.cpp:
-
- Fixed various minor errors, such as removal of unused argument
+
+ Fixed various minor errors, such as removal of unused argument
identifiers, and addition of 'using std".
-
+
* CIDLC/TypeNameEmitter.cpp:
* CIDLC/TypeNameEmitter.hpp:
-
+
Added case for sequences, and typedefs of string and wstring.
Fri Oct 24 17:14:51 2003 Boris Kolpackov <boris@dre.vanderbilt.edu>