Changeset 18 in dev for BasicCompiler64
- Timestamp:
- Dec 24, 2006, 4:46:12 AM (18 years ago)
- Location:
- BasicCompiler64
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
BasicCompiler64/Compile_CallProc.cpp
r11 r18 233 233 234 234 BOOL bStatic=0; 235 CClass *pobj_c; 235 CClass *pobj_c = NULL; 236 CMethod *pMethod = NULL; 236 237 if(psi->pobj_ParentClass){ 237 238 //クラスのメンバ関数を呼び出す場合はアクセスチェックを行う … … 264 265 } 265 266 266 DWORD dwAccess; 267 for(i=0;i<pobj_c->iMethodNum;i++){268 if(psi==pobj_c->ppobj_Method[i]->psi) break;269 }270 if(i==pobj_c->iMethodNum){271 for(i=0;i<pobj_c->iStaticMethodNum;i++){272 if(psi==pobj_c->ppobj_StaticMethod[i]->psi) break;273 }274 dwAccess=pobj_c->ppobj_StaticMethod[i]->dwAccess;275 276 bStatic=1;277 }278 else dwAccess=pobj_c->ppobj_Method[i]->dwAccess;267 268 ///////////////////////////////// 269 // メソッド情報を取得 270 ///////////////////////////////// 271 pMethod = pobj_c->GetMethodInfo( psi ); 272 if( !pMethod ){ 273 //動的メソッドが取得できなかったときは静的メソッドを当たる 274 pMethod = pobj_c->GetStaticMethodInfo( psi ); 275 if( !pMethod ){ 276 SetError(300,NULL,cp); 277 return -1; 278 } 279 } 279 280 280 281 … … 282 283 // アクセスエラーチェック 283 284 ////////////////////////////// 285 DWORD dwAccess = pMethod->dwAccess; 284 286 285 287 if(ObjectName[0]){ … … 408 410 else{ 409 411 RELATIVE_VAR RelativeVar; 410 if(!GetVarOffsetReadOnly(ObjectName,&i2,&RelativeVar,0)) return -1; 412 if( pMethod->isConst ){ 413 //Constアクセスが可能なメソッドの場合 414 if( !GetVarOffsetReadOnly( ObjectName, &i2, &RelativeVar, 0 ) ) return -1; 415 } 416 else{ 417 //Constアクセスが不可能なメソッドの場合 418 if( !GetVarOffsetReadWrite( ObjectName, &i2, &RelativeVar, 0 ) ) return -1; 419 } 420 411 421 SetVarPtrToReg(REG_RCX,&RelativeVar); 412 422 -
BasicCompiler64/Compile_ProcOp.cpp
r17 r18 374 374 //コンパイル中の関数が属するクラス 375 375 pobj_CompilingClass=psi->pobj_ParentClass; 376 377 //コンパイルスタートをクラス管理クラスに追加 378 pobj_DBClass->StartCompile( psi ); 376 379 377 380 //コンパイル中の関数 … … 614 617 } 615 618 } 619 if(psi->name[0]=='~'){ 620 //デストラクタをコンパイルしたとき 621 622 //デストラクタのコンパイル開始を通知 623 pobj_CompilingClass->NotifyStartDestructorCompile(); 624 } 616 625 } 617 626 … … 633 642 if( pobj_CompilingClass->IsCompilingConstructor() ){ 634 643 // コンストラクタをコンパイルしていたとき 644 635 645 // コンストラクタのコンパイルが完了したことを通知 636 637 646 pobj_CompilingClass->NotifyFinishConstructorCompile(); 638 647 } … … 642 651 //デストラクタをコンパイルしたとき 643 652 //////////////////////////////////// 653 654 // デストラクタのコンパイルが完了したことを通知 655 pobj_CompilingClass->NotifyFinishDestructorCompile(); 644 656 645 657 if(pobj_CompilingClass->pobj_InheritsClass){ -
BasicCompiler64/Compile_Var.cpp
r17 r18 471 471 } 472 472 if(i==pobj_CompilingClass->iMemberNum) goto NonClassMember; 473 } 474 475 //Const修飾子のメソッド内でメンバ書き込みアクセスが発生したとき 476 //(コンストラクタ、デストラクタ内を除く) 477 CMethod *pMethod = pobj_DBClass->GetNowCompilingMethodInfo(); 478 if( isWriteAccess && 479 pMethod->isConst && 480 pobj_CompilingClass->IsCompilingConstructor() == false && 481 pobj_CompilingClass->IsCompilingDestructor() == false 482 ){ 483 SetError(131, NULL, cp ); 473 484 } 474 485 … … 590 601 ok: 591 602 592 if( bConst && isWriteAccess){603 if( bConst && isWriteAccess ){ 593 604 //Const定義の変数に書き込みアクセスをしようとした場合 594 SetError(61,VarName,cp); 605 if( *pType == DEF_OBJECT ){ 606 //オブジェクト定数 607 SetError(130, VarName, cp ); 608 } 609 else{ 610 //一般のConst変数 611 SetError(61,VarName,cp); 612 } 595 613 } 596 614
Note:
See TracChangeset
for help on using the changeset viewer.