Changeset 51 in dev for BasicCompiler_Common
- Timestamp:
- Feb 10, 2007, 8:30:19 PM (18 years ago)
- Location:
- BasicCompiler_Common
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler_Common/Class.cpp
r50 r51 207 207 } 208 208 209 if(ppobj_Method){210 //メソッド211 for(i=0;i<iMethodNum;i++){212 delete ppobj_Method[i];213 }214 HeapDefaultFree(ppobj_Method);215 ppobj_Method=0;216 }217 218 209 if(ppobj_StaticMember){ 219 210 //静的メンバ … … 225 216 } 226 217 227 foreach( CMethod *method, StaticMethods ){ 218 //メソッド 219 foreach( CMethod *method, methods ){ 220 delete method; 221 } 222 223 //静的メソッド 224 foreach( CMethod *method, staticMethods ){ 228 225 delete method; 229 226 } … … 249 246 250 247 //メソッドをコピー 251 ppobj_Method=(CMethod **)HeapReAlloc( 252 hHeap, 253 0, 254 ppobj_Method, 255 pInheritsClass->iMethodNum*sizeof(CMethod *)); 256 iMethodNum=pInheritsClass->iMethodNum; 257 for(i3=0;i3<pInheritsClass->iMethodNum;i3++){ 258 ppobj_Method[i3]=new CMethod(pInheritsClass->ppobj_Method[i3]); 248 foreach( CMethod *baseMethod, pInheritsClass->methods ){ 249 CMethod *method = new CMethod( baseMethod ); 259 250 260 251 //dwAccess 261 if( pInheritsClass->ppobj_Method[i3]->dwAccess==ACCESS_PRIVATE)262 ppobj_Method[i3]->dwAccess=ACCESS_NON;263 else ppobj_Method[i3]->dwAccess=pInheritsClass->ppobj_Method[i3]->dwAccess;252 if(baseMethod->dwAccess==ACCESS_PRIVATE) 253 method->dwAccess=ACCESS_NON; 254 else method->dwAccess=baseMethod->dwAccess; 264 255 265 256 //pobj_Inherits 266 257 // ※継承元のClassIndexをセット(入れ子継承を考慮する) 267 if( pInheritsClass->ppobj_Method[i3]->pobj_InheritsClass==0)268 ppobj_Method[i3]->pobj_InheritsClass=pInheritsClass;258 if(baseMethod->pobj_InheritsClass==0) 259 method->pobj_InheritsClass=pInheritsClass; 269 260 else 270 ppobj_Method[i3]->pobj_InheritsClass= 271 pInheritsClass->ppobj_Method[i3]->pobj_InheritsClass; 261 method->pobj_InheritsClass= 262 baseMethod->pobj_InheritsClass; 263 264 methods.push_back( method ); 272 265 } 273 266 … … 289 282 } 290 283 void CClass::AddMethod( SUBINFO *psi,DWORD dwAccess, bool isConst, BOOL bAbstract, BOOL bVirtual ){ 291 ppobj_Method = (CMethod **)HeapReAlloc( hHeap, 0, ppobj_Method, (iMethodNum + 1) * sizeof(CMethod *) ); 292 ppobj_Method[iMethodNum] = new CMethod(); 293 ppobj_Method[iMethodNum]->psi = psi; 294 ppobj_Method[iMethodNum]->dwAccess = dwAccess; 295 ppobj_Method[iMethodNum]->isConst = isConst; 296 ppobj_Method[iMethodNum]->bAbstract = bAbstract; 297 ppobj_Method[iMethodNum]->bVirtual = bVirtual; 298 ppobj_Method[iMethodNum]->pobj_InheritsClass = 0; 299 300 iMethodNum++; 284 CMethod *method = new CMethod(); 285 method->psi = psi; 286 method->dwAccess = dwAccess; 287 method->isConst = isConst; 288 method->bAbstract = bAbstract; 289 method->bVirtual = bVirtual; 290 method->pobj_InheritsClass = 0; 291 292 methods.push_back( method ); 301 293 } 302 294 void CClass::AddStaticMethod(SUBINFO *psi,DWORD dwAccess){ … … 308 300 method->pobj_InheritsClass=0; 309 301 310 StaticMethods.push_back( method );302 staticMethods.push_back( method ); 311 303 } 312 304 BOOL CClass::DupliCheckAll(const char *name){ 313 305 //重複チェック 314 306 315 int i;316 317 307 //メンバ 318 308 if(DupliCheckMember(name)) return 1; 319 309 320 310 //メソッド 321 for (i=0;i<iMethodNum;i++){322 if( lstrcmp(name,ppobj_Method[i]->psi->name)==0){311 foreach( CMethod *method, methods ){ 312 if( lstrcmp( name, method->psi->name ) == 0 ){ 323 313 return 1; 324 314 } … … 349 339 } 350 340 CMethod *CClass::GetMethodInfo( SUBINFO *psi ){ 351 for( int i= iMethodNum-1; i>=0; i-- ){352 if( psi == ppobj_Method[i]->psi ) return ppobj_Method[i];341 for( int i=(int)methods.size()-1; i>=0; i-- ){ 342 if( psi == methods[i]->psi ) return methods[i]; 353 343 } 354 344 return NULL; 355 345 } 356 346 CMethod *CClass::GetStaticMethodInfo( SUBINFO *psi ){ 357 for( int i=(int) StaticMethods.size()-1; i>=0; i-- ){358 if( psi == StaticMethods[i]->psi ) return StaticMethods[i];347 for( int i=(int)staticMethods.size()-1; i>=0; i-- ){ 348 if( psi == staticMethods[i]->psi ) return staticMethods[i]; 359 349 } 360 350 return NULL; 361 351 } 362 352 bool CClass::IsExistMethod( const char *name ){ 363 for ( int i=0; i<iMethodNum; i++){364 if( lstrcmp( ppobj_Method[i]->psi->name, name ) == 0 ) return true;353 foreach( CMethod *method, methods ){ 354 if( lstrcmp( method->psi->name, name ) == 0 ) return true; 365 355 } 366 356 return false; 367 357 } 368 358 bool CClass::IsExistStaticMethod( const char *name ){ 369 foreach( CMethod *method, StaticMethods ){359 foreach( CMethod *method, staticMethods ){ 370 360 if( lstrcmp( method->psi->name, name ) == 0 ) return true; 371 361 } … … 375 365 void CClass::EnumStaticMethod( const char *methodName, std::vector<SUBINFO *> &subs ) const 376 366 { 377 foreach( CMethod *method, StaticMethods ){367 foreach( CMethod *method, staticMethods ){ 378 368 if(lstrcmp(methodName,method->psi->name)==0){ 379 369 subs.push_back( method->psi ); … … 386 376 //オブジェクトのメンバ関数の場合 387 377 //※オーバーライドされた関数を先にサーチする必要があるため、バックサーチを行う 388 for( int i=iMethodNum-1;i>=0;i--){389 if(lstrcmp( name,ppobj_Method[i]->psi->name)==0){390 subs.push_back( ppobj_Method[i]->psi );378 for( int i=(int)methods.size()-1; i>=0; i-- ){ 379 if(lstrcmp(methodName,methods[i]->psi->name)==0){ 380 subs.push_back( methods[i]->psi ); 391 381 } 392 382 } … … 395 385 void CClass::EnumMethod( const BYTE idOperatorCalc, std::vector<SUBINFO *> &subs ) const 396 386 { 397 for(int i=0;i<iMethodNum;i++){ 387 //オブジェクトのメンバ関数の場合 388 //※オーバーライドされた関数を先にサーチする必要があるため、バックサーチを行う 389 for( int i=(int)methods.size()-1; i>=0; i-- ){ 398 390 char *temp; 399 temp= ppobj_Method[i]->psi->name;391 temp=methods[i]->psi->name; 400 392 if(temp[0]==1&&temp[1]==ESC_OPERATOR){ 401 393 if((BYTE)temp[2]==idOperatorCalc){ 402 subs.push_back( ppobj_Method[i]->psi ); 403 } 404 } 405 } 394 subs.push_back( methods[i]->psi ); 395 } 396 } 397 } 398 } 399 400 //デフォルト コンストラクタ メソッドを取得 401 CMethod *CClass::GetConstructorMethod() const 402 { 403 if( ConstructorMemberSubIndex == -1 ) return NULL; 404 return methods[ConstructorMemberSubIndex]; 405 } 406 407 //デフォルト コピーコンストラクタ メソッドを取得 408 CMethod *CClass::GetCopyConstructorMethod() const 409 { 410 if( CopyConstructorMemberSubIndex == -1 ) return NULL; 411 return methods[CopyConstructorMemberSubIndex]; 412 } 413 414 //デストラクタ メソッドを取得 415 CMethod *CClass::GetDestructorMethod() const 416 { 417 if( DestructorMemberSubIndex == -1 ) return NULL; 418 return methods[DestructorMemberSubIndex]; 406 419 } 407 420 … … 409 422 LONG_PTR CClass::AddVtblDataTable(SUBINFO **ppsi,int length){ 410 423 return AddDataTable((char *)ppsi,length); 424 } 425 int CClass::GetFuncNumInVtbl( const SUBINFO *psi ) const 426 { 427 int n = 0; 428 foreach( CMethod *method, methods ){ 429 if( method->psi == psi ) break; 430 if( method->psi->bVirtual ) n++; 431 } 432 return n; 411 433 } 412 434 LONG_PTR CClass::GetVtblGlobalOffset(void){ … … 424 446 425 447 //関数テーブルに値をセット 426 for( int i=0, i2=0; i < iMethodNum; i++ ){ 427 if(ppobj_Method[i]->bVirtual){ 428 ppobj_Method[i]->psi->bUse=1; 429 430 if(ppobj_Method[i]->bAbstract){ 448 int i2 = 0; 449 foreach( CMethod *method, methods ){ 450 if(method->bVirtual){ 451 method->psi->bUse=1; 452 453 if(method->bAbstract){ 431 454 extern int cp; 432 455 SetError(300,NULL,cp); … … 434 457 ppsi[i2]=0; 435 458 } 436 else ppsi[i2]= ppobj_Method[i]->psi;459 else ppsi[i2]=method->psi; 437 460 i2++; 438 461 } … … 465 488 } 466 489 bool CClass::IsAbstract(){ 467 //未実装の仮想関数を持つ場合は 1を返す468 469 for ( int i=0; i < iMethodNum; i++){470 if( ppobj_Method[i]->bVirtual){471 if( ppobj_Method[i]->bAbstract){490 //未実装の仮想関数を持つ場合はtrueを返す 491 492 foreach( CMethod *method, methods ){ 493 if(method->bVirtual){ 494 if(method->bAbstract){ 472 495 return true; 473 496 } … … 744 767 745 768 if( fConstructor == 1 ) 746 pobj_c->ConstructorMemberSubIndex = pobj_c->iMethodNum;769 pobj_c->ConstructorMemberSubIndex = (int)pobj_c->methods.size(); 747 770 else if( fConstructor == 2 ) 748 pobj_c->CopyConstructorMemberSubIndex = pobj_c->iMethodNum;771 pobj_c->CopyConstructorMemberSubIndex = (int)pobj_c->methods.size(); 749 772 else if( bDestructor ) 750 pobj_c->DestructorMemberSubIndex = pobj_c->iMethodNum;773 pobj_c->DestructorMemberSubIndex = (int)pobj_c->methods.size(); 751 774 752 775 … … 761 784 } 762 785 763 //メ ンバ関数764 for (i=0;i<pobj_c->iMethodNum;i++){786 //メソッド 787 foreach( CMethod *method, pobj_c->methods ){ 765 788 //基底クラスと重複する場合はオーバーライドを行う 766 if( pobj_c->ppobj_Method[i]->pobj_InheritsClass) continue;767 768 if(lstrcmp(temporary, pobj_c->ppobj_Method[i]->psi->name)==0){789 if(method->pobj_InheritsClass) continue; 790 791 if(lstrcmp(temporary,method->psi->name)==0){ 769 792 if(CompareParameter( 770 pobj_c->ppobj_Method[i]->psi->pParmInfo,pobj_c->ppobj_Method[i]->psi->ParmNum,793 method->psi->pParmInfo,method->psi->ParmNum, 771 794 psi->pParmInfo,psi->ParmNum 772 795 )==0){ … … 781 804 if(bAbstract) psi->bCompile=1; 782 805 783 784 for (i=0;i<pobj_c->iMethodNum;i++){785 if(lstrcmp(temporary, pobj_c->ppobj_Method[i]->psi->name)==0){806 //メソッドのオーバーライド 807 foreach( CMethod *method, pobj_c->methods ){ 808 if(lstrcmp(temporary,method->psi->name)==0){ 786 809 if(CompareParameter( 787 pobj_c->ppobj_Method[i]->psi->pParmInfo,pobj_c->ppobj_Method[i]->psi->ParmNum,810 method->psi->pParmInfo,method->psi->ParmNum, 788 811 psi->pParmInfo,psi->ParmNum 789 812 )==0){ 790 813 791 if( pobj_c->ppobj_Method[i]->psi->bVirtual){814 if(method->psi->bVirtual){ 792 815 //メンバ関数を上書き 793 pobj_c->ppobj_Method[i]->psi=psi;794 pobj_c->ppobj_Method[i]->bAbstract=0;816 method->psi=psi; 817 method->bAbstract=0; 795 818 796 819 if(!bOverride){ 797 820 SetError(127,NULL,NowLine); 798 821 } 799 if( pobj_c->ppobj_Method[i]->dwAccess!=dwAccess){822 if(method->dwAccess!=dwAccess){ 800 823 SetError(128,NULL,NowLine); 801 824 } … … 890 913 pobj_c->ppobj_StaticMember=(CMember **)HeapAlloc(hHeap,0,1); 891 914 pobj_c->iStaticMemberNum=0; 892 pobj_c->ppobj_Method=(CMethod **)HeapAlloc(hHeap,0,1);893 pobj_c->iMethodNum=0;894 915 895 916 pobj_c->ConstructorMemberSubIndex=-1; … … 1050 1071 pobj_c->ppobj_StaticMember=(CMember **)HeapAlloc(hHeap,0,1); 1051 1072 pobj_c->iStaticMemberNum=0; 1052 pobj_c->ppobj_Method=(CMethod **)HeapAlloc(hHeap,0,1);1053 pobj_c->iMethodNum=0;1054 1073 1055 1074 pobj_c->ConstructorMemberSubIndex=-1; -
BasicCompiler_Common/Class.h
r50 r51 60 60 ~CMethod(); 61 61 }; 62 class CDBClass; 63 class CDebugSection; 62 64 class CClass{ 65 friend CDBClass; 66 friend CDebugSection; 67 68 //メソッド情報 69 std::vector<CMethod *> methods; 70 int ConstructorMemberSubIndex; 71 int CopyConstructorMemberSubIndex; 72 int DestructorMemberSubIndex; 73 63 74 //静的メソッド情報 64 std::vector<CMethod *> StaticMethods;75 std::vector<CMethod *> staticMethods; 65 76 66 77 public: … … 74 85 CMember **ppobj_Member; 75 86 int iMemberNum; 76 77 //メソッド情報78 CMethod **ppobj_Method;79 int iMethodNum;80 int ConstructorMemberSubIndex;81 int DestructorMemberSubIndex;82 int CopyConstructorMemberSubIndex;83 87 84 88 //静的メンバ情報 … … 121 125 void EnumMethod( const BYTE idOperatorCalc, std::vector<SUBINFO *> &subs ) const; 122 126 127 //デフォルト コンストラクタ メソッドを取得 128 CMethod *GetConstructorMethod() const; 129 130 //デフォルト コピーコンストラクタ メソッドを取得 131 CMethod *GetCopyConstructorMethod() const; 132 133 //デストラクタ メソッドを取得 134 CMethod *GetDestructorMethod() const; 135 123 136 124 137 //vtbl … … 127 140 LONG_PTR AddVtblDataTable(SUBINFO **ppsi,int length); 128 141 public: 129 LONG_PTR GetVtblGlobalOffset(void); 142 int GetFuncNumInVtbl( const SUBINFO *psi ) const; 143 LONG_PTR GetVtblGlobalOffset(void); 130 144 void ActionVtblSchedule(LONG_PTR ImageBase, LONG_PTR MemPos_CodeSection); 131 145 bool IsAbstract(); -
BasicCompiler_Common/DebugMiddleFile.cpp
r16 r51 364 364 365 365 //メソッド 366 *(long *)(buffer+i2)= pobj_c->iMethodNum;367 i2+=sizeof(long); 368 for (i4=0;i4<pobj_c->iMethodNum;i4++){369 *(long *)(buffer+i2)= pobj_c->ppobj_Method[i4]->dwAccess;370 i2+=sizeof(long); 371 if( pobj_c->ppobj_Method[i4]->pobj_InheritsClass){372 lstrcpy(buffer+i2, pobj_c->ppobj_Method[i4]->pobj_InheritsClass->name);366 *(long *)(buffer+i2)=(long)pobj_c->methods.size(); 367 i2+=sizeof(long); 368 foreach( CMethod *method, pobj_c->methods ){ 369 *(long *)(buffer+i2)=method->dwAccess; 370 i2+=sizeof(long); 371 if(method->pobj_InheritsClass){ 372 lstrcpy(buffer+i2,method->pobj_InheritsClass->name); 373 373 i2+=lstrlen(buffer+i2)+1; 374 374 } … … 377 377 i2+=lstrlen(buffer+i2)+1; 378 378 } 379 lstrcpy(buffer+i2, pobj_c->ppobj_Method[i4]->psi->name);379 lstrcpy(buffer+i2,method->psi->name); 380 380 i2+=lstrlen(buffer+i2)+1; 381 381 } … … 738 738 739 739 //メソッド 740 pobj_c->iMethodNum=*(long *)(buffer+i2); 741 i2+=sizeof(long); 742 pobj_c->ppobj_Method= 743 (CMethod **)HeapAlloc(hHeap,0,pobj_c->iMethodNum*sizeof(CMethod *)); 744 for(i4=0;i4<pobj_c->iMethodNum;i4++){ 745 pobj_c->ppobj_Method[i4]=new CMethod(); 746 747 pobj_c->ppobj_Method[i4]->dwAccess=*(long *)(buffer+i2); 740 int nMethod = *(long *)(buffer+i2); 741 i2+=sizeof(long); 742 for( i4=0; i4<nMethod; i4++ ){ 743 CMethod *method = new CMethod(); 744 745 method->dwAccess=*(long *)(buffer+i2); 748 746 i2+=sizeof(long); 749 747 … … 753 751 754 752 if(szInherits[0]) 755 pobj_c->ppobj_Method[i4]->pobj_InheritsClass=pobj_DBClass->check(szInherits);756 else pobj_c->ppobj_Method[i4]->pobj_InheritsClass=0;753 method->pobj_InheritsClass=pobj_DBClass->check(szInherits); 754 else method->pobj_InheritsClass=0; 757 755 758 756 lstrcpy(temp2,buffer+i2); … … 760 758 761 759 CClass *pobj_temp_c; 762 pobj_temp_c= pobj_c->ppobj_Method[i4]->pobj_InheritsClass;760 pobj_temp_c=method->pobj_InheritsClass; 763 761 if(pobj_temp_c==0) pobj_temp_c=pobj_c; 764 762 i5=hash_default(temp2); … … 768 766 psi=psi->pNextData; 769 767 } 770 pobj_c->ppobj_Method[i4]->psi=psi; 768 method->psi=psi; 769 770 pobj_c->methods.push_back( method ); 771 771 } 772 772 -
BasicCompiler_Common/LexicalScoping.cpp
r34 r51 182 182 183 183 184 int i3,i4 ,i5;184 int i3,i4; 185 185 int indexSystemGC=-1; 186 186 for( i3 = num - 1; i3 >= 0; i3-- ){ //確保したのと逆順序で解放するため、バックサーチにする … … 201 201 202 202 //デストラクタを呼び出す 203 i5=pVar[i3].u.pobj_c->DestructorMemberSubIndex; 204 if(i5!=-1) 205 Opcode_CallProc("",pVar[i3].u.pobj_c->ppobj_Method[i5]->psi,0,pVar[i3].name,DEF_OBJECT); 203 CMethod *method = pVar[i3].u.pobj_c->GetDestructorMethod(); 204 if( method ){ 205 Opcode_CallProc("", method->psi,0,pVar[i3].name,DEF_OBJECT); 206 } 206 207 207 208 //メモリを解放する … … 242 243 else if(pVar[i3].type==DEF_OBJECT&&pVar[i3].fRef==0){ 243 244 //デストラクタの呼び出し 244 i5=pVar[i3].u.pobj_c->DestructorMemberSubIndex;245 if( i5!=-1){245 CMethod *method = pVar[i3].u.pobj_c->GetDestructorMethod(); 246 if( method ){ 246 247 int ss[MAX_ARRAYDIM]; 247 248 memset(ss,0,MAX_ARRAYDIM*sizeof(int)); … … 266 267 } 267 268 lstrcat(temporary,"]"); 268 Opcode_CallProc("", pVar[i3].u.pobj_c->ppobj_Method[i5]->psi,0,temporary,DEF_OBJECT);269 Opcode_CallProc("",method->psi,0,temporary,DEF_OBJECT); 269 270 270 271 ss[0]++; … … 280 281 } 281 282 else{ 282 Opcode_CallProc("", pVar[i3].u.pobj_c->ppobj_Method[i5]->psi,0,pVar[i3].name,DEF_OBJECT);283 Opcode_CallProc("",method->psi,0,pVar[i3].name,DEF_OBJECT); 283 284 } 284 285 } … … 288 289 if(indexSystemGC!=-1){ 289 290 //_System_GCオブジェクトのデストラクタの呼び出し処理 290 i3=pVar[indexSystemGC].u.pobj_c->DestructorMemberSubIndex;291 if( i3!=-1){292 Opcode_CallProc("", pVar[indexSystemGC].u.pobj_c->ppobj_Method[i3]->psi,0,pVar[indexSystemGC].name,DEF_OBJECT);291 CMethod *method = pVar[indexSystemGC].u.pobj_c->GetDestructorMethod(); 292 if( method ){ 293 Opcode_CallProc("",method->psi,0,pVar[indexSystemGC].name,DEF_OBJECT); 293 294 } 294 295 } -
BasicCompiler_Common/Variable.cpp
r49 r51 1225 1225 1226 1226 1227 1228 1227 if( pTypeInfo->type==DEF_OBJECT ){ 1228 //デストラクタの利用フラグをオンにする 1229 CMethod *method = pTypeInfo->u.pobj_Class->GetDestructorMethod(); 1230 if( method ){ 1231 method->psi->bUse = 1; 1232 } 1233 } 1234 1235 /* 1229 1236 if(pTypeInfo->type==DEF_OBJECT){ 1230 1237 //利用対象のクラスコンストラクタ、デストラクタに使用チェックをつける … … 1239 1246 } 1240 1247 } 1241 } 1242 } 1248 }*/ 1249 } -
BasicCompiler_Common/hash.cpp
r50 r51 57 57 extern int SubInfoNum; 58 58 extern int cp; 59 int i;60 59 61 60 char name[VN_SIZE]; … … 97 96 98 97 if( isStatic ){ 99 // 静的メソッドから 取得98 // 静的メソッドから列挙 100 99 pobj_c->EnumStaticMethod( NestMember, subs ); 101 100 } 102 101 else{ 103 //動的メソッドから取得 104 105 //※オーバーライドされた関数を先にサーチする必要があるため、バックサーチを行う 106 for(i=pobj_c->iMethodNum-1;i>=0;i--){ 107 if(lstrcmp(NestMember,pobj_c->ppobj_Method[i]->psi->name)==0){ 108 subs.push_back( pobj_c->ppobj_Method[i]->psi ); 109 } 110 } 102 //動的メソッドから列挙 103 pobj_c->EnumMethod( NestMember, subs ); 111 104 } 112 105 } … … 117 110 //自身のオブジェクトのメンバ関数を検索 118 111 112 // 静的メソッド 113 pobj_CompilingClass->EnumStaticMethod( name, subs ); 119 114 120 ////////////////////////////////////////////// 121 // 静的メソッド 122 ////////////////////////////////////////////// 123 124 CClass *pobj_c = pobj_CompilingClass; 125 126 pobj_c->EnumStaticMethod( NestMember, subs ); 127 128 129 /////////////////////// 130 // 動的メソッド(一般) 131 /////////////////////// 132 for(i=0;i<pobj_CompilingClass->iMethodNum;i++){ 133 //オーバーライドされた関数を飛び越す 134 if(pobj_CompilingClass->ppobj_Method[i]->pobj_InheritsClass==0) break; 135 } 136 for(;i<pobj_CompilingClass->iMethodNum;i++){ 137 if(lstrcmp(name,pobj_CompilingClass->ppobj_Method[i]->psi->name)==0){ 138 subs.push_back( pobj_CompilingClass->ppobj_Method[i]->psi ); 139 } 140 } 141 142 //オーバーライドされたメンバ関数 143 for(i=0;i<pobj_CompilingClass->iMethodNum;i++){ 144 //オーバーライドされた関数を飛び越す 145 if(pobj_CompilingClass->ppobj_Method[i]->pobj_InheritsClass){ 146 if(lstrcmp(name,pobj_CompilingClass->ppobj_Method[i]->psi->name)==0){ 147 subs.push_back( pobj_CompilingClass->ppobj_Method[i]->psi ); 148 } 149 } 150 } 115 // 動的メソッド 116 pobj_CompilingClass->EnumMethod( name, subs ); 151 117 } 152 118
Note:
See TracChangeset
for help on using the changeset viewer.