2 //=============================================================================
6 * Visitor for generation of code for CIAO component or home
7 * attribute initialization
11 //=============================================================================
13 #include "attribute.h"
15 be_visitor_attribute_ccm_init::be_visitor_attribute_ccm_init (
16 be_visitor_context
*ctx
)
17 : be_visitor_any_extracted_type_decl (ctx
),
22 be_visitor_attribute_ccm_init::~be_visitor_attribute_ccm_init (
28 be_visitor_attribute_ccm_init::visit_attribute (
31 if (node
->readonly ())
36 be_interface
*intf
= this->ctx_
->interface ();
40 AST_Decl::NodeType snt
= intf
->node_type ();
41 AST_Decl::NodeType ant
=
42 ScopeAsDecl (node
->defined_in ())->node_type ();
44 if (snt
== AST_Decl::NT_component
45 && ant
== AST_Decl::NT_porttype
)
52 be_type
*ft
= dynamic_cast<be_type
*> (node
->field_type ());
53 return ft
->accept (this);
57 be_visitor_attribute_ccm_init::visit_array (
60 this->emit_init_block ();
65 be_visitor_attribute_ccm_init::visit_component (
68 this->emit_error ("component");
73 be_visitor_attribute_ccm_init::visit_enum (
76 this->emit_init_block ();
81 be_visitor_attribute_ccm_init::visit_eventtype (
84 this->emit_error ("eventtype");
89 be_visitor_attribute_ccm_init::visit_home (
92 this->emit_error ("home");
97 be_visitor_attribute_ccm_init::visit_interface (
100 this->emit_error ("interface");
105 be_visitor_attribute_ccm_init::visit_predefined_type (
106 be_predefined_type
*)
108 this->emit_init_block ();
113 be_visitor_attribute_ccm_init::visit_sequence (
116 this->emit_init_block ();
121 be_visitor_attribute_ccm_init::visit_string (
124 this->emit_init_block ();
129 be_visitor_attribute_ccm_init::visit_structure (
132 this->emit_init_block ();
137 be_visitor_attribute_ccm_init::visit_typedef (
140 return node
->primitive_base_type ()->accept (this);
144 be_visitor_attribute_ccm_init::visit_union (
147 this->emit_init_block ();
152 be_visitor_attribute_ccm_init::visit_valuebox (
155 this->emit_error ("valuebox");
160 be_visitor_attribute_ccm_init::visit_valuetype (
163 this->emit_error ("valuetype");
168 be_visitor_attribute_ccm_init::emit_init_block ()
170 this->open_if_block ();
172 be_visitor_any_extracted_type_decl
decl_emitter (this->ctx_
);
173 be_type
*ft
= dynamic_cast<be_type
*> (attr_
->field_type ());
175 if (ft
->accept (&decl_emitter
) == -1)
177 ACE_ERROR ((LM_ERROR
,
178 ACE_TEXT ("be_visitor_attribute_ccm_init")
179 ACE_TEXT ("::emit_init_block - ")
180 ACE_TEXT ("Any extraction type visitor ")
181 ACE_TEXT ("failed\n")));
187 << "if (!(descr_value >>= _extract_val))" << be_idt_nl
189 << "throw ::CORBA::BAD_PARAM ();" << be_uidt_nl
190 << "}" << be_uidt_nl
<< be_nl
191 << "this->" << this->ctx_
->port_prefix ().c_str ()
192 << attr_
->local_name ()->get_string ()
195 be_visitor_attribute_set_from_extracted
arg_emitter (this->ctx_
);
197 if (ft
->accept (&arg_emitter
) == -1)
199 ACE_ERROR ((LM_ERROR
,
200 ACE_TEXT ("be_visitor_attribute_ccm_init")
201 ACE_TEXT ("::emit_init_block - ")
202 ACE_TEXT ("Attribute set type visitor ")
203 ACE_TEXT ("failed\n")));
210 this->close_if_block ();
214 be_visitor_attribute_ccm_init::emit_error (
215 const char *corba_kind
)
217 this->open_if_block ();
219 os_
<< "ACE_ERROR ((LM_ERROR," << be_nl
220 << " \"CCM attributes of "
221 << corba_kind
<< "\"" << be_nl
222 << " \"IDL type are not yet "
223 << "supported by CIAO\\n\"));"
225 << "ACE_UNUSED_ARG (descr_value);" << be_nl
;
227 this->close_if_block ();
231 be_visitor_attribute_ccm_init::open_if_block ()
234 << "if (ACE_OS::strcmp (descr_name, \""
235 << this->ctx_
->port_prefix ().c_str ()
236 << attr_
->local_name ()->get_string ()
237 << "\") == 0)" << be_idt_nl
242 be_visitor_attribute_ccm_init::close_if_block ()
245 << "continue;" << be_uidt_nl