@@ -2079,8 +2079,6 @@ class CommonVisitor : public AST::BaseVisitor<Struct> {
2079
2079
} else if ((right_is_int || left_is_int) && op == ASR::binopType::Mul) {
2080
2080
// string repeat
2081
2081
int64_t left_int = 0 , right_int = 0 , dest_len = 0 ;
2082
- dest_type = ASRUtils::TYPE (ASR::make_Character_t (al,
2083
- loc, 1 , 1 , nullptr ));
2084
2082
if (right_is_int && ASRUtils::expr_value (right) != nullptr ) {
2085
2083
ASR::Character_t *left_type2 = ASR::down_cast<ASR::Character_t>(
2086
2084
ASRUtils::type_get_past_array (left_type));
@@ -2089,6 +2087,9 @@ class CommonVisitor : public AST::BaseVisitor<Struct> {
2089
2087
ASRUtils::expr_value (right))->m_n ;
2090
2088
dest_len = left_type2->m_len * right_int;
2091
2089
if (dest_len < 0 ) dest_len = 0 ;
2090
+ dest_type = ASR::down_cast<ASR::ttype_t >(
2091
+ ASR::make_Character_t (al, loc, left_type2->m_kind ,
2092
+ dest_len, nullptr ));
2092
2093
} else if (left_is_int && ASRUtils::expr_value (left) != nullptr ) {
2093
2094
ASR::Character_t *right_type2 = ASR::down_cast<ASR::Character_t>(
2094
2095
ASRUtils::type_get_past_array (right_type));
@@ -2097,6 +2098,13 @@ class CommonVisitor : public AST::BaseVisitor<Struct> {
2097
2098
ASRUtils::expr_value (left))->m_n ;
2098
2099
dest_len = right_type2->m_len * left_int;
2099
2100
if (dest_len < 0 ) dest_len = 0 ;
2101
+ dest_type = ASR::down_cast<ASR::ttype_t >(
2102
+ ASR::make_Character_t (al, loc, right_type2->m_kind ,
2103
+ dest_len, nullptr ));
2104
+ } else if ((left_is_int && ASRUtils::expr_value (left) == nullptr )
2105
+ || (right_is_int && ASRUtils::expr_value (right) == nullptr )) {
2106
+ dest_type = ASRUtils::TYPE (ASR::make_Character_t (al,
2107
+ loc, 1 , 1 , nullptr ));
2100
2108
}
2101
2109
2102
2110
if (ASRUtils::expr_value (left) != nullptr && ASRUtils::expr_value (right) != nullptr ) {
0 commit comments