@@ -370,166 +370,6 @@ Kokkos::View<T*> from_std_vector(const std::vector<T> &v)
370
370
last_expr_precedence = 2 ;
371
371
}
372
372
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
-
533
373
void visit_StringConcat (const ASR::StringConcat_t &x) {
534
374
this ->visit_expr (*x.m_left );
535
375
std::string left = std::move (src);
@@ -551,46 +391,6 @@ Kokkos::View<T*> from_std_vector(const std::vector<T> &v)
551
391
}
552
392
}
553
393
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
-
594
394
void visit_ArrayConstant (const ASR::ArrayConstant_t &x) {
595
395
std::string out = " from_std_vector<float>({" ;
596
396
for (size_t i=0 ; i<x.n_args ; i++) {
0 commit comments