SUIF2: Minor mods to enable extending TypeBuilder in a derived class
Karl Eisenhofer
karl@stage2i.com
Wed, 03 May 2000 15:26:49 -0700
This is a multi-part message in MIME format.
--------------DAEAD4F208A54D9700175909
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Basically the problem is that is following construct is typically used
to get to the TypeBuilder:
suif_env->get_object_factory(TypeBuilder::get_class_name());
but the MyTypeBuilder class is inserted into the factories instaed of
TypeBuilder.
The solution is to begin using the SuifEnv typebuilder accessor and
mutator interface
(SuifEnv::get_type_builder() and
SuifEnv::set_type_builder(TypeBuilder*)) to get the
type builder. This is the extent of the changes.
I have attached the context diffs, note that the .sav extension applies
to the new version.
The following files have changed:
/transforms/expression_dismantlers.cpp
/region_passes.cpp
/statement_dismantlers.cpp
/utils/type_utils.cpp
/basesuif/type_builder/type_builder.cpp
Karl
--------------DAEAD4F208A54D9700175909
Content-Type: text/plain; charset=us-ascii;
name="expression_dismantlers.cpp.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="expression_dismantlers.cpp.diff"
*** expression_dismantlers.cpp.sav Wed May 03 07:47:51 2000
--- expression_dismantlers.cpp Wed May 03 14:00:30 2000
***************
*** 218,226 ****
}
void MultiDimArrayDismantlerPass::do_file_set_block( FileSetBlock* file_set_block ) {
SuifEnv *env = get_suif_env();
! TypeBuilder *type_builder = env->get_type_builder();
suif_hash_map<MultiDimArrayType *,Type *> type_map;
ReplacingWalker walker(env);
list<MultiDimArrayType *> type_list;
--- 218,227 ----
}
void MultiDimArrayDismantlerPass::do_file_set_block( FileSetBlock* file_set_block ) {
SuifEnv *env = get_suif_env();
! TypeBuilder *type_builder = (TypeBuilder *)
! env->get_object_factory(TypeBuilder::get_class_name());
suif_hash_map<MultiDimArrayType *,Type *> type_map;
ReplacingWalker walker(env);
list<MultiDimArrayType *> type_list;
***************
*** 646,654 ****
NonConstDimExpressionWalker::NonConstDimExpressionWalker(
SuifEnv *env,ReplacingWalker &map,ReverseMap &rev_map,
const LString &selector)
: SelectiveWalker(env,selector), _map(map),_rev_map(rev_map) {
! _type_builder = env->get_type_builder();
}
Walker::ApplyStatus NonConstDimExpressionWalker::operator () (SuifObject *x) {
if (_rev_map.find(x) != _rev_map.end())
--- 647,656 ----
NonConstDimExpressionWalker::NonConstDimExpressionWalker(
SuifEnv *env,ReplacingWalker &map,ReverseMap &rev_map,
const LString &selector)
: SelectiveWalker(env,selector), _map(map),_rev_map(rev_map) {
! _type_builder = (TypeBuilder *)
! env->get_object_factory(TypeBuilder::get_class_name());
}
Walker::ApplyStatus NonConstDimExpressionWalker::operator () (SuifObject *x) {
if (_rev_map.find(x) != _rev_map.end())
***************
*** 742,750 ****
NonConstBoundArrayTypeWalker::NonConstBoundArrayTypeWalker(
SuifEnv *env,ReverseMap &rev_map,const LString &selector)
: SelectiveWalker(env,selector),_rev_map(rev_map) {
! _type_builder = env->get_type_builder();
}
void NonConstBoundDismantlerPass::do_file_set_block( FileSetBlock* file_set_block ) {
SuifEnv *env = get_suif_env();
--- 744,753 ----
NonConstBoundArrayTypeWalker::NonConstBoundArrayTypeWalker(
SuifEnv *env,ReverseMap &rev_map,const LString &selector)
: SelectiveWalker(env,selector),_rev_map(rev_map) {
! _type_builder = (TypeBuilder *) env->get_object_factory(
! TypeBuilder::get_class_name());
}
void NonConstBoundDismantlerPass::do_file_set_block( FileSetBlock* file_set_block ) {
SuifEnv *env = get_suif_env();
***************
*** 779,787 ****
_s(s), _evb(NULL), _evb_val(0), _base_offset(0), _count(0),
_new_list(new list<MultiValueBlock::sub_block_pair>),
_tb(NULL)
{
! _tb = s->get_type_builder();
}
~repeat_builder() {
delete _new_list;
}
--- 782,790 ----
_s(s), _evb(NULL), _evb_val(0), _base_offset(0), _count(0),
_new_list(new list<MultiValueBlock::sub_block_pair>),
_tb(NULL)
{
! _tb = (TypeBuilder *)s->get_object_factory(TypeBuilder::get_class_name());
}
~repeat_builder() {
delete _new_list;
}
--------------DAEAD4F208A54D9700175909
Content-Type: text/plain; charset=us-ascii;
name="region_passes.cpp.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="region_passes.cpp.diff"
*** region_passes.cpp.sav Wed May 03 07:48:16 2000
--- region_passes.cpp Wed May 03 14:07:46 2000
***************
*** 148,156 ****
Expression* expr = top_array;
Expression* offset = NULL;
unsigned int i = 0;
SuifEnv* env = top_array->get_suif_env();
! TypeBuilder *tb = env->get_type_builder();
suif_vector<Expression*> lower_bounds;
suif_vector<Expression*> upper_bounds;
list<Expression*> indecies;
--- 148,157 ----
Expression* expr = top_array;
Expression* offset = NULL;
unsigned int i = 0;
SuifEnv* env = top_array->get_suif_env();
! TypeBuilder *tb = (TypeBuilder*)
! env->get_object_factory(TypeBuilder::get_class_name());
suif_vector<Expression*> lower_bounds;
suif_vector<Expression*> upper_bounds;
list<Expression*> indecies;
***************
*** 430,434 ****
conversion_count,
proc_def->get_procedure_symbol()->get_name().c_str());
conversion_count=0;
}
! };
--- 431,435 ----
conversion_count,
proc_def->get_procedure_symbol()->get_name().c_str());
conversion_count=0;
}
! };
\ No newline at end of file
--------------DAEAD4F208A54D9700175909
Content-Type: text/plain; charset=us-ascii;
name="statement_dismantlers.cpp.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="statement_dismantlers.cpp.diff"
*** statement_dismantlers.cpp.sav Wed May 03 07:48:46 2000
--- statement_dismantlers.cpp Wed May 03 14:12:00 2000
***************
*** 421,429 ****
IInteger value = pair.first;
CodeLabelSymbol *lab = pair.second;
IntConstant *exp = create_int_constant(get_env(),type, value);
// Expression *exp = create_load_constant_expression(get_env(),type,iconst);
! TypeBuilder *type_builder = get_env()->get_type_builder();
Expression *compare =
create_binary_expression(get_env(),type_builder->get_boolean_type(),
k_is_equal_to,
deep_suif_clone(operand),
--- 421,430 ----
IInteger value = pair.first;
CodeLabelSymbol *lab = pair.second;
IntConstant *exp = create_int_constant(get_env(),type, value);
// Expression *exp = create_load_constant_expression(get_env(),type,iconst);
! TypeBuilder *type_builder = (TypeBuilder *)
! get_env()->get_object_factory(TypeBuilder::get_class_name());
Expression *compare =
create_binary_expression(get_env(),type_builder->get_boolean_type(),
k_is_equal_to,
deep_suif_clone(operand),
--------------DAEAD4F208A54D9700175909
Content-Type: text/plain; charset=us-ascii;
name="type_utils.cpp.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="type_utils.cpp.diff"
*** type_utils.cpp.sav Wed May 03 07:49:55 2000
--- type_utils.cpp Wed May 03 14:17:14 2000
***************
*** 42,62 ****
return size;
}
QualifiedType *retrieve_qualified_type(DataType *t) {
! TypeBuilder *tb = t->get_suif_env()->get_type_builder();
suif_assert_message(tb, ("initialization error in typebuilder call init_typebuilder\n"));
return(tb->get_qualified_type(t));
}
PointerType *retrieve_pointer_type(Type *t) {
! TypeBuilder *tb = t->get_suif_env()->get_type_builder();
suif_assert_message(tb, ("initialization error in typebuilder call init_typebuilder\n"));
return(tb->get_pointer_type(t));
}
LabelType *retrieve_label_type(SuifEnv *s) {
! TypeBuilder *tb = s->get_type_builder();
suif_assert_message(tb, ("initialization error in typebuilder call init_typebuilder\n"));
return(tb->get_label_type());
}
--- 42,65 ----
return size;
}
QualifiedType *retrieve_qualified_type(DataType *t) {
! TypeBuilder *tb = (TypeBuilder *)
! t->get_suif_env()->get_object_factory(TypeBuilder::get_class_name());
suif_assert_message(tb, ("initialization error in typebuilder call init_typebuilder\n"));
return(tb->get_qualified_type(t));
}
PointerType *retrieve_pointer_type(Type *t) {
! TypeBuilder *tb = (TypeBuilder *)
! t->get_suif_env()->get_object_factory(TypeBuilder::get_class_name());
suif_assert_message(tb, ("initialization error in typebuilder call init_typebuilder\n"));
return(tb->get_pointer_type(t));
}
LabelType *retrieve_label_type(SuifEnv *s) {
! TypeBuilder *tb = (TypeBuilder *)
! s->get_object_factory(TypeBuilder::get_class_name());
suif_assert_message(tb, ("initialization error in typebuilder call init_typebuilder\n"));
return(tb->get_label_type());
}
--------------DAEAD4F208A54D9700175909
Content-Type: text/plain; charset=us-ascii;
name="type_builder.cpp.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="type_builder.cpp.diff"
*** type_builder.cpp.sav Wed May 03 08:11:55 2000
--- type_builder.cpp Wed May 03 14:22:40 2000
***************
*** 46,56 ****
ModuleSubSystem *mSubSystem = suif->get_module_subsystem();
if (!mSubSystem->retrieve_module(type_builder_class_name)) {
mSubSystem -> register_module(new TypeBuilderModule( suif ));
}
-
- assert(!suif->get_type_builder()); // cannot have multiple type builders
- suif->set_type_builder((TypeBuilder*)suif->get_object_factory(TypeBuilder::get_class_name()));
}
const LString &TypeBuilder::get_class_name() {
--- 46,53 ----
--------------DAEAD4F208A54D9700175909--