00001 /* -*- C++ -*- */ 00002 // PSDL_Node_Visitor.h,v 1.1 2002/07/25 15:25:51 pgontla Exp 00003 // 00004 // ============================================================================ 00005 // 00006 // = LIBRARY 00007 // orbsvcs/PSS 00008 // 00009 // = FILENAME 00010 // PSDL_Node_Visitor 00011 // 00012 // = DESCRIPTION 00013 // This class serves as a base class for the classes that put the 00014 // generated code that should go into the stubs. Derived classes 00015 // override the necessary methods. Uses the Visitor Pattern. 00016 // 00017 // = AUTHOR 00018 // Priyanka Gontla <gontla_p@ociweb.com> 00019 // 00020 // ============================================================================ 00021 00022 #ifndef TAO_PSDL_NODE_VISITOR_H 00023 #define TAO_PSDL_NODE_VISITOR_H 00024 00025 #include "psdl_export.h" 00026 00027 #if !defined (ACE_LACKS_PRAGMA_ONCE) 00028 # pragma once 00029 #endif /* ACE_LACKS_PRAGMA_ONCE */ 00030 00031 #include "PSDL_Node.h" 00032 #include "ace/Array_Base.h" 00033 00034 // Forward declarations. 00035 class TAO_PSDL_Visitor_Factory; 00036 00037 00038 class TAO_PSDL_Specification; 00039 class TAO_PSDL_Definition; 00040 class TAO_PSDL_Module; 00041 class TAO_PSDL_Abstract_Storagetype; 00042 class TAO_PSDL_Abstract_Storagetype_Dcl; 00043 class TAO_PSDL_Abstract_Storagetype_Fwd_Dcl; 00044 class TAO_PSDL_Abstract_Storagetype_Header; 00045 class TAO_PSDL_Abstract_Storagetype_Body; 00046 class TAO_PSDL_Abstract_Storagetype_Member; 00047 class TAO_PSDL_Abstract_Storagetype_Inh_Spec; 00048 class TAO_PSDL_Abstract_Storagetype_Name; 00049 class TAO_PSDL_Psdl_State_Dcl; 00050 class TAO_PSDL_Psdl_State_Type_Spec; 00051 class TAO_PSDL_Abstract_Storagetype_Ref_Type; 00052 class TAO_PSDL_Abstract_Storagehome; 00053 class TAO_PSDL_Abstract_Storagehome_Fwd_Dcl; 00054 class TAO_PSDL_Abstract_Storagehome_Dcl; 00055 class TAO_PSDL_Abstract_Storagehome_Header; 00056 class TAO_PSDL_Abstract_Storagehome_Body; 00057 class TAO_PSDL_Abstract_Storagehome_Member; 00058 class TAO_PSDL_Abstract_Storagehome_Inh_Spec; 00059 class TAO_PSDL_Abstract_Storagehome_Name; 00060 class TAO_PSDL_Local_Op_Dcl; 00061 class TAO_PSDL_Key_Dcl; 00062 class TAO_PSDL_Catalog; 00063 class TAO_PSDL_Catalog_Inh_Spec; 00064 class TAO_PSDL_Catalog_Name; 00065 class TAO_PSDL_Catalog_Body; 00066 class TAO_PSDL_Catalog_Member; 00067 class TAO_PSDL_Provides_Dcl; 00068 class TAO_PSDL_Storagetype; 00069 class TAO_PSDL_Storagetype_Dcl; 00070 class TAO_PSDL_Abstract_Storagetype_Fwd_Dcl; 00071 class TAO_PSDL_Abstract_Storagetype_Header; 00072 class TAO_PSDL_Abstract_Storagetype_Body; 00073 class TAO_PSDL_Abstract_Storagetype_Member; 00074 class TAO_PSDL_Abstract_Storagetype_Inh_Spec; 00075 class TAO_PSDL_Abstract_Storagetype_Name; 00076 class TAO_PSDL_Psdl_State_Dcl; 00077 class TAO_PSDL_Psdl_State_Type_Spec; 00078 class TAO_PSDL_Abstract_Storagetype_Ref_Type; 00079 class TAO_PSDL_Abstract_Storagehome; 00080 class TAO_PSDL_Abstract_Storagehome_Fwd_Dcl; 00081 class TAO_PSDL_Abstract_Storagehome_Dcl; 00082 class TAO_PSDL_Abstract_Storagehome_Header; 00083 class TAO_PSDL_Abstract_Storagehome_Body; 00084 class TAO_PSDL_Abstract_Storagehome_Member; 00085 class TAO_PSDL_Abstract_Storagehome_Inh_Spec; 00086 class TAO_PSDL_Abstract_Storagehome_Name; 00087 class TAO_PSDL_Local_Op_Dcl; 00088 class TAO_PSDL_Key_Dcl; 00089 class TAO_PSDL_Catalog; 00090 class TAO_PSDL_Catalog_Inh_Spec; 00091 class TAO_PSDL_Catalog_Name; 00092 class TAO_PSDL_Catalog_Body; 00093 class TAO_PSDL_Catalog_Member; 00094 class TAO_PSDL_Provides_Dcl; 00095 class TAO_PSDL_Storagetype; 00096 class TAO_PSDL_Storagetype_Dcl; 00097 class TAO_PSDL_Storagetype_Fwd_Dcl; 00098 class TAO_PSDL_Storagetype_Header; 00099 class TAO_PSDL_Storagetype_Body; 00100 class TAO_PSDL_Storagetype_Member; 00101 class TAO_PSDL_Storagetype_Inh_Spec; 00102 class TAO_PSDL_Storagetype_Name; 00103 class TAO_PSDL_Storagetype_Impl_Spec; 00104 class TAO_PSDL_Storagetype_Ref_Type; 00105 class TAO_PSDL_Storagehome_Scope; 00106 class TAO_PSDL_Store_Directive; 00107 class TAO_PSDL_Psdl_Concrete_State_Type; 00108 class TAO_PSDL_Ref_Rep_Directive; 00109 class TAO_PSDL_Storagehome; 00110 class TAO_PSDL_Storagehome_Header; 00111 class TAO_PSDL_Storagehome_Body; 00112 class TAO_PSDL_Storagehome_Member; 00113 class TAO_PSDL_Storagehome_Inh_Spec; 00114 class TAO_PSDL_Storagehome_Name; 00115 class TAO_PSDL_Storagehome_Impl_Spec; 00116 class TAO_PSDL_Primary_Key_Dcl; 00117 class TAO_PSDL_Identifier; 00118 class TAO_PSDL_Type_Dcl; 00119 class TAO_PSDL_Type_Declarator; 00120 class TAO_PSDL_Type_Spec; 00121 class TAO_PSDL_Simple_Type_Spec; 00122 class TAO_PSDL_Base_Type_Spec; 00123 class TAO_PSDL_Template_Type_Spec; 00124 class TAO_PSDL_Constr_Type_Spec; 00125 class TAO_PSDL_Declarators; 00126 class TAO_PSDL_Declarator; 00127 class TAO_PSDL_Simple_Declarator; 00128 class TAO_PSDL_Simple_Declarator_List; 00129 class TAO_PSDL_Complex_Declarator; 00130 class TAO_PSDL_Predefined_Type; 00131 class TAO_PSDL_Member_List; 00132 class TAO_PSDL_Member; 00133 class TAO_PSDL_Union_Type; 00134 class TAO_PSDL_Switch_Type_Spec; 00135 class TAO_PSDL_Switch_Body; 00136 class TAO_PSDL_Case; 00137 class TAO_PSDL_Case_Label; 00138 class TAO_PSDL_Element_Spec; 00139 class TAO_PSDL_Const_Dcl; 00140 class TAO_PSDL_Const_Type; 00141 class TAO_PSDL_Const_Exp; 00142 class TAO_PSDL_Or_Expr; 00143 class TAO_PSDL_Xor_Expr; 00144 class TAO_PSDL_And_Expr; 00145 class TAO_PSDL_Shift_Expr; 00146 class TAO_PSDL_Add_Expr; 00147 class TAO_PSDL_Mult_Expr; 00148 class TAO_PSDL_Unary_Expr; 00149 class TAO_PSDL_Primary_Expr; 00150 class TAO_PSDL_Except_Dcl; 00151 class TAO_PSDL_Op_Dcl; 00152 class TAO_PSDL_Op_Type_Spec; 00153 class TAO_PSDL_Parameter_Dcls; 00154 class TAO_PSDL_Param_Dcl; 00155 class TAO_PSDL_Raises_Expr; 00156 class TAO_PSDL_Context_Expr; 00157 class TAO_PSDL_Param_Type_Spec; 00158 class TAO_PSDL_Fixed_Pt_Type; 00159 class TAO_PSDL_Constr_Forward_Decl; 00160 class TAO_PSDL_Interface; 00161 class TAO_PSDL_Interface_Body; 00162 class TAO_PSDL_Interface_Dcl; 00163 class TAO_PSDL_Forward_Dcl; 00164 class TAO_PSDL_Interface_Header; 00165 class TAO_PSDL_Export_Dcl; 00166 class TAO_PSDL_Storagetype_Dcl; 00167 class TAO_PSDL_Storagetype_Fwd_Dcl; 00168 class TAO_PSDL_Storagetype_Header; 00169 class TAO_PSDL_Storagetype_Body; 00170 class TAO_PSDL_Interface_Inheritance_Spec; 00171 class TAO_PSDL_Interface_Name; 00172 class TAO_PSDL_Scoped_Name; 00173 class TAO_PSDL_Value; 00174 class TAO_PSDL_Value_Common_Base; 00175 class TAO_PSDL_Value_Forward_Dcl; 00176 class TAO_PSDL_Value_Box_Dcl; 00177 class TAO_PSDL_Value_Abs_Dcl; 00178 class TAO_PSDL_Value_Dcl; 00179 class TAO_PSDL_Value_Header; 00180 class TAO_PSDL_Value_Inheritance_Spec; 00181 class TAO_PSDL_Value_Name; 00182 class TAO_PSDL_Value_Element; 00183 class TAO_PSDL_Enumerator; 00184 class TAO_PSDL_Literal; 00185 class TAO_PSDL_Array_Declarator; 00186 class TAO_PSDL_Fixed_Array_Size; 00187 class TAO_PSDL_State_Member; 00188 class TAO_PSDL_Init_Dcl; 00189 class TAO_PSDL_Init_Param_Decls; 00190 class TAO_PSDL_Init_Param_Decl; 00191 class TAO_PSDL_Factory_Parameters; 00192 class TAO_PSDL_Attr_Dcl; 00193 class TAO_PSDL_Factory_Dcl; 00194 class TAO_PSDL_Positive_Int_Const; 00195 00196 class TAO_PSDL_Export TAO_PSDL_Node_Visitor 00197 { 00198 public: 00199 00200 TAO_PSDL_Node_Visitor (); 00201 00202 // Destructor. 00203 virtual ~TAO_PSDL_Node_Visitor (void); 00204 00205 // All the nodes in the parse tree are of base type 00206 // TAO_PSDL_Node. Based on the visitor pattern, the following 00207 // methods are invoked depending on the actual type of the node. 00208 // The visitor pattern is being used. And, the return value is a '0' 00209 // when successful and '-1' on a failure. 00210 virtual int visit_specification (TAO_PSDL_Specification *); 00211 virtual int visit_definition (TAO_PSDL_Definition *); 00212 virtual int visit_module (TAO_PSDL_Module *); 00213 virtual int visit_abstract_storagetype (TAO_PSDL_Abstract_Storagetype *); 00214 virtual int visit_abstract_storagetype_dcl (TAO_PSDL_Abstract_Storagetype_Dcl *); 00215 virtual int visit_abstract_storagetype_fwd_dcl (TAO_PSDL_Abstract_Storagetype_Fwd_Dcl *); 00216 virtual int visit_abstract_storagetype_header (TAO_PSDL_Abstract_Storagetype_Header *); 00217 virtual int visit_abstract_storagetype_body (TAO_PSDL_Abstract_Storagetype_Body *); 00218 virtual int visit_abstract_storagetype_member (TAO_PSDL_Abstract_Storagetype_Member *); 00219 virtual int visit_abstract_storagetype_inh_spec (TAO_PSDL_Abstract_Storagetype_Inh_Spec *); 00220 virtual int visit_abstract_storagetype_name (TAO_PSDL_Abstract_Storagetype_Name *); 00221 virtual int visit_psdl_state_dcl (TAO_PSDL_Psdl_State_Dcl *); 00222 virtual int visit_psdl_state_type_spec (TAO_PSDL_Psdl_State_Type_Spec *); 00223 00224 virtual int visit_abstract_storagetype_ref_type (TAO_PSDL_Abstract_Storagetype_Ref_Type); 00225 00226 virtual int visit_abstract_storagehome (TAO_PSDL_Abstract_Storagehome *); 00227 virtual int visit_abstract_storagehome_fwd_dcl (TAO_PSDL_Abstract_Storagehome_Fwd_Dcl *); 00228 virtual int visit_abstract_storagehome_dcl (TAO_PSDL_Abstract_Storagehome_Dcl *); 00229 00230 virtual int visit_abstract_storagehome_header (TAO_PSDL_Abstract_Storagehome_Header *); 00231 virtual int visit_abstract_storagehome_body (TAO_PSDL_Abstract_Storagehome_Body *); 00232 virtual int visit_abstract_storagehome_member (TAO_PSDL_Abstract_Storagehome_Member *); 00233 virtual int visit_abstract_storagehome_inh_spec (TAO_PSDL_Abstract_Storagehome_Inh_Spec *); 00234 virtual int visit_abstract_storagehome_name (TAO_PSDL_Abstract_Storagehome_Name *); 00235 virtual int visit_local_op_dcl (TAO_PSDL_Local_Op_Dcl *); 00236 virtual int visit_key_dcl (TAO_PSDL_Key_Dcl *); 00237 virtual int visit_catalog (TAO_PSDL_Catalog *); 00238 virtual int visit_catalog_inh_spec (TAO_PSDL_Catalog_Inh_Spec *); 00239 virtual int visit_catalog_name (TAO_PSDL_Catalog_Name *); 00240 virtual int visit_catalog_body (TAO_PSDL_Catalog_Body *); 00241 virtual int visit_catalog_member (TAO_PSDL_Catalog_Member *); 00242 virtual int visit_storagetype_member (TAO_PSDL_Storagetype_Member *); 00243 virtual int visit_storagetype_inh_spec (TAO_PSDL_Storagetype_Inh_Spec *); 00244 virtual int visit_storagetype_name (TAO_PSDL_Storagetype_Name *); 00245 virtual int visit_storagetype_impl_spec (TAO_PSDL_Storagetype_Impl_Spec *); 00246 virtual int visit_storagetype_ref_type (TAO_PSDL_Storagetype_Ref_Type *); 00247 virtual int visit_store_directive (TAO_PSDL_Store_Directive *); 00248 virtual int visit_psdl_concrete_state_type (TAO_PSDL_Psdl_Concrete_State_Type *); 00249 virtual int visit_ref_rep_directive (TAO_PSDL_Ref_Rep_Directive *); 00250 virtual int visit_storagehome (TAO_PSDL_Storagehome *); 00251 virtual int visit_storagehome_header (TAO_PSDL_Storagehome_Header *); 00252 virtual int visit_storagehome_body (TAO_PSDL_Storagehome_Body *); 00253 virtual int visit_storagehome_member (TAO_PSDL_Storagehome_Member *); 00254 virtual int visit_storagehome_inh_spec (TAO_PSDL_Storagehome_Inh_Spec *); 00255 virtual int visit_storagehome_name (TAO_PSDL_Storagehome_Name *); 00256 00257 virtual int visit_storagehome_impl_spec (TAO_PSDL_Storagehome_Impl_Spec *); 00258 virtual int visit_primary_key_dcl (TAO_PSDL_Primary_Key_Dcl *); 00259 virtual int visit_identifier (TAO_PSDL_Identifier *); 00260 00261 virtual int visit_type_dcl (TAO_PSDL_Type_Dcl *); 00262 virtual int visit_type_declarator (TAO_PSDL_Type_Declarator *); 00263 virtual int visit_type_spec (TAO_PSDL_Type_Spec *); 00264 virtual int visit_simple_type_spec (TAO_PSDL_Simple_Type_Spec *); 00265 virtual int visit_base_type_spec (TAO_PSDL_Base_Type_Spec *); 00266 virtual int visit_template_type_spec (TAO_PSDL_Template_Type_Spec *); 00267 virtual int visit_constr_type_spec (TAO_PSDL_Constr_Type_Spec *); 00268 virtual int visit_declarators (TAO_PSDL_Declarators *); 00269 virtual int visit_declarator (TAO_PSDL_Declarator *); 00270 virtual int visit_simple_declarator (TAO_PSDL_Simple_Declarator *); 00271 virtual int visit_simple_declarator_list (TAO_PSDL_Simple_Declarator_List *); 00272 virtual int visit_complex_declarator (TAO_PSDL_Complex_Declarator *); 00273 virtual int visit_predefined_type (TAO_PSDL_Predefined_Type *); 00274 virtual int visit_member_list (TAO_PSDL_Member_List *); 00275 virtual int visit_member (TAO_PSDL_Member *); 00276 virtual int visit_union_type (TAO_PSDL_Union_Type *); 00277 virtual int visit_switch_type_spec (TAO_PSDL_Switch_Type_Spec *); 00278 virtual int visit_switch_body (TAO_PSDL_Switch_Body *); 00279 virtual int visit_case_case (TAO_PSDL_Case *); 00280 virtual int visit_case_label (TAO_PSDL_Case_Label *); 00281 virtual int visit_element_spec (TAO_PSDL_Element_Spec *); 00282 virtual int visit_const_dcl (TAO_PSDL_Const_Dcl *); 00283 virtual int visit_const_type (TAO_PSDL_Const_Type *); 00284 virtual int visit_const_exp (TAO_PSDL_Const_Exp *); 00285 virtual int visit_or_expr (TAO_PSDL_Or_Expr *); 00286 virtual int visit_xor_expr (TAO_PSDL_Xor_Expr *); 00287 virtual int visit_and_expr (TAO_PSDL_And_Expr *); 00288 virtual int visit_shift_expr (TAO_PSDL_Shift_Expr *); 00289 virtual int visit_add_expr (TAO_PSDL_Add_Expr *); 00290 virtual int visit_mult_expr (TAO_PSDL_Mult_Expr *); 00291 virtual int visit_unary_expr (TAO_PSDL_Unary_Expr *); 00292 virtual int visit_primary_expr (TAO_PSDL_Primary_Expr *); 00293 virtual int visit_except_dcl (TAO_PSDL_Except_Dcl *); 00294 virtual int visit_op_dcl (TAO_PSDL_Op_Dcl *); 00295 virtual int visit_storagetype (TAO_PSDL_Storagetype *); 00296 virtual int visit_storagetype_dcl (TAO_PSDL_Storagetype_Dcl *); 00297 virtual int visit_storagetype_fwd_dcl (TAO_PSDL_Storagetype_Fwd_Dcl *); 00298 virtual int visit_storagetype_header (TAO_PSDL_Storagetype_Header *); 00299 virtual int visit_storagetype_body (TAO_PSDL_Storagetype_Body *); 00300 virtual int visit_storagehome_scope (TAO_PSDL_Storagehome_Scope *); 00301 virtual int visit_provides_dcl (TAO_PSDL_Provides_Dcl *); 00302 virtual int visit_op_type_spec (TAO_PSDL_Op_Type_Spec *); 00303 virtual int visit_parameter_dcls (TAO_PSDL_Parameter_Dcls *); 00304 virtual int visit_param_dcl (TAO_PSDL_Param_Dcl *); 00305 virtual int visit_raises_expr (TAO_PSDL_Raises_Expr *); 00306 virtual int visit_context_expr (TAO_PSDL_Context_Expr *); 00307 virtual int visit_param_type_spec (TAO_PSDL_Param_Type_Spec *); 00308 virtual int visit_fixed_pt_type (TAO_PSDL_Fixed_Pt_Type *); 00309 virtual int visit_constr_forward_decl (TAO_PSDL_Constr_Forward_Decl *); 00310 virtual int visit_interface (TAO_PSDL_Interface *); 00311 virtual int visit_interface_body (TAO_PSDL_Interface_Body *); 00312 virtual int visit_interface_dcl (TAO_PSDL_Interface_Dcl *); 00313 virtual int visit_forward_dcl (TAO_PSDL_Forward_Dcl *); 00314 virtual int visit_interface_header (TAO_PSDL_Interface_Header *); 00315 virtual int visit_export_dcl (TAO_PSDL_Export_Dcl *); 00316 virtual int visit_interface_inheritance_spec (TAO_PSDL_Interface_Inheritance_Spec *); 00317 virtual int visit_interface_name (TAO_PSDL_Interface_Name *); 00318 virtual int visit_scoped_name (TAO_PSDL_Scoped_Name *); 00319 virtual int visit_value (TAO_PSDL_Value *); 00320 virtual int visit_value_common_base (TAO_PSDL_Value_Common_Base *); 00321 virtual int visit_value_forward_dcl (TAO_PSDL_Value_Forward_Dcl *); 00322 virtual int visit_value_box_dcl (TAO_PSDL_Value_Box_Dcl *); 00323 virtual int visit_value_abs_dcl (TAO_PSDL_Value_Abs_Dcl *); 00324 virtual int visit_value_dcl (TAO_PSDL_Value_Dcl *); 00325 virtual int visit_value_header (TAO_PSDL_Value_Header *); 00326 virtual int visit_value_inheritance_spec (TAO_PSDL_Value_Inheritance_Spec *); 00327 virtual int visit_value_name (TAO_PSDL_Value_Name *); 00328 virtual int visit_value_element (TAO_PSDL_Value_Element *); 00329 virtual int visit_array_declarator (TAO_PSDL_Array_Declarator *); 00330 virtual int visit_fixed_array_size (TAO_PSDL_Fixed_Array_Size *); 00331 virtual int visit_enumerator (TAO_PSDL_Enumerator *); 00332 virtual int visit_literal (TAO_PSDL_Literal *); 00333 virtual int visit_state_member (TAO_PSDL_State_Member *); 00334 virtual int visit_init_dcl (TAO_PSDL_Init_Dcl *); 00335 virtual int visit_init_param_decls (TAO_PSDL_Init_Param_Decls *); 00336 virtual int visit_init_param_decl (TAO_PSDL_Init_Param_Decl *); 00337 virtual int visit_factory_parameters (TAO_PSDL_Factory_Parameters *); 00338 virtual int visit_attr_dcl (TAO_PSDL_Attr_Dcl *); 00339 virtual int visit_factory_dcl (TAO_PSDL_Factory_Dcl *); 00340 virtual int visit_positive_int_const (TAO_PSDL_Positive_Int_Const *); 00341 00342 /// To check if the identifier_type is a predefined type or one that 00343 /// is defined in the idl in case. 00344 virtual int base_type (const ACE_CString &identifier_name, 00345 ACE_CString &identifier_type); 00346 00347 virtual ACE_CString version_for_stub (ACE_CString identifier_type); 00348 00349 // Generate the code that should go into the stub implementation 00350 // file for the type_declarators. 00351 virtual void gen_code_for_si (void); 00352 00353 // Generate the code that should go into the stub inline 00354 // file for the type_declarators. 00355 virtual void gen_code_for_sinline (void); 00356 00357 protected: 00358 00359 // identifiers_ and predefined_type_ is used to store the temporary 00360 // values while building ASTs. 00361 ACE_Array_Base <ACE_CString> identifiers_; 00362 ACE_Array_Base <CORBA::ULong> predefined_type_; 00363 CORBA::ULong count_; 00364 TAO_PSDL_Node_Visitor *node_visitor_; 00365 TAO_PSDL_Visitor_Factory *visitor_factory_; 00366 }; 00367 00368 #endif /* TAO_PSDL_NODE_VISITOR_H */