Skip to content

Commit 94d73f8

Browse files
committed
Remove common parts from asr_to_cpp
1 parent 8b99414 commit 94d73f8

File tree

1 file changed

+0
-200
lines changed

1 file changed

+0
-200
lines changed

src/libasr/codegen/asr_to_cpp.cpp

Lines changed: 0 additions & 200 deletions
Original file line numberDiff line numberDiff line change
@@ -370,166 +370,6 @@ Kokkos::View<T*> from_std_vector(const std::vector<T> &v)
370370
last_expr_precedence = 2;
371371
}
372372

373-
void visit_Compare(const ASR::Compare_t &x) {
374-
this->visit_expr(*x.m_left);
375-
std::string left = std::move(src);
376-
int left_precedence = last_expr_precedence;
377-
this->visit_expr(*x.m_right);
378-
std::string right = std::move(src);
379-
int right_precedence = last_expr_precedence;
380-
switch (x.m_op) {
381-
case (ASR::cmpopType::Eq) : { last_expr_precedence = 10; break; }
382-
case (ASR::cmpopType::Gt) : { last_expr_precedence = 9; break; }
383-
case (ASR::cmpopType::GtE) : { last_expr_precedence = 9; break; }
384-
case (ASR::cmpopType::Lt) : { last_expr_precedence = 9; break; }
385-
case (ASR::cmpopType::LtE) : { last_expr_precedence = 9; break; }
386-
case (ASR::cmpopType::NotEq): { last_expr_precedence = 10; break; }
387-
default : LFORTRAN_ASSERT(false); // should never happen
388-
}
389-
if (left_precedence <= last_expr_precedence) {
390-
src += left;
391-
} else {
392-
src += "(" + left + ")";
393-
}
394-
src += ASRUtils::cmpop_to_str(x.m_op);
395-
if (right_precedence <= last_expr_precedence) {
396-
src += right;
397-
} else {
398-
src += "(" + right + ")";
399-
}
400-
}
401-
402-
void visit_UnaryOp(const ASR::UnaryOp_t &x) {
403-
this->visit_expr(*x.m_operand);
404-
int expr_precedence = last_expr_precedence;
405-
if (x.m_type->type == ASR::ttypeType::Integer) {
406-
if (x.m_op == ASR::unaryopType::UAdd) {
407-
// src = src;
408-
// Skip unary plus, keep the previous precedence
409-
} else if (x.m_op == ASR::unaryopType::USub) {
410-
last_expr_precedence = 3;
411-
if (expr_precedence <= last_expr_precedence) {
412-
src = "-" + src;
413-
} else {
414-
src = "-(" + src + ")";
415-
}
416-
} else if (x.m_op == ASR::unaryopType::Invert) {
417-
last_expr_precedence = 3;
418-
if (expr_precedence <= last_expr_precedence) {
419-
src = "~" + src;
420-
} else {
421-
src = "~(" + src + ")";
422-
}
423-
424-
} else if (x.m_op == ASR::unaryopType::Not) {
425-
last_expr_precedence = 3;
426-
if (expr_precedence <= last_expr_precedence) {
427-
src = "!" + src;
428-
} else {
429-
src = "!(" + src + ")";
430-
}
431-
} else {
432-
throw CodeGenError("Unary type not implemented yet for Integer");
433-
}
434-
return;
435-
} else if (x.m_type->type == ASR::ttypeType::Real) {
436-
if (x.m_op == ASR::unaryopType::UAdd) {
437-
// src = src;
438-
// Skip unary plus, keep the previous precedence
439-
} else if (x.m_op == ASR::unaryopType::USub) {
440-
last_expr_precedence = 3;
441-
if (expr_precedence <= last_expr_precedence) {
442-
src = "-" + src;
443-
} else {
444-
src = "-(" + src + ")";
445-
}
446-
} else if (x.m_op == ASR::unaryopType::Not) {
447-
last_expr_precedence = 3;
448-
if (expr_precedence <= last_expr_precedence) {
449-
src = "!" + src;
450-
} else {
451-
src = "!(" + src + ")";
452-
}
453-
} else {
454-
throw CodeGenError("Unary type not implemented yet for Real");
455-
}
456-
return;
457-
} else if (x.m_type->type == ASR::ttypeType::Logical) {
458-
if (x.m_op == ASR::unaryopType::Not) {
459-
last_expr_precedence = 3;
460-
if (expr_precedence <= last_expr_precedence) {
461-
src = "!" + src;
462-
} else {
463-
src = "!(" + src + ")";
464-
}
465-
return;
466-
} else {
467-
throw CodeGenError("Unary type not implemented yet for Logical");
468-
}
469-
} else {
470-
throw CodeGenError("UnaryOp: type not supported yet");
471-
}
472-
}
473-
474-
void visit_IntegerBinOp(const ASR::IntegerBinOp_t &x) {
475-
handle_BinOp(x);
476-
}
477-
478-
void visit_RealBinOp(const ASR::RealBinOp_t &x) {
479-
handle_BinOp(x);
480-
}
481-
482-
void visit_ComplexBinOp(const ASR::ComplexBinOp_t &x) {
483-
handle_BinOp(x);
484-
}
485-
486-
template <typename T>
487-
void handle_BinOp(const T &x) {
488-
this->visit_expr(*x.m_left);
489-
std::string left = std::move(src);
490-
int left_precedence = last_expr_precedence;
491-
this->visit_expr(*x.m_right);
492-
std::string right = std::move(src);
493-
int right_precedence = last_expr_precedence;
494-
switch (x.m_op) {
495-
case (ASR::binopType::Add) : { last_expr_precedence = 6; break; }
496-
case (ASR::binopType::Sub) : { last_expr_precedence = 6; break; }
497-
case (ASR::binopType::Mul) : { last_expr_precedence = 5; break; }
498-
case (ASR::binopType::Div) : { last_expr_precedence = 5; break; }
499-
case (ASR::binopType::Pow) : {
500-
src = "std::pow(" + left + ", " + right + ")";
501-
return;
502-
}
503-
default: throw CodeGenError("BinOp: operator not implemented yet");
504-
}
505-
src = "";
506-
if (left_precedence == 3) {
507-
src += "(" + left + ")";
508-
} else {
509-
if (left_precedence <= last_expr_precedence) {
510-
src += left;
511-
} else {
512-
src += "(" + left + ")";
513-
}
514-
}
515-
src += ASRUtils::binop_to_str(x.m_op);
516-
if (right_precedence == 3) {
517-
src += "(" + right + ")";
518-
} else if (x.m_op == ASR::binopType::Sub) {
519-
if (right_precedence < last_expr_precedence) {
520-
src += right;
521-
} else {
522-
src += "(" + right + ")";
523-
}
524-
} else {
525-
if (right_precedence <= last_expr_precedence) {
526-
src += right;
527-
} else {
528-
src += "(" + right + ")";
529-
}
530-
}
531-
}
532-
533373
void visit_StringConcat(const ASR::StringConcat_t &x) {
534374
this->visit_expr(*x.m_left);
535375
std::string left = std::move(src);
@@ -551,46 +391,6 @@ Kokkos::View<T*> from_std_vector(const std::vector<T> &v)
551391
}
552392
}
553393

554-
void visit_LogicalBinOp(const ASR::LogicalBinOp_t &x) {
555-
this->visit_expr(*x.m_left);
556-
std::string left = std::move(src);
557-
int left_precedence = last_expr_precedence;
558-
this->visit_expr(*x.m_right);
559-
std::string right = std::move(src);
560-
int right_precedence = last_expr_precedence;
561-
switch (x.m_op) {
562-
case (ASR::logicalbinopType::And): {
563-
last_expr_precedence = 14;
564-
break;
565-
}
566-
case (ASR::logicalbinopType::Or): {
567-
last_expr_precedence = 15;
568-
break;
569-
}
570-
case (ASR::logicalbinopType::NEqv): {
571-
last_expr_precedence = 10;
572-
break;
573-
}
574-
case (ASR::logicalbinopType::Eqv): {
575-
last_expr_precedence = 10;
576-
break;
577-
}
578-
default : throw CodeGenError("Unhandled switch case");
579-
}
580-
581-
if (left_precedence <= last_expr_precedence) {
582-
src += left;
583-
} else {
584-
src += "(" + left + ")";
585-
}
586-
src += ASRUtils::logicalbinop_to_str(x.m_op);
587-
if (right_precedence <= last_expr_precedence) {
588-
src += right;
589-
} else {
590-
src += "(" + right + ")";
591-
}
592-
}
593-
594394
void visit_ArrayConstant(const ASR::ArrayConstant_t &x) {
595395
std::string out = "from_std_vector<float>({";
596396
for (size_t i=0; i<x.n_args; i++) {

0 commit comments

Comments
 (0)