00001
00002
00003 #ifndef lestes__md__mem__memory_allocators_g_hh__included
00004 #define lestes__md__mem__memory_allocators_g_hh__included
00005
00006 #include <lestes/md/common.hh>
00007 #include <lestes/std/map.hh>
00008 #include <lestes/md/mem/memory_allocator_bases.g.hh>
00009
00010 #include <lestes/std/objectize_macros.hh>
00011 package(lestes);
00012 package(lang);
00013 package(cplus);
00014 package(sem);
00015 class ss_function_declaration;
00016 end_package(sem);
00017 end_package(cplus);
00018 end_package(lang);
00019 end_package(lestes);
00020
00021 package(lestes);
00022 package(lang);
00023 package(cplus);
00024 package(sem);
00025 class ss_object_declaration;
00026 end_package(sem);
00027 end_package(cplus);
00028 end_package(lang);
00029 end_package(lestes);
00030
00031 package(lestes);
00032 package(backend_v2);
00033 package(intercode);
00034 class pi_mem_factory;
00035 end_package(intercode);
00036 end_package(backend_v2);
00037 end_package(lestes);
00038
00039 package(lestes);
00040 package(backend_v2);
00041 package(intercode);
00042 class pi_mf_stack;
00043 end_package(intercode);
00044 end_package(backend_v2);
00045 end_package(lestes);
00046
00047 package(lestes);
00048 package(backend_v2);
00049 package(intercode);
00050 class pi_mf_decl;
00051 end_package(intercode);
00052 end_package(backend_v2);
00053 end_package(lestes);
00054
00055 package(lestes);
00056 package(backend_v2);
00057 package(intercode);
00058 class pi_pi;
00059 end_package(intercode);
00060 end_package(backend_v2);
00061 end_package(lestes);
00062
00063 package(lestes);
00064 package(backend_v2);
00065 package(intercode);
00066 class pi_sp;
00067 end_package(intercode);
00068 end_package(backend_v2);
00069 end_package(lestes);
00070
00071 package(lestes);
00072 package(md);
00073 package(literals);
00074 class literal_info_base;
00075 end_package(literals);
00076 end_package(md);
00077 end_package(lestes);
00078
00079 package(lestes);
00080 package(backend_v2);
00081 package(intercode);
00082 class pi_abstract_function_call;
00083 end_package(intercode);
00084 end_package(backend_v2);
00085 end_package(lestes);
00086
00087 package(lestes);
00088 package(md);
00089 package(types);
00090 class tm_data_type_base;
00091 end_package(types);
00092 end_package(md);
00093 end_package(lestes);
00094
00095 package(lestes);
00096 package(md);
00097 package(mem);
00098
00099
00100 class local_variable_allocator;
00101 class global_variable_allocator;
00102
00103
00104
00105 class local_variable_allocator : public local_variable_allocator_base {
00106 public:
00107
00108 bool placement_calculated_get() const;
00109
00110
00111 void placement_calculated_set(bool);
00112
00113
00114 t_ssize preserved_space_size_get() const;
00115
00116
00117 void preserved_space_size_set(t_ssize);
00118
00119
00120 t_ssize vars_space_start_offset_get() const;
00121
00122
00123 void vars_space_start_offset_set(t_ssize);
00124
00125
00126 t_ssize tmps_space_start_offset_get() const;
00127
00128
00129 void tmps_space_start_offset_set(t_ssize);
00130
00131
00132 t_ssize local_end_offset_get() const;
00133
00134
00135 void local_end_offset_set(t_ssize);
00136
00137
00138 static ptr< ::lestes::std::map< srp< ::lestes::lang::cplus::sem::ss_function_declaration >, srp< local_variable_allocator > > > singleton_instances_get();
00139
00140
00141 static void singleton_instances_set(const ptr< ::lestes::std::map< srp< ::lestes::lang::cplus::sem::ss_function_declaration >, srp< local_variable_allocator > > > & );
00142
00143
00144 ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_mf_stack > > > tmps_get() const;
00145
00146
00147 void tmps_set(const ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_mf_stack > > > & );
00148
00149
00150 ptr< ::lestes::std::map< srp< ::lestes::lang::cplus::sem::ss_object_declaration >, srp< ::lestes::backend_v2::intercode::pi_mf_stack > > > variables_get() const;
00151
00152
00153 void variables_set(const ptr< ::lestes::std::map< srp< ::lestes::lang::cplus::sem::ss_object_declaration >, srp< ::lestes::backend_v2::intercode::pi_mf_stack > > > & );
00154
00155
00156 virtual ptr< ::lestes::backend_v2::intercode::pi_mem_factory > allocate_tmp(ptr< ::lestes::md::types::tm_data_type_base > type);
00157
00158
00159 virtual ptr< ::lestes::backend_v2::intercode::pi_mem_factory > allocate(ptr< ::lestes::lang::cplus::sem::ss_object_declaration > decl);
00160
00161
00162 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);
00163
00164
00165 virtual void calculate_placement();
00166
00167
00168 void calculate_vars_placement();
00169
00170
00171 void calculate_tmps_placement();
00172
00173
00174 static ptr< local_variable_allocator > instance(ptr< ::lestes::lang::cplus::sem::ss_function_declaration > function);
00175
00176
00177
00178 static ptr< local_variable_allocator > create (
00179 ptr< ::lestes::lang::cplus::sem::ss_function_declaration > a__local_variable_allocator_base__function,
00180 bool a__local_variable_allocator__placement_calculated,
00181 t_ssize a__local_variable_allocator__preserved_space_size,
00182 t_ssize a__local_variable_allocator__vars_space_start_offset,
00183 t_ssize a__local_variable_allocator__tmps_space_start_offset,
00184 t_ssize a__local_variable_allocator__local_end_offset,
00185 ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_mf_stack > > > a__local_variable_allocator__tmps,
00186 ptr< ::lestes::std::map< srp< ::lestes::lang::cplus::sem::ss_object_declaration >, srp< ::lestes::backend_v2::intercode::pi_mf_stack > > > a__local_variable_allocator__variables);
00187
00188
00189 static ptr< local_variable_allocator > create (
00190 ptr< ::lestes::lang::cplus::sem::ss_function_declaration > a__local_variable_allocator_base__function);
00191
00192
00193
00194
00195 virtual ptr<reflection_list> reflection_get() const;
00196
00197 virtual ptr<field_list_list> field_values_get() const;
00198
00199 protected:
00200
00201 local_variable_allocator (
00202 ptr< ::lestes::lang::cplus::sem::ss_function_declaration > a__local_variable_allocator_base__function,
00203 bool a__local_variable_allocator__placement_calculated,
00204 t_ssize a__local_variable_allocator__preserved_space_size,
00205 t_ssize a__local_variable_allocator__vars_space_start_offset,
00206 t_ssize a__local_variable_allocator__tmps_space_start_offset,
00207 t_ssize a__local_variable_allocator__local_end_offset,
00208 ptr< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_mf_stack > > > a__local_variable_allocator__tmps,
00209 ptr< ::lestes::std::map< srp< ::lestes::lang::cplus::sem::ss_object_declaration >, srp< ::lestes::backend_v2::intercode::pi_mf_stack > > > a__local_variable_allocator__variables);
00210
00211
00212 virtual void gc_mark();
00213
00214 private:
00215
00216 bool placement_calculated;
00217
00218 t_ssize preserved_space_size;
00219
00220 t_ssize vars_space_start_offset;
00221
00222 t_ssize tmps_space_start_offset;
00223
00224 t_ssize local_end_offset;
00225 static ptr< ::lestes::std::map< srp< ::lestes::lang::cplus::sem::ss_function_declaration >, srp< local_variable_allocator > > > singleton_instances;
00226
00227 srp< ::lestes::std::list< srp< ::lestes::backend_v2::intercode::pi_mf_stack > > > tmps;
00228
00229 srp< ::lestes::std::map< srp< ::lestes::lang::cplus::sem::ss_object_declaration >, srp< ::lestes::backend_v2::intercode::pi_mf_stack > > > variables;
00230 static ptr<reflection_list> reflection;
00231
00232 };
00233
00234
00235
00236 class global_variable_allocator : public global_variable_allocator_base {
00237 public:
00238
00239 static ptr< global_variable_allocator > singleton_instance_get();
00240
00241
00242 static void singleton_instance_set(const ptr< global_variable_allocator > &);
00243
00244
00245 ptr< ::lestes::std::map< srp< ::lestes::lang::cplus::sem::ss_object_declaration >, srp< ::lestes::backend_v2::intercode::pi_mf_decl > > > variables_get() const;
00246
00247
00248 void variables_set(const ptr< ::lestes::std::map< srp< ::lestes::lang::cplus::sem::ss_object_declaration >, srp< ::lestes::backend_v2::intercode::pi_mf_decl > > > & );
00249
00250
00251 ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_mem_factory >, srp< ::lestes::md::literals::literal_info_base > > > values_get() const;
00252
00253
00254 void values_set(const ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_mem_factory >, srp< ::lestes::md::literals::literal_info_base > > > & );
00255
00256
00257 virtual ptr< ::lestes::backend_v2::intercode::pi_mem_factory > allocate(ptr< ::lestes::lang::cplus::sem::ss_object_declaration > decl);
00258
00259
00260 virtual void init_variable(ptr< ::lestes::backend_v2::intercode::pi_mem_factory > mem, ptr< ::lestes::md::literals::literal_info_base > value);
00261
00262
00263 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);
00264
00265
00266 void emit_asm_declarations_for_initialized(::std::ostream& output);
00267
00268
00269 void emit_asm_declarations_for_uninitialized(::std::ostream& output);
00270
00271
00272 virtual void calculate_placement();
00273
00274 static ptr< global_variable_allocator > instance();
00275
00276
00277
00278 static ptr< global_variable_allocator > create (
00279 ptr< ::lestes::std::map< srp< ::lestes::lang::cplus::sem::ss_object_declaration >, srp< ::lestes::backend_v2::intercode::pi_mf_decl > > > a__global_variable_allocator__variables,
00280 ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_mem_factory >, srp< ::lestes::md::literals::literal_info_base > > > a__global_variable_allocator__values);
00281
00282
00283 static ptr< global_variable_allocator > create (
00284 );
00285
00286
00287
00288
00289 virtual ptr<reflection_list> reflection_get() const;
00290
00291 virtual ptr<field_list_list> field_values_get() const;
00292
00293 protected:
00294
00295 global_variable_allocator (
00296 ptr< ::lestes::std::map< srp< ::lestes::lang::cplus::sem::ss_object_declaration >, srp< ::lestes::backend_v2::intercode::pi_mf_decl > > > a__global_variable_allocator__variables,
00297 ptr< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_mem_factory >, srp< ::lestes::md::literals::literal_info_base > > > a__global_variable_allocator__values);
00298
00299
00300 virtual void gc_mark();
00301
00302 private:
00303 static ptr< global_variable_allocator > singleton_instance;
00304
00305 srp< ::lestes::std::map< srp< ::lestes::lang::cplus::sem::ss_object_declaration >, srp< ::lestes::backend_v2::intercode::pi_mf_decl > > > variables;
00306
00307 srp< ::lestes::std::map< srp< ::lestes::backend_v2::intercode::pi_mem_factory >, srp< ::lestes::md::literals::literal_info_base > > > values;
00308 static ptr<reflection_list> reflection;
00309
00310 };
00311
00312
00313 end_package(mem);
00314 end_package(md);
00315 end_package(lestes);
00316
00317 #endif // lestes__md__mem__memory_allocators_g_hh__included