Exemplo n.º 1
0
VariableSymbol *build_string_constant_variable(SuifEnv *env,const char *string) {
    TypeBuilder *tb = (TypeBuilder *)
        env->get_object_factory(TypeBuilder::get_class_name());
    IntegerType *char_type =
        tb->get_integer_type(sizeof(char)*BITSPERBYTE,
                           sizeof(char)*BITSPERBYTE,true);

    size_t len = 0;
    while (string[len])
	len ++;
    QualifiedType *q_char_type = tb->get_qualified_type(char_type);
    ArrayType *string_literal_type =
      tb->get_array_type(q_char_type,0,len + 1);
   
    MultiValueBlock *string_literal_initialization =
            create_multi_value_block(env,string_literal_type);
    for (size_t char_num = 0; char_num <= len; ++char_num) {
        string_literal_initialization->add_sub_block(
                char_num,
                create_expression_value_block(
			env,
                   	create_int_constant( 
				env,char_type,string[char_num])));
        }
    return build_initialized_variable(env,emptyLString,string_literal_type,
				      string_literal_initialization,true);
    }
Exemplo n.º 2
0
Walker::ApplyStatus NonConstBoundArrayTypeWalker::operator () (SuifObject *x) {
    ArrayTypeProxy type(to<DataType>(x));
    if (!type.has_non_const_bounds())
	return Walker::Continue;    
    Type *rep_type = _type_builder->get_array_type(_type_builder->get_qualified_type(type.get_element_type()),0,1);
    set_address(rep_type);
    to<BasicSymbolTable>(x->get_parent())->remove_symbol_table_object(
 		to<SymbolTableObject>(x));
    return Walker::Replaced;
}