Skip to content

Commit 0ad0add

Browse files
committed
Codegen: Use last_expr_precedence in expr visitors
1 parent 79cf023 commit 0ad0add

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

src/libasr/codegen/asr_to_cpp.cpp

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -799,17 +799,22 @@ Kokkos::View<T*> from_std_vector(const std::vector<T> &v)
799799

800800
void visit_StrOp(const ASR::StrOp_t &x) {
801801
this->visit_expr(*x.m_left);
802-
std::string left_val = src;
802+
std::string left = std::move(src);
803+
int left_precedence = last_expr_precedence;
803804
this->visit_expr(*x.m_right);
804-
std::string right_val = src;
805-
switch (x.m_op) {
806-
case (ASR::stropType::Concat): {
807-
src = "std::string(" + left_val + ") + std::string(" + right_val + ")";
808-
break;
809-
}
810-
case (ASR::stropType::Repeat): {
811-
// TODO: implement
812-
}
805+
std::string right = std::move(src);
806+
int right_precedence = last_expr_precedence;
807+
last_expr_precedence = 6;
808+
if (left_precedence <= last_expr_precedence) {
809+
src += "std::string(" + left + ")";
810+
} else {
811+
src += left;
812+
}
813+
src += " + "; // handle only concatenation for now
814+
if (right_precedence <= last_expr_precedence) {
815+
src += "std::string(" + right + ")";
816+
} else {
817+
src += right;
813818
}
814819
}
815820

0 commit comments

Comments
 (0)