diff options
Diffstat (limited to 'TAO_IDL/be/be_util.cpp')
-rw-r--r-- | TAO_IDL/be/be_util.cpp | 139 |
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; + } +} + |