Changeset 141 in dev for BasicCompiler_Common/Class.cpp
- Timestamp:
- Jun 15, 2007, 1:12:14 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler_Common/Class.cpp
r140 r141 22 22 , classType( Class ) 23 23 , pobj_InheritsClass( NULL ) 24 , vtbl _num( 0 )24 , vtblNum( 0 ) 25 25 , iAlign( 0 ) 26 26 , vtbl_offset( -1 ) … … 90 90 const CClass *pInheritsClass = pobj_DBClass->Find(temporary); 91 91 if( !pInheritsClass ){ 92 SetError(106,temporary, i);92 SetError(106,temporary,nowLine); 93 93 return false; 94 94 } 95 95 96 96 if( pInheritsClass->IsInterface() ){ 97 // インターフェイスを継承する 98 if( !InheritsInterface( *pInheritsClass, nowLine ) ){ 99 return false; 100 } 97 // インターフェイスはあとで継承する 101 98 } 102 99 else if( pInheritsClass->IsClass() ){ … … 127 124 } 128 125 129 if( !InheritsClass( *pObjectClass, i) ){126 if( !InheritsClass( *pObjectClass, nowLine ) ){ 130 127 return false; 131 128 } 129 } 130 131 i=0; 132 while( true ){ 133 134 char temporary[VN_SIZE]; 135 for( int i2=0;; i++, i2++ ){ 136 if( inheritNames[i] == '\0' || inheritNames[i] == ',' ){ 137 temporary[i2] = 0; 138 break; 139 } 140 temporary[i2] = inheritNames[i]; 141 } 142 143 //継承元クラスを取得 144 const CClass *pInheritsClass = pobj_DBClass->Find(temporary); 145 if( !pInheritsClass ){ 146 SetError(106,temporary,nowLine); 147 return false; 148 } 149 150 if( pInheritsClass->IsInterface() ){ 151 // インターフェイスを継承する 152 if( !InheritsInterface( *pInheritsClass, nowLine ) ){ 153 return false; 154 } 155 } 156 else if( pInheritsClass->IsClass() ){ 157 // クラスはさっき継承した 158 } 159 else{ 160 SetError(135,NULL,nowLine); 161 return false; 162 } 163 164 if( inheritNames[i] == '\0' ){ 165 break; 166 } 167 i++; 132 168 } 133 169 … … 189 225 190 226 //仮想関数の数 191 vtbl_num += inheritsClass.vtbl_num;227 AddVtblNum( inheritsClass.GetVtblNum() ); 192 228 193 229 //継承先のクラスをメンバとして保持する … … 235 271 } 236 272 237 interfaces.push_back( InheritedInterface( const_cast<CClass *>(&inheritsInterface), vtbl _num ) );273 interfaces.push_back( InheritedInterface( const_cast<CClass *>(&inheritsInterface), vtblNum ) ); 238 274 239 275 //仮想関数の数 240 vtbl_num += inheritsInterface.vtbl_num;276 AddVtblNum( inheritsInterface.GetVtblNum() ); 241 277 242 278 return true; … … 308 344 int CClass::GetMemberOffset( const char *memberName, int *pMemberNum ) const 309 345 { 310 int i2 ,offset;346 int i2; 311 347 312 348 //仮想関数が存在する場合は関数リストへのポインタのサイズを追加 313 if(vtbl_num) offset=PTR_SIZE; 314 else offset=0; 349 int offset = IsExistVirtualFunctions() ? PTR_SIZE : 0; 315 350 316 351 int alignment; … … 381 416 int CClass::GetAlignment() const 382 417 { 383 int alignment,member_size; 384 385 if(vtbl_num) alignment=PTR_SIZE; 386 else alignment=0; 418 //仮想関数が存在する場合は関数リストへのポインタのサイズを追加 419 int alignment = IsExistVirtualFunctions() ? PTR_SIZE : 0; 387 420 388 421 BOOST_FOREACH( CMember *pMember, dynamicMembers ){ 422 int member_size; 389 423 if(pMember->GetType().IsStruct()){ 390 424 //メンバクラスのアラインメントを取得 … … 431 465 432 466 UserProc **ppsi; 433 ppsi=(UserProc **)HeapAlloc(hHeap,0, vtbl_num*sizeof(GlobalProc *));467 ppsi=(UserProc **)HeapAlloc(hHeap,0,GetVtblNum()*sizeof(GlobalProc *)); 434 468 435 469 //関数テーブルに値をセット … … 452 486 } 453 487 454 vtbl_offset=dataTable.AddBinary((void *)ppsi, vtbl_num*sizeof(LONG_PTR));455 456 for( int i=0; i < vtbl_num; i++ ){488 vtbl_offset=dataTable.AddBinary((void *)ppsi,GetVtblNum()*sizeof(LONG_PTR)); 489 490 for( int i=0; i < GetVtblNum(); i++ ){ 457 491 pobj_Reloc->AddSchedule_DataSection(vtbl_offset+i*sizeof(LONG_PTR)); 458 492 } … … 469 503 470 504 int i; 471 for(i=0;i< vtbl_num;i++){505 for(i=0;i<GetVtblNum();i++){ 472 506 GlobalProc *pUserProc; 473 507 pUserProc=(GlobalProc *)pVtbl[i]; … … 938 972 939 973 if( isVirtual ){ 940 pobj_c-> vtbl_num++;974 pobj_c->AddVtblNum( 1 ); 941 975 } 942 976 … … 1081 1115 1082 1116 //仮想関数の数を初期化 1083 pobj_c-> vtbl_num=0;1117 pobj_c->SetVtblNum( 0 ); 1084 1118 } 1085 1119 Interface_InheritsError: … … 1214 1248 1215 1249 // 仮想関数の数を初期化 1216 pobj_c-> vtbl_num = 0;1250 pobj_c->SetVtblNum( 0 ); 1217 1251 } 1218 1252 else{
Note:
See TracChangeset
for help on using the changeset viewer.