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

Changeset 262

Show
Ignore:
Timestamp:
11/22/09 09:28:03 (15 years ago)
Author:
walter
Message:

bugzilla 3381

Files:

Legend:

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

    r253 r262  
    11471147        } 
    11481148    } 
    11491149    i++; 
    11501150    } 
    11511151 
    11521152    interfaces_dim = baseclasses.dim; 
    11531153    interfaces = (BaseClass **)baseclasses.data; 
    11541154 
    11551155    interfaceSemantic(sc); 
    11561156 
    11571157    if (vtblOffset()) 
    11581158    vtbl.push(this);        // leave room at vtbl[0] for classinfo 
    11591159 
    11601160    // Cat together the vtbl[]'s from base interfaces 
    11611161    for (i = 0; i < interfaces_dim; i++) 
    11621162    {   BaseClass *b = interfaces[i]; 
    11631163 
    11641164    // Skip if b has already appeared 
    11651165    for (int k = 0; k < i; k++) 
    11661166    { 
    1167         if (b == interfaces[i]) 
     1167        if (b == interfaces[k]) 
    11681168        goto Lcontinue; 
    11691169    } 
    11701170 
    11711171    // Copy vtbl[] from base class 
    11721172    if (b->base->vtblOffset()) 
    11731173    {   int d = b->base->vtbl.dim; 
    11741174        if (d > 1) 
    11751175        { 
    11761176        vtbl.reserve(d - 1); 
    11771177        for (int j = 1; j < d; j++) 
    11781178            vtbl.push(b->base->vtbl.data[j]); 
    11791179        } 
    11801180    } 
    11811181    else 
    11821182    { 
    11831183        vtbl.append(&b->base->vtbl); 
    11841184    } 
    11851185 
    11861186      Lcontinue: 
    11871187    ; 
  • branches/dmd-1.x/src/freebsd.mak

    r241 r262  
    201201 
    202202cod2.o: $C/rtlsym.h $C/cod2.c 
    203203    $(CC) -c $(MFLAGS) $C/cod2.c 
    204204 
    205205cod3.o: $C/rtlsym.h $C/cod3.c 
    206206    $(CC) -c $(MFLAGS) $C/cod3.c 
    207207 
    208208cod4.o: $C/cod4.c 
    209209    $(CC) -c $(MFLAGS) $< 
    210210 
    211211cod5.o: $C/cod5.c 
    212212    $(CC) -c $(MFLAGS) $< 
    213213 
    214214code.o: $C/code.c 
    215215    $(CC) -c $(MFLAGS) $< 
    216216 
    217217constfold.o: constfold.c 
    218218    $(CC) -c $(CFLAGS) $< 
    219219 
    220220irstate.o: irstate.h irstate.c 
    221     $(CC) -c $(MFLAGS) irstate.c 
     221    $(CC) -c $(MFLAGS) -I$(ROOT) irstate.c 
    222222 
    223223csymbol.o : $C/symbol.c 
    224224    $(CC) -c $(MFLAGS) $C/symbol.c -o csymbol.o 
    225225 
    226226dchar.o: $(ROOT)/dchar.c 
    227227    $(CC) -c $(GFLAGS) -I$(ROOT) $< 
    228228 
    229229cond.o: cond.c 
    230230    $(CC) -c $(CFLAGS) $< 
    231231 
    232232cppmangle.o: cppmangle.c 
    233233    $(CC) -c $(CFLAGS) $< 
    234234 
    235235debug.o: $C/debug.c 
    236236    $(CC) -c $(MFLAGS) -I. $< 
    237237 
    238238declaration.o: declaration.c 
    239239    $(CC) -c $(CFLAGS) $< 
    240240 
    241241delegatize.o: delegatize.c 
  • branches/dmd-1.x/src/func.c

    r253 r262  
    916916        if (outId) 
    917917            error("void functions have no result"); 
    918918        } 
    919919        else 
    920920        { 
    921921        if (!outId) 
    922922            outId = Id::result;     // provide a default 
    923923        } 
    924924 
    925925        if (outId) 
    926926        {   // Declare result variable 
    927927        VarDeclaration *v; 
    928928        Loc loc = this->loc; 
    929929 
    930930        if (fensure) 
    931931            loc = fensure->loc; 
    932932 
    933933        v = new VarDeclaration(loc, type->nextOf(), outId, NULL); 
    934934        v->noauto = 1; 
    935935#if DMDV2 
     936        if (!isVirtual()) 
     937            v->storage_class |= STCconst; 
    936938        if (f->isref) 
    937939        { 
    938940            v->storage_class |= STCref | STCforeach; 
    939941        } 
    940942#endif 
    941943        sc2->incontract--; 
    942944        v->semantic(sc2); 
    943945        sc2->incontract++; 
    944946        if (!sc2->insert(v)) 
    945947            error("out result %s is already defined", v->toChars()); 
    946948        v->parent = this; 
    947949        vresult = v; 
    948950 
    949951        // vresult gets initialized with the function return value 
    950952        // in ReturnStatement::semantic() 
    951953        } 
    952954 
    953955        // BUG: need to treat parameters as const 
    954956        // BUG: need to disallow returns and throws 
    955957        if (fensure) 
  • branches/dmd-1.x/src/linux.mak

    r220 r262  
    201201 
    202202cod2.o: $C/rtlsym.h $C/cod2.c 
    203203    $(CC) -c $(MFLAGS) $C/cod2.c 
    204204 
    205205cod3.o: $C/rtlsym.h $C/cod3.c 
    206206    $(CC) -c $(MFLAGS) $C/cod3.c 
    207207 
    208208cod4.o: $C/cod4.c 
    209209    $(CC) -c $(MFLAGS) $< 
    210210 
    211211cod5.o: $C/cod5.c 
    212212    $(CC) -c $(MFLAGS) $< 
    213213 
    214214code.o: $C/code.c 
    215215    $(CC) -c $(MFLAGS) $< 
    216216 
    217217constfold.o: constfold.c 
    218218    $(CC) -c $(CFLAGS) $< 
    219219 
    220220irstate.o: irstate.h irstate.c 
    221     $(CC) -c $(MFLAGS) irstate.c 
     221    $(CC) -c $(MFLAGS) -I$(ROOT) irstate.c 
    222222 
    223223csymbol.o : $C/symbol.c 
    224224    $(CC) -c $(MFLAGS) $C/symbol.c -o csymbol.o 
    225225 
    226226dchar.o: $(ROOT)/dchar.c 
    227227    $(CC) -c $(GFLAGS) -I$(ROOT) $< 
    228228 
    229229cond.o: cond.c 
    230230    $(CC) -c $(CFLAGS) $< 
    231231 
    232232cppmangle.o: cppmangle.c 
    233233    $(CC) -c $(CFLAGS) $< 
    234234 
    235235debug.o: $C/debug.c 
    236236    $(CC) -c $(MFLAGS) -I. $< 
    237237 
    238238declaration.o: declaration.c 
    239239    $(CC) -c $(CFLAGS) $< 
    240240 
    241241delegatize.o: delegatize.c 
  • branches/dmd-1.x/src/osx.mak

    r247 r262  
    208208 
    209209cod2.o: $C/rtlsym.h $C/cod2.c 
    210210    $(CC) -c $(MFLAGS) $C/cod2.c 
    211211 
    212212cod3.o: $C/rtlsym.h $C/cod3.c 
    213213    $(CC) -c $(MFLAGS) $C/cod3.c 
    214214 
    215215cod4.o: $C/cod4.c 
    216216    $(CC) -c $(MFLAGS) $< 
    217217 
    218218cod5.o: $C/cod5.c 
    219219    $(CC) -c $(MFLAGS) $< 
    220220 
    221221code.o: $C/code.c 
    222222    $(CC) -c $(MFLAGS) $< 
    223223 
    224224constfold.o: constfold.c 
    225225    $(CC) -c $(CFLAGS) $< 
    226226 
    227227irstate.o: irstate.h irstate.c 
    228     $(CC) -c $(MFLAGS) irstate.c 
     228    $(CC) -c $(MFLAGS) -I$(ROOT) irstate.c 
    229229 
    230230csymbol.o : $C/symbol.c 
    231231    $(CC) -c $(MFLAGS) $C/symbol.c -o csymbol.o 
    232232 
    233233dchar.o: $(ROOT)/dchar.c 
    234234    $(CC) -c $(GFLAGS) -I$(ROOT) $< 
    235235 
    236236cond.o: cond.c 
    237237    $(CC) -c $(CFLAGS) $< 
    238238 
    239239cppmangle.o: cppmangle.c 
    240240    $(CC) -c $(CFLAGS) $< 
    241241 
    242242debug.o: $C/debug.c 
    243243    $(CC) -c $(MFLAGS) -I. $< 
    244244 
    245245declaration.o: declaration.c 
    246246    $(CC) -c $(CFLAGS) $< 
    247247 
    248248delegatize.o: delegatize.c 
  • branches/dmd-1.x/src/win32.mak

    r204 r262  
    245245 
    246246cod1.obj : $C\rtlsym.h $C\cod1.c 
    247247    $(CC) -c $(MFLAGS) $C\cod1 
    248248 
    249249cod2.obj : $C\rtlsym.h $C\cod2.c 
    250250    $(CC) -c $(MFLAGS) $C\cod2 
    251251 
    252252cod3.obj : $C\rtlsym.h $C\cod3.c 
    253253    $(CC) -c $(MFLAGS) $C\cod3 
    254254 
    255255cod4.obj : $C\cod4.c 
    256256    $(CC) -c $(MFLAGS) $C\cod4 
    257257 
    258258cod5.obj : $C\cod5.c 
    259259    $(CC) -c $(MFLAGS) $C\cod5 
    260260 
    261261code.obj : $C\code.c 
    262262    $(CC) -c $(MFLAGS) $C\code 
    263263 
    264264irstate.obj : irstate.h irstate.c 
    265     $(CC) -c $(MFLAGS) irstate 
     265    $(CC) -c $(MFLAGS) -I$(ROOT) irstate 
    266266 
    267267csymbol.obj : $C\symbol.c 
    268268    $(CC) -c $(MFLAGS) $C\symbol -ocsymbol.obj 
    269269 
    270270debug.obj : $C\debug.c 
    271271    $(CC) -c $(MFLAGS) -I. $C\debug 
    272272 
    273273dt.obj : $C\dt.h $C\dt.c 
    274274    $(CC) -c $(MFLAGS) $C\dt 
    275275 
    276276ee.obj : $C\ee.c 
    277277    $(CC) -c $(MFLAGS) $C\ee 
    278278 
    279279eh.obj : $C\cc.h $C\code.h $C\type.h $C\dt.h eh.c 
    280280    $(CC) -c $(MFLAGS) eh 
    281281 
    282282el.obj : $C\rtlsym.h $C\el.h $C\el.c 
    283283    $(CC) -c $(MFLAGS) $C\el 
    284284 
    285285evalu8.obj : $C\evalu8.c 
  • trunk/src/class.c

    r254 r262  
    11791179    storage_class |= b->base->storage_class & STC_TYPECTOR; 
    11801180#endif 
    11811181    i++; 
    11821182    } 
    11831183 
    11841184    interfaces_dim = baseclasses.dim; 
    11851185    interfaces = (BaseClass **)baseclasses.data; 
    11861186 
    11871187    interfaceSemantic(sc); 
    11881188 
    11891189    if (vtblOffset()) 
    11901190    vtbl.push(this);        // leave room at vtbl[0] for classinfo 
    11911191 
    11921192    // Cat together the vtbl[]'s from base interfaces 
    11931193    for (i = 0; i < interfaces_dim; i++) 
    11941194    {   BaseClass *b = interfaces[i]; 
    11951195 
    11961196    // Skip if b has already appeared 
    11971197    for (int k = 0; k < i; k++) 
    11981198    { 
    1199         if (b == interfaces[i]) 
     1199        if (b == interfaces[k]) 
    12001200        goto Lcontinue; 
    12011201    } 
    12021202 
    12031203    // Copy vtbl[] from base class 
    12041204    if (b->base->vtblOffset()) 
    12051205    {   int d = b->base->vtbl.dim; 
    12061206        if (d > 1) 
    12071207        { 
    12081208        vtbl.reserve(d - 1); 
    12091209        for (int j = 1; j < d; j++) 
    12101210            vtbl.push(b->base->vtbl.data[j]); 
    12111211        } 
    12121212    } 
    12131213    else 
    12141214    { 
    12151215        vtbl.append(&b->base->vtbl); 
    12161216    } 
    12171217 
    12181218      Lcontinue: 
    12191219    ;