diff options
Diffstat (limited to 'CIAO/tools/IDL3_to_XMI')
22 files changed, 0 insertions, 6376 deletions
diff --git a/CIAO/tools/IDL3_to_XMI/.gitignore b/CIAO/tools/IDL3_to_XMI/.gitignore deleted file mode 100644 index f0c5217cfb6..00000000000 --- a/CIAO/tools/IDL3_to_XMI/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/tao_idl3_to_xmi diff --git a/CIAO/tools/IDL3_to_XMI/CIAO_IDL3_TO_XMI_Export.h b/CIAO/tools/IDL3_to_XMI/CIAO_IDL3_TO_XMI_Export.h deleted file mode 100644 index 199b5141736..00000000000 --- a/CIAO/tools/IDL3_to_XMI/CIAO_IDL3_TO_XMI_Export.h +++ /dev/null @@ -1,57 +0,0 @@ - -// -*- C++ -*- -// Definition for Win32 Export directives. -// This file is generated automatically by generate_export_file.pl CIAO_IDL3_TO_XMI -// ------------------------------ -#ifndef CIAO_IDL3_TO_XMI_EXPORT_H -#define CIAO_IDL3_TO_XMI_EXPORT_H - -#include "ace/config-all.h" - -#if defined (ACE_AS_STATIC_LIBS) && !defined (CIAO_IDL3_TO_XMI_HAS_DLL) -# define CIAO_IDL3_TO_XMI_HAS_DLL 0 -#endif /* ACE_AS_STATIC_LIBS && CIAO_IDL3_TO_XMI_HAS_DLL */ - -#if !defined (CIAO_IDL3_TO_XMI_HAS_DLL) -# define CIAO_IDL3_TO_XMI_HAS_DLL 1 -#endif /* ! CIAO_IDL3_TO_XMI_HAS_DLL */ - -#if defined (CIAO_IDL3_TO_XMI_HAS_DLL) && (CIAO_IDL3_TO_XMI_HAS_DLL == 1) -# if defined (CIAO_IDL3_TO_XMI_BUILD_DLL) -# define CIAO_IDL3_TO_XMI_Export ACE_Proper_Export_Flag -# define CIAO_IDL3_TO_XMI_SINGLETON_DECLARATION(T) ACE_EXPORT_SINGLETON_DECLARATION (T) -# define CIAO_IDL3_TO_XMI_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_EXPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) -# else /* CIAO_IDL3_TO_XMI_BUILD_DLL */ -# define CIAO_IDL3_TO_XMI_Export ACE_Proper_Import_Flag -# define CIAO_IDL3_TO_XMI_SINGLETON_DECLARATION(T) ACE_IMPORT_SINGLETON_DECLARATION (T) -# define CIAO_IDL3_TO_XMI_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) ACE_IMPORT_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) -# endif /* CIAO_IDL3_TO_XMI_BUILD_DLL */ -#else /* CIAO_IDL3_TO_XMI_HAS_DLL == 1 */ -# define CIAO_IDL3_TO_XMI_Export -# define CIAO_IDL3_TO_XMI_SINGLETON_DECLARATION(T) -# define CIAO_IDL3_TO_XMI_SINGLETON_DECLARE(SINGLETON_TYPE, CLASS, LOCK) -#endif /* CIAO_IDL3_TO_XMI_HAS_DLL == 1 */ - -// Set CIAO_IDL3_TO_XMI_NTRACE = 0 to turn on library specific tracing even if -// tracing is turned off for ACE. -#if !defined (CIAO_IDL3_TO_XMI_NTRACE) -# if (ACE_NTRACE == 1) -# define CIAO_IDL3_TO_XMI_NTRACE 1 -# else /* (ACE_NTRACE == 1) */ -# define CIAO_IDL3_TO_XMI_NTRACE 0 -# endif /* (ACE_NTRACE == 1) */ -#endif /* !CIAO_IDL3_TO_XMI_NTRACE */ - -#if (CIAO_IDL3_TO_XMI_NTRACE == 1) -# define CIAO_IDL3_TO_XMI_TRACE(X) -#else /* (CIAO_IDL3_TO_XMI_NTRACE == 1) */ -# if !defined (ACE_HAS_TRACE) -# define ACE_HAS_TRACE -# endif /* ACE_HAS_TRACE */ -# define CIAO_IDL3_TO_XMI_TRACE(X) ACE_TRACE_IMPL(X) -# include "ace/Trace.h" -#endif /* (CIAO_IDL3_TO_XMI_NTRACE == 1) */ - -#endif /* CIAO_IDL3_TO_XMI_EXPORT_H */ - -// End of auto generated file. diff --git a/CIAO/tools/IDL3_to_XMI/IDL3_TO_XMI.mpc b/CIAO/tools/IDL3_to_XMI/IDL3_TO_XMI.mpc deleted file mode 100644 index 82642b3e1a2..00000000000 --- a/CIAO/tools/IDL3_to_XMI/IDL3_TO_XMI.mpc +++ /dev/null @@ -1,68 +0,0 @@ -// -*- MPC -*- -project(CIAO_IDL3_TO_XMI_BE) : acelib, install_lib, ciao_output, ace_xml_utils, tao_idl_fe { - sharedname = CIAO_IDL3_TO_XMI_BE - dynamicflags += CIAO_IDL3_TO_XMI_BUILD_DLL - - Source_Files { - be_global.cpp - be_helper.cpp - be_init.cpp - be_produce.cpp - be_sunsoft.cpp - be_util.cpp - IDL3_to_XMI_visitor.cpp - IR_Simulator_visitor.cpp - Literals.cpp - identifier_helper.cpp - } - - Header_Files { - be_extern.h - be_global.h - be_helper.h - be_sunsoft.h - be_util.h - IDL3_to_XMI_visitor.h - CIAO_IDL3_TO_XMI_Export.h - } -} - -project(CIAO_IDL3_TO_XMI_EXE) : aceexe, install, ciao_output, ace_xml_utils, tao_idl_fe { - after += CIAO_IDL3_TO_XMI_BE - exename = tao_idl3_to_xmi - libs += CIAO_IDL3_TO_XMI_BE - includes += $(TAO_ROOT) . - exeout = $(ACE_ROOT)/bin - - // Adding a strict ordering dependency with TAO_IDL_EXE. It appears on some systems, there - // can be a race between these two projects for tao_idl.cpp, causing some errors. - after += TAO_IDL_EXE - - // This is necessary for MPC to pull in rules.ciao.GNU - includes += $(CIAO_ROOT) - - verbatim(gnuace, local) { - ifeq ($(TAO_IDL_PREPROCESSOR),) - CPPFLAGS += -DTAO_IDL_PREPROCESSOR=\\\"$(strip $(CXX))\\\" - else - CPPFLAGS += -DTAO_IDL_PREPROCESSOR=\\\"$(subst \\,\\,$(TAO_IDL_PREPROCESSOR))\\\" - endif - - VPATH = $(TAO_ROOT)/TAO_IDL $(TAO_ROOT)/TAO_IDL/driver - } - - Source_Files { - $(TAO_ROOT)/TAO_IDL/driver/drv_args.cpp - $(TAO_ROOT)/TAO_IDL/driver/drv_preproc.cpp - $(TAO_ROOT)/TAO_IDL/tao_idl.cpp - } - - Header_Files { - $(TAO_ROOT)/TAO_IDL/include/drv_extern.h - } - - verbatim(gnuace, postinstall) { -" @$(MKDIR) $(INSTALL_PREFIX)/share/ace/bin" -" ln -sf $(INSTALL_PREFIX)/bin/tao_idl3_to_xmi $(INSTALL_PREFIX)/share/ace/bin" - } -} diff --git a/CIAO/tools/IDL3_to_XMI/IDL3_to_XMI_visitor.cpp b/CIAO/tools/IDL3_to_XMI/IDL3_to_XMI_visitor.cpp deleted file mode 100644 index f2f24f05a67..00000000000 --- a/CIAO/tools/IDL3_to_XMI/IDL3_to_XMI_visitor.cpp +++ /dev/null @@ -1,2694 +0,0 @@ -#include "IDL3_to_XMI_visitor.h" -#include "identifier_helper.h" - -#include "be_sunsoft.h" -#include "be_extern.h" - -#include "ast_argument.h" -#include "ast_array.h" -#include "ast_attribute.h" -#include "ast_component_fwd.h" -#include "ast_provides.h" -#include "ast_uses.h" -#include "ast_publishes.h" -#include "ast_emits.h" -#include "ast_consumes.h" -#include "ast_enum.h" -#include "ast_enum_val.h" -#include "ast_eventtype.h" -#include "ast_eventtype_fwd.h" -#include "ast_exception.h" -#include "ast_factory.h" -#include "ast_field.h" -#include "ast_home.h" -#include "ast_operation.h" -#include "ast_root.h" -#include "ast_sequence.h" -#include "ast_string.h" -#include "ast_structure_fwd.h" -#include "ast_template_module.h" -#include "ast_template_module_inst.h" -#include "ast_template_module_ref.h" -#include "ast_typedef.h" -#include "ast_union.h" -#include "ast_union_branch.h" -#include "ast_union_fwd.h" -#include "ast_union_label.h" -#include "ast_valuebox.h" -#include "ast_valuetype_fwd.h" -#include "ast_native.h" -#include "utl_exceptlist.h" -#include "utl_identifier.h" -#include "utl_idlist.h" -#include "utl_string.h" -#include "global_extern.h" -#include "nr_extern.h" -#include "ace/OS_NS_stdio.h" -#include "ace/OS_NS_sys_time.h" -#include "ace/ACE.h" - -#include "Literals.h" -#include "ace/XML_Utils/XercesString.h" - -#include <iostream> -#include <limits> -#include <sstream> - -#include "xercesc/dom/DOM.hpp" -#include "xercesc/util/XMLChar.hpp" - -#include "ace/XML_Utils/XML_Helper.h" - -using XERCES_CPP_NAMESPACE::DOMDocument; -using XERCES_CPP_NAMESPACE::DOMAttr; -using XERCES_CPP_NAMESPACE::DOMElement; -using XERCES_CPP_NAMESPACE::DOMText; -using XERCES_CPP_NAMESPACE::DOMDocumentType; -using XERCES_CPP_NAMESPACE::XMLChar1_1; -using XML::XStr; - -#if 0 -struct Foo { - std::string foo_; - Foo (const char *foo) : foo_ (foo) - { - std::cout << "Entering " << foo_ << std::endl; - } - ~Foo () - { - std::cout << "Leaving " << foo_ << std::endl; - } -}; - -#define XMI_TRACE(X) Foo _foobarbaz (X); -#else -#define XMI_TRACE(X) -#endif - -namespace DAnCE -{ - namespace XMI - { - size_t idl3_to_xmi_visitor::current_id_ = 0; - - template <typename T> - ACE_TCHAR * - idl3_to_xmi_visitor::number_to_string (T val) - { - std::stringstream str; - - str << val; - - return ACE::strnew (ACE_TEXT_CHAR_TO_TCHAR (str.str ().c_str ())); - } - - template <> - ACE_TCHAR * - idl3_to_xmi_visitor::number_to_string (bool val) - { - if (val) - return ACE::strnew (LITERALS[CAPS_TRUE]); - else - return ACE::strnew (LITERALS[CAPS_FALSE]); - } - - template <> - ACE_TCHAR * - idl3_to_xmi_visitor::number_to_string (char val) - { - // There is no way to convert any char to xml encoding nicely - // so we convert it to a decimal integer. This will preserve at - // least a correct char value instead of some non-printable xml. - std::stringstream str; - - str << static_cast<unsigned int>(static_cast<unsigned char> (val)); - - return ACE::strnew (ACE_TEXT_CHAR_TO_TCHAR (str.str ().c_str ())); - } - - template <> - ACE_TCHAR * - idl3_to_xmi_visitor::number_to_string (wchar_t val) - { - // There is no way to convert any char to xml encoding nicely - // so we convert it to a decimal integer. This will preserve at - // least a correct char value instead of some non-printable xml. - std::stringstream str; - - str << static_cast<unsigned long>(static_cast<wchar_t> (val)); - - return ACE::strnew (ACE_TEXT_CHAR_TO_TCHAR (str.str ().c_str ())); - } - - idl3_to_xmi_visitor::idl3_to_xmi_visitor (bool skip_imported) - : dom_ (0), - root_ (0), - generalizations_ (0), - associations_ (0), - base_id_ (idl3_to_xmi_visitor::gen_xmi_id ()), - skip_imported_ (skip_imported), - visiting_enum_ (false), - union_disc_ (0) - { - } - - idl3_to_xmi_visitor::~idl3_to_xmi_visitor (void) - { - } - - int - idl3_to_xmi_visitor::visit_decl (AST_Decl *) - { - XMI_TRACE ("got a decl"); - return 0; - } - - char * - copy_scoped_name (UTL_ScopedName *name) - { - ACE_CString fullname; - for (UTL_ScopedNameActiveIterator si (name); - !si.is_done (); - si.next ()) - { - Identifier *item = si.item (); - fullname += item->get_string (); - } - - return fullname.rep (); - } - - int - idl3_to_xmi_visitor::visit_scope (UTL_Scope *node) - { - XMI_TRACE ("got a scope"); - - this->order_ = 0; - - for (UTL_ScopeActiveIterator si (node, UTL_Scope::IK_decls); - !si.is_done (); - si.next ()) - { - AST_Decl *d = si.item (); - d->ast_accept (this); - ++this->order_; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_type (AST_Type *) - { - XMI_TRACE ("got a type"); - return 0; - } - - int - idl3_to_xmi_visitor::visit_predefined_type (AST_PredefinedType *node) - { - XMI_TRACE ("predef type"); - - char const *local_name = 0; - switch (node->pt ()) - { - case AST_PredefinedType::PT_pseudo: - // Only a limited number of predefined pseudo types - // needs our attention. - local_name = node->original_local_name ()->get_string (); - if (ACE_OS::strcmp (local_name, "TypeCode") == 0) - { - ES_Guard class_guard (LITERALS[CLASS_TAG], this); - this->gen_common_elements (node, LITERALS[ST_TC]); - } - default: - break; - } - return 0; - } - - int - idl3_to_xmi_visitor::visit_module (AST_Module *node) - { - XMI_TRACE ("module"); - - try - { - ElementContext ec; - if (this->repo_id_map_.find (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec) == 0) - { - // If the module is reopened then put it on the stack. - NS_Guard ns_guard (ec.ns_.c_str (), this); - ES_Guard owned_guard (ec.elem_, this); - this->visit_scope (node); - // And don't do anything more. - return 0; - } - - ES_Guard package_guard (LITERALS[PACKAGE_TAG], this); - this->gen_common_elements (node, LITERALS[ST_MODULE]); - - { - NS_Guard ns_guard (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), this); - ES_Guard owned_guard (LITERALS[OWNEDELEMENT_TAG], this); - - // Save ownedElement to add to it later if the module - // will be reopened. - this->stack_.top (ec.elem_); - // Same save namespace string. - this->namespace_.top (ec.ns_); - this->repo_id_map_.bind (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec); - - this->visit_scope (node); - } - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_template_module (AST_Template_Module *) - { - return 0; - } - - int - idl3_to_xmi_visitor::visit_template_module_inst ( - AST_Template_Module_Inst *) - { - return 0; - } - - int - idl3_to_xmi_visitor::visit_template_module_ref (AST_Template_Module_Ref *) - { - return 0; - } - - int - idl3_to_xmi_visitor::visit_param_holder (AST_Param_Holder *) - { - return 0; - } - - int - idl3_to_xmi_visitor::visit_finder (AST_Finder *) - { - return 0; - } - - int - idl3_to_xmi_visitor::visit_interface (AST_Interface *node) - { - XMI_TRACE ("interface"); - - if (this->skip_imported_ && node->imported ()) - { - this->visit_scope (node); - return 0; - } - - try - { - ElementContext ec; - if (this->repo_id_map_.find (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec) != 0) - { - ES_Guard class_guard (LITERALS[CLASS_TAG], this); - this->gen_common_elements (node, LITERALS[ST_INTF]); - NS_Guard ns_guard (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), this); - - // Save in order not to generate same element later. - this->stack_.top (ec.elem_); - this->namespace_.top (ec.ns_); - this->repo_id_map_.bind (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec); - } - - ES_Guard class_guard (ec.elem_, this); - NS_Guard ns_guard (ec.ns_.c_str (), this); - - { // Operations. - ES_Guard owned_guard (LITERALS[OWNEDELEMENT_TAG], this); - this->cached_type_ = node; - this->visit_scope (node); - this->cached_type_ = 0; - } - - // Inheritance - for (long i = 0; i < node->n_inherits (); ++i) - { - XStr xid (this->add_generalization ( - ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), - ACE_TEXT_CHAR_TO_TCHAR (node->inherits ()[i]->repoID ()))); - } - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_interface_fwd (AST_InterfaceFwd *node) - { - XMI_TRACE ("interface_fwd"); - - try - { - ElementContext ec; - if (this->repo_id_map_.find (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec) != 0) - { - ES_Guard class_guard (LITERALS[CLASS_TAG], this); - this->gen_common_elements (node, LITERALS[ST_INTF]); - NS_Guard ns_guard (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), this); - - // Save in order not to generate same element later. - this->stack_.top (ec.elem_); - this->namespace_.top (ec.ns_); - this->repo_id_map_.bind (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec); - } - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_valuebox (AST_ValueBox *node) - { - XMI_TRACE ("valuebox"); - - if (this->skip_imported_ && node->imported ()) - { - return 0; - } - - try - { - ES_Guard class_guard (LITERALS[CLASS_TAG], this); - this->gen_common_elements (node, LITERALS[ST_BOXVALUE]); - - // add a generalization for the value we box - XStr xid (this->add_generalization ( - ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), - ACE_TEXT_CHAR_TO_TCHAR (node->boxed_type ()->repoID ()))); - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - void - idl3_to_xmi_visitor::visit_valuetype_impl (AST_ValueType *node) - { - try - { - // isAbstract - if (node->is_abstract ()) - { - this->set_attribute (LITERALS[ABSTRACT], LITERALS[_TRUE]); - } - else - { - this->set_attribute (LITERALS[ABSTRACT], LITERALS[_FALSE]); - } - - if (node->inherits_concrete () != 0) - { - XStr xid (this->add_generalization ( - ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), - ACE_TEXT_CHAR_TO_TCHAR (node->inherits_concrete ()->repoID ()))); - } - - for (long i = 0; i < node->n_supports (); ++i) - { - XStr xid (this->add_generalization ( - ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), - ACE_TEXT_CHAR_TO_TCHAR (node->supports ()[i]->repoID ()))); - } - - ES_Guard oe_guard (LITERALS[OWNEDELEMENT_TAG], this); - - this->cached_type_ = node; - this->visit_scope (node); - this->cached_type_ = 0; - } - catch (Error &err) - { - err.node (node); - throw; - } - } - - int - idl3_to_xmi_visitor::visit_valuetype (AST_ValueType *node) - { - XMI_TRACE ("valuetype"); - - if (this->skip_imported_ && node->imported ()) - { - this->visit_scope (node); - return 0; - } - - try - { - ElementContext ec; - if (this->repo_id_map_.find (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec) != 0) - { - ES_Guard class_guard (LITERALS[CLASS_TAG], this); - this->gen_common_elements (node, LITERALS[ST_VALUE]); - NS_Guard ns_guard (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), this); - - // Save in order not to generate same element later. - this->stack_.top (ec.elem_); - this->namespace_.top (ec.ns_); - this->repo_id_map_.bind (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec); - } - - ES_Guard class_guard (ec.elem_, this); - NS_Guard ns_guard (ec.ns_.c_str (), this); - - this->visit_valuetype_impl (node); - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_valuetype_fwd (AST_ValueTypeFwd *node) - { - XMI_TRACE ("valuetype_fwd"); - - try - { - ElementContext ec; - if (this->repo_id_map_.find (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec) != 0) - { - ES_Guard class_guard (LITERALS[CLASS_TAG], this); - this->gen_common_elements (node, LITERALS[ST_VALUE]); - NS_Guard ns_guard (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), this); - - // Save in order not to generate same element later. - this->stack_.top (ec.elem_); - this->namespace_.top (ec.ns_); - this->repo_id_map_.bind (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec); - } - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_eventtype (AST_EventType *node) - { - XMI_TRACE ("eventtype"); - - if (this->skip_imported_ && node->imported ()) - { - this->visit_scope (node); - return 0; - } - - try - { - ElementContext ec; - if (this->repo_id_map_.find (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec) != 0) - { - ES_Guard class_guard (LITERALS[CLASS_TAG], this); - this->gen_common_elements (node, LITERALS[ST_EVENT]); - NS_Guard ns_guard (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), this); - - // Save in order not to generate same element later. - this->stack_.top (ec.elem_); - this->namespace_.top (ec.ns_); - this->repo_id_map_.bind (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec); - } - - ES_Guard class_guard (ec.elem_, this); - NS_Guard ns_guard (ec.ns_.c_str (), this); - - this->visit_valuetype_impl (node); - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_eventtype_fwd (AST_EventTypeFwd *node) - { - XMI_TRACE ("eventtype_fwd"); - - try - { - ElementContext ec; - if (this->repo_id_map_.find (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec) != 0) - { - ES_Guard class_guard (LITERALS[CLASS_TAG], this); - this->gen_common_elements (node, LITERALS[ST_EVENT]); - NS_Guard ns_guard (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), this); - - // Save in order not to generate same element later. - this->stack_.top (ec.elem_); - this->namespace_.top (ec.ns_); - this->repo_id_map_.bind (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec); - } - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_component (AST_Component *node) - { - XMI_TRACE ("component"); - - if (this->skip_imported_ && node->imported ()) - { - this->visit_scope (node); - return 0; - } - - try - { - ElementContext ec; - if (this->repo_id_map_.find (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec) != 0) - { - ES_Guard class_guard (LITERALS[CLASS_TAG], this); - this->gen_common_elements (node, LITERALS[ST_COMP]); - NS_Guard ns_guard (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), this); - - // Save in order not to generate same element later. - this->stack_.top (ec.elem_); - this->namespace_.top (ec.ns_); - this->repo_id_map_.bind (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec); - } - - ES_Guard class_guard (ec.elem_, this); - NS_Guard ns_guard (ec.ns_.c_str (), this); - - for (long i = 0; i < node->n_supports (); ++i) - { - XStr xid (this->add_generalization ( - ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), - ACE_TEXT_CHAR_TO_TCHAR (node->supports ()[i]->repoID ()))); - - } - - if (node->base_component () != 0) - { - XStr xid (this->add_generalization ( - ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), - ACE_TEXT_CHAR_TO_TCHAR (node->base_component ()->repoID ()))); - } - - ES_Guard oe_guard (LITERALS[OWNEDELEMENT_TAG], this); - - this->cached_type_ = node; - this->visit_scope (node); - this->cached_type_ = 0; - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_component_fwd (AST_ComponentFwd *node) - { - XMI_TRACE ("component_fwd"); - - try - { - ElementContext ec; - if (this->repo_id_map_.find (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec) != 0) - { - ES_Guard class_guard (LITERALS[CLASS_TAG], this); - this->gen_common_elements (node, LITERALS[ST_COMP]); - NS_Guard ns_guard (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), this); - - // Save in order not to generate same element later. - this->stack_.top (ec.elem_); - this->namespace_.top (ec.ns_); - this->repo_id_map_.bind (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec); - } - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_provides (AST_Provides *node) - { - this->add_port (LITERALS[ST_PROVIDES], node); - return 0; - } - - int - idl3_to_xmi_visitor::visit_uses (AST_Uses *node) - { - this->add_port (LITERALS[ST_USES], node); - return 0; - } - - int - idl3_to_xmi_visitor::visit_publishes (AST_Publishes *node) - { - this->add_port (LITERALS[ST_PUBLISH], node); - return 0; - } - - int - idl3_to_xmi_visitor::visit_emits (AST_Emits *node) - { - this->add_port (LITERALS[ST_EMITS], node); - return 0; - } - - int - idl3_to_xmi_visitor::visit_consumes (AST_Consumes *node) - { - this->add_port (LITERALS[ST_CONSUMES], node); - return 0; - } - - int - idl3_to_xmi_visitor::visit_porttype (AST_PortType *) - { - return 0; - } - - int - idl3_to_xmi_visitor::visit_extended_port (AST_Extended_Port *) - { - return 0; - } - - int - idl3_to_xmi_visitor::visit_mirror_port (AST_Mirror_Port *) - { - return 0; - } - - int - idl3_to_xmi_visitor::visit_connector (AST_Connector *) - { - return 0; - } - - int - idl3_to_xmi_visitor::visit_home (AST_Home *node) - { - XMI_TRACE ("home"); - - if (this->skip_imported_ && node->imported ()) - { - this->visit_scope (node); - return 0; - } - - try - { - ES_Guard es_guard (LITERALS[CLASS_TAG], this); - this->gen_common_elements (node, LITERALS[ST_HOME]); - NS_Guard ns_guard (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), this); - - for (long i = 0; i < node->n_supports (); ++i) - { - XStr xid (this->add_generalization ( - ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), - ACE_TEXT_CHAR_TO_TCHAR (node->supports ()[i]->repoID ()))); - } - - if (node->base_home () != 0) - { - XStr xid (this->add_generalization ( - ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), - ACE_TEXT_CHAR_TO_TCHAR (node->base_home ()->repoID ()))); - } -/* - * @@@ (JP) This code will be moved to the appropriate visit_* methods - * - if (node->factories ().size () != 0) - { - ES_Guard noe_guard (LITERALS[OWNEDELEMENT_TAG], this); - - for (size_t i = 0; i < node->factories ().size (); ++i) - { - AST_Operation **op = 0; - node->factories ().get (op, i); - this->visit_operation_impl (*op, LITERALS[ST_HFACT]); - } - } - - if (node->finders () .size () != 0) - { - throw Error ("home finders not supported", node); - } -*/ - this->add_managed_component ( - ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), - ACE_TEXT_CHAR_TO_TCHAR (node->managed_component ()->repoID ())); - - ES_Guard noe_guard (LITERALS[OWNEDELEMENT_TAG], this); - - // attributes in scope. - this->cached_type_ = node; - this->visit_scope (node); - this->cached_type_ = 0; - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_factory (AST_Factory *node) - { - XMI_TRACE ("factory"); - - if (this->skip_imported_ && node->imported ()) - { - return 0; - } - - throw Error ("Factories not supported", node); - - return 0; - } - - void - idl3_to_xmi_visitor::visit_struct_impl (AST_Structure *node) - { - try - { - ES_Guard ns_oe_guard (LITERALS[OWNEDELEMENT_TAG], this); - this->visit_scope (node); - } - catch (Error &err) - { - err.node (node); - throw; - } - } - - int - idl3_to_xmi_visitor::visit_structure (AST_Structure *node) - { - XMI_TRACE ("structure"); - - if (this->skip_imported_ && node->imported ()) - { - this->visit_scope (node); - return 0; - } - - try - { - ElementContext ec; - if (this->repo_id_map_.find (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec) != 0) - { - ES_Guard class_guard (LITERALS[CLASS_TAG], this); - this->gen_common_elements (node, LITERALS[ST_STRUCT]); - NS_Guard ns_guard (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), this); - - // Save in order not to generate same element later. - this->stack_.top (ec.elem_); - this->namespace_.top (ec.ns_); - this->repo_id_map_.bind (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec); - } - - ES_Guard class_guard (ec.elem_, this); - NS_Guard ns_guard (ec.ns_.c_str (), this); - - this->visit_struct_impl (node); - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_structure_fwd (AST_StructureFwd *node) - { - XMI_TRACE ("structure_fwd"); - - try - { - ElementContext ec; - if (this->repo_id_map_.find (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec) != 0) - { - ES_Guard class_guard (LITERALS[CLASS_TAG], this); - this->gen_common_elements (node, LITERALS[ST_STRUCT]); - NS_Guard ns_guard (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), this); - - // Save in order not to generate same element later. - this->stack_.top (ec.elem_); - this->namespace_.top (ec.ns_); - this->repo_id_map_.bind (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec); - } - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_exception (AST_Exception *node) - { - XMI_TRACE ("exception"); - - if (this->skip_imported_ && node->imported ()) - { - this->visit_scope (node); - return 0; - } - - try - { - ElementContext ec; - if (this->repo_id_map_.find (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec) != 0) - { - ES_Guard class_guard (LITERALS[EXCEPTION_TAG], this); - this->gen_common_elements (node, LITERALS[ST_EX]); - NS_Guard ns_guard (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), this); - - // Save in order not to generate same element later. - this->stack_.top (ec.elem_); - this->namespace_.top (ec.ns_); - this->repo_id_map_.bind (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec); - } - - ES_Guard class_guard (ec.elem_, this); - NS_Guard ns_guard (ec.ns_.c_str (), this); - - this->visit_struct_impl (node); - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_expression (AST_Expression *) - { - XMI_TRACE ("expression"); - - // we don't particularly care about expressions. - - return 0; - } - - int - idl3_to_xmi_visitor::visit_enum (AST_Enum *node) - { - XMI_TRACE ("enum"); - - if (this->skip_imported_ && node->imported ()) - { - this->visit_scope (node); - return 0; - } - - try - { - ES_Guard es_guard (LITERALS[CLASS_TAG], this); - this->gen_common_elements (node, LITERALS[ST_ENUM]); - - NS_Guard ns_guard (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), this); - ES_Guard oe_guard (LITERALS[OWNEDELEMENT_TAG], this); - - this->visiting_enum_ = true; - this->visit_scope (node); - this->visiting_enum_ = false; - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - void - idl3_to_xmi_visitor::visit_operation_impl (AST_Operation *op, - const ACE_TCHAR *stereotype) - { - XMI_TRACE ("operation"); - - if (this->skip_imported_ && op->imported ()) - { - this->visit_scope (op); - return; - } - - // This is a mess because the operation has so many special cases.... - try - { - ES_Guard op_guard (LITERALS[OP_TAG], this); - - // name and visiblity - this->set_attribute ( - LITERALS[NAME], - ACE_TEXT_CHAR_TO_TCHAR (op->original_local_name ()->get_string ())); - - this->set_attribute (LITERALS[VISIBIL], LITERALS[PUBLIC]); - - this->set_containing_element (LITERALS[OWNER]); - - // If we have a stereotype, set it - if (stereotype != 0) - { - this->find_and_set_xid_as_attr (LITERALS[STEREO_ATTR], - stereotype); - } - - // XMI ID - this->create_and_store_xmi_id (op); - - // while not strictly a namespace, the repo id goes on the - // namespace stack as the owner of contained elements. - NS_Guard ns_guard (ACE_TEXT_CHAR_TO_TCHAR (op->repoID ()), this); - - { // we need to generate the tagged value in a custom way here - ES_Guard me_guard (LITERALS[ME_TV_TAG], this); - - { - ES_Guard tv_guard (LITERALS[TV_TAG], this); - this->set_attribute (LITERALS[TAG], LITERALS[TYPEID]); - this->set_attribute (LITERALS[VALUE], - ACE_TEXT_CHAR_TO_TCHAR (op->repoID ())); - } - - UTL_ExceptList *exceptions = op->exceptions (); - - if (exceptions != 0 && exceptions->length () > 0) - { - for (UTL_ExceptlistActiveIterator ei (exceptions); - !ei.is_done (); - ei.next ()) - { - ES_Guard tv_guard (LITERALS[TV_TAG], this); - this->set_attribute (LITERALS[TAG], LITERALS[RAISES]); - this->set_attribute ( - LITERALS[VALUE], - ACE_TEXT_CHAR_TO_TCHAR (ei.item ()->full_name ())); - } - } - } - - ES_Guard bfp_guard (LITERALS[BFP_TAG], this); - - // return value - { - ES_Guard param_guard (LITERALS[PARAM_TAG], this); - - // I don't think anything else can refer to the parameter by - // xid, so I won't store it. - XStr xid = this->gen_xmi_id (op); - - this->set_attribute (LITERALS[XMI_ID], xid); - - this->set_attribute (LITERALS[KIND], LITERALS[RETURN]); - - this->set_containing_element (LITERALS[BFEATURE]); - - xid = this->lookup_type_xid (op->return_type ()); - this->set_attribute (LITERALS[TYPE], - xid); - } - - if (op->argument_count () != 0) - { - // Visit arguments - for (UTL_ScopeActiveIterator si (op, UTL_Scope::IK_decls); - !si.is_done ();) - { - si.item ()->ast_accept (this); - si.next (); - } - } - } - catch (Error &err) - { - err.node (op); - throw; - } - } - - int - idl3_to_xmi_visitor::visit_operation (AST_Operation *op) - { - XMI_TRACE ("operation"); - - this->visit_operation_impl (op, 0); - - return 0; - } - - int - idl3_to_xmi_visitor::visit_field (AST_Field *node) - { - XMI_TRACE ("field"); - - if (this->skip_imported_ && node->imported ()) - { - return 0; - } - - try - { - ES_Guard attr_guard (LITERALS[ATTR_TAG], this); - - if (node->field_type ()->node_type () == AST_Decl::NT_sequence) - { - AST_Sequence* sequence = - AST_Sequence::narrow_from_decl (node->field_type ()); - sequence->ast_accept (this); - // There is no need to proceed any further. - return 0; - } - else if (node->field_type ()->node_type () == AST_Decl::NT_array) - { - AST_Array* array = - AST_Array::narrow_from_decl (node->field_type ()); - array->ast_accept (this); - // There is no need to proceed any further. - return 0; - } - - // I don't think anything else can refer to the parameter by - // xid, so I won't store it. - XStr xid = this->gen_xmi_id (node); - this->set_attribute (LITERALS[XMI_ID], xid); - - this->set_attribute ( - LITERALS[NAME], - ACE_TEXT_CHAR_TO_TCHAR (node->original_local_name ()->get_string ())); - - switch (node->visibility ()) - { - case AST_Field::vis_NA: - case AST_Field::vis_PUBLIC: - this->set_attribute (LITERALS[VISIBIL], LITERALS[PUBLIC]); - break; - case AST_Field::vis_PRIVATE: - this->set_attribute (LITERALS[VISIBIL], LITERALS[_PRIVATE]); - break; - default: - throw Error ("unknown visibility type detected.", node); - } - - // I think this is fixed. - this->set_attribute (LITERALS[MULT], LITERALS[MULT_OTO]); - - this->set_containing_element (LITERALS[OWNER]); - - xid = this->lookup_type_xid (node->field_type ()); - this->set_attribute (LITERALS[TYPE], - xid); - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_argument (AST_Argument *node) - { - XMI_TRACE ("argument"); - - if (this->skip_imported_ && node->imported ()) - { - return 0; - } - - try - { - ES_Guard param_guard (LITERALS[PARAM_TAG], this); - - this->set_attribute ( - LITERALS[NAME], - ACE_TEXT_CHAR_TO_TCHAR (node->original_local_name ()->get_string ())); - - // I don't think anything else can refer to the parameter by - // xid, so I won't store it. - XStr xid = this->gen_xmi_id (node); - this->set_attribute (LITERALS[XMI_ID], xid); - - // kind - switch (node->direction ()) - { - case AST_Argument::dir_IN: - this->set_attribute (LITERALS[KIND], LITERALS[_IN]); - break; - - case AST_Argument::dir_INOUT: - this->set_attribute (LITERALS[KIND], LITERALS[INOUT]); - break; - - case AST_Argument::dir_OUT: - this->set_attribute (LITERALS[KIND], LITERALS[_OUT]); - break; - - default: - throw Error ("Unknown argument direction", node); - } - - this->set_containing_element (LITERALS[BFEATURE]); - - xid = this->lookup_type_xid (node->field_type ()); - this->set_attribute (LITERALS[TYPE], - xid); - - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_attribute (AST_Attribute *node) - { - XMI_TRACE ("attribute"); - - if (this->skip_imported_ && node->imported ()) - { - return 0; - } - - if (this->cached_type_ == 0) - { - ACE_ERROR ((LM_ERROR, "Zounds! %d\n", - this->cached_type_)); - throw Error ("Internal error - attribute expected " - "to have a cached type, but didn't"); - } - - try - { - // *** - NS_Guard global_ns (ACE_TEXT ("::"), this); - ES_Guard assoc_group (this->associations_, this); - ES_Guard assoc_g (LITERALS[ASSOC_TAG], this); - - // I don't think anything else can refer to the attribute by - // xid, so I won't store it. - XStr xid = this->gen_xmi_id (node); - this->set_attribute (LITERALS[XMI_ID], xid); - this->set_attribute (LITERALS[VISIBIL], LITERALS[PUBLIC]); - this->set_containing_element (LITERALS[NS]); - - if (node->readonly ()) - { - this->find_and_set_xid_as_attr (LITERALS[STEREO_ATTR], - LITERALS[ST_RO]); - } - - ES_Guard assoc_conn (LITERALS[ASSOC_CONN_TAG], this); - - { // Containing type - ES_Guard assoc_end (LITERALS[ASSOC_END_TAG], this); - this->set_attribute (LITERALS[MULT], ACE_TEXT ("1")); - this->find_and_set_xid_as_attr ( - LITERALS[TYPE], - ACE_TEXT_CHAR_TO_TCHAR (this->cached_type_->repoID ())); - } - - { - ES_Guard assoc_end (LITERALS[ASSOC_END_TAG], this); - this->set_attribute ( - LITERALS[NAME], - ACE_TEXT_CHAR_TO_TCHAR (node->original_local_name ()->get_string ())); - this->set_attribute (LITERALS[MULT], ACE_TEXT ("1")); - xid = this->lookup_type_xid (node->field_type ()); - this->set_attribute (LITERALS[TYPE], xid); - } - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_union (AST_Union *node) - { - XMI_TRACE ("union"); - - if (this->skip_imported_ && node->imported ()) - { - return 0; - } - - try - { - ElementContext ec; - if (this->repo_id_map_.find (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec) != 0) - { - ES_Guard class_guard (LITERALS[CLASS_TAG], this); - this->gen_common_elements (node, LITERALS[ST_UNION]); - NS_Guard ns_guard (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), this); - - // Save in order not to generate same element later. - this->stack_.top (ec.elem_); - this->namespace_.top (ec.ns_); - this->repo_id_map_.bind (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec); - } - - ES_Guard class_guard (ec.elem_, this); - NS_Guard ns_guard (ec.ns_.c_str (), this); - ES_Guard oe_guard (LITERALS[OWNEDELEMENT_TAG], this); - - // Set discriminator type - this->union_disc_ = node->disc_type (); - this->visit_scope (node); - this->union_disc_ = 0; - } - catch (Error &err) - { - this->union_disc_ = 0; - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_union_fwd (AST_UnionFwd *node) - { - XMI_TRACE ("union_fwd"); - - try - { - ElementContext ec; - if (this->repo_id_map_.find (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec) != 0) - { - ES_Guard class_guard (LITERALS[CLASS_TAG], this); - this->gen_common_elements (node, LITERALS[ST_UNION]); - NS_Guard ns_guard (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), this); - - // Save in order not to generate same element later. - this->stack_.top (ec.elem_); - this->namespace_.top (ec.ns_); - this->repo_id_map_.bind (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), ec); - } - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_union_branch (AST_UnionBranch *node) - { - XMI_TRACE ("union_branch"); - - try - { - ES_Guard attr_guard (LITERALS[ATTR_TAG], this); - - // I don't think anything else can refer to the parameter by - // xid, so I won't store it. - XStr xid = this->gen_xmi_id (node); - this->set_attribute (LITERALS[XMI_ID], xid); - - // name - this->set_attribute ( - LITERALS[NAME], - ACE_TEXT_CHAR_TO_TCHAR (node->original_local_name ()->get_string ())); - - // visiblity - this->set_attribute (LITERALS[VISIBIL], LITERALS[PUBLIC]); - - this->set_containing_element (LITERALS[OWNER]); - - // I think this is fixed. - this->set_attribute (LITERALS[MULT], LITERALS[MULT_ZTO]); - - xid = this->lookup_type_xid (node->field_type ()); - this->set_attribute (LITERALS[TYPE], - xid); - - { - ES_Guard me_tv_guard (LITERALS[ME_TV_TAG], this); - - { - ES_Guard tv_guard (LITERALS[TV_TAG], this); - this->set_attribute (LITERALS[TAG], LITERALS[IDLORDER]); - - // convert the order value to a string - // need a buffer, with a little safety padding - ACE_Auto_Basic_Array_Ptr<ACE_TCHAR> buffer - (this->number_to_string (this->order_)); - - this->set_attribute (LITERALS[VALUE], buffer.get ()); - } - - for (unsigned long i = 0; i < node->label_list_length (); ++i) - { - this->visit_union_label (node->label (i)); - } - - } - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - ACE_TCHAR * - idl3_to_xmi_visitor::union_label_value (AST_Expression *exp) - { - ACE_Auto_Basic_Array_Ptr<ACE_TCHAR> buffer; - - // @@TODO: Yuck, there has got to be a better way.... - AST_Expression::AST_ExprValue *ev = exp->ev (); - - if (exp->ec () != AST_Expression::EC_symbol || - this->union_disc_->node_type () == AST_Decl::NT_typedef || - this->union_disc_->node_type () == AST_Decl::NT_pre_defined) - { - /*AST_Expression::ExprType type; - - if (this->union_disc_->node_type () == AST_Decl::NT_typedef) - { - AST_Typedef *td (AST_Typedef::narrow_from_decl (this->union_disc_)); - type = td->base_type ()->node_type (); - } - else type = ev->et;*/ - - // Decode the type - switch (ev->et) - { - case AST_Expression::EV_long: - buffer.reset (this->number_to_string (ev->u.lval)); - break; - case AST_Expression::EV_ulong: - buffer.reset (this->number_to_string (ev->u.ulval)); - break; - case AST_Expression::EV_short: - buffer.reset (this->number_to_string (ev->u.sval)); - break; - case AST_Expression::EV_ushort: - buffer.reset (this->number_to_string (ev->u.usval)); - break; - case AST_Expression::EV_bool: - buffer.reset (this->number_to_string (ev->u.bval)); - break; - case AST_Expression::EV_char: - buffer.reset (this->number_to_string (ev->u.cval)); - break; - default: - throw Error ("Unknown union union label type"); - } - } - else - { - AST_Enum *desc (0); - - if ((desc = AST_Enum::narrow_from_decl (this->union_disc_)) == 0) - { - throw Error ("Descriminator type is not an enum"); - } - - AST_Decl *ev_decl = - desc->lookup_by_name (exp->n (), 1); - - if (ev_decl == 0) - { - throw Error ("Couldn't look up enum name"); - } - - AST_EnumVal *ev = AST_EnumVal::narrow_from_decl (ev_decl); - - if (ev == 0) - { - throw Error ("Couldn't look up enum name"); - } - - buffer.reset (ACE::strnew (ACE_TEXT_CHAR_TO_TCHAR (ev->full_name ()))); - //const char *name = desc->lookup_by_value (exp)->full_name (); - // const char *name = exp->n (); - //buffer.reset (copy_scoped_name (exp->n ())); - } - - if (buffer.get () == 0) - { - throw Error ("Unable to parse union label"); - } - - return buffer.release (); - } - - int - idl3_to_xmi_visitor::visit_union_label (AST_UnionLabel *node) - { - XMI_TRACE ("union_label"); - - ES_Guard tv_guard (LITERALS[TV_TAG], this); - this->set_attribute (LITERALS[TAG], LITERALS[CASE]); - - if (node->label_kind () == AST_UnionLabel::UL_default) - { - this->set_attribute (LITERALS[VALUE], - LITERALS[DEFAULT_UNION]); - } - else - { - ACE_Auto_Basic_Array_Ptr<ACE_TCHAR> buffer ( - this->union_label_value (node->label_val ())); - - this->set_attribute (LITERALS[VALUE], buffer.get ()); - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_constant (AST_Constant *node) - { - XMI_TRACE ("constant"); - - if (this->skip_imported_ && node->imported ()) - { - return 0; - } - - try - { - ES_Guard attr_guard (LITERALS[ATTR_TAG], this); - - this->set_attribute (LITERALS[OWNER_SCOPE], LITERALS[CLASSIFIER]); - this->set_attribute (LITERALS[CHANGEABLE], LITERALS[FROZEN]); - this->gen_common_elements (node, LITERALS[ST_CONST]); - - // Constant type - const ACE_TCHAR *exprtype (0); - AST_Expression::AST_ExprValue *val - (node->constant_value ()->ev ()); - - ACE_Auto_Basic_Array_Ptr<ACE_TCHAR> str_value; - - switch (node->et ()) - { - case AST_Expression::EV_short: - exprtype = LITERALS[ST_SHORT]; - str_value.reset (this->number_to_string (val->u.sval)); - break; - case AST_Expression::EV_ushort: - exprtype = LITERALS[ST_US]; - str_value.reset (this->number_to_string (val->u.usval)); - break; - case AST_Expression::EV_long: - exprtype = LITERALS[ST_LONG]; - str_value.reset (this->number_to_string (val->u.lval)); - break; - case AST_Expression::EV_ulong: - exprtype = LITERALS[ST_UL]; - str_value.reset (this->number_to_string (val->u.ulval)); - break; - case AST_Expression::EV_longlong: - exprtype = LITERALS[ST_LL]; - str_value.reset (this->number_to_string (val->u.llval)); - break; - case AST_Expression::EV_ulonglong: - exprtype = LITERALS[ST_ULL]; - str_value.reset (this->number_to_string (val->u.ullval)); - break; - case AST_Expression::EV_float: - exprtype = LITERALS[ST_FLOAT]; - str_value.reset (this->number_to_string (val->u.fval)); - break; - case AST_Expression::EV_double: - exprtype = LITERALS[ST_DOUBLE]; - str_value.reset (this->number_to_string (val->u.dval)); - break; - case AST_Expression::EV_longdouble: - exprtype = LITERALS[ST_LD]; - str_value.reset (this->number_to_string (val->u.dval)); - break; - case AST_Expression::EV_char: - exprtype = LITERALS[ST_CHAR]; - str_value.reset (this->number_to_string (val->u.cval)); - break; - case AST_Expression::EV_wchar: - exprtype = LITERALS[ST_WCHAR]; - str_value.reset (this->number_to_string (val->u.wcval)); - break; - case AST_Expression::EV_octet: - exprtype = LITERALS[ST_OCTET]; - str_value.reset (this->number_to_string (val->u.dval)); - break; - case AST_Expression::EV_bool: - exprtype = LITERALS[ST_BOOL]; - str_value.reset (this->number_to_string (val->u.bval)); - break; - case AST_Expression::EV_string: - exprtype = LITERALS[ST_STR]; - str_value.reset (ACE::strnew ( - ACE_TEXT_CHAR_TO_TCHAR (val->u.strval->get_string ()))); - break; - case AST_Expression::EV_wstring: - exprtype = LITERALS[ST_WSTR]; - str_value.reset (ACE::strnew ( - ACE_TEXT_CHAR_TO_TCHAR (val->u.wstrval))); - break; - case AST_Expression::EV_enum: - { - UTL_Scope *s = node->defined_in (); - AST_Decl *d = - s->lookup_by_name (node->constant_value ()->n (), 1); - exprtype = ACE_TEXT_CHAR_TO_TCHAR ( - ScopeAsDecl (d->defined_in ())->repoID ()); - str_value.reset (ACE::strnew ( - ACE_TEXT_CHAR_TO_TCHAR (d->full_name ()))); - } - break; - - default: - throw Error ("Unsupported constant type", node); - } - - // type attribute - XStr xid (this->lookup_xid (exprtype)); - this->set_attribute (LITERALS[TYPE], - xid); - - { - ES_Guard me_tv (LITERALS[ME_TV_TAG], this); - { - ES_Guard tv (LITERALS[TV_TAG], this); - this->set_attribute (LITERALS[TAG], LITERALS[INIT_VAL]); - this->set_attribute (LITERALS[VALUE], str_value.get ()); - } - } - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_enum_val (AST_EnumVal *node) - { - XMI_TRACE ("enum val"); - - if (this->skip_imported_ && node->imported ()) - { - return 0; - } - - if (!this->visiting_enum_) - { - // It makes sence only to process enumvals in enum "scope". - return 0; - } - - try - { - ES_Guard att_guard (LITERALS[ATTR_TAG], this); - - this->create_and_store_xmi_id ( - ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), - node); - this->set_attribute ( - LITERALS[NAME], - ACE_TEXT_CHAR_TO_TCHAR (node->original_local_name ()->get_string ())); - - // I think this is fixed. - this->set_attribute (LITERALS[MULT], LITERALS[MULT_OTO]); - this->set_containing_element (LITERALS[OWNER]); - - ES_Guard me_guard (LITERALS[ME_TV_TAG], this); - ES_Guard tv_guard (LITERALS[TV_TAG], this); - - this->set_attribute (LITERALS[TAG], LITERALS[IDLORDER]); - - // convert the enum value to a string - // need a buffer, with a little safety padding - - ACE_Auto_Basic_Array_Ptr<ACE_TCHAR> buffer - (this->number_to_string (node->constant_value ()->ev ()->u.eval)); - - this->set_attribute (LITERALS[VALUE], buffer.get ()); - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_array (AST_Array *node) - { - XMI_TRACE ("array val"); - - if (this->skip_imported_ && node->imported ()) - { - return 0; - } - - try - { - this->gen_common_elements (node, - LITERALS[ST_ARR]); - - this->gen_array_associations (node, node); - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - void - idl3_to_xmi_visitor::gen_array_associations (AST_Decl *node, - AST_Array *array) - { - // <UML:Namespace.ownedElement> - NS_Guard global_ns (ACE_TEXT ("::"), this); - - // <UML:Association xmi.id="xmi.1210085542354" - // visibility="public" namespace="xmi.1210085542350"> - ES_Guard assoc_group (this->associations_, this); - ES_Guard assoc_g (LITERALS[ASSOC_TAG], this); - - XStr xid = this->gen_xmi_id (node); - this->set_attribute (LITERALS[XMI_ID], xid); - this->set_attribute (LITERALS[VISIBIL], LITERALS[PUBLIC]); - this->set_containing_element (LITERALS[NS]); - - // <UML:Association.connection> - ES_Guard assoc_conn (LITERALS[ASSOC_CONN_TAG], this); - - { - // <UML:AssociationEnd multiplicity="0..1" type="xmi.1210085542353"> - ES_Guard assocend (LITERALS[ASSOC_END_TAG], this); - - this->set_attribute (LITERALS[MULT], LITERALS[MULT_ZTO]); - - xid = this->lookup_xid (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ())); - this->set_attribute (LITERALS[TYPE], xid); - - // <UML:AssociationEnd.qualifier> - ES_Guard assoc_qual (LITERALS[ASSOC_END_QUAL_TAG], this); - - for (unsigned long i = 0; - array != 0 && i < array->n_dims (); - ++i) - { - // <UML:Attribute xmi.id="xmi.1210085542355" - // name="index0" type='xmi.1210085542329'> - // N.B. that type is long. - ES_Guard attr (LITERALS[ATTR_TAG], this); - - xid = this->gen_xmi_id (node); - this->set_attribute (LITERALS[XMI_ID], xid); - - std::stringstream str; - str << LITERALS[INDEX]; - str << i; - - this->set_attribute ( - LITERALS[NAME], - ACE_TEXT_CHAR_TO_TCHAR (str.str ().c_str ())); - xid = this->lookup_xid (LITERALS[ST_LONG]); - this->set_attribute (LITERALS[TYPE], xid); - - // <UML:ModelElement.constraint> - ES_Guard me_c (LITERALS[ME_CONS_TAG], this); - - // <UML:Constraint xmi.id="xmi.1210085542356"> - ES_Guard cons (LITERALS[CONSTRAINT], this); - - xid = this->gen_xmi_id (node); - this->set_attribute (LITERALS[XMI_ID], xid); - - // <UML:ModelElement.taggedValue> - ES_Guard me_tv (LITERALS[ME_TV_TAG], this); - - // <UML:TaggedValue tag="constraintUpperValue" value="4"/> - ES_Guard tv (LITERALS[TV_TAG], this); - - this->set_attribute (LITERALS[TAG], LITERALS[CONST_UPPER]); - - ACE_Auto_Basic_Array_Ptr<ACE_TCHAR> buffer ( - this->number_to_string (array->dims ()[i]->ev ()->u.ulval)); - - this->set_attribute (LITERALS[VALUE], buffer.get ()); - } - } - - // <UML:AssociationEnd multiplicity="1..1" - // type="xmi.1210085542346"/> - type is Char for this IDL - ES_Guard assoc_end (LITERALS[ASSOC_END_TAG], this); - this->set_attribute (LITERALS[MULT], LITERALS[MULT_OTO]); - - XStr arr_type = this->lookup_type_xid (array->base_type ()); - this->set_attribute (LITERALS[TYPE], arr_type); - } - - int - idl3_to_xmi_visitor::visit_sequence (AST_Sequence *node) - { - XMI_TRACE ("sequence val"); - - if (this->skip_imported_ && node->imported ()) - { - return 0; - } - - try - { - this->gen_common_elements (node, - LITERALS[ST_SEQ]); - - // Generate the bounds and type on the sequence, which is an - // association in the association tree. - this->gen_sequence_associations (node, node); - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - void - idl3_to_xmi_visitor::gen_sequence_associations (AST_Decl *node, - AST_Sequence *sequence) - { - // <UML:Namespace.ownedElement> - NS_Guard global_ns (ACE_TEXT ("::"), this); - - // <UML:Association xmi.id="xmi.1210085542354" - // visibility="public" namespace="xmi.1210085542350"> - ES_Guard assoc_group (this->associations_, this); - ES_Guard assoc_g (LITERALS[ASSOC_TAG], this); - - XStr xid = this->gen_xmi_id (node); - this->set_attribute (LITERALS[XMI_ID], xid); - this->set_attribute (LITERALS[VISIBIL], LITERALS[PUBLIC]); - this->set_containing_element (LITERALS[NS]); - - // <UML:Association.connection> - ES_Guard assoc_conn (LITERALS[ASSOC_CONN_TAG], this); - - { - // <UML:AssociationEnd multiplicity="0..1" type="xmi.1210085542353"> - ES_Guard assocend (LITERALS[ASSOC_END_TAG], this); - - this->set_attribute (LITERALS[MULT], LITERALS[MULT_ZTO]); - - xid = this->lookup_xid (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ())); - this->set_attribute (LITERALS[TYPE], xid); - - // <UML:AssociationEnd.qualifier> - ES_Guard assoc_qual (LITERALS[ASSOC_END_QUAL_TAG], this); - - ES_Guard attr (LITERALS[ATTR_TAG], this); - - xid = this->gen_xmi_id (node); - this->set_attribute (LITERALS[XMI_ID], xid); - this->set_attribute (LITERALS[NAME], LITERALS[INDEX]); - xid = this->lookup_xid (LITERALS[ST_LONG]); - this->set_attribute (LITERALS[TYPE], xid); - - ES_Guard me_c (LITERALS[ME_CONS_TAG], this); - ES_Guard cons (LITERALS[CONSTRAINT], this); - ES_Guard me_tv (LITERALS[ME_TV_TAG], this); - ES_Guard tv (LITERALS[TV_TAG], this); - - this->set_attribute (LITERALS[TAG], LITERALS[CONST_UPPER]); - - // @@TODO: need to extract bound from node. - if (sequence->unbounded ()) - { - this->set_attribute (LITERALS[VALUE], - LITERALS[UNBOUNDED_SEQ]); - } - else - { // bounded sequence - // convert the array bound to a string - // need a buffer, with a little safety padding - ACE_Auto_Basic_Array_Ptr<ACE_TCHAR> buffer ( - this->number_to_string (sequence->max_size ()->ev ()->u.ulval)); - - this->set_attribute (LITERALS[VALUE], buffer.get ()); - } - } - - // <UML:AssociationEnd multiplicity="1..1" - // type="xmi.1210085542346"/> - type is Char for this IDL - ES_Guard assoc_end (LITERALS[ASSOC_END_TAG], this); - this->set_attribute (LITERALS[MULT], LITERALS[MULT_OTO]); - - XStr seq_type = this->lookup_type_xid (sequence->base_type ()); - this->set_attribute (LITERALS[TYPE], seq_type); - } - - int - idl3_to_xmi_visitor::visit_string (AST_String *) - { - XMI_TRACE ("string"); - return 0; - } - - int - idl3_to_xmi_visitor::visit_typedef (AST_Typedef *node) - { - XMI_TRACE ("typedef"); - - if (this->skip_imported_ && node->imported ()) - { - return 0; - } - - try - { - ES_Guard class_guard (LITERALS[CLASS_TAG], this); - - // Anonymous Sequences and arrays appear to be a special case - AST_Decl *base (node->base_type ()); - if (base->node_type () == AST_Decl::NT_sequence) - { - this->gen_common_elements (node, LITERALS[ST_SEQ]); - - AST_Sequence* sequence = - AST_Sequence::narrow_from_decl (base); - this->gen_sequence_associations (node, sequence); - } - else if (base->node_type () == AST_Decl::NT_array) - { - this->gen_common_elements (node, LITERALS[ST_ARR]); - - AST_Array* array = - AST_Array::narrow_from_decl (base); - this->gen_array_associations (node, array); - } - else - { - this->gen_common_elements (node, - LITERALS[ST_TYPEDEF]); - - // Generalization. Assignment required for memory management. - XStr xid = this->add_generalization (node, - node->base_type ()); - ACE_UNUSED_ARG (xid); - } - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - idl3_to_xmi_visitor::visit_root (AST_Root *node) - { - XMI_TRACE ("root"); - try - { - ACE_CString fn; - - if ((fn = be_global->filename ()) == "") - { - fn = idl_global->stripped_filename ()->get_string (); - fn = fn.substr (0, fn.rfind ('.')); - fn += ".xmi"; - } - - const char *path = be_global->output_dir (); - ACE_CString target_name; - - if (path != 0) - { - target_name = path; - target_name += "/"; - } - - target_name += fn; - - XML::NoOp_Resolver res_func; - XML::XML_Schema_Resolver<> resolver (res_func); - XML::XML_Error_Handler handler; - XML::XML_Helper<> helper (&resolver, &handler); - - // Create XML document - std::auto_ptr<DOMDocumentType> doctype ( - helper.create_doctype (ACE_TEXT("XMI"), - 0, - ACE_TEXT_CHAR_TO_TCHAR (be_global->dtd ()))); - - if ((this->dom_ = helper.create_dom (ACE_TEXT("XMI"), - ACE_TEXT(""), - doctype.get ())) == 0) - ACE_ERROR_RETURN ((LM_ERROR, "Unable to create XML document."), -1); - - this->root_ = this->dom_->getDocumentElement (); - - this->stack_.push (this->root_); - - this->set_attribute (LITERALS[VERSION_TAG], - LITERALS[VERSION_VALUE]); - - this->set_attribute (LITERALS[NS_TAG], - LITERALS[NS_VALUE]); - - DOMElement *tmp = 0; - - // Pregenerate stereotypes to cache xmi.ids. - DOMElement *stereotypes = this->generate_stereotypes (); - - // Create XMI header - { - ES_Guard ht_g (LITERALS[HEADER_TAG], this); - ES_Guard d_t (LITERALS[DOC_TAG], this); - ES_Guard e_t (LITERALS[EXPORTER_TAG], this); - this->add_text (LITERALS[EXPORTER_VALUE]); - } - - this->stack_.push (this->create_element (LITERALS[CONTENT_TAG])); - this->stack_.push (this->create_element (LITERALS[MODEL_TAG])); - - // Store the base model xid - this->set_attribute (LITERALS[XMI_ID], this->base_id_); - this->id_map_.bind (ACE_TEXT ("::"), this->base_id_); - - - // Global namespace - this->stack_.push (this->create_element (LITERALS[OWNEDELEMENT_TAG])); - this->namespace_.push (ACE_TEXT ("::")); - - // Create generalizations and associations elements, but don't join - // them to the tree yet - this->associations_ = - this->dom_->createElement (XStr (LITERALS[OWNEDELEMENT_TAG])); - this->generalizations_ = - this->dom_->createElement (XStr (LITERALS[OWNEDELEMENT_TAG])); - - if (this->visit_scope (node) != 0) - { - ACE_ERROR_RETURN ((LM_ERROR, - "idl3_to_idl2_visitor::visit_root - " - "codegen for scope failed\n"), - -1); - } - - this->stack_.pop (tmp); - - this->stack_.top (tmp); - - tmp->appendChild (this->generalizations_); - tmp->appendChild (this->associations_); - tmp->appendChild (stereotypes); - - helper.write_DOM (this->dom_, - ACE_TEXT_CHAR_TO_TCHAR (target_name.c_str ())); - - this->id_map_.close (); - this->base_id_.reset (); - } - catch (const Error &ex) - { - if (ex.node_ != 0) - ACE_ERROR ((LM_ERROR, "%s:%d:error: %s\n", - ex.node_->file_name ().c_str (), - ex.node_->line (), - ex.diag_.c_str ())); - else - ACE_ERROR ((LM_ERROR, "::error:%s\n", - ex.diag_.c_str ())); - - return -1; - } - return 0; - } - - int - idl3_to_xmi_visitor::visit_native (AST_Native *node) - { - XMI_TRACE ("native"); - - if (this->skip_imported_ && node->imported ()) - { - return 0; - } - - try - { - ES_Guard class_guard (LITERALS[CLASS_TAG], this); - - this->gen_common_elements (node, LITERALS[ST_NATIVE]); - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - void - idl3_to_xmi_visitor::set_attribute (const ACE_TCHAR *name, - const ACE_TCHAR *value) - { - DOMElement *ele = 0; - this->stack_.top (ele); - - ele->setAttribute (XStr (name), XStr (value)); - } - - - void - idl3_to_xmi_visitor::set_attribute (const ACE_TCHAR *name, - const XMLCh *value) - { - DOMElement *ele = 0; - this->stack_.top (ele); - - ele->setAttribute (XStr (name), value); - } - - void - idl3_to_xmi_visitor::add_text (const ACE_TCHAR *text) - { - DOMElement *ele = 0; - this->stack_.top (ele); - - DOMText *node = this->dom_->createTextNode (XStr (text)); - ele->appendChild (node); - } - - DOMElement * - idl3_to_xmi_visitor::create_element (const ACE_TCHAR *name) - { - DOMElement *ele = 0; - this->stack_.top (ele); - - DOMElement *node = this->dom_->createElement (XStr (name)); - - ele->appendChild (node); - - return node; - } - - DOMElement * - idl3_to_xmi_visitor::generate_stereotypes (void) - { - DOMElement *retval = - this->dom_->createElement (XStr (LITERALS[OWNEDELEMENT_TAG])); - - // put it on the stack to subsequent create_element calls refer to it. - this->stack_.push (retval); - - this->add_stereotype (ST_CONSUMES, ASSOC); - this->add_stereotype (ST_ANON_SEQ, CLASS); - this->add_stereotype (ST_PRINC, DATATYPE); - this->add_stereotype (ST_UNION, CLASS); - this->add_stereotype (ST_USES, ASSOC); - this->add_stereotype (ST_SEQ, CLASS); - this->add_stereotype (ST_ROE, __NULL); - this->add_stereotype (ST_RO, __NULL); - this->add_stereotype (ST_OBJ, DATATYPE); - this->add_stereotype (ST_STR, DATATYPE); - this->add_stereotype (ST_LD, DATATYPE); - this->add_stereotype (ST_ANON_ARR, CLASS); - this->add_stereotype (ST_ALIAS, CLASS); - this->add_stereotype (ST_NULL, DATATYPE); - this->add_stereotype (ST_VALUE, CLASS); - this->add_stereotype (ST_VOID, DATATYPE); - this->add_stereotype (ST_EX, CLASS); - this->add_stereotype (ST_OCTET, DATATYPE); - this->add_stereotype (ST_MANAGES, ASSOC); - this->add_stereotype (ST_WSTR, DATATYPE); - this->add_stereotype (ST_FLOAT, DATATYPE); - this->add_stereotype (ST_ENUM, CLASS); - this->add_stereotype (ST_VAL_SUP, CLASS); - this->add_stereotype (ST_MODULE, PACKAGE); - this->add_stereotype (ST_HFINDER, CLASS); - this->add_stereotype (ST_DOUBLE, DATATYPE); - this->add_stereotype (ST_LL, DATATYPE); - this->add_stereotype (ST_HFACT, CLASS); - this->add_stereotype (ST_ARR, CLASS); - this->add_stereotype (ST_COMP, CLASS); - this->add_stereotype (ST_SHORT, DATATYPE); - this->add_stereotype (ST_TYPEDEF, CLASS); - this->add_stereotype (ST_ULL, DATATYPE); - this->add_stereotype (ST_LONG, DATATYPE); - this->add_stereotype (ST_TC, DATATYPE); - this->add_stereotype (ST_HOME, CLASS); - this->add_stereotype (ST_STRUCT, CLASS); - this->add_stereotype (ST_FIXED, DATATYPE); - this->add_stereotype (ST_US, DATATYPE); - this->add_stereotype (ST_EMITS, ASSOC); - this->add_stereotype (ST_BOXVALUE, CLASS); - this->add_stereotype (ST_BOOL, DATATYPE); - this->add_stereotype (ST_CONST, ATTR); - this->add_stereotype (ST_PUBLISH, ASSOC); - this->add_stereotype (ST_CONSTANTS, CLASS); - this->add_stereotype (ST_PROVIDES, ASSOC); - this->add_stereotype (ST_WCHAR, DATATYPE); - this->add_stereotype (ST_UL, DATATYPE); - this->add_stereotype (ST_VAL_FACT, CLASS); - this->add_stereotype (ST_EVENT, CLASS); - this->add_stereotype (ST_CHAR, DATATYPE); - this->add_stereotype (ST_INTF, CLASS); - this->add_stereotype (ST_PRI_KEY, CLASS); - this->add_stereotype (ST_ANY, DATATYPE); - this->add_stereotype (ST_NATIVE, CLASS); - - this->stack_.pop (retval); - - return retval; - } - - void - idl3_to_xmi_visitor::add_stereotype (const LITERAL_T name, - const LITERAL_T bc) - { - // Generate our xmi.id - XStr xid (this->gen_xmi_id ()); - - // Bind the id in the map - this->id_map_.bind (LITERALS[name], xid); - - DOMElement *ele = this->create_element (LITERALS[STEREOTYPE_TAG]); - ele->setAttribute (XStr (LITERALS[XMI_ID]), xid); - ele->setAttribute (XStr (LITERALS[NAME]), XStr (LITERALS[name])); - ele->setAttribute (XStr (LITERALS[BASEC]), XStr (LITERALS[bc])); - - return; - } - - XMLCh * - idl3_to_xmi_visitor::gen_xmi_id (const ACE_TCHAR *name, long line) - { - if (current_id_ == 0) - { - ACE_OS::srand (ACE_OS::gettimeofday ().msec ()); - current_id_ = rand (); - } - std::stringstream str; - // Skip all characters that cannot be a first name char in xmi.id. - while (name && *name && !XMLChar1_1::isFirstNameChar(*name)) ++name; - // Since we use a file path as name then let's change all non-name - // chars for '_'. - while (name && *name) - { - if (XMLChar1_1::isNameChar (*name)) - { - str << *name; - } - else - { - str << '_'; - } - ++name; - } - str << ':' << line << '.' << current_id_++; - - XStr retval (ACE_TEXT_CHAR_TO_TCHAR (str.str ().c_str ())); - return retval.release (); - } - - XMLCh * - idl3_to_xmi_visitor::gen_xmi_id (AST_Decl *node) - { - if (current_id_ == 0) - { - ACE_OS::srand (ACE_OS::gettimeofday ().msec ()); - current_id_ = rand (); - } - - // we want these IDs to be unique, but the CDMW - // code generator sometimes depends - // on the order these things were declared in IDL, - // so for cases like that, - // we generate an ID that will sort to the order it - // was declared in IDL, - // no matter which order we visit the nodes. - if (node != 0) - { - return - gen_xmi_id ( - ACE_TEXT_CHAR_TO_TCHAR (node->file_name ().c_str ()), - node->line ()); - } - - std::stringstream str; - - str << "xmi." << current_id_++; - XStr retval (ACE_TEXT_CHAR_TO_TCHAR (str.str ().c_str ())); - return retval.release (); - } - - void - idl3_to_xmi_visitor::set_containing_element ( - const ACE_TCHAR *cont_name) - { - ACE_TString tmp; - XStr xid; - - this->namespace_.top (tmp); - this->id_map_.find (tmp, xid); - this->set_attribute (cont_name, xid); - } - - void - idl3_to_xmi_visitor::create_and_store_xmi_id (AST_Decl *node) - { - try - { - this->create_and_store_xmi_id ( - ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), node); - } - catch (Error &ex) - { - ex.node (node); - throw; - } - } - - void - idl3_to_xmi_visitor::create_and_store_xmi_id ( - const ACE_TCHAR *name, AST_Decl *node) - { - XStr xid = this->gen_xmi_id (node); - - // store xmi_id - if (this->id_map_.trybind (name, xid) == -1) - throw Error ("error binding in the XMI ID map"); - - this->set_attribute (LITERALS[XMI_ID], xid); - } - - XMLCh * - idl3_to_xmi_visitor::lookup_xid (const ACE_TCHAR *name) - { - XStr tmp; - if (this->id_map_.find (name, tmp) == -1) - { - ACE_CString err ("unknown XMI ID requested for "); - err += ACE_TEXT_ALWAYS_CHAR (name); - throw Error (err.c_str ()); - } - - return tmp.release (); - } - - XMLCh * - idl3_to_xmi_visitor::lookup_type_xid (AST_Type *node) - { - AST_PredefinedType *pdt = 0; - - switch (node->node_type ()) - { - case AST_Decl::NT_string: - return this->lookup_xid (LITERALS[ST_STR]); - case AST_Decl::NT_wstring: - return this->lookup_xid (LITERALS[ST_WSTR]); - - case AST_Decl::NT_pre_defined: - pdt = AST_PredefinedType::narrow_from_decl (node); - - switch (pdt->pt ()) - { - case AST_PredefinedType::PT_pseudo: - return this->lookup_xid (ACE_TEXT_CHAR_TO_TCHAR (pdt->repoID ())); - case AST_PredefinedType::PT_object: - return this->lookup_xid (LITERALS[ST_OBJ]); - case AST_PredefinedType::PT_any: - return this->lookup_xid (LITERALS[ST_ANY]); - case AST_PredefinedType::PT_long: - return this->lookup_xid (LITERALS[ST_LONG]); - case AST_PredefinedType::PT_ulong: - return this->lookup_xid (LITERALS[ST_UL]); - case AST_PredefinedType::PT_longlong: - return this->lookup_xid (LITERALS[ST_LL]); - case AST_PredefinedType::PT_ulonglong: - return this->lookup_xid (LITERALS[ST_ULL]); - case AST_PredefinedType::PT_short: - return this->lookup_xid (LITERALS[ST_SHORT]); - case AST_PredefinedType::PT_ushort: - return this->lookup_xid (LITERALS[ST_US]); - case AST_PredefinedType::PT_float: - return this->lookup_xid (LITERALS[ST_FLOAT]); - case AST_PredefinedType::PT_double: - return this->lookup_xid (LITERALS[ST_DOUBLE]); - case AST_PredefinedType::PT_longdouble: - return this->lookup_xid (LITERALS[ST_LD]); - case AST_PredefinedType::PT_char: - return this->lookup_xid (LITERALS[ST_CHAR]); - case AST_PredefinedType::PT_wchar: - return this->lookup_xid (LITERALS[ST_WCHAR]); - case AST_PredefinedType::PT_boolean: - return this->lookup_xid (LITERALS[ST_BOOL]); - case AST_PredefinedType::PT_octet: - return this->lookup_xid (LITERALS[ST_OCTET]); - case AST_PredefinedType::PT_void: - return this->lookup_xid (LITERALS[ST_VOID]); - default: - throw Error ("Unknown or unsupported predefined type", - pdt); - } - default: - return this->lookup_xid (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ())); - } - } - - void - idl3_to_xmi_visitor::find_and_set_xid_as_attr (const ACE_TCHAR *attr_name, - const ACE_TCHAR *xid_name) - { - XStr tmp; - - if (this->id_map_.find (xid_name, tmp) == -1) - { - ACE_CString err ("unknown XMI ID when looking up "); - err += ACE_TEXT_ALWAYS_CHAR (xid_name); - throw Error (err.c_str ()); - } - - this->set_attribute (attr_name, tmp); - } - - void - idl3_to_xmi_visitor::gen_tagged_value (AST_Decl *node) - { - ES_Guard me_guard (LITERALS[ME_TV_TAG], this); - ES_Guard tv_guard (LITERALS[TV_TAG], this); - - this->set_attribute (LITERALS[TAG], LITERALS[TYPEID]); - this->set_attribute (LITERALS[VALUE], - ACE_TEXT_CHAR_TO_TCHAR (node->repoID ())); - } - - XMLCh * - idl3_to_xmi_visitor::add_generalization (const ACE_TCHAR *sub, - const ACE_TCHAR *super) - { - return this->add_generalization (XStr (this->lookup_xid (sub)), - XStr (this->lookup_xid (super))); - } - - XMLCh * - idl3_to_xmi_visitor::add_generalization (AST_Type *sub, AST_Type *super) - { - return this->add_generalization (XStr (this->lookup_type_xid (sub)), - XStr (this->lookup_type_xid (super))); - } - - XMLCh * - idl3_to_xmi_visitor::add_generalization (const XMLCh *sub, - const XMLCh *super) - { - // Generate XMI ID - XStr xid (this->gen_xmi_id ()); - - { // add generalization to the 'generalizations' set - ES_Guard es_guard (this->generalizations_, this); - NS_Guard ns_guard (ACE_TEXT ("::"), this); - - ES_Guard gen_guard (LITERALS[GEN_TAG], this); - - this->set_attribute (LITERALS[XMI_ID], xid); - - this->set_containing_element (LITERALS[NS]); - - { // subtype - ES_Guard st_guard (LITERALS[GEN_SUB_TAG], this); - ES_Guard element_guard (LITERALS[GEN_ELEMENT_TAG], this); - - this->set_attribute (LITERALS[IDREF], sub); - } - - { // subtype - ES_Guard st_guard (LITERALS[GEN_SUPER_TAG], this); - ES_Guard element_guard (LITERALS[GEN_ELEMENT_TAG], this); - - this->set_attribute (LITERALS[IDREF], super); - } - } - - { // Reference generalization in the calling element. - ES_Guard et_g (LITERALS[GEN_ELEMENT_GEN_TAG], this); - ES_Guard g_g (LITERALS[GEN_TAG], this); - this->set_attribute (LITERALS[IDREF], xid); - } - - return xid.release (); - } - - void - idl3_to_xmi_visitor::add_port (const ACE_TCHAR *port_kind, - AST_Field *port_node) - { - if (port_node->node_type () == AST_Decl::NT_uses) - { - AST_Uses *u = AST_Uses::narrow_from_decl (port_node); - - if (u->is_multiple ()) - { - throw Error ("uses multiple not yet supported."); - } - } - - ES_Guard es_guard (this->associations_, this); - NS_Guard ns_guard (ACE_TEXT ("::"), this); - - ES_Guard assoc_guard (LITERALS[ASSOC_TAG], this); - - // Generate XMI ID - XStr xid (this->gen_xmi_id (port_node)); - this->set_attribute (LITERALS[XMI_ID], xid); - this->set_attribute (LITERALS[VISIBIL], LITERALS[PUBLIC]); - this->find_and_set_xid_as_attr (LITERALS[STEREO_ATTR], port_kind); - this->set_containing_element (LITERALS[NS]); - - ES_Guard conn_guard (LITERALS[ASSOC_CONN_TAG], this); - - { // component end - ES_Guard end_guard (LITERALS[ASSOC_END_TAG], this); - this->set_attribute (LITERALS[MULT], ACE_TEXT ("1")); - this->find_and_set_xid_as_attr ( - LITERALS[TYPE], - ACE_TEXT_CHAR_TO_TCHAR (this->cached_type_->repoID ())); - } - - { // component end - ES_Guard end_guard (LITERALS[ASSOC_END_TAG], this); - - Identifier *id = - IdentifierHelper::original_local_name ( - port_node->local_name ()); - - this->set_attribute (LITERALS[NAME], ACE_TEXT_CHAR_TO_TCHAR (id->get_string ())); - this->set_attribute (LITERALS[MULT], ACE_TEXT ("1")); - - this->find_and_set_xid_as_attr ( - LITERALS[TYPE], - ACE_TEXT_CHAR_TO_TCHAR (port_node->field_type ()->repoID ())); - - id->destroy (); - delete id; - id = 0; - } - } - - void - idl3_to_xmi_visitor::add_managed_component (const ACE_TCHAR *home, - const ACE_TCHAR *component) - { - ES_Guard es_guard (this->associations_, this); - NS_Guard ns_guard (ACE_TEXT ("::"), this); - - ES_Guard assoc_guard (LITERALS[ASSOC_TAG], this); - - // Generate XMI ID - XStr xid (this->gen_xmi_id ()); - this->set_attribute (LITERALS[XMI_ID], xid); - this->set_attribute (LITERALS[VISIBIL], LITERALS[PUBLIC]); - this->find_and_set_xid_as_attr (LITERALS[STEREO_ATTR], - LITERALS[ST_MANAGES]); - this->set_containing_element (LITERALS[NS]); - - ES_Guard conn_guard (LITERALS[ASSOC_CONN_TAG], this); - - { // home end - ES_Guard end_guard (LITERALS[ASSOC_END_TAG], this); - this->find_and_set_xid_as_attr (LITERALS[STEREO_ATTR], - LITERALS[ST_HOME]); - this->find_and_set_xid_as_attr (LITERALS[TYPE], home); - } - - { // component end - ES_Guard end_guard (LITERALS[ASSOC_END_TAG], this); - this->find_and_set_xid_as_attr (LITERALS[STEREO_ATTR], - LITERALS[ST_COMP]); - this->find_and_set_xid_as_attr (LITERALS[TYPE], component); - } - } - - void - idl3_to_xmi_visitor::gen_common_elements (AST_Decl *node, - const ACE_TCHAR *stereotype) - { - this->create_and_store_xmi_id (node); - this->set_attribute ( - LITERALS[NAME], - ACE_TEXT_CHAR_TO_TCHAR (node->original_local_name ()->get_string ())); - this->set_attribute (LITERALS[VISIBIL], LITERALS[PUBLIC]); - this->set_containing_element (LITERALS[NS]); - this->find_and_set_xid_as_attr (LITERALS[STEREO_ATTR], - stereotype); - - NS_Guard ns_guard (ACE_TEXT_CHAR_TO_TCHAR (node->repoID ()), this); - this->gen_tagged_value (node); - } - - idl3_to_xmi_visitor::ES_Guard::ES_Guard (const ACE_TCHAR *name, - idl3_to_xmi_visitor *vis) - : vis_ (*vis) - { - if (vis_.stack_.push (vis_.create_element (name))) - throw Error ("element stack error"); - } - - idl3_to_xmi_visitor::ES_Guard::ES_Guard (DOMElement *ele, - idl3_to_xmi_visitor *vis) - : vis_ (*vis) - { - if (vis_.stack_.push (ele) != 0) - throw Error ("element stack error"); - } - - idl3_to_xmi_visitor::ES_Guard::~ES_Guard (void) - { - DOMElement *tmp; - if (vis_.stack_.pop (tmp) != 0) - { - vis_.output_dirty_ = true; - ACE_ERROR ((LM_ERROR, "error: element stack underflow.")); - } - } - - idl3_to_xmi_visitor::NS_Guard::NS_Guard (const ACE_TCHAR *name, - idl3_to_xmi_visitor *vis) - : vis_ (*vis) - { - int res = vis_.namespace_.push (name); - - if (res == 0) return; - throw Error ("stack error"); - } - - idl3_to_xmi_visitor::NS_Guard::~NS_Guard (void) - { - ACE_TString tmp; - if (vis_.namespace_.pop (tmp) != 0) - { - vis_.output_dirty_ = true; - ACE_ERROR ((LM_ERROR, "error:namespace stack underflow")); - } - } - } -} diff --git a/CIAO/tools/IDL3_to_XMI/IDL3_to_XMI_visitor.h b/CIAO/tools/IDL3_to_XMI/IDL3_to_XMI_visitor.h deleted file mode 100644 index b3f1aaabf65..00000000000 --- a/CIAO/tools/IDL3_to_XMI/IDL3_to_XMI_visitor.h +++ /dev/null @@ -1,324 +0,0 @@ -/** - * @file IDL3_to_XMI_visitor.h - * @author William R. Otte <wotte@dre.vanderbilt.edu> - * - * Implements a visitor that generates XMI for the CARDAMOM - * code generation facility. - * - * This IDL->XMI mapping appears to be based on a IDL->UML->XMI - * mapping, and should be valid XMI version 1.1 - */ - -#ifndef CIAO_XMI_VISITOR_H -#define CIAO_XMI_VISITOR_H - -#include "ace/Containers.h" -#include "ace/Hash_Map_Manager.h" -#include "ace/Null_Mutex.h" -#include "ace/SString.h" - -#include "xercesc/util/XercesDefs.hpp" - -#include "ast_visitor.h" -#include "ast_component.h" -#include "ast_concrete_type.h" - -#include "utl_scoped_name.h" -#include "Literals.h" -#include "ace/XML_Utils/XercesString.h" -#include "CIAO_IDL3_TO_XMI_Export.h" - -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -class TAO_OutStream; -class UTL_ExceptList; - -namespace XERCES_CPP_NAMESPACE -{ - class DOMDocument; - class DOMElement; -} - -namespace DAnCE -{ - namespace XMI - { - - /** - * @class idl3_to_xmi_visitor - * @brief Visitor that generates XMI for the CARDAMOM code - * generation facilities. - */ - class CIAO_IDL3_TO_XMI_Export idl3_to_xmi_visitor : public ast_visitor - { - public: - idl3_to_xmi_visitor (bool skip_imported); - virtual ~idl3_to_xmi_visitor (void); - - virtual int visit_decl (AST_Decl *d); - virtual int visit_scope (UTL_Scope *node); - virtual int visit_type (AST_Type *node); - virtual int visit_predefined_type (AST_PredefinedType *node); - virtual int visit_module (AST_Module *node); - virtual int visit_template_module (AST_Template_Module *node); - virtual int visit_template_module_inst (AST_Template_Module_Inst *node); - virtual int visit_template_module_ref (AST_Template_Module_Ref *node); - virtual int visit_param_holder(AST_Param_Holder *node); - virtual int visit_interface (AST_Interface *node); - virtual int visit_interface_fwd (AST_InterfaceFwd *node); - virtual int visit_valuebox (AST_ValueBox *node); - virtual int visit_valuetype (AST_ValueType *node); - virtual int visit_valuetype_fwd (AST_ValueTypeFwd *node); - virtual int visit_eventtype (AST_EventType *node); - virtual int visit_eventtype_fwd (AST_EventTypeFwd *node); - virtual int visit_component (AST_Component *node); - virtual int visit_component_fwd (AST_ComponentFwd *node); - virtual int visit_provides (AST_Provides *node); - virtual int visit_uses (AST_Uses *node); - virtual int visit_publishes (AST_Publishes *node); - virtual int visit_emits (AST_Emits *node); - virtual int visit_consumes (AST_Consumes *node); - virtual int visit_porttype (AST_PortType *node); - virtual int visit_extended_port (AST_Extended_Port *node); - virtual int visit_mirror_port (AST_Mirror_Port *node); - virtual int visit_connector (AST_Connector *node); - virtual int visit_home (AST_Home *node); - virtual int visit_factory (AST_Factory *node); - virtual int visit_structure (AST_Structure *node); - virtual int visit_structure_fwd (AST_StructureFwd *node); - virtual int visit_exception (AST_Exception *node); - virtual int visit_expression (AST_Expression *node); - virtual int visit_enum (AST_Enum *node); - virtual int visit_operation (AST_Operation *node); - virtual int visit_field (AST_Field *node); - virtual int visit_argument (AST_Argument *node); - virtual int visit_attribute (AST_Attribute *node); - virtual int visit_union (AST_Union *node); - virtual int visit_union_fwd (AST_UnionFwd *node); - virtual int visit_union_branch (AST_UnionBranch *node); - virtual int visit_union_label (AST_UnionLabel *node); - virtual int visit_constant (AST_Constant *node); - virtual int visit_enum_val (AST_EnumVal *node); - virtual int visit_array (AST_Array *node); - virtual int visit_sequence (AST_Sequence *node); - virtual int visit_string (AST_String *node); - virtual int visit_typedef (AST_Typedef *node); - virtual int visit_root (AST_Root *node); - virtual int visit_native (AST_Native *node); - virtual int visit_finder (AST_Finder *node); - - struct Error - { - Error (const ACE_CString &diag, AST_Decl *node = 0) - : diag_ (diag), - node_ (node) - {} - - void node (AST_Decl *node) { if (node_ == 0) node_ = node; } - - const ACE_CString diag_; - AST_Decl *node_; - }; - - private: - /// Generates several elements common to most XMI elements. - /// Generates the following attributes: xmi.id, name, visibility, namespace, stereotype - /// and the tagged value grouping. - /// @param stereotype The stereotype this element should be associated with. - void gen_common_elements (AST_Decl *node, const ACE_TCHAR *stereotype); - - /// Converts a number into a string representation. - /// Caller responsible for memory. - template <typename T> - ACE_TCHAR * number_to_string (T val); - - /// Common elements of operation XMI generation - void visit_operation_impl (AST_Operation *node, const ACE_TCHAR *stereotype); - - /// implementation for elements common to both eventtypes - /// and valuetypes - void visit_valuetype_impl (AST_ValueType *node); - - /// implementation of elements common to exceptions and structures. - void visit_struct_impl (AST_Structure *node); - - /// Generation of common associations of anonymous and typedefed arrays. - void gen_array_associations (AST_Decl *node, AST_Array *array); - - /// Generation of common associations of anonymous and typedefed sequences. - void gen_sequence_associations (AST_Decl *node, AST_Sequence *sequence); - - /// sets an attribute on the element at the top of the stack. - void set_attribute (const ACE_TCHAR *name, - const ACE_TCHAR *value); - - - /// sets an attribute on the element at the top of the stack - void set_attribute (const ACE_TCHAR *name, - const XMLCh *value); - - /// Adds a text child to the element at the top of the stack - void add_text (const ACE_TCHAR *text); - - /// Greates a new element as a child of the current stack element - XERCES_CPP_NAMESPACE::DOMElement * create_element (const ACE_TCHAR *name); - - /// Generate stereotypes for XMI document - XERCES_CPP_NAMESPACE::DOMElement * generate_stereotypes (void); - - /// Helper method which creates new stereotype elements - void add_stereotype (const LITERAL_T name, - const LITERAL_T bc); - - /// Generates an XMI ID. - /// @param node If passed, the file name and line number will be - /// generated as part of the ID. - static XMLCh * gen_xmi_id (AST_Decl * node = 0); - - /// Generates an XMI ID with file_name and line as part of the id. - static XMLCh * gen_xmi_id (const ACE_TCHAR *file_name, long line); - - /// Used to store the next ID for generation - static size_t current_id_; - - /// Generates the tagged value grouping common to most XMI elements - void gen_tagged_value (AST_Decl *); - - /// Sets an attribute with name containment_name whose value is the - /// ID of the top of the namespace stack. - void set_containing_element (const ACE_TCHAR *containment_name); - - /// Looks up the xmi:id assoviated with xid_name and sets it as an - /// attribute - void find_and_set_xid_as_attr (const ACE_TCHAR *attr_name, const ACE_TCHAR *xid_name); - - /// Creates a XMI ID based on node, and sets its value to - /// the xmi.id attribute of the current top of element stack. - void create_and_store_xmi_id (AST_Decl *node); - - /// Creates a XMI ID based on node, and sets its value to - /// the name attribute of the current top of element stack. - void create_and_store_xmi_id (const ACE_TCHAR *name, AST_Decl *node = 0); - - /// Finds and returns the xmi.id associated with name. - XMLCh * lookup_xid (const ACE_TCHAR *name); - - /// Finds and returns the xmi.id associated with the provided type. - XMLCh * lookup_type_xid (AST_Type *); - - /// Used to add generalizations - most commonly used for supports - /// relationships. in component foo supports bar, foo is the sub, - /// bar is the super. - XMLCh * add_generalization (const ACE_TCHAR *sub, const ACE_TCHAR *super); - XMLCh * add_generalization (AST_Type *sub, AST_Type *super); - - XMLCh * add_generalization (const XMLCh *sub, const XMLCh *super); - - /// @param component Repository ID of component - /// @param port_kind text of port stereotype from LITERALS - /// @param port_type Repository ID of port type (ie, interface type for facet) - /// @param name The name of the port - /// @param is_multiple The multiplicity of the port (ie, uses multiple.) - void add_port (const ACE_TCHAR *port_kind, - AST_Field *port_node); - - void add_managed_component (const ACE_TCHAR *home, const ACE_TCHAR *component); - - - ACE_TCHAR * union_label_value (AST_Expression *exp); - - typedef ACE_Hash_Map_Manager_Ex< ACE_TString, - XML::XStr, - ACE_Hash <ACE_TString>, - ACE_Equal_To <ACE_TString>, - ACE_Null_Mutex > XMI_ID_MAP; - - /// Stores xmi.ids for elements, indexed by repoId. - XMI_ID_MAP id_map_; - - typedef ACE_Unbounded_Stack<XERCES_CPP_NAMESPACE::DOMElement *> ELEMENT_STACK; - - /// Stores elements we are currently generating XMI. Top of stack is the current - /// element. - ELEMENT_STACK stack_; - - struct ElementContext { - ACE_TString ns_; - XERCES_CPP_NAMESPACE::DOMElement *elem_; - }; - - typedef ACE_Hash_Map_Manager_Ex< ACE_TString, - ElementContext, - ACE_Hash <ACE_TString>, - ACE_Equal_To <ACE_TString>, - ACE_Null_Mutex > REPO_ID_MAP; - - /// Stores elements that were forward declared. Also stores modules that can - /// be reopened. - REPO_ID_MAP repo_id_map_; - - /// Provides a "protected" push that is popped when the current scope - /// is exited. - struct ES_Guard - { - ES_Guard (const ACE_TCHAR *name, idl3_to_xmi_visitor *); - ES_Guard (XERCES_CPP_NAMESPACE::DOMElement *ele, - idl3_to_xmi_visitor *); - ~ES_Guard (void); - - idl3_to_xmi_visitor &vis_; - }; - - friend struct ES_Guard; - - typedef ACE_Unbounded_Stack< ACE_TString > STRING_STACK; - - /// Stores namespaces associated with our current scope. - STRING_STACK namespace_; - - /// Provides a protected push for the namespace stack that - /// pops when the current scope is exited. - struct NS_Guard - { - NS_Guard (const ACE_TCHAR *name, idl3_to_xmi_visitor *); - ~NS_Guard (void); - - idl3_to_xmi_visitor &vis_; - }; - - friend struct NS_Guard; - - XERCES_CPP_NAMESPACE::DOMDocument *dom_; - - XERCES_CPP_NAMESPACE::DOMElement *root_; - - XERCES_CPP_NAMESPACE::DOMElement *generalizations_; - - XERCES_CPP_NAMESPACE::DOMElement *associations_; - - XML::XStr base_id_; - - /// true if for some reason the generated output is bad - /// and shouldn't be written. - bool output_dirty_; - - bool skip_imported_; - - /// true if we are in enum "scope". - bool visiting_enum_; - - /// Used to determine IDL ordering of union labels. - size_t order_; - - /// USed to cache the type of union descriminators - AST_ConcreteType *union_disc_; - - /// Used to cache the type whose scope we are currently in. - AST_Decl *cached_type_; - }; - } -} - -#endif diff --git a/CIAO/tools/IDL3_to_XMI/IR_Simulator_visitor.cpp b/CIAO/tools/IDL3_to_XMI/IR_Simulator_visitor.cpp deleted file mode 100644 index ceb1202f1c2..00000000000 --- a/CIAO/tools/IDL3_to_XMI/IR_Simulator_visitor.cpp +++ /dev/null @@ -1,1191 +0,0 @@ -#include "IR_Simulator_visitor.h" - -#include "be_sunsoft.h" -#include "be_extern.h" - -#include "ast_argument.h" -#include "ast_array.h" -#include "ast_attribute.h" -#include "ast_component_fwd.h" -#include "ast_provides.h" -#include "ast_uses.h" -#include "ast_publishes.h" -#include "ast_emits.h" -#include "ast_consumes.h" -#include "ast_enum.h" -#include "ast_enum_val.h" -#include "ast_eventtype.h" -#include "ast_eventtype_fwd.h" -#include "ast_exception.h" -#include "ast_finder.h" -#include "ast_field.h" -#include "ast_home.h" -#include "ast_operation.h" -#include "ast_root.h" -#include "ast_sequence.h" -#include "ast_string.h" -#include "ast_structure_fwd.h" -#include "ast_template_module.h" -#include "ast_template_module_inst.h" -#include "ast_template_module_ref.h" -#include "ast_param_holder.h" -#include "ast_typedef.h" -#include "ast_union.h" -#include "ast_union_branch.h" -#include "ast_union_fwd.h" -#include "ast_union_label.h" -#include "ast_valuebox.h" -#include "ast_valuetype_fwd.h" -#include "ast_native.h" -#include "utl_exceptlist.h" -#include "utl_identifier.h" -#include "utl_idlist.h" -#include "utl_string.h" -#include "global_extern.h" -#include "nr_extern.h" -#include "ace/OS_NS_stdio.h" - - -#include <iostream> -#include <limits> - -#if 0 -#define XMI_TRACE(X) std::cout << X << std::endl -#else -#define XMI_TRACE(X) -#endif - -namespace DAnCE -{ - namespace XMI - { - struct Incr_Guard - { - public: - Incr_Guard (size_t &subject, bool arm = false) - : subject_ (subject), - armed_ (arm) - { - } - - ~Incr_Guard (void) - { - if (this->armed_) - --subject_; - } - void arm (void) - { - this->armed_ = true; - ++subject_; - } - - private: - size_t &subject_; - bool armed_; - }; - - ir_simulator_visitor::ir_simulator_visitor (void) - : associating_ (false) - { - } - - ir_simulator_visitor::~ir_simulator_visitor (void) - { - } - - int - ir_simulator_visitor::visit_decl (AST_Decl *) - { - XMI_TRACE ("got a decl"); - return 0; - } - - int - ir_simulator_visitor::visit_scope (UTL_Scope *node) - { - XMI_TRACE ("got a scope"); - - for (UTL_ScopeActiveIterator si (node, UTL_Scope::IK_decls); - !si.is_done (); - si.next ()) - { - AST_Decl *d = si.item (); - - if (d->ast_accept (this) != 0) - { - ACE_ERROR_RETURN ((LM_ERROR, - "ir_simulator_visitor::visit_scope - " - "codegen for scope failed\n"), - -1); - } - } - return 0; - } - - int - ir_simulator_visitor::visit_type (AST_Type *) - { - XMI_TRACE ("got a type"); - return 0; - } - - int - ir_simulator_visitor::visit_predefined_type (AST_PredefinedType *) - { - XMI_TRACE ("predef type"); - return 0; - } - - int - ir_simulator_visitor::visit_module (AST_Module *node) - { - XMI_TRACE ("module"); - - if (!this->do_i_care (node)) - { - return 0; - } - - Incr_Guard guard (this->associating_); - - if (!this->associating_) - { - // not associating, imported, not my concern - if (node->imported ()) - { - return 0; - } - // not imported, but not associating, need to set the guard - else - { - guard.arm (); - } - } - // associating, import - else - { - node->set_imported (false); - } - - try - { - if (this->visit_scope (node) != 0) - { - ACE_ERROR_RETURN ((LM_ERROR, - "idl3_to_idl2_visitor::visit_module - " - "codegen for scope failed\n"), - -1); - } - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - ir_simulator_visitor::visit_template_module (AST_Template_Module *node) - { - XMI_TRACE ("template module"); - - throw Error ("Template modules not supported", node); - - return 0; - } - - int - ir_simulator_visitor::visit_template_module_inst ( - AST_Template_Module_Inst *node) - { - XMI_TRACE ("template module instance"); - - throw Error ("Template modules not supported", node); - - return 0; - } - - int - ir_simulator_visitor::visit_template_module_ref ( - AST_Template_Module_Ref *node) - { - XMI_TRACE ("template module reference"); - - throw Error ("Template modules not supported", node); - - return 0; - } - - int - ir_simulator_visitor::visit_param_holder (AST_Param_Holder *node) - { - XMI_TRACE ("param holder"); - - throw Error ("Param holders not supported", node); - - return 0; - } - - int - ir_simulator_visitor::visit_finder (AST_Finder *node) - { - XMI_TRACE ("finder"); - - throw Error ("Finders not supported", node); - - return 0; - } - - int - ir_simulator_visitor::visit_interface (AST_Interface *node) - { - XMI_TRACE ("interface"); - - if (!this->do_i_care (node)) - { - return 0; - } - - Incr_Guard guard (this->associating_); - - if (!this->associating_) - { - // not associating, imported, not my concern - if (node->imported ()) - { - return 0; - } - // not imported, but not associating, need to set the guard - else - { - guard.arm (); - } - } - // associating, import - else - { - node->set_imported (false); - } - - try - { - // Inheritance - for (long i = 0; i < node->n_inherits (); ++i) - { - node->inherits ()[i]->ast_accept (this); - } - - if (this->visit_scope (node) != 0) - { - ACE_ERROR_RETURN ((LM_ERROR, - "idl3_to_idl2_visitor::visit_interface - " - "codegen for scope failed\n"), - -1); - } - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - ir_simulator_visitor::visit_interface_fwd (AST_InterfaceFwd *node) - { - XMI_TRACE ("interface_fwd"); - - // won't hurt to import the fwd interface - node->set_imported (false); - - return 0; - } - - int - ir_simulator_visitor::visit_valuebox (AST_ValueBox *node) - { - XMI_TRACE ("valuebox"); - - if (!this->do_i_care (node)) - { - return 0; - } - - Incr_Guard guard (this->associating_); - - if (!this->associating_) - { - // not associating, imported, not my concern - if (node->imported ()) return 0; - // not imported, but not associating, need to set the guard - else guard.arm (); - } - // associating, import - else - { - node->set_imported (false); - } - - try - { - // **** need to visit type we are boxing? - node->boxed_type ()->ast_accept (this); - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - ir_simulator_visitor::visit_valuetype (AST_ValueType *node) - { - XMI_TRACE ("valuetype"); - - try - { - this->visit_valuetype_impl (node); - } - catch (Error &err) - { - err.node (node); - } - - return 0; - } - - void - ir_simulator_visitor::visit_valuetype_impl (AST_ValueType *node) - { - Incr_Guard guard (this->associating_); - - if (!this->do_i_care (node)) - { - return; - } - - if (!this->associating_) - { - // not associating, imported, not my concern - if (node->imported ()) - { - return; - } - // not imported, but not associating, need to set the guard - else - { - guard.arm (); - } - } - // associating, import - else - { - node->set_imported (false); - } - - try - { - AST_Type *t = node->inherits_concrete (); - AST_ValueType *v = - AST_ValueType::narrow_from_decl (t); - - if (v != 0) - { - this->visit_valuetype_impl (v); - } - - long lim = node->n_supports (); - AST_Type **sppts = node->supports (); - - for (long i = 0; i < lim; ++i) - { - sppts[i]->ast_accept (this); - } - - this->visit_scope (node); - } - catch (Error &err) - { - err.node (node); - throw; - } - } - - int - ir_simulator_visitor::visit_valuetype_fwd (AST_ValueTypeFwd *node) - { - XMI_TRACE ("valuetype_fwd"); - - try - { - // no harm from importing a fwd interface - // node->is_imported (false); - } - catch (Error &err) - { - err.node (node); - } - - return 0; - } - - int - ir_simulator_visitor::visit_component (AST_Component *node) - { - XMI_TRACE ("component"); - - if (!this->do_i_care (node)) - { - return 0; - } - - Incr_Guard guard (this->associating_); - - if (!this->associating_) - { - // not associating, imported, not my concern - if (node->imported ()) - { - return 0; - } - // not imported, but not associating, need to set the guard - else - { - guard.arm (); - } - } - // associating, import - else - { - node->set_imported (false); - } - - try - { - if (node->base_component () != 0) - { - node->base_component ()->ast_accept (this); - } - - long len = node->n_supports (); - AST_Type **sppts = node->supports (); - - for (long i = 0; i < len; ++i) - { - sppts[i]->ast_accept (this); - } - - this->visit_scope (node); - } - catch (Error &err) - { - err.node (node); - } - - return 0; - } - - int - ir_simulator_visitor::visit_component_fwd (AST_ComponentFwd *node) - { - XMI_TRACE ("component_fwd"); - - try - { - // no harm from importing a fwd interface - // node->is_imported (false); - } - catch (Error &err) - { - err.node (node); - } - - return 0; - } - - int - ir_simulator_visitor::visit_provides (AST_Provides *node) - { - return node->provides_type ()->ast_accept (this); - } - - int - ir_simulator_visitor::visit_uses (AST_Uses *node) - { - return node->uses_type ()->ast_accept (this); - } - - int - ir_simulator_visitor::visit_publishes (AST_Publishes *node) - { - return node->publishes_type ()->ast_accept (this); - } - - int - ir_simulator_visitor::visit_emits (AST_Emits *node) - { - return node->emits_type ()->ast_accept (this); - } - - int - ir_simulator_visitor::visit_consumes (AST_Consumes *node) - { - return node->consumes_type ()->ast_accept (this); - } - - int - ir_simulator_visitor::visit_porttype (AST_PortType *) - { - return 0; - } - - int - ir_simulator_visitor::visit_extended_port (AST_Extended_Port *) - { - return 0; - } - - int - ir_simulator_visitor::visit_mirror_port (AST_Mirror_Port *) - { - return 0; - } - - int - ir_simulator_visitor::visit_connector (AST_Connector *) - { - return 0; - } - - int - ir_simulator_visitor::visit_eventtype (AST_EventType *node) - { - XMI_TRACE ("eventtype"); - - try - { - this->visit_valuetype_impl (node); - } - catch (Error &err) - { - err.node (node); - } - - return 0; - } - - int - ir_simulator_visitor::visit_eventtype_fwd (AST_EventTypeFwd *node) - { - XMI_TRACE ("eventtype_fwd"); - - this->visit_valuetype_fwd (node); - - return 0; - } - - int - ir_simulator_visitor::visit_home (AST_Home *node) - { - XMI_TRACE ("home"); - - if (!this->do_i_care (node)) - { - return 0; - } - - Incr_Guard guard (this->associating_); - - if (!this->associating_) - { - // not associating, imported, not my concern - if (node->imported ()) - { - return 0; - } - // not imported, but not associating, need to set the guard - else - { - guard.arm (); - } - } - // associating, import - else - { - node->set_imported (false); - } - - try - { - // **** supported interfaces - long len = node->n_supports (); - AST_Type **sppts = node->supports (); - - for (long i = 0; i < len; ++i) - { - sppts[i]->ast_accept (this); - } - - if (node->base_home ()) - { - node->base_home ()->ast_accept (this); - } - - if (node->managed_component ()) - { - node->managed_component ()->ast_accept (this); - } - - if (node->primary_key ()) - { - node->primary_key ()->ast_accept (this); - } - - this->visit_scope (node); - } - catch (Error &err) - { - err.node (node); - } - - return 0; - } - - int - ir_simulator_visitor::visit_factory (AST_Factory *node) - { - XMI_TRACE ("factory"); - - throw Error ("Factories not supported", node); - - return 0; - } - - int - ir_simulator_visitor::visit_structure (AST_Structure *node) - { - XMI_TRACE ("structure"); - - try - { - this->visit_struct_impl (node); - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - void - ir_simulator_visitor::visit_struct_impl (AST_Structure *node) - { - if (!this->do_i_care (node)) - { - return; - } - - Incr_Guard guard (this->associating_); - - if (!this->associating_) - { - // not associating, imported, not my concern - if (node->imported ()) - { - return; - } - // not imported, but not associating, need to set the guard - else - { - guard.arm (); - } - } - // associating, import - else - { - node->set_imported (false); - } - - try - { - this->visit_scope (node); - } - catch (Error &err) - { - err.node (node); - throw; - } - } - - int - ir_simulator_visitor::visit_structure_fwd (AST_StructureFwd *node) - { - XMI_TRACE ("structure_fwd"); - - try - { - node->set_imported (false); - } - catch (Error &err) - { - err.node (node); - } - - return 0; - } - - int - ir_simulator_visitor::visit_exception (AST_Exception *node) - { - XMI_TRACE ("exception"); - - - try - { - this->visit_struct_impl (node); - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - ir_simulator_visitor::visit_expression (AST_Expression *) - { - XMI_TRACE ("expression"); - - /* Incr_Guard guard (this->associating_); - - if (!this->associating_) - { - // not associating, imported, not my concern - if (node->imported ()) return; - // not imported, but not associating, need to set the guard - else guard.arm (); - } - // associating, import - else node->set_imported (false); - */ - return 0; - } - - int - ir_simulator_visitor::visit_enum (AST_Enum *node) - { - XMI_TRACE ("enum"); - - if (!this->do_i_care (node)) - { - return 0; - } - - Incr_Guard guard (this->associating_); - - if (!this->associating_) - { - // not associating, imported, not my concern - if (node->imported ()) - { - return 0; - } - // not imported, but not associating, need to set the guard - else - { - guard.arm (); - } - } - // associating, import - else - { - node->set_imported (false); - } - - try - { - this->visit_scope (node); - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - ir_simulator_visitor::visit_operation (AST_Operation *node) - { - XMI_TRACE ("operation"); - - Incr_Guard guard (this->associating_); - - if (!this->associating_) - { - // not associating, imported, not my concern - if (node->imported ()) - { - return 0; - } - // not imported, but not associating, need to set the guard - else - { - guard.arm (); - } - } - // associating, import - else - { - node->set_imported (false); - } - - try - { - // ACE_DEBUG ((LM_DEBUG, "foo")); - - if (node->return_type ()) - { - // ACE_DEBUG ((LM_DEBUG, "bar")); - node->return_type ()->ast_accept (this); - } - - // **** arguments - // **** exceptions - UTL_ExceptList *exceptions = node->exceptions (); - - if (exceptions != 0 && exceptions->length () > 0) - { - for (UTL_ExceptlistActiveIterator ei (exceptions); - !ei.is_done (); - ei.next ()) - { - ei.item ()->ast_accept (this); - } - } - - this->visit_scope (node); - } - catch (Error &err) - { - err.node (node); - } - - return 0; - } - - int - ir_simulator_visitor::visit_field (AST_Field *node) - { - XMI_TRACE ("field"); - - if (node == 0) - { - ACE_DEBUG ((LM_DEBUG, "null field?\n")); - return 0; - } - - Incr_Guard guard (this->associating_); - - if (!this->associating_) - { - // not associating, imported, not my concern - if (node->imported ()) - { - return 0; - } - // not imported, but not associating, need to set the guard - else - { - guard.arm (); - } - } - // associating, import - else - { - node->set_imported (false); - } - - try - { - if (node->field_type ()) - { - node->field_type ()->ast_accept (this); - } - } - catch (Error &err) - { - err.node (node); - } - - return 0; - } - - int - ir_simulator_visitor::visit_argument (AST_Argument *node) - { - XMI_TRACE ("argument"); - - this->visit_field (node); - - return 0; - } - - int - ir_simulator_visitor::visit_attribute (AST_Attribute *node) - { - XMI_TRACE ("attribute"); - - return this->visit_field (node); - } - - int - ir_simulator_visitor::visit_union (AST_Union *node) - { - XMI_TRACE ("union"); - - if (!this->do_i_care (node)) - { - return 0; - } - - Incr_Guard guard (this->associating_); - - if (!this->associating_) - { - // not associating, imported, not my concern - if (node->imported ()) - { - return 0; - } - // not imported, but not associating, need to set the guard - else - { - guard.arm (); - } - } - // associating, import - else - { - node->set_imported (false); - } - - if (node->disc_type ()) - { - this->visit_type (node->disc_type ()); - } - - return this->visit_scope (node); - } - - int - ir_simulator_visitor::visit_union_fwd (AST_UnionFwd *node) - { - XMI_TRACE ("union_fwd"); - node->set_imported (false); - return 0; - } - - int - ir_simulator_visitor::visit_union_branch (AST_UnionBranch *node) - { - XMI_TRACE ("union_branch"); - this->visit_field (node); - return 0; - } - - int - ir_simulator_visitor::visit_union_label (AST_UnionLabel *node) - { - XMI_TRACE ("union_label"); - - if (node->label_val ()) - { - node->label_val ()->ast_accept (this); - } - - return 0; - } - - int - ir_simulator_visitor::visit_constant (AST_Constant *) - { - XMI_TRACE ("constant"); - - return 0; - } - - int - ir_simulator_visitor::visit_enum_val (AST_EnumVal *) - { - XMI_TRACE ("enum val"); - return 0; - } - - int - ir_simulator_visitor::visit_array (AST_Array *node) - { - XMI_TRACE ("array val"); - - if (!this->do_i_care (node)) - { - return 0; - } - - Incr_Guard guard (this->associating_); - - if (!this->associating_) - { - // not associating, imported, not my concern - if (node->imported ()) - { - return 0; - } - // not imported, but not associating, need to set the guard - else - { - guard.arm (); - } - } - // associating, import - else - { - node->set_imported (false); - } - - return node->base_type ()->ast_accept (this); - } - - int - ir_simulator_visitor::visit_sequence (AST_Sequence *node) - { - XMI_TRACE ("sequence val"); - - try - { - Incr_Guard guard (this->associating_); - - if (!this->associating_) - { - // not associating, imported, not my concern - if (node->imported ()) - { - return 0; - } - // not imported, but not associating, need to set the guard - else - { - guard.arm (); - } - } - // associating, import - else - { - node->set_imported (false); - } - - node->base_type ()->ast_accept (this); - } - catch (Error &err) - { - err.node (node); - throw; - } - - return 0; - } - - int - ir_simulator_visitor::visit_string (AST_String *) - { - XMI_TRACE ("string"); - return 0; - } - - int - ir_simulator_visitor::visit_typedef (AST_Typedef *node) - { - XMI_TRACE ("typedef"); - - Incr_Guard guard (this->associating_); - - if (!this->associating_) - { - // not associating, imported, not my concern - if (node->imported ()) - { - return 0; - } - // not imported, but not associating, need to set the guard - else - { - guard.arm (); - } - } - // associating, import - else - { - node->set_imported (false); - } - - return node->base_type ()->ast_accept (this); - } - - int - ir_simulator_visitor::visit_root (AST_Root *node) - { - XMI_TRACE ("root"); - - try - { - this->visit_scope (node); - } - catch (const Error &ex) - { - if (ex.node_ != 0) - { - ACE_ERROR ((LM_ERROR, "%s:%d:error: %s\n", - ex.node_->file_name ().c_str (), - ex.node_->line (), - ex.diag_.c_str ())); - } - else - { - ACE_ERROR ((LM_ERROR, "::error:%s\n", - ex.diag_.c_str ())); - } - - return -1; - } - - return 0; - } - - int - ir_simulator_visitor::visit_native (AST_Native *) - { - XMI_TRACE ("native"); - return 0; - } - - bool - ir_simulator_visitor::do_i_care (AST_Decl *node) - { - std::string name (node->repoID ()); - - return this->seen_types_.insert (name).second; - } - } -} diff --git a/CIAO/tools/IDL3_to_XMI/IR_Simulator_visitor.h b/CIAO/tools/IDL3_to_XMI/IR_Simulator_visitor.h deleted file mode 100644 index 921de21a281..00000000000 --- a/CIAO/tools/IDL3_to_XMI/IR_Simulator_visitor.h +++ /dev/null @@ -1,131 +0,0 @@ -/** - * @file IR_Simulator_visitor.h - * @author William R. Otte <wotte@dre.vanderbilt.edu> - * - * Implements a visitor that generates XMI for the CARDAMOM - * code generation facility. - * - * This IDL->XMI mapping appears to be based on a IDL->UML->XMI - * mapping, and should be valid XMI version 1.1 - */ - -#ifndef CIAO_IR_SIMULATOR_VISITOR_H -#define CIAO_IR_SIMULATOR_VISITOR_H - -#include "ace/Containers.h" -#include "ace/Hash_Map_Manager.h" -#include "ace/Null_Mutex.h" -#include "ace/SString.h" - -#include "xercesc/util/XercesDefs.hpp" - -#include "ast_visitor.h" -#include "ast_component.h" -#include "utl_scoped_name.h" -#include "Literals.h" -#include "ace/XML_Utils/XercesString.h" -#include "CIAO_IDL3_TO_XMI_Export.h" - - -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -class TAO_OutStream; -class UTL_ExceptList; - -#include <set> -#include <string> - -namespace DAnCE -{ - namespace XMI - { - - /** - * @class ir_simulator_visitor - * @brief Visitor that generates XMI for the CARDAMOM code - * generation facilities. - */ - class CIAO_IDL3_TO_XMI_Export ir_simulator_visitor - : public ast_visitor - { - public: - ir_simulator_visitor (void); - virtual ~ir_simulator_visitor (void); - - virtual int visit_decl (AST_Decl *d); - virtual int visit_scope (UTL_Scope *node); - virtual int visit_type (AST_Type *node); - virtual int visit_predefined_type (AST_PredefinedType *node); - virtual int visit_module (AST_Module *node); - virtual int visit_template_module (AST_Template_Module *node); - virtual int visit_template_module_inst (AST_Template_Module_Inst *node); - virtual int visit_template_module_ref (AST_Template_Module_Ref *node); - virtual int visit_param_holder (AST_Param_Holder *node); - virtual int visit_finder (AST_Finder *node); - virtual int visit_interface (AST_Interface *node); - virtual int visit_interface_fwd (AST_InterfaceFwd *node); - virtual int visit_valuebox (AST_ValueBox *node); - virtual int visit_valuetype (AST_ValueType *node); - void visit_valuetype_impl (AST_ValueType *); - virtual int visit_valuetype_fwd (AST_ValueTypeFwd *node); - virtual int visit_component (AST_Component *node); - virtual int visit_component_fwd (AST_ComponentFwd *node); - virtual int visit_provides (AST_Provides *node); - virtual int visit_uses (AST_Uses *node); - virtual int visit_publishes (AST_Publishes *node); - virtual int visit_emits (AST_Emits *node); - virtual int visit_consumes (AST_Consumes *node); - virtual int visit_porttype (AST_PortType *node); - virtual int visit_extended_port (AST_Extended_Port *node); - virtual int visit_mirror_port (AST_Mirror_Port *node); - virtual int visit_connector (AST_Connector *node); - virtual int visit_eventtype (AST_EventType *node); - virtual int visit_eventtype_fwd (AST_EventTypeFwd *node); - virtual int visit_home (AST_Home *node); - virtual int visit_factory (AST_Factory *node); - virtual int visit_structure (AST_Structure *node); - void visit_struct_impl (AST_Structure *node); - virtual int visit_structure_fwd (AST_StructureFwd *node); - virtual int visit_exception (AST_Exception *node); - virtual int visit_expression (AST_Expression *node); - virtual int visit_enum (AST_Enum *node); - virtual int visit_operation (AST_Operation *node); - virtual int visit_field (AST_Field *node); - virtual int visit_argument (AST_Argument *node); - virtual int visit_attribute (AST_Attribute *node); - virtual int visit_union (AST_Union *node); - virtual int visit_union_fwd (AST_UnionFwd *node); - virtual int visit_union_branch (AST_UnionBranch *node); - virtual int visit_union_label (AST_UnionLabel *node); - virtual int visit_constant (AST_Constant *node); - virtual int visit_enum_val (AST_EnumVal *node); - virtual int visit_array (AST_Array *node); - virtual int visit_sequence (AST_Sequence *node); - virtual int visit_string (AST_String *node); - virtual int visit_typedef (AST_Typedef *node); - virtual int visit_root (AST_Root *node); - virtual int visit_native (AST_Native *node); - - struct Error - { - Error (const ACE_CString &diag, AST_Decl *node = 0) - : diag_ (diag), - node_ (node) - {} - - void node (AST_Decl *node) { if (node_ == 0) node_ = node; } - - const ACE_CString diag_; - AST_Decl *node_; - }; - - private: - bool do_i_care (AST_Decl *node); - size_t associating_; - std::set <std::string> seen_types_; - }; - } -} -#endif diff --git a/CIAO/tools/IDL3_to_XMI/Literals.cpp b/CIAO/tools/IDL3_to_XMI/Literals.cpp deleted file mode 100644 index 1224107f24c..00000000000 --- a/CIAO/tools/IDL3_to_XMI/Literals.cpp +++ /dev/null @@ -1,154 +0,0 @@ -#include "Literals.h" - -namespace DAnCE -{ - namespace XMI - { - - const ACE_TCHAR* const LITERALS[MAX_LITERAL] = - { - ACE_TEXT("xmi.version"), // VERSION_TAG - ACE_TEXT("1.1"), // VERSION_VALUE - ACE_TEXT("xmlns:UML"), // NS_TAG - ACE_TEXT("org.omg/UML1.3"), // NS_VALUE - ACE_TEXT("XMI.header"), // HEADER_TAG - ACE_TEXT("XMI.documentation"), // DOC_TAG - ACE_TEXT("XMI.exporter"), // EXPORTER_TAG - ACE_TEXT("DOC Group IDL to XMI converter"), // EXPORTER_VALUE - ACE_TEXT("XMI.content"), // CONTENT_TAG - ACE_TEXT("UML:Model"), // MODEL_TAG - ACE_TEXT("xmi.id"), // XMI_ID - ACE_TEXT("UML:Namespace.ownedElement"), // OWNEDELEMENT_TAG - ACE_TEXT("UML:Package"), // PACKAGE_TAG - ACE_TEXT("UML:ModelElement"), // MODELELEMENT_TAG - ACE_TEXT("UML:ModelElement.taggedValue"), // ME_TV_TAG - ACE_TEXT("UML:ModelElement.constraint"), // ME_CONS_TAG - ACE_TEXT("UML:Constraint"), // CONSTRAINT - ACE_TEXT("UML:TaggedValue"), // TV_TAG - ACE_TEXT("UML:Stereotype"), // STEREOTYPE_TAG - ACE_TEXT("UML:Class"), // CLASS_TAG - ACE_TEXT("UML:Operation"), // OP_TAG - ACE_TEXT("UML:BehavioralFeature.parameter"), // BFP_TAG - ACE_TEXT("UML:Parameter"), // PARAM_TAG - ACE_TEXT("UML:BehavioralFeature.raisedException"), // BF_RE_TAG - ACE_TEXT("UML:Exception"), // EXCEPT_TAG - ACE_TEXT("UML:Attribute"), // ATTR_TAG - ACE_TEXT("UML:Association"), // ASSOC_TAG - ACE_TEXT("UML:Association.connection"), // ASSOC_CONN_TAG - ACE_TEXT("UML:AssociationEnd"), // ASSOC_END_TAG - ACE_TEXT("UML:AssociationEnd.qualifier"), // ASSOC_END_QUAL_TAG - ACE_TEXT("UML:Generalization"), // GEN_TAG - ACE_TEXT("UML:Generalization.subtype"), // GEN_SUB_TAG - ACE_TEXT("UML:Generalization.supertype"), // GEN_SUPER_TAG - ACE_TEXT("UML:GeneralizableElement"), // GEN_ELEMENT_TAG - ACE_TEXT("UML:GeneralizableElement.generalization"),// GEN_ELEMENT_GEN_TAG - ACE_TEXT("UML:Exception"), // EXCEPTION_TAG - - // ******* Attributes - ACE_TEXT("tag"), // TAG - ACE_TEXT("value"), // VALUE - ACE_TEXT("name"), // NAME - ACE_TEXT("baseClass"), // BASEC - ACE_TEXT("visibility"), // VISIBIL - ACE_TEXT("stereotype"), // STEREO_ATTR - ACE_TEXT("namespace"), // NS - ACE_TEXT("owner"), // OWNER - ACE_TEXT("kind"), // KIND - ACE_TEXT("behavioralFeature"), // BFEATURE - ACE_TEXT("type"), // TYPE - ACE_TEXT("isAbstract"), // ABSTRACT - ACE_TEXT("multiplicity"), // MULT - ACE_TEXT("xmi.idref"), // IDREF - ACE_TEXT("ownerScope"), // OWNER_SCOPE - ACE_TEXT("changeable"), // CHANGEABLE - - // ******* Attribute values - ACE_TEXT("Association"), // ASSOC - ACE_TEXT("Class"), // CLASS - ACE_TEXT("DataType"), // DATATYPE - ACE_TEXT("Package"), // PACKAGE - ACE_TEXT("null"), // NULL - ACE_TEXT("Attribute"), // ATTR - ACE_TEXT("public"), // PUBLIC - ACE_TEXT("private"), // _PRIVATE - ACE_TEXT("typeid"), // TYPEID - ACE_TEXT("raises"), // RAISES - ACE_TEXT("return"), // RETURN - ACE_TEXT("in"), // _IN - ACE_TEXT("inout"), // INOUT - ACE_TEXT("out"), // _OUT - ACE_TEXT("true"), // _TRUE - ACE_TEXT("false"), // _FALSE - ACE_TEXT("TRUE"), // CAPS_TRUE - ACE_TEXT("FALSE"), // CAPS_FALSE - ACE_TEXT("1..1"), // MULT_OTO - ACE_TEXT("0..1"), // MULT_ZTO - ACE_TEXT("IDLOrder"), // IDLORDER - ACE_TEXT("index"), // INDEX - ACE_TEXT("constraintUpperValue"), // CONST_UPPER - ACE_TEXT("*"), // UNBOUNDED_SEQ - ACE_TEXT("Case"), // CASE - ACE_TEXT("default"), // DEFAULT_UNION - ACE_TEXT("classifier"), // CLASSIFIER - ACE_TEXT("frozen"), // FROZEN - ACE_TEXT("initialValue"), // INIT_VAL - - //******** Stereotypes - ACE_TEXT("CCMConsumes"), // ST_CONSUMES - ACE_TEXT("CORBAAnonymousSequence"), // ST_ANON_SEQ - ACE_TEXT("CORBAPrincipal"), // ST_PRINC - ACE_TEXT("CORBAUnion"), // ST_UNION - ACE_TEXT("CCMUses"), // ST_USES - ACE_TEXT("CORBASequence"), // ST_SEQ - ACE_TEXT("readonlyEnd"), // ST_ROE - ACE_TEXT("readonly"), // ST_RO - ACE_TEXT("CORBAObject"), // ST_OBJ - ACE_TEXT("CORBAstring"), // ST_STR - ACE_TEXT("CORBAlongdouble"), // ST_LD - ACE_TEXT("CORBAAnonymousArray"), // ST_ANON_ARR - ACE_TEXT("CORBAAlias"), // ST_ALIAS - ACE_TEXT("null"), // ST_NULL - ACE_TEXT("CORBAValue"), // ST_VALUE - ACE_TEXT("void"), // ST_VOID - ACE_TEXT("CORBAException"), // ST_EX - ACE_TEXT("CORBAoctet"), // ST_OCTET - ACE_TEXT("CCMManages"), // ST_MANAGES - ACE_TEXT("CORBAwstring"), // ST_WSTR - ACE_TEXT("CORBAfloat"), // ST_FLOAT - ACE_TEXT("CORBAEnum"), // ST_ENUM - ACE_TEXT("CORBAValueSupports"), // ST_VAL_SUP - ACE_TEXT("CORBAModule"), // ST_MODULE - ACE_TEXT("CCMHomeFinder"), // ST_HFINDER - ACE_TEXT("CORBAdouble"), // ST_DOUBLE - ACE_TEXT("CORBAlonglong"), // ST_LL - ACE_TEXT("CCMHomeFactory"), // ST_HFACT - ACE_TEXT("CORBAArray"), // ST_ARR - ACE_TEXT("CCMComponent"), // ST_COMP - ACE_TEXT("CORBAshort"), // ST_SHORT - ACE_TEXT("CORBATypedef"), // ST_TYPEDEF - ACE_TEXT("CORBAunsignedlonglong"), // ST_ULL - ACE_TEXT("CORBAlong"), // ST_LONG - ACE_TEXT("CORBATypeCode"), // ST_TC - ACE_TEXT("CCMHome"), // ST_HOME - ACE_TEXT("CORBAStruct"), // ST_STRUCT - ACE_TEXT("CORBAFixed"), // ST_FIXED - ACE_TEXT("CORBAunsignedshort"), // ST_US - ACE_TEXT("CCMEmits"), // ST_EMITS - ACE_TEXT("CORBABoxedValue"), // ST_BOXVALUE - ACE_TEXT("CORBAboolean"), // ST_BOOL - ACE_TEXT("CORBAConstant"), // ST_CONST - ACE_TEXT("CCMPublishes"), // ST_PUBLISH - ACE_TEXT("CORBAConstants"), // ST_CONSTANTS - ACE_TEXT("CCMProvides"), // ST_PROVIDES - ACE_TEXT("CORBAwchar"), // ST_WCHAR - ACE_TEXT("CORBAunsignedlong"), // ST_UL - ACE_TEXT("CORBAValueFactory"), // ST_VAL_FACT - ACE_TEXT("CCMEvent"), // ST_EVENT - ACE_TEXT("CORBAchar"), // ST_CHAR - ACE_TEXT("CORBAInterface"), // ST_INTF - ACE_TEXT("CCMPrimaryKey"), // ST_PRI_KEY - ACE_TEXT("CORBAany"), // ST_ANY - ACE_TEXT("CORBAnative") // ST_NATIVE - }; - } -} diff --git a/CIAO/tools/IDL3_to_XMI/Literals.h b/CIAO/tools/IDL3_to_XMI/Literals.h deleted file mode 100644 index c980fc06d36..00000000000 --- a/CIAO/tools/IDL3_to_XMI/Literals.h +++ /dev/null @@ -1,167 +0,0 @@ -/** - * @file Literals.h - * @author William R. Otte <wotte@dre.vanderbilt.edu> - */ - -#ifndef XMI_LITERALS_H -#define XMI_LITERALS_H - -#include "ace/config-lite.h" - -namespace DAnCE -{ - namespace XMI - { - enum LITERAL_T - { - VERSION_TAG, - VERSION_VALUE, - NS_TAG, - NS_VALUE, - HEADER_TAG, - DOC_TAG, - EXPORTER_TAG, - EXPORTER_VALUE, - CONTENT_TAG, - MODEL_TAG, - XMI_ID, - OWNEDELEMENT_TAG, - PACKAGE_TAG, - MODELELEMENT_TAG, - ME_TV_TAG, - ME_CONS_TAG, - CONSTRAINT, - TV_TAG, - STEREOTYPE_TAG, - CLASS_TAG, - OP_TAG, - BFP_TAG, - PARAM_TAG, - BF_RE_TAG, - EXCEPT_TAG, - ATTR_TAG, - ASSOC_TAG, - ASSOC_CONN_TAG, - ASSOC_END_TAG, - ASSOC_END_QUAL_TAG, - GEN_TAG, - GEN_SUB_TAG, - GEN_SUPER_TAG, - GEN_ELEMENT_TAG, - GEN_ELEMENT_GEN_TAG, - EXCEPTION_TAG, - - // Attributes - TAG, - VALUE, - NAME, - BASEC, - VISIBIL, - STEREO_ATTR, - NS, - OWNER, - KIND, - BFEATURE, - TYPE, - ABSTRACT, - MULT, - IDREF, - OWNER_SCOPE, - CHANGEABLE, - - // attribute values - ASSOC, - CLASS, - DATATYPE, - PACKAGE, - __NULL, - ATTR, - PUBLIC, - _PRIVATE, - TYPEID, - RAISES, - RETURN, - _IN, - INOUT, - _OUT, - _TRUE, - _FALSE, - CAPS_TRUE, - CAPS_FALSE, - MULT_OTO, - MULT_ZTO, - IDLORDER, - INDEX, - CONST_UPPER, - UNBOUNDED_SEQ, - CASE, - DEFAULT_UNION, - CLASSIFIER, - FROZEN, - INIT_VAL, - - // Stereotypes - ST_CONSUMES, - ST_ANON_SEQ, - ST_PRINC, - ST_UNION, - ST_USES, - ST_SEQ, - ST_ROE, - ST_RO, - ST_OBJ, - ST_STR, - ST_LD, - ST_ANON_ARR, - ST_ALIAS, - ST_NULL, - ST_VALUE, - ST_VOID, - ST_EX, - ST_OCTET, - ST_MANAGES, - ST_WSTR, - ST_FLOAT, - ST_ENUM, - ST_VAL_SUP, - ST_MODULE, - ST_HFINDER, - ST_DOUBLE, - ST_LL, - ST_HFACT, - ST_ARR, - ST_COMP, - ST_SHORT, - ST_TYPEDEF, - ST_ULL, - ST_LONG, - ST_TC, - ST_HOME, - ST_STRUCT, - ST_FIXED, - ST_US, - ST_EMITS, - ST_BOXVALUE, - ST_BOOL, - ST_CONST, - ST_PUBLISH, - ST_CONSTANTS, - ST_PROVIDES, - ST_WCHAR, - ST_UL, - ST_VAL_FACT, - ST_EVENT, - ST_CHAR, - ST_INTF, - ST_PRI_KEY, - ST_ANY, - ST_NATIVE, - - MAX_LITERAL - }; - - extern const ACE_TCHAR* const LITERALS[MAX_LITERAL]; - } -} - -#endif /* XMI_LITERALS_H */ diff --git a/CIAO/tools/IDL3_to_XMI/be_extern.h b/CIAO/tools/IDL3_to_XMI/be_extern.h deleted file mode 100644 index 1c84da15ce0..00000000000 --- a/CIAO/tools/IDL3_to_XMI/be_extern.h +++ /dev/null @@ -1,85 +0,0 @@ -// This may look like C, but it's really -*- C++ -*- -/* - -COPYRIGHT - -Copyright 1992, 1993, 1994 Sun Microsystems, Inc. Printed in the United -States of America. All Rights Reserved. - -This product is protected by copyright and distributed under the following -license restricting its use. - -The Interface Definition Language Compiler Front End (CFE) is made -available for your use provided that you include this license and copyright -notice on all media and documentation and the software program in which -this product is incorporated in whole or part. You may copy and extend -functionality (but may not remove functionality) of the Interface -Definition Language CFE without charge, but you are not authorized to -license or distribute it to anyone else except as part of a product or -program developed by you or with the express written consent of Sun -Microsystems, Inc. ("Sun"). - -The names of Sun Microsystems, Inc. and any of its subsidiaries or -affiliates may not be used in advertising or publicity pertaining to -distribution of Interface Definition Language CFE as permitted herein. - -This license is effective until terminated by Sun for failure to comply -with this license. Upon termination, you shall destroy or return all code -and documentation for the Interface Definition Language CFE. - -INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF -ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF -DEALING, USAGE OR TRADE PRACTICE. - -INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT -ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES -TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT. - -SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH -RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY -INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF. - -IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR -ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL -DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -Use, duplication, or disclosure by the government is subject to -restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in -Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR -52.227-19. - -Sun, Sun Microsystems and the Sun logo are trademarks or registered -trademarks of Sun Microsystems, Inc. - -SunSoft, Inc. -2550 Garcia Avenue -Mountain View, California 94043 - -NOTE: - -SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are -trademarks or registered trademarks of Sun Microsystems, Inc. - -*/ - -#ifndef TAO_IFR_BE_EXTERN_H -#define TAO_IFR_BE_EXTERN_H - -#include "CIAO_IDL3_TO_XMI_Export.h" -#include "be_global.h" - -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -extern CIAO_IDL3_TO_XMI_Export BE_GlobalData *be_global; - -extern CIAO_IDL3_TO_XMI_Export int BE_init (int &, ACE_TCHAR*[]); -extern CIAO_IDL3_TO_XMI_Export void BE_post_init (char *[], long); -extern CIAO_IDL3_TO_XMI_Export void BE_version (void); -extern CIAO_IDL3_TO_XMI_Export void BE_produce (void); -extern CIAO_IDL3_TO_XMI_Export void BE_cleanup (void); -extern CIAO_IDL3_TO_XMI_Export void BE_abort (void); - -#endif /* TAO_IFR_BE_EXTERN_H */ diff --git a/CIAO/tools/IDL3_to_XMI/be_global.cpp b/CIAO/tools/IDL3_to_XMI/be_global.cpp deleted file mode 100644 index 60e8f5ac83b..00000000000 --- a/CIAO/tools/IDL3_to_XMI/be_global.cpp +++ /dev/null @@ -1,170 +0,0 @@ - -//============================================================================= -/** - * @file be_global.cpp - * - * Stores global data specific to the compiler back end. - * - * @author Jeff Parsons <j.parsons@vanderbilt.edu> - */ -//============================================================================= - - -#include "be_global.h" -#include "ast_generator.h" -#include "global_extern.h" -#include "idl_defines.h" -#include "ace/OS_NS_stdio.h" - -CIAO_IDL3_TO_XMI_Export BE_GlobalData *be_global = 0; - -BE_GlobalData::BE_GlobalData (void) - : ir_filter_ (false), - filename_ (0), - output_dir_ (0), - dtd_ ("XMI.dtd"), - local_only_(true) -{ -} - -BE_GlobalData::~BE_GlobalData (void) -{ -} - -bool -BE_GlobalData::ir_filter (void) const -{ - return this->ir_filter_; -} - -void -BE_GlobalData::ir_filter (bool flag) -{ - this->ir_filter_ = flag; -} - -const char * -BE_GlobalData::filename (void) const -{ - return this->filename_; -} - -void -BE_GlobalData::filename (char *fname) -{ - this->filename_ = fname; -} - -const char* -BE_GlobalData::output_dir (void) const -{ - return this->output_dir_; -} - -void -BE_GlobalData::output_dir (const char* s) -{ - delete [] this->output_dir_; - this->output_dir_ = ACE::strnew (s); -} - -const char* -BE_GlobalData::dtd (void) const -{ - return this->dtd_.c_str (); -} - -void -BE_GlobalData::dtd (const char* s) -{ - this->dtd_ = s; -} - -bool -BE_GlobalData::local_only (void) const -{ - return this->local_only_; -} - -void -BE_GlobalData::local_only (bool flag) -{ - this->local_only_ = flag; -} - -void -BE_GlobalData::parse_args (long &i, char **av) -{ - switch (av[i][1]) - { - // Directory where the generated file is to - // be kept. Default is the current directory from which - // <tao_idl3_to_idl2> is called. - case 'f': - be_global->ir_filter (true); - break; - - case 'o': - switch (av[i][2]) - { - case 'd': - if (av[i][3] == '\0') - { - be_global->output_dir (av [i + 1]); - i++; - } - else - { - be_global->output_dir (av[i] + 3); - } - break; - - case 'f': - if (av[i][3] == '\0') - { - be_global->filename (av [i + 1]); - i++; - } - else - { - be_global->filename (av[i] + 3); - } - break; - default: - idl_global->set_compile_flags (idl_global->compile_flags () - | IDL_CF_ONLY_USAGE); - } - break; - - case 'x': - if (av[i][3] == '\0') - { - be_global->dtd (av [i + 1]); - ++i; - } - else - { - be_global->dtd (av[i] + 3); - } - break; - - case 'n': - be_global->local_only (false); - break; - - default: - ACE_ERROR (( - LM_ERROR, - ACE_TEXT ("IDL: I don't understand the '%s' option\n"), - av[i])); - - idl_global->set_compile_flags (idl_global->compile_flags () - | IDL_CF_ONLY_USAGE); - break; - } -} - -void -BE_GlobalData::destroy (void) -{ -} diff --git a/CIAO/tools/IDL3_to_XMI/be_global.h b/CIAO/tools/IDL3_to_XMI/be_global.h deleted file mode 100644 index f8ce0467a31..00000000000 --- a/CIAO/tools/IDL3_to_XMI/be_global.h +++ /dev/null @@ -1,82 +0,0 @@ -/* -*- c++ -*- */ - -//============================================================================= -/** - * @file be_global.h - * - * Header file for class containing compiler back end global data. - * - * @author Jeff Parsons <parsons@cs.wustl.edu> - */ -//============================================================================= - - -#ifndef TAO_IFR_BE_GLOBAL_H -#define TAO_IFR_BE_GLOBAL_H - -#include "CIAO_IDL3_TO_XMI_Export.h" -#include "idl_defines.h" - -#include "ace/SString.h" - -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -// Defines a class containing all back end global data. - -/** - * Storage of global data specific to the compiler back end - */ -class CIAO_IDL3_TO_XMI_Export BE_GlobalData -{ -public: - /// Constructor. - BE_GlobalData (void); - - /// Destructor. - virtual ~BE_GlobalData (void); - - // Data accessors. - bool ir_filter (void) const; - void ir_filter (bool flag); - - const char *filename (void) const; - void filename (char *fname); - - const char* output_dir (void) const; - void output_dir (const char* s); - - const char * dtd (void) const; - void dtd (const char *s); - - bool local_only (void) const; - void local_only (bool); - - /// Parse args that affect the backend. - void parse_args (long &i, char **av); - - /// Cleanup. - void destroy (void); - -private: - bool ir_filter_; - - /// Name of the IDL file we are processing. - char *filename_; - - /** - * Directory where the generated file is to be - * kept. Default value is 0 for this string which means the current - * directory from which the <tao_picml> is called. - */ - char *output_dir_; - - /// full path to dtd to be used. - ACE_CString dtd_; - - /// generate xmi for local entities only - bool local_only_; -}; - -#endif /* TAO_IFR_BE_GLOBAL_H */ diff --git a/CIAO/tools/IDL3_to_XMI/be_helper.cpp b/CIAO/tools/IDL3_to_XMI/be_helper.cpp deleted file mode 100644 index 1956f2e9110..00000000000 --- a/CIAO/tools/IDL3_to_XMI/be_helper.cpp +++ /dev/null @@ -1,425 +0,0 @@ - -//============================================================================= -/** - * @file be_helper.cpp - * - * Provides helper classes to print generated code to the output - * - * @author Aniruddha Gokhale Improvements by Carlos O'Ryan - */ -//============================================================================= - - -#include "be_helper.h" -#include "idl_defines.h" -#include "ace/OS_NS_stdio.h" -#include "ace/OS_NS_string.h" -#include "ace/os_include/os_ctype.h" - -static const char copyright[] = -" <--\n" -" -*- XML -*-\n" -"\n" -" $I" "d$\n\n" -" **** Code generated by the The ACE ORB (TAO) IDL Compiler ****\n" -" TAO and the TAO IDL Compiler have been developed by:\n" -" Center for Distributed Object Computing\n" -" Washington University\n" -" St. Louis, MO\n" -" USA\n" -" http:www.cs.wustl.edu/~schmidt/doc-center.html\n" -" and\n" -" Distributed Object Computing Laboratory\n" -" University of California at Irvine\n" -" Irvine, CA\n" -" USA\n" -" http:doc.ece.uci.edu/\n" -" and\n" -" Institute for Software Integrated Systems\n" -" Vanderbilt University\n" -" Nashville, TN\n" -" USA\n" -" http:www.isis.vanderbilt.edu/\n" -"\n" -" Information about TAO is available at:\n" -" http:www.cs.wustl.edu/~schmidt/TAO.html\n" -"-->"; - -TAO_NL::TAO_NL (void) -{ -} - -TAO_INDENT::TAO_INDENT (int do_now) - : do_now_ (do_now) -{ -} - -TAO_UNINDENT::TAO_UNINDENT (int do_now) - : do_now_ (do_now) -{ -} - -const TAO_NL be_nl; -const TAO_INDENT be_idt; -const TAO_INDENT be_idt_nl (1); -const TAO_UNINDENT be_uidt; -const TAO_UNINDENT be_uidt_nl (1); - -// Methods of the TAO_OutStream class. - -TAO_OutStream::TAO_OutStream (void) - : fp_ (0), - indent_level_ (0) -{ -} - -TAO_OutStream::~TAO_OutStream (void) -{ - // Close the underlying I/O handle only if it exists. - if (this->fp_ != 0) - { - ACE_OS::fclose (this->fp_); - this->fp_ = 0; - } - - indent_level_ = 0; -} - -int -TAO_OutStream::open (const char *fname) -{ - if (fname != 0) - { - // File name exists, open an I/O file handle. - this->fp_ = ACE_OS::fopen (fname, "w"); - - if (this->fp_ != 0) - { - // Put the copyright notice. - ACE_OS::fprintf (this->fp_, - "%s\n", - copyright); - - ACE_OS::fflush (this->fp_); - - return 0; - } - else - { - return -1; - } - } - else - { - return -1; - } -} - -// Return the underlying lowlevel file pointer. -// indentation. -FILE * -TAO_OutStream::file (void) -{ - return this->fp_; -} - -int -TAO_OutStream::incr_indent (unsigned short flag) -{ - indent_level_++; - - if (flag != 0) - { - return this->indent (); - } - else - { - // Do not indent output. - return 0; - } -} - -// Indentation -int -TAO_OutStream::decr_indent (unsigned short flag) -{ - this->indent_level_--; - // Just in case somebody gets "unindent happy". - if (this->indent_level_ < 0) - { - // ACE_DEBUG ((LM_DEBUG, "negative indentation?\n")); - this->indent_level_ = 0; - } - if (flag != 0) - { - return this->indent (); - } - else - { - // Do not indent output. - return 0; - } -} - -int -TAO_OutStream::reset (void) -{ - this->indent_level_ = 0; - return 0; -} - -// Indented print. -int -TAO_OutStream::indent (void) -{ - // Based on the current indentation level, leave appropriate number of blank - // spaces in the output. - if (this->indent_level_ > 0) - { - for (int i = 0; i < this->indent_level_; i++) - { - ACE_OS::fprintf (this->fp_, " "); - ACE_OS::fflush (this->fp_); - } - } - - return 0; -} - -int -TAO_OutStream::nl (void) -{ - ACE_OS::fprintf (this->fp_, "\n"); - this->indent (); - return 0; -} - -// Printf style variable argument print. -int -TAO_OutStream::print (const char *format, ...) -{ - int result = 0; - va_list ap; - va_start (ap, format); - ACE_OSCALL (::vfprintf (this->fp_, - format, - ap), - int, - -1, - result); - - ACE_OS::fflush (this->fp_); - va_end (ap); - - return result; -} - -void -TAO_OutStream::gen_ifndef_string (const char *fname, - const char *prefix, - const char *suffix) -{ - static char macro_name [NAMEBUFSIZE]; - - ACE_OS::memset (macro_name, - '\0', - NAMEBUFSIZE); - - const char *extension = ACE_OS::strrchr (fname, '.'); - - if (extension == 0) - { - // File seems to have no extension, so let us take the name - // as it is. - extension = fname; - } - - ACE_OS::sprintf (macro_name, "%s", prefix); - - size_t offset = ACE_OS::strlen (prefix); - - // Convert letters in fname to upper case. - for (int i = 0; i < (extension - fname); i++) - { - if (isalpha (fname [i])) - { - macro_name[i + offset] = (char) toupper (fname [i]); - } - else if (isdigit (fname [i])) - { - macro_name[i + offset] = fname[i]; - } - else - { - macro_name[i + offset] = '_'; - } - } - - ACE_OS::strcat (macro_name, suffix); - - // Generate the #ifndef ... #define statements. - this->print ("#ifndef %s\n", - macro_name); - this->print ("#define %s", - macro_name); -} - -TAO_OutStream & -TAO_OutStream::operator<< (const char *str) -{ - ACE_OS::fprintf (this->fp_, "%s", str); - ACE_OS::fflush (this->fp_); - return *this; -} - -TAO_OutStream & -TAO_OutStream::operator<< (const ACE_CDR::UShort num) -{ - ACE_OS::fprintf (this->fp_, - "%hu", - num); - - ACE_OS::fflush (this->fp_); - - return *this; -} - -TAO_OutStream & -TAO_OutStream::operator<< (const ACE_CDR::Short num) -{ - ACE_OS::fprintf (this->fp_, - "%hd", - num); - - ACE_OS::fflush (this->fp_); - - return *this; -} - -TAO_OutStream & -TAO_OutStream::operator<< (const ACE_CDR::ULong num) -{ - ACE_OS::fprintf (this->fp_, - "%lu", - (unsigned long) num); - - ACE_OS::fflush (this->fp_); - - return *this; -} - -TAO_OutStream & -TAO_OutStream::operator<< (const ACE_CDR::Long num) -{ - ACE_OS::fprintf (this->fp_, - "%ld", - (long) num); - - ACE_OS::fflush (this->fp_); - - return *this; -} - -#if defined (ACE_WIN64) -TAO_OutStream & -TAO_OutStream::operator<< (const ACE_CDR::ULongLong num) -{ - ACE_OS::fprintf (this->fp_, - ACE_UINT64_FORMAT_SPECIFIER, - num); - - ACE_OS::fflush (this->fp_); - - return *this; -} - -TAO_OutStream & -TAO_OutStream::operator<< (const ACE_CDR::LongLong num) -{ - ACE_OS::fprintf (this->fp_, - ACE_INT64_FORMAT_SPECIFIER, - num); - - ACE_OS::fflush (this->fp_); - - return *this; -} -#endif /* ACE_WIN64 */ - -TAO_OutStream & -TAO_OutStream::operator<< (const unsigned long num) -{ - ACE_OS::fprintf (this->fp_, - "%lu", - num); - - ACE_OS::fflush (this->fp_); - - return *this; -} - -TAO_OutStream & -TAO_OutStream::operator<< (const long num) -{ - ACE_OS::fprintf (this->fp_, - "%ld", - num); - - ACE_OS::fflush (this->fp_); - - return *this; -} - -TAO_OutStream & -TAO_OutStream::operator<< (const TAO_NL&) -{ - ACE_OS::fprintf (this->fp_ , - "\n"); - this->indent (); - - return *this; -} - -TAO_OutStream & -TAO_OutStream::operator<< (const TAO_INDENT& i) -{ - this->incr_indent (0); - - if (i.do_now_) - { - this->nl (); - } - - return *this; -} - -TAO_OutStream & -TAO_OutStream::operator<< (const TAO_UNINDENT& i) -{ - this->decr_indent (0); - - if (i.do_now_) - { - this->nl (); - } - - return *this; -} - -TAO_OutStream & -TAO_OutStream::operator<< (Identifier *id) -{ - return this->print (id); -} - -TAO_OutStream & -TAO_OutStream::operator<< (UTL_IdList *id) -{ - return this->print (id); -} - -TAO_OutStream & -TAO_OutStream::operator<< (AST_Expression *expr) -{ - return this->print (expr); -} diff --git a/CIAO/tools/IDL3_to_XMI/be_helper.h b/CIAO/tools/IDL3_to_XMI/be_helper.h deleted file mode 100644 index b471887e39e..00000000000 --- a/CIAO/tools/IDL3_to_XMI/be_helper.h +++ /dev/null @@ -1,172 +0,0 @@ -/* -*- c++ -*- */ -/** - * @file be_helper.h - * @author Aniruddha Gokhale - * @author Carlos O'Ryan - * - * Defines the abstract class for outputting the C++ mapping. This is a - * helper class to the singleton TAO_CodeGen class - */ - -#ifndef TAO_BE_OUTSTRM_H -#define TAO_BE_OUTSTRM_H - -#include "ace/CDR_Base.h" - -class Identifier; -class UTL_IdList; -class AST_Expression; - -// a dummy structure to inform TAO_OutStream's << operator to put a newline -// and use the current indentation for the succeeding line -struct TAO_NL -{ -public: - TAO_NL (void); -}; - -/** - * Operates like a manipulator, increasing the indentation level. - * - * Increase the indentation level, if the "do_now" parameter is - * not zero then the <indent> method is called on the stream. - */ -struct TAO_INDENT -{ - TAO_INDENT (int do_now = 0); - - const int do_now_; -}; - -/** - * Operates like a manipulator, decreasing the indentation level. - * - * Decrease the indentation level, if the "do_now" parameter is - * not zero then the <indent> method is called on the stream. - */ -struct TAO_UNINDENT -{ - TAO_UNINDENT (int do_now = 0); - - const int do_now_; -}; - -extern const TAO_NL be_nl; -extern const TAO_INDENT be_idt; -extern const TAO_INDENT be_idt_nl; -extern const TAO_UNINDENT be_uidt; -extern const TAO_UNINDENT be_uidt_nl; - -class TAO_OutStream -{ - // =TITLE - // TAO_OutStream - // - // =DESCRIPTION - // Defines an interface by which the backend code generator can - // print its output to the underlying I/O handle. This is a - // helper class that will be used by the TAO_CodeGen - // class. However, this is an abstract class and classes that - // understand specific front ends must derive from this class. -public: - TAO_OutStream (void); - // constructor. - - virtual ~TAO_OutStream (void); - // destructor. - - int open (const char *fname); - // open the underlying low-level handle for output. - - - FILE *file (void); - // Return the underlying lowlevel file pointer. - - int incr_indent (unsigned short flag = 1); - // increment the indentation level and by default actually indent the output - // accordingly - - int decr_indent (unsigned short flag = 1); - // decrease the indentation level and by default actually indent the output - // accordingly - - int reset (void); - // reset indentation level to 0 - - int indent (void); - // indent starting next line - - int nl (void); - // put a newline and indent on the next line - - int print (const char *format, ...); - // "printf" style variable argument print - - void gen_ifndef_string (const char *fname, - const char *prefix, - const char *suffix); - - // =overloaded operators - - TAO_OutStream &operator<< (const char *str); - // output the char string and return a reference to ourselves - - TAO_OutStream &operator<< (const ACE_CDR::UShort num); - // output the integer and return a reference to ourselves - - TAO_OutStream &operator<< (const ACE_CDR::Short num); - // output the integer and return a reference to ourselves - - TAO_OutStream &operator<< (const ACE_CDR::ULong num); - // output the integer and return a reference to ourselves - - TAO_OutStream &operator<< (const ACE_CDR::Long num); - // output the integer and return a reference to ourselves - -#if defined (ACE_WIN64) - TAO_OutStream &operator<< (const ACE_CDR::ULongLong num); - // output the integer and return a reference to ourselves - - TAO_OutStream &operator<< (const ACE_CDR::LongLong num); - // output the integer and return a reference to ourselves -#endif /* ACE_WIN64 */ - - TAO_OutStream &operator<< (const unsigned long num); - // output the integer and return a reference to ourselves - - TAO_OutStream &operator<< (const long num); - // output the integer and return a reference to ourselves - - // = MANIPULATORS - - TAO_OutStream &operator<< (const TAO_NL& nl); - TAO_OutStream &operator<< (const TAO_INDENT& i); - TAO_OutStream &operator<< (const TAO_UNINDENT& i); - - // The following will be provided by specialized classes - - TAO_OutStream &operator<< (Identifier *id); - // output an Identifier node - - TAO_OutStream &operator<< (UTL_IdList *idl); - // output a scoped name - - TAO_OutStream &operator<< (AST_Expression *expr); - // output an AST_Expression node - - // provided by specialized classes - virtual TAO_OutStream &print (Identifier *id) = 0; - - virtual TAO_OutStream &print (UTL_IdList *idl) = 0; - - virtual TAO_OutStream &print (AST_Expression *idl) = 0; - -protected: - FILE *fp_; - // the underlying low-level I/O handle - - int indent_level_; - // indentation level -}; - -#endif // if !defined diff --git a/CIAO/tools/IDL3_to_XMI/be_init.cpp b/CIAO/tools/IDL3_to_XMI/be_init.cpp deleted file mode 100644 index 22985cbaa95..00000000000 --- a/CIAO/tools/IDL3_to_XMI/be_init.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include "global_extern.h" -#include "be_extern.h" -#include "../../ciao/Version.h" - -CIAO_IDL3_TO_XMI_Export void -BE_version (void) -{ - ACE_DEBUG ((LM_DEBUG, - "%s %s\n", - ACE_TEXT ("TAO_ID3_TO_IDL2_BE, version"), - ACE_TEXT (CIAO_VERSION))); -} - -CIAO_IDL3_TO_XMI_Export int -BE_init (int & /* argc */, ACE_TCHAR * /* argv */ []) -{ - // Initialize BE global data object. - ACE_NEW_RETURN (be_global, - BE_GlobalData, - -1); - - idl_global->pass_orb_idl (true); - return 0; -} - -CIAO_IDL3_TO_XMI_Export void -BE_post_init (char * /* files */ [], long /* nfiles */) -{ -} diff --git a/CIAO/tools/IDL3_to_XMI/be_produce.cpp b/CIAO/tools/IDL3_to_XMI/be_produce.cpp deleted file mode 100644 index d119655fd12..00000000000 --- a/CIAO/tools/IDL3_to_XMI/be_produce.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/* - -COPYRIGHT - -Copyright 1992, 1993, 1994 Sun Microsystems, Inc. Printed in the United -States of America. All Rights Reserved. - -This product is protected by copyright and distributed under the following -license restricting its use. - -The Interface Definition Language Compiler Front End (CFE) is made -available for your use provided that you include this license and copyright -notice on all media and documentation and the software program in which -this product is incorporated in whole or part. You may copy and extend -functionality (but may not remove functionality) of the Interface -Definition Language CFE without charge, but you are not authorized to -license or distribute it to anyone else except as part of a product or -program developed by you or with the express written consent of Sun -Microsystems, Inc. ("Sun"). - -The names of Sun Microsystems, Inc. and any of its subsidiaries or -affiliates may not be used in advertising or publicity pertaining to -distribution of Interface Definition Language CFE as permitted herein. - -This license is effective until terminated by Sun for failure to comply -with this license. Upon termination, you shall destroy or return all code -and documentation for the Interface Definition Language CFE. - -INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES OF -ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS -FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A COURSE OF -DEALING, USAGE OR TRADE PRACTICE. - -INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED WITH NO SUPPORT AND WITHOUT -ANY OBLIGATION ON THE PART OF Sun OR ANY OF ITS SUBSIDIARIES OR AFFILIATES -TO ASSIST IN ITS USE, CORRECTION, MODIFICATION OR ENHANCEMENT. - -SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL HAVE NO LIABILITY WITH -RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY -INTERFACE DEFINITION LANGUAGE CFE OR ANY PART THEREOF. - -IN NO EVENT WILL SUN OR ANY OF ITS SUBSIDIARIES OR AFFILIATES BE LIABLE FOR -ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL, INDIRECT AND CONSEQUENTIAL -DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -Use, duplication, or disclosure by the government is subject to -restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in -Technical Data and Computer Software clause at DFARS 252.227-7013 and FAR -52.227-19. - -Sun, Sun Microsystems and the Sun logo are trademarks or registered -trademarks of Sun Microsystems, Inc. - -SunSoft, Inc. -2550 Garcia Avenue -Mountain View, California 94043 - -NOTE: - -SunOS, SunSoft, Sun, Solaris, Sun Microsystems or the Sun logo are -trademarks or registered trademarks of Sun Microsystems, Inc. - - */ - -#include "CIAO_IDL3_TO_XMI_Export.h" -#include "global_extern.h" -#include "be_extern.h" -#include "fe_extern.h" -#include "ast_root.h" -#include "IDL3_to_XMI_visitor.h" -#include "IR_Simulator_visitor.h" -#include <xercesc/util/PlatformUtils.hpp> - -// Clean up before exit, whether successful or not. -CIAO_IDL3_TO_XMI_Export void -BE_cleanup (void) -{ - idl_global->destroy (); -} - -// Abort this run of the BE. -CIAO_IDL3_TO_XMI_Export void -BE_abort (void) -{ - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("Fatal Error - Aborting\n"))); - - // BE_cleanup will be called after the exception is caught. - BE_cleanup (); -} - -// Do the work of this BE. This is the starting point for code generation. -CIAO_IDL3_TO_XMI_Export void -BE_produce (void) -{ - // Get the root node. - AST_Decl *d = idl_global->root (); - AST_Root *ast_root = AST_Root::narrow_from_decl (d); - - if (ast_root == 0) - { - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%N:%l) BE_produce - ") - ACE_TEXT ("No Root\n"))); - BE_abort (); - } - - xercesc::XMLPlatformUtils::Initialize (); - - if (be_global->ir_filter ()) - { - DAnCE::XMI::ir_simulator_visitor visitor; - - if (visitor.visit_root (ast_root) == -1) - { - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("error: an error occured in the ir_simulator visitor."))); - xercesc::XMLPlatformUtils::Terminate (); - BE_cleanup (); - return; - } - } - - DAnCE::XMI::idl3_to_xmi_visitor visitor (be_global->ir_filter ()); - - if (visitor.visit_root (ast_root) == -1) - { - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%N:%l) BE_produce -") - ACE_TEXT (" failed to accept visitor\n"))); - } - - xercesc::XMLPlatformUtils::Terminate (); - - // Clean up. - BE_cleanup (); -} diff --git a/CIAO/tools/IDL3_to_XMI/be_sunsoft.cpp b/CIAO/tools/IDL3_to_XMI/be_sunsoft.cpp deleted file mode 100644 index ede6220d500..00000000000 --- a/CIAO/tools/IDL3_to_XMI/be_sunsoft.cpp +++ /dev/null @@ -1,183 +0,0 @@ -#include "be_sunsoft.h" -#include "ast_expression.h" -#include "utl_identifier.h" -#include "utl_idlist.h" -#include "utl_string.h" -#include "ace/OS_NS_stdio.h" -#include "ace/OS_NS_string.h" -#include "ace/OS_NS_ctype.h" - -TAO_SunSoft_OutStream::TAO_SunSoft_OutStream (void) - : TAO_OutStream () -{ -} - -TAO_SunSoft_OutStream::~TAO_SunSoft_OutStream (void) -{ -} - -TAO_OutStream & -TAO_SunSoft_OutStream::print (Identifier *id) -{ - ACE_OS::fprintf (this->fp_, "%s", id->get_string ()); - - return *this; -} - -TAO_OutStream & -TAO_SunSoft_OutStream::print (UTL_IdList *idl) -{ - long first = true; - long second = false; - Identifier *id = 0; - - for (UTL_IdListActiveIterator i (idl); !i.is_done (); i.next ()) - { - if (!first) - { - *this << "::"; - } - else if (second) - { - first = second = false; - } - - // Print the identifier. - id = i.item (); - *this << id; - - if (first) - { - if (ACE_OS::strcmp (id->get_string (), "") != 0) - { - // Does not start with a "". - first = false; - } - else - { - second = true; - } - } - } - - return *this; -} - -TAO_OutStream& -TAO_SunSoft_OutStream::print (AST_Expression *expr) -{ - AST_Expression::AST_ExprValue *ev = expr->ev (); - - if (ev) - { - switch (ev->et) - { - case AST_Expression::EV_short: - this->TAO_OutStream::print (ACE_INT32_FORMAT_SPECIFIER_ASCII, ev->u.sval); - break; - case AST_Expression::EV_ushort: - this->TAO_OutStream::print (ACE_INT32_FORMAT_SPECIFIER_ASCII "%c", ev->u.usval, 'U'); - break; - case AST_Expression::EV_long: - this->TAO_OutStream::print (ACE_INT32_FORMAT_SPECIFIER_ASCII, ev->u.lval); - break; - case AST_Expression::EV_ulong: - this->TAO_OutStream::print (ACE_UINT32_FORMAT_SPECIFIER_ASCII "%c", ev->u.ulval, 'U'); - break; - case AST_Expression::EV_longlong: - this->TAO_OutStream::print ("ACE_INT64_LITERAL ("); - this->TAO_OutStream::print (ACE_INT64_FORMAT_SPECIFIER_ASCII, - ev->u.llval); - this->TAO_OutStream::print (")"); - break; - case AST_Expression::EV_ulonglong: - this->TAO_OutStream::print ("ACE_UINT64_LITERAL ("); - this->TAO_OutStream::print (ACE_UINT64_FORMAT_SPECIFIER_ASCII, - ev->u.ullval); - this->TAO_OutStream::print (")"); - break; - case AST_Expression::EV_float: - this->TAO_OutStream::print ("%f%c", ev->u.fval, 'F'); - break; - case AST_Expression::EV_double: - this->TAO_OutStream::print ("%24.16G", ev->u.dval); - break; - case AST_Expression::EV_longdouble: - break; - case AST_Expression::EV_char: - // isprint() sees \ and ' as printable characters - // so we have to test for them first. - if (ev->u.cval == '\\') - this->TAO_OutStream::print ("'\\\\'"); - else if (ev->u.cval == '\'') - this->TAO_OutStream::print ("'\\''"); - - // This handles hex and octal escape sequences - // that would print out either as weird characters - // or as an unsigned number too large for a char. - else if ((unsigned char) ev->u.cval > ACE_CHAR_MAX) - this->TAO_OutStream::print ("%hd", ev->u.cval); - else if (ACE_OS::ace_isprint (ev->u.cval)) - this->TAO_OutStream::print ("'%c'", ev->u.cval); - else if (ACE_OS::ace_iscntrl (ev->u.cval)) - switch (ev->u.cval) - { - case '\n': - this->TAO_OutStream::print ("'\\n'"); - break; - case '\t': - this->TAO_OutStream::print ("'\\t'"); - break; - case '\r': - this->TAO_OutStream::print ("'\\r'"); - break; - case '\v': - this->TAO_OutStream::print ("'\\v'"); - break; - case '\f': - this->TAO_OutStream::print ("'\\f'"); - break; - case '\b': - this->TAO_OutStream::print ("'\\b'"); - break; - case '\a': - this->TAO_OutStream::print ("'\\a'"); - break; - case '\?': - this->TAO_OutStream::print ("'?'"); - break; - default: - this->TAO_OutStream::print ("'\\x%x'", ev->u.cval); - } - else - this->TAO_OutStream::print ("'\\x%x'", ev->u.cval); - break; - case AST_Expression::EV_wchar: - this->TAO_OutStream::print ("L'%lc'", ev->u.wcval); - break; - case AST_Expression::EV_octet: - this->TAO_OutStream::print ("%d", ev->u.oval); - break; - case AST_Expression::EV_bool: - this->TAO_OutStream::print ("%s", ev->u.bval ? "true" : "false"); - break; - case AST_Expression::EV_string: - this->TAO_OutStream::print ("\"%s\"", ev->u.strval->get_string ()); - break; - case AST_Expression::EV_wstring: - this->TAO_OutStream::print ("L\"%s\"", ev->u.wstrval); - break; - case AST_Expression::EV_enum: - this->print (expr->n ()); - break; - default: - break; - } - } - else - { - // XXXASG: need to add code here - } - - return *this; -} diff --git a/CIAO/tools/IDL3_to_XMI/be_sunsoft.h b/CIAO/tools/IDL3_to_XMI/be_sunsoft.h deleted file mode 100644 index d02bf7e300b..00000000000 --- a/CIAO/tools/IDL3_to_XMI/be_sunsoft.h +++ /dev/null @@ -1,38 +0,0 @@ -/* -*- c++ -*- */ -/** - * @file be_sunsoft.h - * - * Sunsoft backend output generation. - */ - -#ifndef TAO_BE_HELPER_H -#define TAO_BE_HELPER_H - -#include "be_helper.h" - -/** - * @class TAO_SunSoft_OutStream - * - * Backend specific to SunSoft AST nodes - */ -class TAO_SunSoft_OutStream : public TAO_OutStream -{ -public: - TAO_SunSoft_OutStream (void); - // constructor - - ~TAO_SunSoft_OutStream (void); - // destuctor - - virtual TAO_OutStream &print (Identifier *id); - // output the SunSoft IDL Identifier Node - - virtual TAO_OutStream &print (UTL_IdList *idl); - // output the SunSoft IDL UTL_IdList Node which is usually used to maintain a - // scoped name - - virtual TAO_OutStream &print (AST_Expression *expr); - // output the contents of the AST_Expression node -}; - -#endif // if !defined diff --git a/CIAO/tools/IDL3_to_XMI/be_util.cpp b/CIAO/tools/IDL3_to_XMI/be_util.cpp deleted file mode 100644 index afac84d9597..00000000000 --- a/CIAO/tools/IDL3_to_XMI/be_util.cpp +++ /dev/null @@ -1,62 +0,0 @@ - -//============================================================================= -/** - * @file be_util.cpp - * - * Static helper methods used by multiple visitors. - * - * @author Jeff Parsons - */ -//============================================================================= - -#include "be_util.h" -#include "be_extern.h" - -#include "ast_generator.h" - -#include "ace/Log_Msg.h" - -// Prepare an argument for a BE. -void -be_util::prep_be_arg (char *) -{ -} - -void -be_util::arg_post_proc (void) -{ -} - -void -be_util::usage (void) -{ - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT (" -f\t\t\tsimulates IFR type filtering on included types\n") - )); - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT (" -od <dir>\t\toutput directory for the generated file ") - ACE_TEXT ("(default is current directory)\n") - )); - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT (" -of <dir>\t\toutput file for the generated XMI ") - ACE_TEXT ("(default for example.idl is example.xmi)\n") - )); - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT (" -xd <dtd_file>\t\tfull path to XMI dtd file to include in generated file ") - ACE_TEXT ("(default is XMI.dtd)\n") - )); - ACE_DEBUG ((LM_DEBUG, - ACE_TEXT (" -n\t\t\texports XMI for non-local entities\n") - )); -} - -AST_Generator * -be_util::generator_init (void) -{ - AST_Generator *gen = 0; - ACE_NEW_RETURN (gen, - AST_Generator, - 0); - return gen; -} - diff --git a/CIAO/tools/IDL3_to_XMI/be_util.h b/CIAO/tools/IDL3_to_XMI/be_util.h deleted file mode 100644 index f513fed5032..00000000000 --- a/CIAO/tools/IDL3_to_XMI/be_util.h +++ /dev/null @@ -1,41 +0,0 @@ -/* -*- c++ -*- */ - -//============================================================================= -/** - * @file be_util.h - * - * Static helper methods used by multiple visitors. - * - * @author Jeff Parsons - */ -//============================================================================= - -#ifndef TAO_BE_UTIL_H -#define TAO_BE_UTIL_H - -#include "CIAO_IDL3_TO_XMI_Export.h" - -class AST_Generator; - -class be_util -{ -public: - /// Special BE arg call factored out of DRV_args. - static CIAO_IDL3_TO_XMI_Export void - prep_be_arg (char *s); - - /// Checks made after parsing args. - static CIAO_IDL3_TO_XMI_Export void - arg_post_proc (void); - - /// Display usage of BE-specific options. - static CIAO_IDL3_TO_XMI_Export void - usage (void); - - /// Create an AST node generator. - static CIAO_IDL3_TO_XMI_Export AST_Generator * - generator_init (void); -}; - -#endif // if !defined - diff --git a/CIAO/tools/IDL3_to_XMI/identifier_helper.cpp b/CIAO/tools/IDL3_to_XMI/identifier_helper.cpp deleted file mode 100644 index 6a0df3d7199..00000000000 --- a/CIAO/tools/IDL3_to_XMI/identifier_helper.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/* -*- c++ -*- */ -#include "identifier_helper.h" -#include "utl_identifier.h" -#include "utl_string.h" -#include "global_extern.h" - -Identifier * -IdentifierHelper::original_local_name (Identifier * local_name) -{ - Identifier * id = 0; - - // Remove _cxx_ if it is present. - if (ACE_OS::strstr (local_name->get_string (), "_cxx_") == - local_name->get_string ()) - { - // CString class is good to do this stuff. - ACE_CString name_str (local_name->get_string ()); - - // Remove _cxx_. - name_str = name_str.substr (ACE_OS::strlen ("_cxx_")); - - // Assign to the Identifier variable. - ACE_NEW_RETURN (id, - Identifier (name_str.c_str ()), - 0); - } - else - { - id = local_name->copy (); - } - - return id; -} - - -ACE_CString -IdentifierHelper::orig_sn (UTL_IdList * sn, bool appended_to) -{ - ACE_CString retval; - bool first = true; - bool second = false; - Identifier *id = 0; - - for (UTL_IdListActiveIterator i (sn); !i.is_done ();) - { - if (!first) - { - retval += "::"; - } - else if (second) - { - first = second = false; - } - - id = IdentifierHelper::original_local_name (i.item ()); - i.next (); - - // Append the identifier. - retval += - appended_to && i.is_done () - ? id->get_string () - : IdentifierHelper::try_escape (id).c_str (); - - if (first) - { - if (ACE_OS::strcmp (id->get_string (), "") != 0) - { - // Does not start with a "". - first = false; - } - else - { - second = true; - } - } - - id->destroy (); - delete id; - id = 0; - } - - return retval; -} - -bool -IdentifierHelper::is_idl_keyword (Identifier * local_name) -{ - UTL_String utl_tmp (local_name->get_string ()); - ACE_CString ext_id (utl_tmp.get_canonical_rep (), - 0, - false); - - int status = idl_global->idl_keywords ().find (ext_id); - utl_tmp.destroy (); - - return status == 0; -} - -ACE_CString -IdentifierHelper::try_escape (Identifier * local_name) -{ - ACE_CString s_local_name (local_name->get_string ()); - - if (IdentifierHelper::is_idl_keyword (local_name)) - { - return "_" + s_local_name; - } - else - { - return s_local_name; - } -} diff --git a/CIAO/tools/IDL3_to_XMI/identifier_helper.h b/CIAO/tools/IDL3_to_XMI/identifier_helper.h deleted file mode 100644 index 9c991b94dcf..00000000000 --- a/CIAO/tools/IDL3_to_XMI/identifier_helper.h +++ /dev/null @@ -1,53 +0,0 @@ - -/* -*- c++ -*- */ -//============================================================================= -/** - * @file identifier_helper.h - * - * Utilities associated with UTL_Identifier. - * - * @author Jeff Parsons <j.parsons@vanderbilt.edu> - */ -//============================================================================= - - -#ifndef IDENTIFIER_HELPER_H -#define IDENTIFIER_HELPER_H - -#include "utl_scoped_name.h" - -#if !defined (ACE_LACKS_PRAGMA_ONCE) -# pragma once -#endif /* ACE_LACKS_PRAGMA_ONCE */ - -#include "ace/SString.h" - -class Identifier; - -/** - * 1) keeps escape (leading underscore character in generated identifier in IDL - * 2) removes the '_' escape character when the identifier is - * part of another identifier such as in provides_XXX - * 3) removes any '_cxx_' in generated IDL - */ -struct IdentifierHelper -{ - static Identifier * - original_local_name (Identifier * local_name); - - // Removes '_cxx_ from segments of a scoped name, and optionally - // de-escape the last segment, if it's to be appended to. - static ACE_CString - orig_sn (UTL_ScopedName * scoped_name, bool appended_to = false); - - // Detects case-insensitive match with IDL keyword. - static bool - is_idl_keyword (Identifier * local_name); - - // Preserves the 'escape' (leading underscore) in a - // generated identifier if necessary. - static ACE_CString - try_escape (Identifier * local_name); -}; - -#endif /* IDENTIFIER_HELPER_H */ |