Changeset 638
- Timestamp:
- 08/28/10 01:49:32 (1 year ago)
- Files:
-
- branches/dmd-1.x/src/aggregate.h (modified) (2 diffs)
- branches/dmd-1.x/src/class.c (modified) (2 diffs)
- trunk/src/aggregate.h (modified) (2 diffs)
- trunk/src/class.c (modified) (2 diffs)
- trunk/src/mtype.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/dmd-1.x/src/aggregate.h
r618 r638 238 238 virtual int isBaseOf(ClassDeclaration *cd, int *poffset); 239 239 240 virtual int isBaseInfoComplete(); 240 241 Dsymbol *search(Loc, Identifier *ident, int flags); 241 242 #if DMDV2 … … 287 288 int isBaseOf(BaseClass *bc, int *poffset); 288 289 const char *kind(); 290 int isBaseInfoComplete(); 289 291 int vtblOffset(); 290 292 #if DMDV2 branches/dmd-1.x/src/class.c
r520 r638 820 820 } 821 821 822 /********************************************* 823 * Determine if 'this' has complete base class information. 824 * This is used to detect forward references in covariant overloads. 825 */ 826 827 int ClassDeclaration::isBaseInfoComplete() 828 { 829 if (!baseClass) 830 return 0; 831 for (int i = 0; i < baseclasses->dim; i++) 832 { BaseClass *b = (BaseClass *)baseclasses->data[i]; 833 if (!b->base || !b->base->isBaseInfoComplete()) 834 return 0; 835 } 836 return 1; 837 } 838 822 839 Dsymbol *ClassDeclaration::search(Loc loc, Identifier *ident, int flags) 823 840 { … … 1311 1328 } 1312 1329 1330 /********************************************* 1331 * Determine if 'this' has clomplete base class information. 1332 * This is used to detect forward references in covariant overloads. 1333 */ 1334 1335 int InterfaceDeclaration::isBaseInfoComplete() 1336 { 1337 assert(!baseClass); 1338 for (int i = 0; i < baseclasses->dim; i++) 1339 { BaseClass *b = (BaseClass *)baseclasses->data[i]; 1340 if (!b->base || !b->base->isBaseInfoComplete ()) 1341 return 0; 1342 } 1343 return 1; 1344 } 1345 1313 1346 /**************************************** 1314 1347 * Determine if slot 0 of the vtbl[] is reserved for something else. trunk/src/aggregate.h
r618 r638 241 241 virtual int isBaseOf(ClassDeclaration *cd, int *poffset); 242 242 243 virtual int isBaseInfoComplete(); 243 244 Dsymbol *search(Loc, Identifier *ident, int flags); 244 245 #if DMDV2 … … 290 291 int isBaseOf(BaseClass *bc, int *poffset); 291 292 const char *kind(); 293 int isBaseInfoComplete(); 292 294 int vtblOffset(); 293 295 #if DMDV2 trunk/src/class.c
r520 r638 837 837 } 838 838 839 /********************************************* 840 * Determine if 'this' has complete base class information. 841 * This is used to detect forward references in covariant overloads. 842 */ 843 844 int ClassDeclaration::isBaseInfoComplete() 845 { 846 if (!baseClass) 847 return 0; 848 for (int i = 0; i < baseclasses->dim; i++) 849 { BaseClass *b = (BaseClass *)baseclasses->data[i]; 850 if (!b->base || !b->base->isBaseInfoComplete()) 851 return 0; 852 } 853 return 1; 854 } 855 839 856 Dsymbol *ClassDeclaration::search(Loc loc, Identifier *ident, int flags) 840 857 { … … 1356 1373 } 1357 1374 1375 /********************************************* 1376 * Determine if 'this' has clomplete base class information. 1377 * This is used to detect forward references in covariant overloads. 1378 */ 1379 1380 int InterfaceDeclaration::isBaseInfoComplete() 1381 { 1382 assert(!baseClass); 1383 for (int i = 0; i < baseclasses->dim; i++) 1384 { BaseClass *b = (BaseClass *)baseclasses->data[i]; 1385 if (!b->base || !b->base->isBaseInfoComplete ()) 1386 return 0; 1387 } 1388 return 1; 1389 } 1390 1358 1391 /**************************************** 1359 1392 * Determine if slot 0 of the vtbl[] is reserved for something else. trunk/src/mtype.c
r619 r638 4541 4541 // If t1n is forward referenced: 4542 4542 ClassDeclaration *cd = ((TypeClass *)t1n)->sym; 4543 #if 1 4543 4544 if (!cd->baseClass && cd->baseclasses->dim && !cd->isInterfaceDeclaration()) 4544 { 4545 return 3; 4545 #else 4546 if (!cd->isBaseInfoComplete()) 4547 #endif 4548 { 4549 return 3; // forward references 4546 4550 } 4547 4551 }
