00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef lestes__md__mem__memory_allocator_bases_g_hh__included
00010 #define lestes__md__mem__memory_allocator_bases_g_hh__included
00011
00012 #include <lestes/md/common.hh>
00013
00014 #include <lestes/std/objectize_macros.hh>
00015 package(lestes);
00016 package(std);
00017 class object;
00018 end_package(std);
00019 end_package(lestes);
00020
00021 package(lestes);
00022 package(lang);
00023 package(cplus);
00024 package(sem);
00025 class ss_function_declaration;
00026 end_package(sem);
00027 end_package(cplus);
00028 end_package(lang);
00029 end_package(lestes);
00030
00031 package(lestes);
00032 package(lang);
00033 package(cplus);
00034 package(sem);
00035 class ss_object_declaration;
00036 end_package(sem);
00037 end_package(cplus);
00038 end_package(lang);
00039 end_package(lestes);
00040
00041 package(lestes);
00042 package(backend_v2);
00043 package(intercode);
00044 class pi_mem_factory;
00045 end_package(intercode);
00046 end_package(backend_v2);
00047 end_package(lestes);
00048
00049 package(lestes);
00050 package(backend_v2);
00051 package(intercode);
00052 class pi_abstract_function_call;
00053 end_package(intercode);
00054 end_package(backend_v2);
00055 end_package(lestes);
00056
00057 package(lestes);
00058 package(md);
00059 package(literals);
00060 class literal_info_base;
00061 end_package(literals);
00062 end_package(md);
00063 end_package(lestes);
00064
00065 package(lestes);
00066 package(backend_v2);
00067 package(intercode);
00068 class pi_pi;
00069 end_package(intercode);
00070 end_package(backend_v2);
00071 end_package(lestes);
00072
00073 package(lestes);
00074 package(backend_v2);
00075 package(intercode);
00076 class pi_sp;
00077 end_package(intercode);
00078 end_package(backend_v2);
00079 end_package(lestes);
00080
00081 package(lestes);
00082 package(md);
00083 package(types);
00084 class tm_data_type_base;
00085 end_package(types);
00086 end_package(md);
00087 end_package(lestes);
00088
00089 package(lestes);
00090 package(md);
00091 package(mem);
00092
00093
00094 class allocator_base;
00095 class local_variable_allocator_base;
00096 class global_variable_allocator_base;
00097
00098
00099
00100
00101
00102
00103 class allocator_base : public ::lestes::std::object {
00104 public:
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118 virtual void deallocate(ptr< ::lestes::backend_v2::intercode::pi_mem_factory > mem, ptr< ::lestes::backend_v2::intercode::pi_sp > psp, ptr< ::lestes::backend_v2::intercode::pi_sp > nsp) abstract;
00119
00120
00121 virtual void calculate_placement() abstract;
00122
00123
00124
00125
00126 virtual ptr<reflection_list> reflection_get() const;
00127
00128 virtual ptr<field_list_list> field_values_get() const;
00129
00130 protected:
00131
00132 allocator_base (
00133 );
00134
00135
00136 virtual void gc_mark();
00137
00138 private:
00139 static ptr<reflection_list> reflection;
00140
00141 };
00142
00143
00144
00145
00146
00147
00148 class local_variable_allocator_base : public allocator_base {
00149 public:
00150
00151 ptr< ::lestes::lang::cplus::sem::ss_function_declaration > function_get() const;
00152
00153
00154 void function_set(const ptr< ::lestes::lang::cplus::sem::ss_function_declaration > &);
00155
00156
00157 virtual ptr< ::lestes::backend_v2::intercode::pi_mem_factory > allocate(ptr< ::lestes::lang::cplus::sem::ss_object_declaration > decl) abstract;
00158
00159
00160 virtual ptr< ::lestes::backend_v2::intercode::pi_mem_factory > allocate_tmp(ptr< ::lestes::md::types::tm_data_type_base > type) abstract;
00161
00162
00163 virtual void deallocate(ptr< ::lestes::backend_v2::intercode::pi_mem_factory > mem, ptr< ::lestes::backend_v2::intercode::pi_sp > psp, ptr< ::lestes::backend_v2::intercode::pi_sp > nsp) abstract;
00164
00165
00166 virtual void calculate_placement() abstract;
00167
00168
00169
00170
00171 virtual ptr<reflection_list> reflection_get() const;
00172
00173 virtual ptr<field_list_list> field_values_get() const;
00174
00175 protected:
00176
00177 local_variable_allocator_base (
00178 ptr< ::lestes::lang::cplus::sem::ss_function_declaration > a__local_variable_allocator_base__function);
00179
00180
00181 virtual void gc_mark();
00182
00183 private:
00184
00185 srp< ::lestes::lang::cplus::sem::ss_function_declaration > function;
00186 static ptr<reflection_list> reflection;
00187
00188 };
00189
00190
00191
00192
00193
00194
00195 class global_variable_allocator_base : public allocator_base {
00196 public:
00197
00198 virtual ptr< ::lestes::backend_v2::intercode::pi_mem_factory > allocate(ptr< ::lestes::lang::cplus::sem::ss_object_declaration > decl) abstract;
00199
00200
00201 virtual void init_variable(ptr< ::lestes::backend_v2::intercode::pi_mem_factory > mem, ptr< ::lestes::md::literals::literal_info_base > value) abstract;
00202
00203
00204 virtual void deallocate(ptr< ::lestes::backend_v2::intercode::pi_mem_factory > mem, ptr< ::lestes::backend_v2::intercode::pi_sp > psp, ptr< ::lestes::backend_v2::intercode::pi_sp > nsp) abstract;
00205
00206
00207 virtual void calculate_placement() abstract;
00208
00209
00210
00211
00212 virtual ptr<reflection_list> reflection_get() const;
00213
00214 virtual ptr<field_list_list> field_values_get() const;
00215
00216 protected:
00217
00218 global_variable_allocator_base (
00219 );
00220
00221
00222 virtual void gc_mark();
00223
00224 private:
00225 static ptr<reflection_list> reflection;
00226
00227 };
00228
00229
00230 end_package(mem);
00231 end_package(md);
00232 end_package(lestes);
00233
00234 #endif // lestes__md__mem__memory_allocator_bases_g_hh__included