Changeset 27 in dev for BasicCompiler32
- Timestamp:
- Jan 7, 2007, 6:51:20 AM (18 years ago)
- Location:
- BasicCompiler32
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler32/Compile_CallProc.cpp
r26 r27 240 240 if(ObjectName[0]){ 241 241 if(lstrcmpi(ObjectName,"Super")==0){ 242 //クラスメンバ関数内から スーパークラスの呼び出し242 //クラスメンバ関数内から基底クラスの呼び出し 243 243 pobj_c=pobj_CompilingClass; 244 244 } … … 270 270 // メソッド情報を取得 271 271 ///////////////////////////////// 272 pMethod = pobj_c->GetMethodInfo( psi ); 273 if( !pMethod ){ 272 pMethod = NULL; 273 if( ! bStatic ) pMethod = pobj_c->GetMethodInfo( psi ); 274 if( ! pMethod ){ 274 275 //動的メソッドが取得できなかったときは静的メソッドを当たる 275 276 pMethod = pobj_c->GetStaticMethodInfo( psi ); -
BasicCompiler32/Compile_ProcOp.cpp
r18 r27 449 449 pobj_CompilingClass->NotifyStartConstructorCompile(); 450 450 451 // スーパークラスかどうかの識別452 //(継承元がインターフェイスの場合も スーパークラスと見なす)451 //基底クラスかどうかの識別 452 //(継承元がインターフェイスの場合も基底クラスと見なす) 453 453 BOOL bThisIsSuperClass; 454 454 if(pobj_CompilingClass->pobj_InheritsClass==0) bThisIsSuperClass=1; … … 461 461 if(!bThisIsSuperClass){ 462 462 /* サブクラスコンストラクタをコンパイルしているときは、 463 スーパークラスのコンストラクタを呼び出す */463 基底クラスのコンストラクタを呼び出す */ 464 464 465 465 i3=cp+1; … … 474 474 if(lstrcmp(temporary, 475 475 pobj_CompilingClass->pobj_InheritsClass->name)==0){ 476 // スーパークラスのコンストラクタを呼び出す476 //基底クラスのコンストラクタを呼び出す 477 477 cp=i3; 478 478 for(i4=0;;cp++,i4++){ … … 497 497 } 498 498 else{ 499 // スーパークラスのコンストラクタを暗黙的に呼び出す499 //基底クラスのコンストラクタを暗黙的に呼び出す 500 500 i3=pobj_CompilingClass->pobj_InheritsClass->ConstructorMemberSubIndex; 501 501 Opcode_CallProc("", … … 607 607 if(pobj_CompilingClass->pobj_InheritsClass){ 608 608 /* サブクラスのデストラクタをコンパイルしているときは、 609 スーパークラスのデストラクタを呼び出す */609 基底クラスのデストラクタを呼び出す */ 610 610 611 611 i3=pobj_CompilingClass->pobj_InheritsClass->DestructorMemberSubIndex; -
BasicCompiler32/Compile_Var.cpp
r20 r27 498 498 499 499 500 ////////////////////501 // グローバル変数502 ////////////////////503 504 for(i=MaxGlobalVarNum-1;i>=0;i--){ //レキシカルスコープを考慮してバックサーチ505 if(GlobalVar[i].bLiving){506 if(lstrcmp(VarName,GlobalVar[i].name)==0) break;507 }508 }509 if(i>=0){510 goto GlobalOk;511 }512 513 514 500 ////////////////////////// 515 501 // クラスの静的メンバ … … 518 504 if(member[0]){ 519 505 lstrcpy(temporary,member); 520 GetVarFormatString(temporary,array,lpPtrOffset,member,&i); 506 char tempMember[VN_SIZE]; 507 char tempArray[VN_SIZE]; 508 GetVarFormatString(temporary,tempArray,lpPtrOffset,tempMember,&i); 521 509 522 510 char temp2[VN_SIZE]; … … 527 515 528 516 if(i!=MaxGlobalVarNum){ 517 lstrcpy(member,tempMember); 518 lstrcpy(array,tempArray); 529 519 goto GlobalOk; 530 520 } … … 543 533 } 544 534 } 535 536 537 //////////////////// 538 // グローバル変数 539 //////////////////// 540 541 for(i=MaxGlobalVarNum-1;i>=0;i--){ //レキシカルスコープを考慮してバックサーチ 542 if(GlobalVar[i].bLiving){ 543 if(lstrcmp(VarName,GlobalVar[i].name)==0) break; 544 } 545 } 546 if(i>=0){ 547 goto GlobalOk; 548 } 549 545 550 546 551 if(isErrorEnabled) SetError(3,variable,cp);
Note:
See TracChangeset
for help on using the changeset viewer.