summaryrefslogtreecommitdiff
path: root/TAO_IDL/be/be_util.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO_IDL/be/be_util.cpp')
-rw-r--r--TAO_IDL/be/be_util.cpp139
1 files changed, 128 insertions, 11 deletions
diff --git a/TAO_IDL/be/be_util.cpp b/TAO_IDL/be/be_util.cpp
index 3131f77cba4..29b7ab2402b 100644
--- a/TAO_IDL/be/be_util.cpp
+++ b/TAO_IDL/be/be_util.cpp
@@ -16,6 +16,7 @@
#include "be_util.h"
#include "be_helper.h"
#include "be_module.h"
+#include "be_type.h"
#include "be_identifier_helper.h"
#include "be_extern.h"
#include "be_generator.h"
@@ -23,6 +24,11 @@
#include "utl_identifier.h"
+#include "ast_typedef.h"
+#include "ast_structure.h"
+#include "ast_structure_fwd.h"
+#include "ast_string.h"
+
#include "ace/OS_NS_string.h"
void
@@ -544,20 +550,10 @@ be_util::usage (void)
));
ACE_DEBUG ((
LM_DEBUG,
- ACE_TEXT (" -Gdcps \t\tGenerate code supporting DDS DCPS type ")
- ACE_TEXT ("definitions.\n")
- ));
- ACE_DEBUG ((
- LM_DEBUG,
ACE_TEXT (" -Gos \t\t\tGenerate std::ostream insertion operators.\n")
));
ACE_DEBUG ((
LM_DEBUG,
- ACE_TEXT (" -Gdcpsonly \t\tGenerate code only supporting DDS DCPS ")
- ACE_TEXT ("type serializer definitions.\n")
- ));
- ACE_DEBUG ((
- LM_DEBUG,
ACE_TEXT (" -GI[h|s|b|e|c|a|d]\tGenerate Implementation Files\n")
));
ACE_DEBUG ((
@@ -750,7 +746,7 @@ be_util::usage (void)
));
ACE_DEBUG ((
LM_DEBUG,
- ACE_TEXT (" -iC <path>\tInclude path for the generated stub files")
+ ACE_TEXT (" -iC <path>\t\tInclude path for the generated stub files ")
ACE_TEXT ("in *A.h. Can be relative to $TAO_ROOT or $CIAO_ROOT. ")
ACE_TEXT ("Default is $TAO_ROOT/tao or current directory\n")
));
@@ -797,6 +793,12 @@ be_util::usage (void)
));
ACE_DEBUG ((
LM_DEBUG,
+ ACE_TEXT (" -Sat\t\t\tsuppress arg traits")
+ ACE_TEXT (" generation")
+ ACE_TEXT (" (arg traits generated by default)\n")
+ ));
+ ACE_DEBUG ((
+ LM_DEBUG,
ACE_TEXT (" -St\t\t\tsuppress TypeCode support")
ACE_TEXT (" (support enabled by default)\n")
));
@@ -891,3 +893,118 @@ be_util::get_output_path (bool for_anyop,
return be_global->output_dir ();
}
}
+
+void
+be_util::set_arg_seen_bit (be_type *bt)
+{
+ if (bt == 0)
+ {
+ return;
+ }
+
+ switch (bt->node_type ())
+ {
+ case AST_Decl::NT_typedef:
+ {
+ AST_Typedef *td = AST_Typedef::narrow_from_decl (bt);
+ be_util::set_arg_seen_bit (
+ be_type::narrow_from_decl (td->primitive_base_type ())
+ );
+ break;
+ }
+ case AST_Decl::NT_interface:
+ case AST_Decl::NT_interface_fwd:
+ case AST_Decl::NT_valuetype:
+ case AST_Decl::NT_valuetype_fwd:
+ case AST_Decl::NT_component:
+ case AST_Decl::NT_component_fwd:
+ case AST_Decl::NT_home:
+ case AST_Decl::NT_eventtype:
+ case AST_Decl::NT_eventtype_fwd:
+ idl_global->object_arg_seen_ = true;
+ break;
+ case AST_Decl::NT_union:
+ case AST_Decl::NT_struct:
+ if (bt->size_type () == AST_Type::FIXED)
+ {
+ idl_global->fixed_size_decl_seen_ = true;
+ }
+ else
+ {
+ idl_global->var_size_decl_seen_ = true;
+ }
+
+ break;
+ case AST_Decl::NT_struct_fwd:
+ case AST_Decl::NT_union_fwd:
+ {
+ AST_StructureFwd *fwd = AST_StructureFwd::narrow_from_decl (bt);
+ be_type *fd = be_type::narrow_from_decl (fwd->full_definition ());
+ be_util::set_arg_seen_bit (fd);
+ break;
+ }
+ case AST_Decl::NT_enum:
+ case AST_Decl::NT_enum_val:
+// idl_global->basic_arg_seen_ = true;
+ break;
+ case AST_Decl::NT_string:
+ case AST_Decl::NT_wstring:
+ {
+ AST_String *str = AST_String::narrow_from_decl (bt);
+
+ if (str->max_size ()->ev ()->u.ulval == 0)
+ {
+ idl_global->ub_string_seen_ = true;
+ }
+ else
+ {
+ idl_global->bd_string_seen_ = true;
+ }
+
+ break;
+ }
+ case AST_Decl::NT_array:
+ if (bt->size_type () == AST_Type::FIXED)
+ {
+ idl_global->fixed_array_decl_seen_ = true;
+ }
+ else
+ {
+ idl_global->var_array_decl_seen_ = true;
+ }
+
+ break;
+ case AST_Decl::NT_sequence:
+ idl_global->var_size_decl_seen_ = true;
+ break;
+ case AST_Decl::NT_pre_defined:
+ {
+ AST_PredefinedType *pdt = AST_PredefinedType::narrow_from_decl (bt);
+
+ switch (pdt->pt ())
+ {
+ case AST_PredefinedType::PT_object:
+ case AST_PredefinedType::PT_pseudo:
+ case AST_PredefinedType::PT_value:
+ case AST_PredefinedType::PT_abstract:
+ idl_global->object_arg_seen_ = true;
+ break;
+ case AST_PredefinedType::PT_any:
+ idl_global->var_size_decl_seen_ = true;
+ idl_global->any_arg_seen_ = true;
+ break;
+ case AST_PredefinedType::PT_char:
+ case AST_PredefinedType::PT_wchar:
+ case AST_PredefinedType::PT_octet:
+ case AST_PredefinedType::PT_boolean:
+ idl_global->special_basic_decl_seen_ = true;
+ break;
+ default:
+ break;
+ }
+ }
+ default:
+ break;
+ }
+}
+