diff options
Diffstat (limited to 'TAO/TAO_IDL/be_include/be_visitor_ami_pre_proc.h')
-rw-r--r-- | TAO/TAO_IDL/be_include/be_visitor_ami_pre_proc.h | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/TAO/TAO_IDL/be_include/be_visitor_ami_pre_proc.h b/TAO/TAO_IDL/be_include/be_visitor_ami_pre_proc.h new file mode 100644 index 00000000000..bcf8907e25e --- /dev/null +++ b/TAO/TAO_IDL/be_include/be_visitor_ami_pre_proc.h @@ -0,0 +1,123 @@ +// +// $Id$ +// + +/* -*- c++ -*- */ +// ============================================================================ +// +// = LIBRARY +// TAO IDL +// +// = FILENAME +// be_visitor_ami_pre_proc.h +// +// = DESCRIPTION +// This visitor creates for AMI implied IDL constructs +// the appropriate AST (Abstract Syntax Tree) node, +// sets the corresponding interface or operation strategy +// on it and enteres the nodes into the AST. +// +// = AUTHOR +// Michael Kircher <Michael.Kircher@mchp.siemens.de> +// +// ============================================================================ + +#ifndef TAO_BE_VISITOR_AMI_PRE_PROC_H +#define TAO_BE_VISITOR_AMI_PRE_PROC_H + +#include "be_visitor_scope.h" +#include "ace/SString.h" + +class AST_Interface; + +class be_visitor_ami_pre_proc : public be_visitor_scope +{ + // + // = TITLE + // AMI pre processor + // + // = DESCRIPTION + // Adds AMI implied IDL code to the AST + // +private: + typedef enum + { + NORMAL, + GET_OPERATION, + SET_OPERATION + } Operation_Kind; + +public: + be_visitor_ami_pre_proc (be_visitor_context *ctx); + + virtual ~be_visitor_ami_pre_proc (void); + + virtual int visit_root (be_root *node); + // visit a root + + virtual int visit_module (be_module *node); + // visit module + + virtual int visit_interface (be_interface *node); + // visit interface + + virtual int visit_operation (be_operation *node); + // visit an operation + + virtual int visit_attribute (be_attribute *node); + // visit an attribute + +private: + int create_raise_operation (be_decl *node, + be_valuetype *excep_holder, + Operation_Kind operation_kind); + // Creates a raise operation from node and inserts it in + // excep_holder, while obeying if it is a normal operation + // or a set or get attribute. + + be_interface *create_reply_handler (be_interface *node, + be_valuetype *excep_holder); + // create the reply handler interface + + be_valuetype *create_exception_holder (be_interface *node); + // create the exception holder valuetype + + be_operation *create_sendc_operation (be_operation *node, + int for_arguments); + // create a method with "sendc_" prepended, if for_arguments + // equals one the sendc operation contains also the + // object reference to the reply handler as the first argument, + // but this should not be marhaled, therefor we need the switch + + int create_excep_operation (be_operation *node, + be_interface *reply_handler, + be_valuetype *excep_holder); + // create a method with "_excep" appended + + int create_reply_handler_operation (be_operation *node, + be_interface *reply_handler); + // create an operation with only the OUT and INOUT arguments + + int visit_scope (be_scope *node); + // specialized visit_scope + + int generate_name (ACE_CString &desintation, + const char *prefix, + const char *middle_name, + const char *suffix); + // concatenate the prefix, middle_name and suffix + // and store the result in desination. + + be_operation *generate_get_operation (be_attribute *node); + // generate a get operation out of the attribute. + + be_operation *generate_set_operation (be_attribute *node); + // generate a set operation out of the attribute. + + AST_Interface **create_inheritance_list (be_interface *node, + long &n_parents); + // Create an inheritance list for the reply handler. +}; + + +#endif // TAO_BE_VISITOR_AMI_PRE_PROC_H |