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--