Changeset 650

Show
Ignore:
Timestamp:
08/29/10 17:31:27 (1 year ago)
Author:
walter
Message:

Issue 2511 - Covariant return type doesn't work with circular import

Files:

Legend:

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

    r639 r650  
    830830{ 
    831831    if (!baseClass) 
    832         return 0
     832        return ident == Id::Object
    833833    for (int i = 0; i < baseclasses->dim; i++) 
    834834    {   BaseClass *b = (BaseClass *)baseclasses->data[i]; 
  • branches/dmd-1.x/src/cppmangle.c

    r594 r650  
    110110 
    111111        FuncDeclaration *fd = s->isFuncDeclaration(); 
     112        if (!fd) 
     113        { 
     114            s->error("C++ static variables not supported"); 
     115        } 
     116        else 
    112117        if (fd->isConst()) 
    113118            buf->writeByte('K'); 
  • branches/dmd-1.x/src/mtype.c

    r639 r650  
    27052705    if (t1n->equals(t2n)) 
    27062706        goto Lcovariant; 
    2707     if (t1n->ty != Tclass || t2n->ty != Tclass) 
    2708         goto Lnotcovariant; 
    2709  
    2710     // If t1n is forward referenced: 
    2711     ClassDeclaration *cd = ((TypeClass *)t1n)->sym; 
    2712     if (!cd->baseClass && cd->baseclasses->dim && !cd->isInterfaceDeclaration()) 
    2713     { 
    2714         return 3; 
    2715     } 
    2716  
     2707    if (t1n->ty == Tclass && t2n->ty == Tclass) 
     2708    { 
     2709        ClassDeclaration *cd = ((TypeClass *)t1n)->sym; 
     2710        ClassDeclaration *cd2 = ((TypeClass *)t2n)->sym; 
     2711        if (cd == cd2) 
     2712            goto Lcovariant; 
     2713 
     2714        // If t1n is forward referenced: 
     2715#if 0 
     2716        if (!cd->baseClass && cd->baseclasses->dim && !cd->isInterfaceDeclaration()) 
     2717#else 
     2718        if (!cd->isBaseInfoComplete()) 
     2719#endif 
     2720        { 
     2721            return 3; 
     2722        } 
     2723    } 
    27172724    if (t1n->implicitConvTo(t2n)) 
    27182725        goto Lcovariant; 
     2726 
    27192727    goto Lnotcovariant; 
    27202728    } 
  • trunk/src/class.c

    r639 r650  
    847847{ 
    848848    if (!baseClass) 
    849         return 0
     849        return ident == Id::Object
    850850    for (int i = 0; i < baseclasses->dim; i++) 
    851851    {   BaseClass *b = (BaseClass *)baseclasses->data[i]; 
  • trunk/src/mtype.c

    r639 r650  
    45414541        // If t1n is forward referenced: 
    45424542        ClassDeclaration *cd = ((TypeClass *)t1n)->sym; 
    4543 #if 1 
     4543#if 0 
    45444544        if (!cd->baseClass && cd->baseclasses->dim && !cd->isInterfaceDeclaration()) 
    45454545#else