Note: This website is archived. For up-to-date information about D projects and development, please visit wiki.dlang.org.

Changeset 316

Show
Ignore:
Timestamp:
12/29/09 04:09:51 (15 years ago)
Author:
walter
Message:

bugzilla 3628 can't cast null to int

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/dmd-1.x/src/constfold.c

    r315 r316  
    5959    return 0; 
    6060} 
    6161 
    6262int IntegerExp::isConst() 
    6363{ 
    6464    return 1; 
    6565} 
    6666 
    6767int RealExp::isConst() 
    6868{ 
    6969    return 1; 
    7070} 
    7171 
    7272int ComplexExp::isConst() 
    7373{ 
    7474    return 1; 
    7575} 
    7676 
    7777int NullExp::isConst() 
    7878{ 
    79     return 1
     79    return 0
    8080} 
    8181 
    8282int SymOffExp::isConst() 
    8383{ 
    8484    return 2; 
    8585} 
    8686 
    8787/* =============================== constFold() ============================== */ 
    8888 
    8989/* The constFold() functions were redundant with the optimize() ones, 
    9090 * and so have been folded in with them. 
    9191 */ 
    9292 
    9393/* ========================================================================== */ 
    9494 
    9595Expression *Neg(Type *type, Expression *e1) 
    9696{   Expression *e; 
    9797    Loc loc = e1->loc; 
    9898 
    9999    if (e1->type->isreal()) 
  • branches/dmd-1.x/src/optimize.c

    r199 r316  
    645645} 
    646646 
    647647Expression *EqualExp::optimize(int result) 
    648648{   Expression *e; 
    649649 
    650650    //printf("EqualExp::optimize(result = %x) %s\n", result, toChars()); 
    651651    e1 = e1->optimize(WANTvalue | (result & WANTinterpret)); 
    652652    e2 = e2->optimize(WANTvalue | (result & WANTinterpret)); 
    653653    e = this; 
    654654 
    655655    Expression *e1 = fromConstInitializer(this->e1); 
    656656    Expression *e2 = fromConstInitializer(this->e2); 
    657657 
    658658    e = Equal(op, type, e1, e2); 
    659659    if (e == EXP_CANT_INTERPRET) 
    660660    e = this; 
    661661    return e; 
    662662} 
    663663 
    664664Expression *IdentityExp::optimize(int result) 
    665 {   Expression *e; 
    666  
     665
    667666    //printf("IdentityExp::optimize(result = %d) %s\n", result, toChars()); 
    668667    e1 = e1->optimize(WANTvalue | (result & WANTinterpret)); 
    669668    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)) 
    673673    { 
    674674    e = Identity(op, type, this->e1, this->e2); 
    675675    if (e == EXP_CANT_INTERPRET) 
    676676        e = this; 
    677677    } 
    678678    return e; 
    679679} 
    680680 
    681681Expression *IndexExp::optimize(int result) 
    682682{   Expression *e; 
    683683 
    684684    //printf("IndexExp::optimize(result = %d) %s\n", result, toChars()); 
    685685    Expression *e1 = this->e1->optimize(WANTvalue | (result & WANTinterpret)); 
    686686    if (result & WANTinterpret) 
    687687    e1 = fromConstInitializer(e1); 
    688688    e2 = e2->optimize(WANTvalue | (result & WANTinterpret)); 
    689689    e = Index(type, e1, e2); 
    690690    if (e == EXP_CANT_INTERPRET) 
    691691    e = this; 
    692692    return e;