OpenDDS  Snapshot(2023/04/28-20:55)
Public Member Functions | Protected Attributes | List of all members
dds_visitor Class Reference

#include <dds_visitor.h>

Inheritance diagram for dds_visitor:
Inheritance graph
[legend]
Collaboration diagram for dds_visitor:
Collaboration graph
[legend]

Public Member Functions

 dds_visitor (AST_Decl *scope, bool java_ts_only)
 
virtual ~dds_visitor ()
 
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_interface (AST_Interface *node)
 
virtual int visit_interface_fwd (AST_InterfaceFwd *node)
 
virtual int visit_valuetype (AST_ValueType *node)
 
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_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)
 
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_valuebox (AST_ValueBox *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_porttype (AST_PortType *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_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_finder (AST_Finder *node)
 

Protected Attributes

AST_Decl * scope_
 
bool error_
 
bool java_ts_only_
 
composite_generator gen_target_
 

Detailed Description

Definition at line 25 of file dds_visitor.h.

Constructor & Destructor Documentation

◆ dds_visitor()

dds_visitor::dds_visitor ( AST_Decl *  scope,
bool  java_ts_only 
)

Definition at line 68 of file dds_visitor.cpp.

References composite_generator::add_generator(), be_global, and gen_target_.

69  : scope_(scope), error_(false), java_ts_only_(java_ts_only)
70 {
71  if (!be_global->no_default_gen()) {
72  gen_target_.add_generator(&to_gen_);
73  const bool generate_xtypes = !be_global->suppress_xtypes() && !java_ts_only;
74  to_gen_.produce_output(generate_xtypes);
75  to_gen_.produce_xtypes_complete(generate_xtypes && be_global->xtypes_complete());
76  if (generate_xtypes && be_global->old_typeobject_encoding()) {
77  to_gen_.use_old_typeobject_encoding();
78  }
79 
80  if (be_global->value_reader_writer()) {
81  gen_target_.add_generator(&value_reader_generator_);
82  gen_target_.add_generator(&value_writer_generator_);
83  }
84 
85  gen_target_.add_generator(&mar_gen_);
86  gen_target_.add_generator(&key_gen_);
87  gen_target_.add_generator(&ts_gen_);
88  gen_target_.add_generator(&mc_gen_);
89  gen_target_.add_generator(&dynamic_data_adapter_generator_);
90  }
91  if (be_global->itl()) {
92  gen_target_.add_generator(&itl_gen_);
93  }
94  if (be_global->language_mapping() != BE_GlobalData::LANGMAP_NONE) {
95  gen_target_.add_generator(&lm_gen_);
96  lm_gen_.init();
97  }
98 }
composite_generator gen_target_
Definition: dds_visitor.h:137
bool java_ts_only_
Definition: dds_visitor.h:136
void add_generator(dds_generator *gen)
BE_GlobalData * be_global
Definition: be_global.cpp:44
AST_Decl * scope_
Definition: dds_visitor.h:134

◆ ~dds_visitor()

dds_visitor::~dds_visitor ( )
virtual

Definition at line 100 of file dds_visitor.cpp.

101 {
102 }

Member Function Documentation

◆ visit_argument()

int dds_visitor::visit_argument ( AST_Argument *  node)
virtual

Definition at line 609 of file dds_visitor.cpp.

610 {
611  return 0;
612 }

◆ visit_array()

int dds_visitor::visit_array ( AST_Array *  node)
virtual

Definition at line 501 of file dds_visitor.cpp.

502 {
503  //arrays always appear as typedefs, see visit_typedef ()
504  return 0;
505 }

◆ visit_attribute()

int dds_visitor::visit_attribute ( AST_Attribute *  node)
virtual

Definition at line 494 of file dds_visitor.cpp.

495 {
496  // attributes are taken care of by visit_interface ()
497  return 0;
498 }

◆ visit_component()

int dds_visitor::visit_component ( AST_Component *  node)
virtual

Definition at line 522 of file dds_visitor.cpp.

523 {
524  return 0;
525 }

◆ visit_component_fwd()

int dds_visitor::visit_component_fwd ( AST_ComponentFwd *  node)
virtual

Definition at line 528 of file dds_visitor.cpp.

529 {
530  return 0;
531 }

◆ visit_connector()

int dds_visitor::visit_connector ( AST_Connector *  node)
virtual

Definition at line 688 of file dds_visitor.cpp.

689 {
690  return 0;
691 }

◆ visit_constant()

int dds_visitor::visit_constant ( AST_Constant *  node)
virtual

Definition at line 405 of file dds_visitor.cpp.

References error_, composite_generator::gen_const(), gen_target_, java_ts_only_, and name.

406 {
407  const char* name = node->local_name()->get_string();
408 
409  BE_Comment_Guard g("CONST", name);
410 
411  ACE_UNUSED_ARG(g);
412 
413  AST_Decl* d = ScopeAsDecl(node->defined_in());
414 
415  bool nested = d && (d->node_type() == AST_Decl::NT_interface);
416 
417  if (!java_ts_only_) {
418  error_ |= !gen_target_.gen_const(node->name(), nested, node);
419  }
420 
421  return 0;
422 }
bool gen_const(UTL_ScopedName *name, bool nestedInInteface, AST_Constant *constant)
composite_generator gen_target_
Definition: dds_visitor.h:137
bool java_ts_only_
Definition: dds_visitor.h:136
const char *const name
Definition: debug.cpp:60

◆ visit_consumes()

int dds_visitor::visit_consumes ( AST_Consumes *  node)
virtual

Definition at line 673 of file dds_visitor.cpp.

674 {
675  return 0;
676 }

◆ visit_decl()

int dds_visitor::visit_decl ( AST_Decl *  d)
virtual

Definition at line 614 of file dds_visitor.cpp.

615 {
616  return 0;
617 }

◆ visit_emits()

int dds_visitor::visit_emits ( AST_Emits *  node)
virtual

Definition at line 668 of file dds_visitor.cpp.

669 {
670  return 0;
671 }

◆ visit_enum()

int dds_visitor::visit_enum ( AST_Enum *  node)
virtual

Definition at line 358 of file dds_visitor.cpp.

References error_, composite_generator::gen_enum(), gen_target_, java_ts_only_, name, and scope2vector().

359 {
360  const char* name = node->local_name()->get_string();
361 
362  BE_Comment_Guard g("ENUM", name);
363 
364  ACE_UNUSED_ARG(g);
365 
366  vector<AST_EnumVal*> contents;
367 
368  scope2vector(contents, node, AST_Decl::NT_enum_val);
369 
370  if (!java_ts_only_) {
371  error_ |= !gen_target_.gen_enum(node, node->name(), contents, node->repoID());
372  }
373 
374  return 0;
375 }
void scope2vector(std::vector< T *> &v, UTL_Scope *s, AST_Decl::NodeType nt)
Definition: dds_visitor.h:141
composite_generator gen_target_
Definition: dds_visitor.h:137
bool java_ts_only_
Definition: dds_visitor.h:136
const char *const name
Definition: debug.cpp:60
bool gen_enum(AST_Enum *node, UTL_ScopedName *name, const std::vector< AST_EnumVal *> &contents, const char *repoid)

◆ visit_enum_val()

int dds_visitor::visit_enum_val ( AST_EnumVal *  node)
virtual

Definition at line 594 of file dds_visitor.cpp.

595 {
596  return 0;
597 }

◆ visit_eventtype()

int dds_visitor::visit_eventtype ( AST_EventType *  node)
virtual

Definition at line 534 of file dds_visitor.cpp.

535 {
536  return 0;
537 }

◆ visit_eventtype_fwd()

int dds_visitor::visit_eventtype_fwd ( AST_EventTypeFwd *  node)
virtual

Definition at line 540 of file dds_visitor.cpp.

541 {
542  return 0;
543 }

◆ visit_exception()

int dds_visitor::visit_exception ( AST_Exception *  node)
virtual

Definition at line 325 of file dds_visitor.cpp.

References name.

326 {
327  if (node->imported()) {
328  return 0;
329  }
330 
331  const char* name = node->local_name()->get_string();
332 
333  BE_Comment_Guard g("EXCEPTION", name);
334 
335  ACE_UNUSED_ARG(g);
336 
337  return 0;
338 }
const char *const name
Definition: debug.cpp:60

◆ visit_expression()

int dds_visitor::visit_expression ( AST_Expression *  node)
virtual

Definition at line 599 of file dds_visitor.cpp.

600 {
601  return 0;
602 }

◆ visit_extended_port()

int dds_visitor::visit_extended_port ( AST_Extended_Port *  node)
virtual

Definition at line 678 of file dds_visitor.cpp.

679 {
680  return 0;
681 }

◆ visit_factory()

int dds_visitor::visit_factory ( AST_Factory *  node)
virtual

Definition at line 552 of file dds_visitor.cpp.

553 {
554  return 0;
555 }

◆ visit_field()

int dds_visitor::visit_field ( AST_Field *  node)
virtual

Definition at line 487 of file dds_visitor.cpp.

488 {
489  // fields are taken care of by visit_interface() for arguments and attributes
490  return 0;
491 }

◆ visit_finder()

int dds_visitor::visit_finder ( AST_Finder *  node)
virtual

Definition at line 693 of file dds_visitor.cpp.

694 {
695  return 0;
696 }

◆ visit_home()

int dds_visitor::visit_home ( AST_Home *  node)
virtual

Definition at line 546 of file dds_visitor.cpp.

547 {
548  return 0;
549 }

◆ visit_interface()

int dds_visitor::visit_interface ( AST_Interface *  node)
virtual

Definition at line 180 of file dds_visitor.cpp.

References ACE_ERROR_RETURN, ACE_TEXT(), error_, composite_generator::gen_interf(), gen_target_, java_ts_only_, LM_ERROR, name, scope2vector(), and visit_scope().

181 {
182  const char* name = node->local_name()->get_string();
183 
184  BE_Comment_Guard g("INTERFACE", name);
185 
186  ACE_UNUSED_ARG(g);
187 
188  vector<AST_Interface*> inherits(node->n_inherits());
189  for (int i = 0; i < node->n_inherits(); ++i) {
190  inherits[i] = dynamic_cast<AST_Interface*>(node->inherits()[i]);
191  }
192 
193  vector<AST_Interface*> inherits_flat(node->inherits_flat(),
194  node->inherits_flat()
195  + node->n_inherits_flat());
196 
197  vector<AST_Attribute*> attrs;
198 
199  scope2vector(attrs, node, AST_Decl::NT_attr);
200 
201  vector<AST_Operation*> ops;
202 
203  scope2vector(ops, node, AST_Decl::NT_op);
204 
205  if (!java_ts_only_) {
206  error_ |= !gen_target_.gen_interf(node, node->name(), node->is_local(),
207  inherits, inherits_flat, attrs, ops,
208  node->repoID());
209  }
210 
211  if (this->visit_scope(node) == -1) {
212  ACE_ERROR_RETURN((LM_ERROR,
213  ACE_TEXT("(%N:%l) dds_visitor::visit_interface ")
214  ACE_TEXT("- visit_scope failed\n")), -1);
215  }
216 
217  return 0;
218 }
virtual int visit_scope(UTL_Scope *node)
void scope2vector(std::vector< T *> &v, UTL_Scope *s, AST_Decl::NodeType nt)
Definition: dds_visitor.h:141
bool gen_interf(AST_Interface *node, UTL_ScopedName *name, bool local, const std::vector< AST_Interface *> &inherits, const std::vector< AST_Interface *> &inherits_flat, const std::vector< AST_Attribute *> &attrs, const std::vector< AST_Operation *> &ops, const char *repoid)
composite_generator gen_target_
Definition: dds_visitor.h:137
bool java_ts_only_
Definition: dds_visitor.h:136
const char *const name
Definition: debug.cpp:60
ACE_TEXT("TCP_Factory")
#define ACE_ERROR_RETURN(X, Y)

◆ visit_interface_fwd()

int dds_visitor::visit_interface_fwd ( AST_InterfaceFwd *  node)
virtual

Definition at line 378 of file dds_visitor.cpp.

References error_, composite_generator::gen_interf_fwd(), gen_target_, java_ts_only_, and name.

379 {
380  const char* name = node->local_name()->get_string();
381  BE_Comment_Guard g("INTERFACE-FWD", name);
382  ACE_UNUSED_ARG(g);
383 
384  if (!java_ts_only_) {
385  error_ |= !gen_target_.gen_interf_fwd(node->name());
386  }
387 
388  return 0;
389 }
bool gen_interf_fwd(UTL_ScopedName *name)
composite_generator gen_target_
Definition: dds_visitor.h:137
bool java_ts_only_
Definition: dds_visitor.h:136
const char *const name
Definition: debug.cpp:60

◆ visit_mirror_port()

int dds_visitor::visit_mirror_port ( AST_Mirror_Port *  node)
virtual

Definition at line 683 of file dds_visitor.cpp.

684 {
685  return 0;
686 }

◆ visit_module()

int dds_visitor::visit_module ( AST_Module *  node)
virtual

Definition at line 157 of file dds_visitor.cpp.

References ACE_ERROR_RETURN, ACE_TEXT(), LM_ERROR, name, and visit_scope().

158 {
159  // Modules for builtin annotations seem to be showing up here. Ignore them.
160  if (node->builtin()) {
161  return 0;
162  }
163 
164  const char* name = node->local_name()->get_string();
165 
166  BE_Comment_Guard g("MODULE", name);
167 
168  ACE_UNUSED_ARG(g);
169 
170  if (this->visit_scope(node) == -1) {
171  ACE_ERROR_RETURN((LM_ERROR,
172  ACE_TEXT("(%N:%l) dds_visitor::visit_module -")
173  ACE_TEXT(" visit_scope failed\n")), -1);
174  }
175 
176  return 0;
177 }
virtual int visit_scope(UTL_Scope *node)
const char *const name
Definition: debug.cpp:60
ACE_TEXT("TCP_Factory")
#define ACE_ERROR_RETURN(X, Y)

◆ visit_native()

int dds_visitor::visit_native ( AST_Native *  node)
virtual

Definition at line 425 of file dds_visitor.cpp.

References error_, composite_generator::gen_native(), gen_target_, java_ts_only_, and name.

426 {
427  const char* name = node->local_name()->get_string();
428 
429  BE_Comment_Guard g("NATIVE", name);
430 
431  ACE_UNUSED_ARG(g);
432 
433  if (!java_ts_only_) {
434  error_ |= !gen_target_.gen_native(node, node->name(), node->repoID());
435  }
436 
437  return 0;
438 }
bool gen_native(AST_Native *node, UTL_ScopedName *name, const char *repoid)
composite_generator gen_target_
Definition: dds_visitor.h:137
bool java_ts_only_
Definition: dds_visitor.h:136
const char *const name
Definition: debug.cpp:60

◆ visit_operation()

int dds_visitor::visit_operation ( AST_Operation *  node)
virtual

Definition at line 480 of file dds_visitor.cpp.

481 {
482  // operations are taken care of by visit_interface()
483  return 0;
484 }

◆ visit_param_holder()

int dds_visitor::visit_param_holder ( AST_Param_Holder *  node)
virtual

Definition at line 643 of file dds_visitor.cpp.

644 {
645  return 0;
646 }

◆ visit_porttype()

int dds_visitor::visit_porttype ( AST_PortType *  node)
virtual

Definition at line 648 of file dds_visitor.cpp.

649 {
650  return 0;
651 }

◆ visit_predefined_type()

int dds_visitor::visit_predefined_type ( AST_PredefinedType *  node)
virtual

Definition at line 560 of file dds_visitor.cpp.

561 {
562  return 0;
563 }

◆ visit_provides()

int dds_visitor::visit_provides ( AST_Provides *  node)
virtual

Definition at line 653 of file dds_visitor.cpp.

654 {
655  return 0;
656 }

◆ visit_publishes()

int dds_visitor::visit_publishes ( AST_Publishes *  node)
virtual

Definition at line 663 of file dds_visitor.cpp.

664 {
665  return 0;
666 }

◆ visit_root()

int dds_visitor::visit_root ( AST_Root *  node)
virtual

Definition at line 107 of file dds_visitor.cpp.

References ACE_ERROR_RETURN, ACE_TEXT(), error_, composite_generator::gen_epilogue(), composite_generator::gen_prologue(), gen_target_, LM_ERROR, and visit_scope().

108 {
109  error_ = false;
110 
112  if (this->visit_scope(node) == -1) {
113  ACE_ERROR_RETURN((LM_ERROR,
114  ACE_TEXT("(%N:%l) dds_visitor::visit_root -")
115  ACE_TEXT(" visit_scope failed\n")), -1);
116  }
118 
119  return (error_) ? -1 : 0;
120 }
virtual int visit_scope(UTL_Scope *node)
composite_generator gen_target_
Definition: dds_visitor.h:137
ACE_TEXT("TCP_Factory")
#define ACE_ERROR_RETURN(X, Y)

◆ visit_scope()

int dds_visitor::visit_scope ( UTL_Scope *  node)
virtual

Definition at line 123 of file dds_visitor.cpp.

References ACE_ERROR_RETURN, ACE_TEXT(), and LM_ERROR.

Referenced by visit_interface(), visit_module(), and visit_root().

124 {
125  if (node->nmembers() > 0) {
126  UTL_ScopeActiveIterator si(node, UTL_Scope::IK_decls);
127  AST_Decl* d = 0;
128 
129  while (!si.is_done()) {
130  d = si.item();
131 
132  if (d == 0) {
133  ACE_ERROR_RETURN((LM_ERROR,
134  ACE_TEXT("(%N:%l) dds_visitor::visit_")
135  ACE_TEXT("scope - bad node in this scope\n")), -1);
136  }
137 
138  if (d->node_type() == AST_Decl::NT_pre_defined) {
139  si.next();
140  continue;
141  }
142 
143  if (d->ast_accept(this) == -1) {
144  ACE_ERROR_RETURN((LM_ERROR,
145  ACE_TEXT("(%N:%l) dds_visitor::visit_")
146  ACE_TEXT("scope - failed to accept visitor\n")), -1);
147  }
148 
149  si.next();
150  }
151  }
152 
153  return 0;
154 }
ACE_TEXT("TCP_Factory")
#define ACE_ERROR_RETURN(X, Y)

◆ visit_sequence()

int dds_visitor::visit_sequence ( AST_Sequence *  node)
virtual

Definition at line 473 of file dds_visitor.cpp.

474 {
475  //sequences always appear as typedefs, see visit_typedef ()
476  return 0;
477 }

◆ visit_string()

int dds_visitor::visit_string ( AST_String *  node)
virtual

Definition at line 566 of file dds_visitor.cpp.

567 {
568  return 0;
569 }

◆ visit_structure()

int dds_visitor::visit_structure ( AST_Structure *  node)
virtual

Definition at line 221 of file dds_visitor.cpp.

References ACE_TEXT_ALWAYS_CHAR, be_global, TopicKeys::begin(), Fields::begin(), TopicKeys::count(), TopicKeys::end(), Fields::end(), error_, composite_generator::gen_struct(), gen_target_, java_ts_generator::generate(), header, java_ts_only_, name, TopicKeys::Error::node(), and TopicKeys::Error::what().

222 {
223  const char* name = node->local_name()->get_string();
224 
225  BE_Comment_Guard g("STRUCT", name);
226  ACE_UNUSED_ARG(g);
227 
228  // Check That Sample Keys Are Valid
229  TopicKeys topic_keys(node);
230  try {
231  topic_keys.count();
232  } catch (TopicKeys::Error& error) {
233  idl_global->err()->misc_error(error.what(), error.node());
234  return -1;
235  }
236 
237  IDL_GlobalData::DCPS_Data_Type_Info* info = idl_global->is_dcps_type(node->name());
238  if (info) {
239  if (be_global->warn_about_dcps_data_type()) {
240  idl_global->err()->misc_warning("\n"
241  " DCPS_DATA_TYPE and DCPS_DATA_KEY pragma statements are deprecated; please use\n"
242  " topic type annotations instead.\n"
243  " See docs/migrating_to_topic_type_annotations.md in the OpenDDS source code for\n"
244  " more information.", node);
245  }
246 
247  /*
248  * If the struct is declared a topic type using both the older and newer
249  * styles, warn if the keys are inconsistent.
250  */
251  if (be_global->is_topic_type(node)) {
252  set<string> topic_type_keys, dcps_data_type_keys;
253 
254  TopicKeys::Iterator finished = topic_keys.end();
255  for (TopicKeys::Iterator i = topic_keys.begin(); i != finished; ++i) {
256  topic_type_keys.insert(i.path());
257  }
258 
259  IDL_GlobalData::DCPS_Data_Type_Info_Iter iter(info->key_list_);
260  for (ACE_TString* kp = 0; iter.next(kp) != 0; iter.advance()) {
261  dcps_data_type_keys.insert(ACE_TEXT_ALWAYS_CHAR(kp->c_str()));
262  }
263 
264  if (topic_type_keys != dcps_data_type_keys) {
265  string message = "\n"
266  " The keys are inconsistent on this struct declared to be a topic type using\n"
267  " both a DCPS_DATA_TYPE pragma and the annotation-based system.";
268 
269  bool header = false;
270  for (set<string>::iterator i = topic_type_keys.begin();
271  i != topic_type_keys.end(); ++i) {
272  if (dcps_data_type_keys.find(*i) == dcps_data_type_keys.end()) {
273  if (!header) {
274  message += "\n\n"
275  " The following keys were declared using @key, but not DCPS_DATA_KEY:";
276  header = true;
277  }
278  message += "\n " + *i;
279  }
280  }
281 
282  header = false;
283  for (set<string>::iterator i = dcps_data_type_keys.begin();
284  i != dcps_data_type_keys.end(); ++i) {
285  if (topic_type_keys.find(*i) == topic_type_keys.end()) {
286  if (!header) {
287  message += "\n\n"
288  " The following keys were declared using DCPS_DATA_KEY, but not @key:";
289  header = true;
290  }
291  message += "\n " + *i;
292  }
293  }
294 
295  message += "\n\n"
296  " DCPS_DATA_TYPE and DCPS_DATA_KEY are deprecated, so the annotation-based keys\n"
297  " will be used.";
298 
299  idl_global->err()->misc_warning(message.c_str(), node);
300  }
301  }
302  }
303 
304  vector<AST_Field*> field_vec;
305  field_vec.reserve(node->nfields());
306  const Fields fields(node);
307  const Fields::Iterator fields_end = fields.end();
308  for (Fields::Iterator i = fields.begin(); i != fields_end; ++i) {
309  field_vec.push_back(*i);
310  }
311 
312  if (!java_ts_only_) {
313  error_ |= !gen_target_.gen_struct(node, node->name(), field_vec,
314  node->size_type(), node->repoID());
315  }
316 
317  if (!node->imported() && be_global->java()) {
319  }
320 
321  return 0;
322 }
#define ACE_TEXT_ALWAYS_CHAR(STRING)
virtual const char * what() const
Definition: topic_keys.cpp:61
composite_generator gen_target_
Definition: dds_visitor.h:137
Christopher Diggins *renamed files *fixing compilation errors *adding Visual C project file *removed make Max Lybbert *removed references to missing and unused header
Definition: CHANGELOG.txt:8
bool java_ts_only_
Definition: dds_visitor.h:136
const char *const name
Definition: debug.cpp:60
AST_Decl * node()
Definition: topic_keys.cpp:66
BE_GlobalData * be_global
Definition: be_global.cpp:44
bool gen_struct(AST_Structure *node, UTL_ScopedName *name, const std::vector< AST_Field *> &fields, AST_Type::SIZE_TYPE size, const char *repoid)
void generate(AST_Structure *node)
called directly by dds_visitor::visit_structure() if -Wb,java

◆ visit_structure_fwd()

int dds_visitor::visit_structure_fwd ( AST_StructureFwd *  node)
virtual

Definition at line 392 of file dds_visitor.cpp.

References error_, composite_generator::gen_struct_fwd(), gen_target_, java_ts_only_, and name.

393 {
394  const char* name = node->local_name()->get_string();
395  BE_Comment_Guard g("STRUCT-FWD", name);
396 
397  if (!java_ts_only_) {
398  error_ |= !gen_target_.gen_struct_fwd(node->name(), node->size_type());
399  }
400 
401  return 0;
402 }
composite_generator gen_target_
Definition: dds_visitor.h:137
bool java_ts_only_
Definition: dds_visitor.h:136
const char *const name
Definition: debug.cpp:60
bool gen_struct_fwd(UTL_ScopedName *name, AST_Type::SIZE_TYPE size)

◆ visit_template_module()

int dds_visitor::visit_template_module ( AST_Template_Module *  node)
virtual

Definition at line 625 of file dds_visitor.cpp.

626 {
627  return 0;
628 }

◆ visit_template_module_inst()

int dds_visitor::visit_template_module_inst ( AST_Template_Module_Inst *  node)
virtual

Definition at line 631 of file dds_visitor.cpp.

632 {
633  return 0;
634 }

◆ visit_template_module_ref()

int dds_visitor::visit_template_module_ref ( AST_Template_Module_Ref *  node)
virtual

Definition at line 637 of file dds_visitor.cpp.

638 {
639  return 0;
640 }

◆ visit_type()

int dds_visitor::visit_type ( AST_Type *  node)
virtual

Definition at line 604 of file dds_visitor.cpp.

605 {
606  return 0;
607 }

◆ visit_typedef()

int dds_visitor::visit_typedef ( AST_Typedef *  node)
virtual

Definition at line 341 of file dds_visitor.cpp.

References error_, gen_target_, composite_generator::gen_typedef(), java_ts_only_, and name.

342 {
343  const char* name = node->local_name()->get_string();
344 
345  BE_Comment_Guard g("TYPEDEF", name);
346 
347  ACE_UNUSED_ARG(g);
348 
349  if (!java_ts_only_) {
350  error_ |= !gen_target_.gen_typedef(node, node->name(), node->base_type(),
351  node->repoID());
352  }
353 
354  return 0;
355 }
composite_generator gen_target_
Definition: dds_visitor.h:137
bool gen_typedef(AST_Typedef *node, UTL_ScopedName *name, AST_Type *base, const char *repoid)
bool java_ts_only_
Definition: dds_visitor.h:136
const char *const name
Definition: debug.cpp:60

◆ visit_union()

int dds_visitor::visit_union ( AST_Union *  node)
virtual

Definition at line 441 of file dds_visitor.cpp.

References Fields::begin(), Fields::end(), error_, gen_target_, composite_generator::gen_union(), java_ts_only_, and name.

442 {
443  const char* name = node->local_name()->get_string();
444 
445  BE_Comment_Guard g("UNION", name);
446  ACE_UNUSED_ARG(g);
447 
448  vector<AST_UnionBranch*> branches;
449  branches.reserve(node->nfields());
450  const Fields fields(node);
451  const Fields::Iterator fields_end = fields.end();
452  for (Fields::Iterator i = fields.begin(); i != fields_end; ++i) {
453  AST_UnionBranch* ub = dynamic_cast<AST_UnionBranch*>(*i);
454  if (!ub) {
455  idl_global->err()->misc_error("expected union to only contain UnionBranches", ub);
456  error_ = true;
457  return -1;
458  }
459  branches.push_back(ub);
460  }
461 
462  if (!java_ts_only_) {
463  error_ |= !gen_target_.gen_union(node, node->name(), branches, node->disc_type(),
464  node->repoID());
465  }
466 
467  return 0;
468 }
bool gen_union(AST_Union *node, UTL_ScopedName *name, const std::vector< AST_UnionBranch *> &branches, AST_Type *discriminator, const char *repoid)
composite_generator gen_target_
Definition: dds_visitor.h:137
bool java_ts_only_
Definition: dds_visitor.h:136
const char *const name
Definition: debug.cpp:60

◆ visit_union_branch()

int dds_visitor::visit_union_branch ( AST_UnionBranch *  node)
virtual

Definition at line 584 of file dds_visitor.cpp.

585 {
586  return 0;
587 }

◆ visit_union_fwd()

int dds_visitor::visit_union_fwd ( AST_UnionFwd *  node)
virtual

Definition at line 572 of file dds_visitor.cpp.

References error_, gen_target_, composite_generator::gen_union_fwd(), java_ts_only_, and name.

573 {
574  const char* name = node->local_name()->get_string();
575  BE_Comment_Guard g("UNION-FWD", name);
576 
577  if (!java_ts_only_) {
578  error_ |= !gen_target_.gen_union_fwd(node, node->name(), node->size_type());
579  }
580 
581  return 0;
582 }
composite_generator gen_target_
Definition: dds_visitor.h:137
bool java_ts_only_
Definition: dds_visitor.h:136
const char *const name
Definition: debug.cpp:60
bool gen_union_fwd(AST_UnionFwd *, UTL_ScopedName *name, AST_Type::SIZE_TYPE size)

◆ visit_union_label()

int dds_visitor::visit_union_label ( AST_UnionLabel *  node)
virtual

Definition at line 589 of file dds_visitor.cpp.

590 {
591  return 0;
592 }

◆ visit_uses()

int dds_visitor::visit_uses ( AST_Uses *  node)
virtual

Definition at line 658 of file dds_visitor.cpp.

659 {
660  return 0;
661 }

◆ visit_valuebox()

int dds_visitor::visit_valuebox ( AST_ValueBox *  node)
virtual

Definition at line 619 of file dds_visitor.cpp.

620 {
621  return 0;
622 }

◆ visit_valuetype()

int dds_visitor::visit_valuetype ( AST_ValueType *  node)
virtual

Definition at line 510 of file dds_visitor.cpp.

511 {
512  return 0;
513 }

◆ visit_valuetype_fwd()

int dds_visitor::visit_valuetype_fwd ( AST_ValueTypeFwd *  node)
virtual

Definition at line 516 of file dds_visitor.cpp.

517 {
518  return 0;
519 }

Member Data Documentation

◆ error_

bool dds_visitor::error_
protected

◆ gen_target_

composite_generator dds_visitor::gen_target_
protected

◆ java_ts_only_

bool dds_visitor::java_ts_only_
protected

◆ scope_

AST_Decl* dds_visitor::scope_
protected

Definition at line 134 of file dds_visitor.h.


The documentation for this class was generated from the following files: