diff options
author | boris <boris@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-10-25 00:19:28 +0000 |
---|---|---|
committer | boris <boris@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-10-25 00:19:28 +0000 |
commit | f91a1c6d0bcad68d10886424c7ec47bd098f5a2f (patch) | |
tree | 39901589e707eb0a23d1c206e7a304bb18867fad | |
parent | 9938fdef6c936443ad8bd69ae11a1492f5303cc8 (diff) | |
download | ATCD-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.hpp | 2 | ||||
-rw-r--r-- | TAO/CIAO/CCF/CCF/IDL2/Traversal/Typedef.hpp | 42 | ||||
-rw-r--r-- | TAO/CIAO/CIDLC/Makefile.alt | 1 | ||||
-rw-r--r-- | TAO/CIAO/CIDLC/ServantSourceGenerator.cpp | 2 | ||||
-rw-r--r-- | TAO/CIAO/CIDLC/SizeTypeCalculator.cpp | 116 | ||||
-rw-r--r-- | TAO/CIAO/CIDLC/SizeTypeCalculator.hpp | 21 | ||||
-rw-r--r-- | TAO/CIAO/CIDLC/TypeNameEmitter.cpp | 7 | ||||
-rw-r--r-- | TAO/CIAO/CIDLC/TypeNameEmitter.hpp | 1 | ||||
-rw-r--r-- | TAO/CIAO/ChangeLog | 27 |
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 (®ion); + + 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> |