summaryrefslogtreecommitdiff
path: root/trunk/TAO/TAO_IDL/be/be_home.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/TAO/TAO_IDL/be/be_home.cpp')
-rw-r--r--trunk/TAO/TAO_IDL/be/be_home.cpp143
1 files changed, 143 insertions, 0 deletions
diff --git a/trunk/TAO/TAO_IDL/be/be_home.cpp b/trunk/TAO/TAO_IDL/be/be_home.cpp
new file mode 100644
index 00000000000..f7ddaac8f5e
--- /dev/null
+++ b/trunk/TAO/TAO_IDL/be/be_home.cpp
@@ -0,0 +1,143 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO IDL
+//
+// = FILENAME
+// be_home.cpp
+//
+// = DESCRIPTION
+// Extension of class AST_Home that provides additional means for C++
+// mapping of a component home.
+//
+// = AUTHOR
+// Jeff Parsons
+//
+// ============================================================================
+
+#include "be_home.h"
+#include "be_component.h"
+#include "be_interface_strategy.h"
+#include "be_visitor.h"
+#include "global_extern.h"
+#include "utl_err.h"
+
+ACE_RCSID (be,
+ be_home,
+ "$Id$")
+
+be_home::be_home (void)
+ : COMMON_Base (),
+ AST_Decl (),
+ AST_Type (),
+ UTL_Scope (),
+ AST_Interface (),
+ AST_Home (),
+ be_scope (),
+ be_type (),
+ be_interface ()
+{
+ this->size_type (AST_Type::VARIABLE);
+}
+
+be_home::be_home (UTL_ScopedName *n,
+ AST_Home *base_home,
+ AST_Component *managed_component,
+ AST_ValueType *primary_key,
+ AST_Interface **supports,
+ long n_supports,
+ AST_Interface **supports_flat,
+ long n_supports_flat)
+ : COMMON_Base (false,
+ false),
+ AST_Decl (AST_Decl::NT_home,
+ n),
+ AST_Type (AST_Decl::NT_home,
+ n),
+ UTL_Scope (AST_Decl::NT_home),
+ AST_Interface (n,
+ supports,
+ n_supports,
+ supports_flat,
+ n_supports_flat,
+ false,
+ false),
+ AST_Home (n,
+ base_home,
+ managed_component,
+ primary_key,
+ supports,
+ n_supports,
+ supports_flat,
+ n_supports_flat),
+ be_scope (AST_Decl::NT_home),
+ be_type (AST_Decl::NT_home,
+ n),
+ be_interface (n,
+ supports,
+ n_supports,
+ supports_flat,
+ n_supports_flat,
+ false,
+ false)
+{
+ this->size_type (AST_Type::VARIABLE);
+
+ // Some previous error may have caused a lookup failure, in which
+ // case we'll crash if we do the narrow below.
+ if (managed_component == 0)
+ {
+ idl_global->set_err_count (idl_global->err_count () + 1);
+ return;
+ }
+
+ be_component *bt =
+ be_component::narrow_from_decl (managed_component);
+
+ bt->seen_in_operation (true);
+
+ idl_global->object_arg_seen_ = true;
+}
+
+be_home::~be_home (void)
+{
+}
+
+void
+be_home::destroy (void)
+{
+ // Skip be_interface, since our decls were added to
+ // the equivalent interface and will get destroyed
+ // there.
+ if (this->strategy_ != 0)
+ {
+ this->strategy_->destroy ();
+ delete this->strategy_;
+ this->strategy_ = 0;
+ }
+
+ this->be_scope::destroy ();
+ this->be_type::destroy ();
+
+ // This skips AST_Interface, for the reason above.
+ this->AST_Home::destroy ();
+}
+
+int
+be_home::accept (be_visitor *visitor)
+{
+ if (idl_global->ignore_idl3 ())
+ {
+ idl_global->err ()->ignore_idl3_error (this);
+ return -1;
+ }
+
+ return visitor->visit_home (this);
+}
+
+// Narrowing
+IMPL_NARROW_METHODS2 (be_home, be_interface, AST_Home)
+IMPL_NARROW_FROM_DECL (be_home)
+IMPL_NARROW_FROM_SCOPE (be_home)