comparison gen/toir.cpp @ 770:50eae902f77e

Cast result of ...AssignExp to type the frontend expects if necessary. Fixes #116.
author Christian Kamm <kamm incasoftware de>
date Fri, 14 Nov 2008 16:26:12 +0100
parents 9a9f403ab399
children 4adf0f742896
comparison
equal deleted inserted replaced
769:038ea84f2d9d 770:50eae902f77e
535 535
536 ////////////////////////////////////////////////////////////////////////////////////////// 536 //////////////////////////////////////////////////////////////////////////////////////////
537 537
538 DValue* AddAssignExp::toElem(IRState* p) 538 DValue* AddAssignExp::toElem(IRState* p)
539 { 539 {
540 Logger::print("AddAssignExp::toElem: %s\n", toChars()); 540 Logger::print("AddAssignExp::toElem: %s | %s\n", toChars(), type->toChars());
541 LOG_SCOPE; 541 LOG_SCOPE;
542 542
543 DValue* l = e1->toElem(p); 543 DValue* l = e1->toElem(p);
544 DValue* r = e2->toElem(p); 544 DValue* r = e2->toElem(p);
545 545
555 } 555 }
556 else { 556 else {
557 res = DtoBinAdd(l,r); 557 res = DtoBinAdd(l,r);
558 } 558 }
559 DtoAssign(loc, l, res); 559 DtoAssign(loc, l, res);
560
561 if (res->getType() != type)
562 res = DtoCast(loc, res, type);
560 563
561 return res; 564 return res;
562 } 565 }
563 566
564 ////////////////////////////////////////////////////////////////////////////////////////// 567 //////////////////////////////////////////////////////////////////////////////////////////
629 Logger::println("basic"); 632 Logger::println("basic");
630 res = DtoBinSub(l,r); 633 res = DtoBinSub(l,r);
631 } 634 }
632 DtoAssign(loc, l, res); 635 DtoAssign(loc, l, res);
633 636
637 if (res->getType() != type)
638 res = DtoCast(loc, res, type);
639
634 return res; 640 return res;
635 } 641 }
636 642
637 ////////////////////////////////////////////////////////////////////////////////////////// 643 //////////////////////////////////////////////////////////////////////////////////////////
638 644
668 else { 674 else {
669 res = DtoBinMul(l->getType(), l, r); 675 res = DtoBinMul(l->getType(), l, r);
670 } 676 }
671 DtoAssign(loc, l, res); 677 DtoAssign(loc, l, res);
672 678
679 if (res->getType() != type)
680 res = DtoCast(loc, res, type);
681
673 return res; 682 return res;
674 } 683 }
675 684
676 ////////////////////////////////////////////////////////////////////////////////////////// 685 //////////////////////////////////////////////////////////////////////////////////////////
677 686
707 else { 716 else {
708 res = DtoBinDiv(l->getType(), l, r); 717 res = DtoBinDiv(l->getType(), l, r);
709 } 718 }
710 DtoAssign(loc, l, res); 719 DtoAssign(loc, l, res);
711 720
721 if (res->getType() != type)
722 res = DtoCast(loc, res, type);
723
712 return res; 724 return res;
713 } 725 }
714 726
715 ////////////////////////////////////////////////////////////////////////////////////////// 727 //////////////////////////////////////////////////////////////////////////////////////////
716 728
735 DValue* l = e1->toElem(p); 747 DValue* l = e1->toElem(p);
736 DValue* r = e2->toElem(p); 748 DValue* r = e2->toElem(p);
737 749
738 DValue* res = DtoBinRem(l->getType(), l, r); 750 DValue* res = DtoBinRem(l->getType(), l, r);
739 DtoAssign(loc, l, res); 751 DtoAssign(loc, l, res);
752
753 if (res->getType() != type)
754 res = DtoCast(loc, res, type);
740 755
741 return res; 756 return res;
742 } 757 }
743 758
744 ////////////////////////////////////////////////////////////////////////////////////////// 759 //////////////////////////////////////////////////////////////////////////////////////////