summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/be/be_visitor_structure/structure_cs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/TAO_IDL/be/be_visitor_structure/structure_cs.cpp')
-rw-r--r--TAO/TAO_IDL/be/be_visitor_structure/structure_cs.cpp79
1 files changed, 79 insertions, 0 deletions
diff --git a/TAO/TAO_IDL/be/be_visitor_structure/structure_cs.cpp b/TAO/TAO_IDL/be/be_visitor_structure/structure_cs.cpp
new file mode 100644
index 00000000000..412faaea865
--- /dev/null
+++ b/TAO/TAO_IDL/be/be_visitor_structure/structure_cs.cpp
@@ -0,0 +1,79 @@
+//
+// $Id$
+//
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO IDL
+//
+// = FILENAME
+// structure_cs.cpp
+//
+// = DESCRIPTION
+// Visitor generating code for Structures in the client stubs file.
+//
+// = AUTHOR
+// Aniruddha Gokhale
+//
+// ============================================================================
+
+#include "idl.h"
+#include "idl_extern.h"
+#include "be.h"
+
+#include "be_visitor_structure.h"
+
+
+// ***************************************************************************
+// for client stubs
+// ***************************************************************************
+be_visitor_structure_cs::be_visitor_structure_cs (be_visitor_context *ctx)
+ : be_visitor_structure (ctx)
+{
+}
+
+be_visitor_structure_cs::~be_visitor_structure_cs (void)
+{
+}
+
+// visit the Structure_Cs node and its scope
+int be_visitor_structure_cs::visit_structure (be_structure *node)
+{
+ TAO_OutStream *os; // output stream
+
+ if (!node->cli_stub_gen () && !node->imported ())
+ {
+ os = this->ctx_->stream ();
+
+ // by using a visitor to declare and define the TypeCode, we have the
+ // added advantage to conditionally not generate any code. This will be
+ // based on the command line options. This is still TO-DO
+ be_visitor *visitor;
+ be_visitor_context ctx (*this->ctx_);
+ ctx.state (TAO_CodeGen::TAO_TYPECODE_DEFN);
+ visitor = tao_cg->make_visitor (&ctx);
+ if (!visitor || (node->accept (visitor) == -1))
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "(%N:%l) be_visitor_structure_cs::"
+ "visit_structure - "
+ "TypeCode definition failed\n"
+ ), -1);
+ }
+
+
+ // do any code generation required for the scope members
+ // all we have to do is to visit the scope
+ if (this->visit_scope (node) == -1)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "(%N:%l) be_visitor_structure_cs::"
+ "visit_structure - "
+ "codegen for scope failed\n"), -1);
+ }
+ node->cli_stub_gen (I_TRUE);
+ }
+
+ return 0;
+}