Mercurial > projects > ldc
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 ////////////////////////////////////////////////////////////////////////////////////////// |