Changeset 316
- Timestamp:
- 12/29/09 04:09:51 (15 years ago)
- Files:
-
- branches/dmd-1.x/src/constfold.c (modified) (1 diff)
- branches/dmd-1.x/src/optimize.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/dmd-1.x/src/constfold.c
r315 r316 59 59 return 0; 60 60 } 61 61 62 62 int IntegerExp::isConst() 63 63 { 64 64 return 1; 65 65 } 66 66 67 67 int RealExp::isConst() 68 68 { 69 69 return 1; 70 70 } 71 71 72 72 int ComplexExp::isConst() 73 73 { 74 74 return 1; 75 75 } 76 76 77 77 int NullExp::isConst() 78 78 { 79 return 1;79 return 0; 80 80 } 81 81 82 82 int SymOffExp::isConst() 83 83 { 84 84 return 2; 85 85 } 86 86 87 87 /* =============================== constFold() ============================== */ 88 88 89 89 /* The constFold() functions were redundant with the optimize() ones, 90 90 * and so have been folded in with them. 91 91 */ 92 92 93 93 /* ========================================================================== */ 94 94 95 95 Expression *Neg(Type *type, Expression *e1) 96 96 { Expression *e; 97 97 Loc loc = e1->loc; 98 98 99 99 if (e1->type->isreal()) branches/dmd-1.x/src/optimize.c
r199 r316 645 645 } 646 646 647 647 Expression *EqualExp::optimize(int result) 648 648 { Expression *e; 649 649 650 650 //printf("EqualExp::optimize(result = %x) %s\n", result, toChars()); 651 651 e1 = e1->optimize(WANTvalue | (result & WANTinterpret)); 652 652 e2 = e2->optimize(WANTvalue | (result & WANTinterpret)); 653 653 e = this; 654 654 655 655 Expression *e1 = fromConstInitializer(this->e1); 656 656 Expression *e2 = fromConstInitializer(this->e2); 657 657 658 658 e = Equal(op, type, e1, e2); 659 659 if (e == EXP_CANT_INTERPRET) 660 660 e = this; 661 661 return e; 662 662 } 663 663 664 664 Expression *IdentityExp::optimize(int result) 665 { Expression *e; 666 665 { 667 666 //printf("IdentityExp::optimize(result = %d) %s\n", result, toChars()); 668 667 e1 = e1->optimize(WANTvalue | (result & WANTinterpret)); 669 668 e2 = e2->optimize(WANTvalue | (result & WANTinterpret)); 670 e = this; 671 672 if (this->e1->isConst() && this->e2->isConst()) 669 Expression *e = this; 670 671 if ((this->e1->isConst() && this->e2->isConst()) || 672 (this->e1->op == TOKnull && this->e2->op == TOKnull)) 673 673 { 674 674 e = Identity(op, type, this->e1, this->e2); 675 675 if (e == EXP_CANT_INTERPRET) 676 676 e = this; 677 677 } 678 678 return e; 679 679 } 680 680 681 681 Expression *IndexExp::optimize(int result) 682 682 { Expression *e; 683 683 684 684 //printf("IndexExp::optimize(result = %d) %s\n", result, toChars()); 685 685 Expression *e1 = this->e1->optimize(WANTvalue | (result & WANTinterpret)); 686 686 if (result & WANTinterpret) 687 687 e1 = fromConstInitializer(e1); 688 688 e2 = e2->optimize(WANTvalue | (result & WANTinterpret)); 689 689 e = Index(type, e1, e2); 690 690 if (e == EXP_CANT_INTERPRET) 691 691 e = this; 692 692 return e;
