or.g.hh

Go to the documentation of this file.
00001 // This file is automatically generated, do not edit.
00002 
00003 #ifndef lestes__lang__cplus__sem__or_g_hh__included
00004 #define lestes__lang__cplus__sem__or_g_hh__included
00005 
00006 #include <lestes/common.hh>
00007 #include <lestes/std/list.hh>
00008 #include <lestes/std/set.hh>
00009 #include <lestes/lang/cplus/sem/ss_decl_name_visitor.v.g.hh>
00010 
00011 #include <lestes/std/objectize_macros.hh>
00012 package(lestes);
00013 package(std);
00014 class object;
00015 end_package(std);
00016 end_package(lestes);
00017 
00018 package(lestes);
00019 package(std);
00020 class source_location;
00021 end_package(std);
00022 end_package(lestes);
00023 
00024 package(lestes);
00025 package(lang);
00026 package(cplus);
00027 package(sem);
00028 
00029 
00030 class ss_declaration;
00031 class ss_expression;
00032 class ss_builtin_operator_declaration;
00033 class ss_function_declaration;
00034 class ss_declaration_time;
00035 class ss_decl_seq;
00036 class or_or_functional;
00037 class or_builtin_operator_declaration_creator;
00038 
00039 
00040 /*! \brief      Singleton class for purposes of creation of buitltin operator delcarations
00041 
00042         This class contains a visitor on ss_operator_name and also servers as creator
00043                                 of declarations for builtin operators. It is implemented as singleton - in it's
00044                                 instance() method the decl seq for builtin op declarations is created and then 
00045                                 proper declarations according to [13.6] are inserted into it.
00046                                 
00047                                 It is visitor on all ss_operators. First, the lookup in the builtin_op scope 
00048                                 is performed. Then we have a few special builtin ops, which take place for every
00049                                 type. If the overload resolution finds empty set of candidates, for assign, unary
00050                                 and and comma, we have to create the builtin operator declaration for these operators,
00051                                 which is then used. This is done in this visitor. All other function bodies should be nops. 
00052                                 See [13.3.1.2/3] and [13.3.1.2/9]
00053                                 
00054 */
00055 class or_builtin_operator_declaration_creator : public ss_decl_name_visitor {
00056 public:
00057         //! The method builtin_op_decl_seq_get returns the value of the field or_builtin_operator_declaration_creator::builtin_op_decl_seq.
00058         ptr< ss_decl_seq > builtin_op_decl_seq_get() const;
00059 
00060         //! The method builtin_op_decl_seq_set sets the field or_builtin_operator_declaration_creator::builtin_op_decl_seq to the given value.
00061         void builtin_op_decl_seq_set(const ptr< ss_decl_seq > &);
00062 
00063         void construct_builtin_op(ptr < ss_decl_name > op, ptr < ::lestes::std::list< srp< ss_type > > > types, ptr < ss_type > return_type);
00064 
00065         static ptr< or_builtin_operator_declaration_creator > instance();
00066 
00067         template <typename op, typename type1> void add_vq_ref_vq_ref();
00068 
00069         template <typename op, typename type1> void add_nonref_vq_ref_int();
00070 
00071         template <typename op, typename type1> void add_vq_ptr_ref_vq_ptr_ref();
00072 
00073         template <typename op, typename type1> void add_vq_ptr_nonref_vq_ptr_ref_int();
00074 
00075         template <typename op, typename type1> void add_ref_ptr();
00076 
00077         template <typename op, typename type1> void add_ref_ptr_const();
00078 
00079         template <typename op> void add_ptr_ptr();
00080 
00081         template <typename op, typename type1, typename type2> void add_nonref_nonref();
00082 
00083         template <typename op, typename type1, typename type2, typename type3> void add_nonref_nonref_nonref();
00084 
00085         template <typename op, typename type1, typename type2> void add_vq_ref_vq_ref_nonref();
00086 
00087         template <typename op, typename type1, typename type2> void add_vq_ref_vq_ref_nonref_REF();
00088 
00089         template <typename op, typename type1, typename type2, typename type3, typename type4> void add_nonref_nonref_nonref_nonref();
00090 
00091         template <typename op, typename type1> void add_ptr_ptr_int();
00092 
00093         template <typename op, typename type1> void add_ptr_int_ptr();
00094 
00095         template <typename op, typename type1> void add_int_ptr_ptr();
00096 
00097         template <typename op, typename type1> void add_bool_ptr_ptr();
00098 
00099         template <typename op, typename type1> void add_vq_ptr_ref_vq_ptr_ref_ptr();
00100 
00101         template <typename op, typename type1> void add_vq_ptr_ref_vq_ptr_ref_int();
00102 
00103         virtual void visit_ss_ordinary_name(ptr< ::lestes::lang::cplus::sem::ss_ordinary_name > );
00104 
00105         virtual void visit_ss_conversion_name(ptr< ::lestes::lang::cplus::sem::ss_conversion_name > );
00106 
00107         virtual void visit_ss_dummy_name(ptr< ::lestes::lang::cplus::sem::ss_dummy_name > );
00108 
00109         virtual void visit_ss_operator_new(ptr< ::lestes::lang::cplus::sem::ss_operator_new > );
00110 
00111         virtual void visit_ss_operator_delete(ptr< ::lestes::lang::cplus::sem::ss_operator_delete > );
00112 
00113         virtual void visit_ss_operator_new_array(ptr< ::lestes::lang::cplus::sem::ss_operator_new_array > );
00114 
00115         virtual void visit_ss_operator_delete_array(ptr< ::lestes::lang::cplus::sem::ss_operator_delete_array > );
00116 
00117         virtual void visit_ss_operator_add(ptr< ::lestes::lang::cplus::sem::ss_operator_add > );
00118 
00119         virtual void visit_ss_operator_sub(ptr< ::lestes::lang::cplus::sem::ss_operator_sub > );
00120 
00121         virtual void visit_ss_operator_mul(ptr< ::lestes::lang::cplus::sem::ss_operator_mul > );
00122 
00123         virtual void visit_ss_operator_div(ptr< ::lestes::lang::cplus::sem::ss_operator_div > );
00124 
00125         virtual void visit_ss_operator_mod(ptr< ::lestes::lang::cplus::sem::ss_operator_mod > );
00126 
00127         virtual void visit_ss_operator_bxor(ptr< ::lestes::lang::cplus::sem::ss_operator_bxor > );
00128 
00129         virtual void visit_ss_operator_band(ptr< ::lestes::lang::cplus::sem::ss_operator_band > );
00130 
00131         virtual void visit_ss_operator_bor(ptr< ::lestes::lang::cplus::sem::ss_operator_bor > );
00132 
00133         virtual void visit_ss_operator_bnot(ptr< ::lestes::lang::cplus::sem::ss_operator_bnot > );
00134 
00135         virtual void visit_ss_operator_lnot(ptr< ::lestes::lang::cplus::sem::ss_operator_lnot > );
00136 
00137         virtual void visit_ss_operator_assign(ptr< ::lestes::lang::cplus::sem::ss_operator_assign > );
00138 
00139         virtual void visit_ss_operator_assign_add(ptr< ::lestes::lang::cplus::sem::ss_operator_assign_add > );
00140 
00141         virtual void visit_ss_operator_assign_sub(ptr< ::lestes::lang::cplus::sem::ss_operator_assign_sub > );
00142 
00143         virtual void visit_ss_operator_assign_mul(ptr< ::lestes::lang::cplus::sem::ss_operator_assign_mul > );
00144 
00145         virtual void visit_ss_operator_assign_div(ptr< ::lestes::lang::cplus::sem::ss_operator_assign_div > );
00146 
00147         virtual void visit_ss_operator_assign_mod(ptr< ::lestes::lang::cplus::sem::ss_operator_assign_mod > );
00148 
00149         virtual void visit_ss_operator_assign_bxor(ptr< ::lestes::lang::cplus::sem::ss_operator_assign_bxor > );
00150 
00151         virtual void visit_ss_operator_assign_band(ptr< ::lestes::lang::cplus::sem::ss_operator_assign_band > );
00152 
00153         virtual void visit_ss_operator_assign_bor(ptr< ::lestes::lang::cplus::sem::ss_operator_assign_bor > );
00154 
00155         virtual void visit_ss_operator_assign_shl(ptr< ::lestes::lang::cplus::sem::ss_operator_assign_shl > );
00156 
00157         virtual void visit_ss_operator_assign_shr(ptr< ::lestes::lang::cplus::sem::ss_operator_assign_shr > );
00158 
00159         virtual void visit_ss_operator_shr(ptr< ::lestes::lang::cplus::sem::ss_operator_shr > );
00160 
00161         virtual void visit_ss_operator_shl(ptr< ::lestes::lang::cplus::sem::ss_operator_shl > );
00162 
00163         virtual void visit_ss_operator_sbl(ptr< ::lestes::lang::cplus::sem::ss_operator_sbl > );
00164 
00165         virtual void visit_ss_operator_sbg(ptr< ::lestes::lang::cplus::sem::ss_operator_sbg > );
00166 
00167         virtual void visit_ss_operator_sbng(ptr< ::lestes::lang::cplus::sem::ss_operator_sbng > );
00168 
00169         virtual void visit_ss_operator_sbnl(ptr< ::lestes::lang::cplus::sem::ss_operator_sbnl > );
00170 
00171         virtual void visit_ss_operator_sbe(ptr< ::lestes::lang::cplus::sem::ss_operator_sbe > );
00172 
00173         virtual void visit_ss_operator_sbne(ptr< ::lestes::lang::cplus::sem::ss_operator_sbne > );
00174 
00175         virtual void visit_ss_operator_land(ptr< ::lestes::lang::cplus::sem::ss_operator_land > );
00176 
00177         virtual void visit_ss_operator_lor(ptr< ::lestes::lang::cplus::sem::ss_operator_lor > );
00178 
00179         virtual void visit_ss_operator_inc(ptr< ::lestes::lang::cplus::sem::ss_operator_inc > );
00180 
00181         virtual void visit_ss_operator_dec(ptr< ::lestes::lang::cplus::sem::ss_operator_dec > );
00182 
00183         virtual void visit_ss_operator_comma(ptr< ::lestes::lang::cplus::sem::ss_operator_comma > );
00184 
00185         virtual void visit_ss_operator_access(ptr< ::lestes::lang::cplus::sem::ss_operator_access > );
00186 
00187         virtual void visit_ss_operator_access_member(ptr< ::lestes::lang::cplus::sem::ss_operator_access_member > );
00188 
00189         virtual void visit_ss_operator_function_call(ptr< ::lestes::lang::cplus::sem::ss_operator_function_call > );
00190 
00191         virtual void visit_ss_operator_array(ptr< ::lestes::lang::cplus::sem::ss_operator_array > );
00192 
00193         virtual void visit_ss_operator_ternary(ptr< ::lestes::lang::cplus::sem::ss_operator_ternary > );
00194 
00195         
00196 
00197         //! for purposes of dumping
00198         virtual ptr<reflection_list> reflection_get() const;
00199         //! for purposes of dumping
00200         virtual ptr<field_list_list> field_values_get() const;
00201         
00202 protected:
00203         //! Generated constructor for class or_builtin_operator_declaration_creator.
00204         or_builtin_operator_declaration_creator (
00205                 ptr< ss_decl_seq > a__or_builtin_operator_declaration_creator__builtin_op_decl_seq);
00206 
00207         //! Marking routine for class or_builtin_operator_declaration_creator. 
00208         virtual void gc_mark();
00209 
00210 private:
00211         srp< ss_decl_seq > builtin_op_decl_seq;
00212         static ptr< or_builtin_operator_declaration_creator > the_instance;
00213         static ptr<reflection_list> reflection;
00214         
00215 }; // or_builtin_operator_declaration_creator
00216 
00217 
00218 
00219 
00220         
00221 end_package(sem);
00222 end_package(cplus);
00223 end_package(lang);
00224 end_package(lestes);
00225 
00226 #endif // lestes__lang__cplus__sem__or_g_hh__included

Generated on Mon Feb 12 18:27:07 2007 for lestes by doxygen 1.5.1-20070107