Changeset 28 in dev for BasicCompiler_Common/Class.cpp
- Timestamp:
- Jan 8, 2007, 6:34:44 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler_Common/Class.cpp
r27 r28 25 25 char init_buf[VN_SIZE]; 26 26 char constract_parameter[VN_SIZE]; 27 if(!GetDimentionFormat(buffer,VarName,SubScripts,&TypeInfo,init_buf,constract_parameter)) 28 return; 27 GetDimentionFormat(buffer,VarName,SubScripts,&TypeInfo,init_buf,constract_parameter); 29 28 30 29 //重複チェック 31 30 if(pobj_c->DupliCheckAll(VarName)){ 32 31 SetError(15,VarName,cp); 33 return;34 32 } 35 33 36 34 if(TypeInfo.type==DEF_OBJECT){ 37 if(TypeInfo.u.pobj_Class->Is HoldAbstractFunction()){35 if(TypeInfo.u.pobj_Class->IsAbstract()){ 38 36 //抽象クラスだったとき 39 37 SetError(125,TypeInfo.u.pobj_Class->name,cp); … … 303 301 if( psi == ppobj_StaticMethod[i]->psi ) break; 304 302 } 305 if( i == i MethodNum ){303 if( i == iStaticMethodNum ){ 306 304 return NULL; 307 305 } … … 326 324 } 327 325 LONG_PTR CClass::GetVtblGlobalOffset(void){ 326 327 //既に存在する場合はそれを返す 328 328 if(vtbl_offset!=-1) return vtbl_offset; 329 330 331 ////////////////////////////////////// 332 // 存在しないときは新たに生成する 333 ////////////////////////////////////// 329 334 330 335 SUBINFO **ppsi; … … 332 337 333 338 //関数テーブルに値をセット 334 int i,i2,i3=0; 335 for(i=0;i < iMethodNum;i++){ 339 for( int i=0, i2=0; i < iMethodNum; i++ ){ 336 340 if(ppobj_Method[i]->bVirtual){ 337 for(i2=iMethodNum-1; i2>=i; i2--){ 338 if(lstrcmp(ppobj_Method[i]->psi->name,ppobj_Method[i2]->psi->name)==0){ 339 pobj_CompilingClass->ppobj_Method[i2]->psi->bUse=1; 340 341 if(ppobj_Method[i2]->bAbstract){ 342 extern int cp; 343 SetError(300,NULL,cp); 344 345 ppsi[i3]=0; 346 } 347 else ppsi[i3]=pobj_CompilingClass->ppobj_Method[i2]->psi; 348 i3++; 349 350 break; 351 } 352 } 341 ppobj_Method[i]->psi->bUse=1; 342 343 if(ppobj_Method[i]->bAbstract){ 344 extern int cp; 345 SetError(300,NULL,cp); 346 347 ppsi[i2]=0; 348 } 349 else ppsi[i2]=ppobj_Method[i]->psi; 350 i2++; 353 351 } 354 352 } … … 356 354 vtbl_offset=AddDataTable((char *)ppsi,vtbl_num*sizeof(LONG_PTR)); 357 355 358 for( i=0;i<vtbl_num;i++){356 for( int i=0; i < vtbl_num; i++ ){ 359 357 pobj_Reloc->AddSchedule_DataSection(vtbl_offset+i*sizeof(LONG_PTR)); 360 358 } … … 379 377 } 380 378 } 381 BOOL CClass::IsHoldAbstractFunction(void){379 bool CClass::IsAbstract(){ 382 380 //未実装の仮想関数を持つ場合は1を返す 383 381 384 int i,i2,i3=0; 385 for(i=0;i < iMethodNum;i++){ 382 for( int i=0; i < iMethodNum; i++ ){ 386 383 if(ppobj_Method[i]->bVirtual){ 387 for(i2=iMethodNum-1; i2>=i; i2--){ 388 if(lstrcmp(ppobj_Method[i]->psi->name,ppobj_Method[i2]->psi->name)==0){ 389 390 if(ppobj_Method[i2]->bAbstract){ 391 return 1; 392 } 393 394 break; 395 } 384 if(ppobj_Method[i]->bAbstract){ 385 return true; 396 386 } 397 387 } … … 399 389 400 390 //コンポジションの関係にあるメンバも検査する 401 for(i =0;i < iMemberNum;i++){391 for(int i=0;i < iMemberNum;i++){ 402 392 if(ppobj_Member[i]->TypeInfo.type==DEF_OBJECT){ 403 if(ppobj_Member[i]->TypeInfo.u.pobj_Class->Is HoldAbstractFunction())404 return 1;405 } 406 } 407 408 return 0;393 if(ppobj_Member[i]->TypeInfo.u.pobj_Class->IsAbstract()) 394 return true; 395 } 396 } 397 398 return false; 409 399 } 410 400 … … 460 450 return isCompilingDestructor; 461 451 } 452 453 454 //自身と等しいクラスかどうかを確認 455 bool CClass::IsEquals( CClass *pClass ){ 456 if( this == pClass ) return true; 457 return false; 458 } 459 460 //自身の派生クラスかどうかを確認 461 bool CClass::IsSubClass( CClass *pClass ){ 462 pClass = pClass->pobj_InheritsClass; 463 while( pClass ){ 464 if( this == pClass ) return true; 465 pClass = pClass->pobj_InheritsClass; 466 } 467 return false; 468 } 469 462 470 463 471
Note:
See TracChangeset
for help on using the changeset viewer.