Changeset 536 in dev
- Timestamp:
- May 3, 2008, 6:32:50 PM (17 years ago)
- Location:
- trunk/ab5.0/abdev
- Files:
-
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ab5.0/abdev/BasicCompiler_Common/DebugMiddleFile.cpp
r485 r536 162 162 int i2,i3; 163 163 164 compiler. pCompilingClass = NULL;164 compiler.ClearCompilingUserProcAndClass(); 165 165 166 166 i2=0; -
trunk/ab5.0/abdev/BasicCompiler_Common/NumOpe_GetType.cpp
r523 r536 480 480 481 481 482 if(lstrcmpi(termFull,"This")==0){ 483 if( compiler.pCompilingClass == NULL ) 482 if(lstrcmpi(termFull,"This")==0) 483 { 484 if( !compiler.IsCompilingClass() ) 484 485 { 485 486 return false; … … 487 488 488 489 //Thisオブジェクト 489 resultType.SetType( DEF_OBJECT, compiler.pCompilingClass);490 resultType.SetType( DEF_OBJECT, &compiler.GetCompilingClass() ); 490 491 isLiteral = false; 491 492 return true; -
trunk/ab5.0/abdev/BasicCompiler_Common/VarList.cpp
r508 r536 778 778 779 779 if(pUserProc){ 780 compiler. pCompilingClass = pUserProc->GetParentClassPtr();780 compiler.StartProcedureCompile( pUserProc ); 781 781 UserProc::CompileStartForUserProc( pUserProc ); 782 782 } -
trunk/ab5.0/abdev/BasicCompiler_Common/VariableOpe.cpp
r508 r536 457 457 458 458 //アクセシビリティをチェック 459 if( &objClass == compiler.pCompilingClass){459 if( compiler.IsCompilingClass() && &objClass == &compiler.GetCompilingClass() ){ 460 460 //同一クラスオブジェクトの場合はプライベートアクセスを容認する 461 461 if( pMember->IsNoneAccess() ){ … … 571 571 } 572 572 573 if( compiler.pCompilingClass){573 if( compiler.IsCompilingClass() ){ 574 574 /////////////////////// 575 575 // クラスメンバの参照 … … 578 578 if(lstrcmpi(variable,"This")==0){ 579 579 //Thisオブジェクト 580 resultType.SetType( DEF_OBJECT, compiler.pCompilingClass);580 resultType.SetType( DEF_OBJECT, &compiler.GetCompilingClass() ); 581 581 return true; 582 582 } … … 590 590 //クラス内の動的メンバを参照するとき(通常) 591 591 592 if( !compiler. pCompilingClass->HasDynamicMember( VarName ) )592 if( !compiler.GetCompilingClass().HasDynamicMember( VarName ) ) 593 593 { 594 594 goto NonClassMember; … … 597 597 598 598 return GetMemberType( 599 Type( DEF_OBJECT, *compiler.pCompilingClass),599 Type( DEF_OBJECT, compiler.GetCompilingClass() ), 600 600 variable, 601 601 resultType, … … 653 653 } 654 654 655 if( compiler.pCompilingClass){655 if( compiler.IsCompilingClass() ){ 656 656 //自身のクラスから静的メンバを参照する場合 657 657 char temp2[VN_SIZE]; 658 sprintf(temp2,"%s.%s",compiler. pCompilingClass->GetName().c_str(),VarName);658 sprintf(temp2,"%s.%s",compiler.GetCompilingClass().GetName().c_str(),VarName); 659 659 660 660 pVar = compiler.GetObjectModule().meta.GetGlobalVars().Find( LexicalAnalyzer::FullNameToSymbol( temp2 ) ); … … 916 916 917 917 //クラス名 918 if( compiler.pCompilingClass){919 lstrcat(FullName,compiler. pCompilingClass->GetName().c_str());918 if( compiler.IsCompilingClass() ){ 919 lstrcat(FullName,compiler.GetCompilingClass().GetName().c_str()); 920 920 lstrcat(FullName,"%"); 921 921 } -
trunk/ab5.0/abdev/BasicCompiler_Common/WatchList.cpp
r508 r536 379 379 } 380 380 381 if(compiler.pCompilingClass){ 381 if( compiler.IsCompilingClass() ) 382 { 382 383 /////////////////////// 383 384 // クラスメンバの参照 … … 392 393 //クラス内の動的メンバを参照するとき(通常) 393 394 394 if( !compiler. pCompilingClass->HasDynamicMember( VarName ) )395 if( !compiler.GetCompilingClass().HasDynamicMember( VarName ) ) 395 396 { 396 397 goto NonClassMember; … … 418 419 pRelativeVar->dwKind=VAR_DIRECTMEM; 419 420 420 i3=Debugging_GetMember( *compiler.pCompilingClass,variable,pRelativeVar,resultType,1);421 i3=Debugging_GetMember( compiler.GetCompilingClass(),variable,pRelativeVar,resultType,1); 421 422 if(i3==0){ 422 423 //式エラー -
trunk/ab5.0/abdev/BasicCompiler_Common/hash.cpp
r523 r536 66 66 { 67 67 //クラスメンバ関数内から基底クラスの呼び出し 68 pobj_c=&compiler. pCompilingClass->GetSuperClass();68 pobj_c=&compiler.GetCompilingClass().GetSuperClass(); 69 69 } 70 70 else … … 104 104 105 105 106 if( compiler.pCompilingClass){106 if( compiler.IsCompilingClass() ){ 107 107 //自身のオブジェクトのメンバ関数を検索 108 108 109 109 // 静的メソッド 110 compiler. pCompilingClass->GetStaticMethods().Enum( name, subs );110 compiler.GetCompilingClass().GetStaticMethods().Enum( name, subs ); 111 111 112 112 // 動的メソッド 113 compiler. pCompilingClass->EnumDynamicMethodsOrInterfaceMethods( name, subs );113 compiler.GetCompilingClass().EnumDynamicMethodsOrInterfaceMethods( name, subs ); 114 114 } 115 115 -
trunk/ab5.0/abdev/BasicCompiler_Common/include/Compiler.h
r533 r536 30 30 // 名前空間サポート 31 31 NamespaceSupporter namespaceSupporter; 32 33 // コンパイル中のUserProc/CClass 34 const UserProc *pCompilingUserProc; 35 const CClass *pCompilingClass; 32 36 33 37 // オブジェクトモジュール … … 187 191 const std::string TypeToString( const Type &type ); 188 192 189 // コンパイル中のクラス 190 const CClass *pCompilingClass; 191 193 void ClearCompilingUserProcAndClass(); 194 void SetCompilingClass( const CClass *pClass ); 192 195 void StartProcedureCompile( const UserProc *pUserProc ); 193 196 void FinishProcedureCompile(); 197 198 bool IsGlobalAreaCompiling(); 199 const UserProc &GetCompilingUserProc(); 200 bool IsCompilingClass(); 201 const CClass &GetCompilingClass(); 194 202 }; 195 203 -
trunk/ab5.0/abdev/BasicCompiler_Common/src/Class.cpp
r523 r536 942 942 943 943 // コンパイル中クラスとしてセット 944 compiler. pCompilingClass = &objClass;944 compiler.SetCompilingClass( &objClass ); 945 945 946 946 const EnumInfo *pEnumInfo = NULL; … … 971 971 } 972 972 973 compiler. pCompilingClass = NULL;973 compiler.SetCompilingClass( NULL ); 974 974 } 975 975 -
trunk/ab5.0/abdev/BasicCompiler_Common/src/Compiler.cpp
r533 r536 145 145 146 146 // 型パラメータ 147 if( this-> pCompilingClass)147 if( this->IsCompilingClass() ) 148 148 { 149 149 // クラスに属するメソッドをコンパイルしているとき 150 int formalTypeIndex = this-> pCompilingClass->GetFormalGenericTypeParameterIndex( typeName );150 int formalTypeIndex = this->GetCompilingClass().GetFormalGenericTypeParameterIndex( typeName ); 151 151 if( formalTypeIndex != -1 ) 152 152 { 153 153 // コンパイル中クラスにおけるジェネリクス用の型パラメータのとき 154 154 type.SetBasicType( DEF_TYPE_PARAMETER ); 155 type.SetClassPtr( &this-> pCompilingClass->GetFormalGenericTypes()[formalTypeIndex].GetType().GetClass() );155 type.SetClassPtr( &this->GetCompilingClass().GetFormalGenericTypes()[formalTypeIndex].GetType().GetClass() ); 156 156 type.SetFormalTypeName( typeName ); 157 157 type.SetFormalTypeIndex( formalTypeIndex ); … … 211 211 } 212 212 213 void Compiler::ClearCompilingUserProcAndClass() 214 { 215 this->pCompilingUserProc = NULL; 216 this->pCompilingClass = NULL; 217 } 218 219 void Compiler::SetCompilingClass( const CClass *pClass ) 220 { 221 this->pCompilingClass = pClass; 222 } 223 213 224 void Compiler::StartProcedureCompile( const UserProc *pUserProc ) 214 225 { 226 //コンパイル中の関数 227 this->pCompilingUserProc = pUserProc; 228 215 229 //コンパイル中の関数が属するクラス 216 this-> pCompilingClass = pUserProc->GetParentClassPtr();230 this->SetCompilingClass( pUserProc->GetParentClassPtr() ); 217 231 218 232 //コンパイルスタートをクラス管理クラスに追加 … … 233 247 void Compiler::FinishProcedureCompile() 234 248 { 235 } 249 this->pCompilingUserProc = NULL; 250 this->pCompilingClass = NULL; 251 } 252 253 bool Compiler::IsGlobalAreaCompiling() 254 { 255 return ( pCompilingUserProc == NULL ); 256 } 257 const UserProc &Compiler::GetCompilingUserProc() 258 { 259 if( !this->IsGlobalAreaCompiling() ) 260 { 261 return *pCompilingUserProc; 262 } 263 264 throw; 265 } 266 267 bool Compiler::IsCompilingClass() 268 { 269 return ( pCompilingClass != NULL ); 270 } 271 const CClass &Compiler::GetCompilingClass() 272 { 273 if( this->IsCompilingClass() ) 274 { 275 return *pCompilingClass; 276 } 277 278 throw; 279 } -
trunk/ab5.0/abdev/BasicCompiler_Common/src/LexicalAnalyzer_Class.cpp
r512 r536 391 391 392 392 // 呼び出し元でコンパイル中のクラスポインタをバックアップ 393 const CClass *pBackCompilingClass = compiler.pCompilingClass; 393 const CClass *pBackCompilingClass = compiler.IsCompilingClass() 394 ? &compiler.GetCompilingClass() 395 : NULL; 394 396 395 397 for(i=0;;i++){ … … 464 466 if(!pobj_c) continue; 465 467 466 compiler. pCompilingClass = pobj_c;468 compiler.SetCompilingClass( pobj_c ); 467 469 468 470 if(lpszInheritsClass){ … … 688 690 if(!pobj_c) continue; 689 691 690 compiler. pCompilingClass = pobj_c;692 compiler.SetCompilingClass( pobj_c ); 691 693 692 694 if(lpszInheritsClass){ … … 981 983 982 984 // 呼び出し元でコンパイル中のクラスポインタを元に戻す 983 compiler. pCompilingClass = pBackCompilingClass;985 compiler.SetCompilingClass( pBackCompilingClass ); 984 986 985 987 // 名前空間を元に戻す -
trunk/ab5.0/abdev/compiler_x86/Compile_CallProc.cpp
r509 r536 113 113 { 114 114 //クラスメンバ関数内から基底クラスの呼び出し 115 pobj_c=&compiler. pCompilingClass->GetSuperClass();115 pobj_c=&compiler.GetCompilingClass().GetSuperClass(); 116 116 117 117 isFixedClass = true; … … 147 147 148 148 //New演算子によるコンストラクタ呼び出し 149 pobj_c =pUserProc->GetParentClassPtr();149 pobj_c = pUserProc->GetParentClassPtr(); 150 150 } 151 151 else{ 152 152 //クラスメンバ関数内から同一クラスのメンバ関数の呼び出し 153 pobj_c =compiler.pCompilingClass;153 pobj_c = &compiler.GetCompilingClass(); 154 154 } 155 155 } … … 180 180 if(ObjectName[0]){ 181 181 //外部からの呼び出し 182 if(pobj_c==compiler.pCompilingClass){ 182 if( compiler.IsCompilingClass() && pobj_c == &compiler.GetCompilingClass() ) 183 { 183 184 //同一クラスオブジェクトの場合はプライベートアクセスを容認する 184 if( pMethod->IsNoneAccess() ){ 185 if( pMethod->IsNoneAccess() ) 186 { 185 187 compiler.errorMessenger.Output(109,pUserProc->GetName(),cp); 186 188 return false; 187 189 } 188 190 } 189 else{ 191 else 192 { 190 193 if( pMethod->IsPrivate() 191 || pMethod->IsNoneAccess() ){ 194 || pMethod->IsNoneAccess() ) 195 { 192 196 compiler.errorMessenger.Output(109,pUserProc->GetName(),cp); 193 197 return false; 194 198 } 195 if( !pMethod->GetUserProc().GetParentClass().IsEqualsOrSubClass( pobj_c ) && pMethod->IsProtected() ){ 199 if( !pMethod->GetUserProc().GetParentClass().IsEqualsOrSubClass( pobj_c ) && pMethod->IsProtected() ) 200 { 196 201 compiler.errorMessenger.Output(110,pUserProc->GetName(),cp); 197 202 return false; -
trunk/ab5.0/abdev/compiler_x86/Compile_Func.cpp
r523 r536 273 273 SetThisPtrToReg(REG_RCX); 274 274 275 pobj_c =compiler.pCompilingClass;275 pobj_c = &compiler.GetCompilingClass(); 276 276 } 277 277 … … 611 611 } 612 612 613 Opcode_CallDelegate( compiler. pCompilingClass->GetDelegate(), methodPtrParamStr, objPtrValueStr, paramsStr + i );613 Opcode_CallDelegate( compiler.GetCompilingClass().GetDelegate(), methodPtrParamStr, objPtrValueStr, paramsStr + i ); 614 614 } 615 615 -
trunk/ab5.0/abdev/compiler_x86/Compile_ProcOp.cpp
r533 r536 471 471 } 472 472 473 if( compiler.pCompilingClass){474 if( pUserProc->GetName() == compiler. pCompilingClass->GetName() ){473 if( compiler.IsCompilingClass() ){ 474 if( pUserProc->GetName() == compiler.GetCompilingClass().GetName() ){ 475 475 //////////////////////////////////// 476 476 // コンストラクタをコンパイルするとき … … 478 478 479 479 //コンストラクタのコンパイル開始を通知 480 compiler. pCompilingClass->NotifyStartConstructorCompile();480 compiler.GetCompilingClass().NotifyStartConstructorCompile(); 481 481 482 482 //基底クラスかどうかの識別 483 483 //(継承元がインターフェイスの場合も基底クラスと見なす) 484 484 BOOL bThisIsSuperClass; 485 if( !compiler. pCompilingClass->HasSuperClass() ) bThisIsSuperClass=1;486 else if( compiler. pCompilingClass->GetSuperClass().GetConstructorMethod() == NULL ){485 if( !compiler.GetCompilingClass().HasSuperClass() ) bThisIsSuperClass=1; 486 else if( compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod() == NULL ){ 487 487 //インターフェイスを継承したときはコンストラクタを持たない 488 488 bThisIsSuperClass=1; … … 503 503 temporary[i4]=basbuf[i3]; 504 504 } 505 if( compiler. pCompilingClass->GetSuperClass().GetName() == temporary ){505 if( compiler.GetCompilingClass().GetSuperClass().GetName() == temporary ){ 506 506 //基底クラスのコンストラクタを呼び出す 507 507 cp=i3; … … 520 520 Type dummyType; 521 521 CallProc( PROC_DEFAULT 522 , &compiler. pCompilingClass->GetSuperClass().GetConstructorMethod()->GetUserProc()523 , compiler. pCompilingClass->GetSuperClass().GetConstructorMethod()->GetUserProc().GetName().c_str()522 , &compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod()->GetUserProc() 523 , compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod()->GetUserProc().GetName().c_str() 524 524 , temporary 525 525 , Type() // baseTypeはなし … … 530 530 //基底クラスのコンストラクタを暗黙的に呼び出す 531 531 Opcode_CallProc("", 532 &compiler. pCompilingClass->GetSuperClass().GetConstructorMethod()->GetUserProc(),532 &compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod()->GetUserProc(), 533 533 0, 534 534 "" … … 541 541 542 542 //デストラクタのコンパイル開始を通知 543 compiler. pCompilingClass->NotifyStartDestructorCompile();543 compiler.GetCompilingClass().NotifyStartDestructorCompile(); 544 544 } 545 545 } … … 567 567 ////////////////////////////////////////// 568 568 569 if( compiler. pCompilingClass){570 571 if( compiler. pCompilingClass->IsCompilingConstructor() ){569 if( compiler.IsCompilingClass() ){ 570 571 if( compiler.GetCompilingClass().IsCompilingConstructor() ){ 572 572 // コンストラクタをコンパイルしていたとき 573 573 574 574 // コンストラクタのコンパイルが完了したことを通知 575 compiler. pCompilingClass->NotifyFinishConstructorCompile();575 compiler.GetCompilingClass().NotifyFinishConstructorCompile(); 576 576 } 577 577 else if( pUserProc->IsDestructor() ){ … … 581 581 582 582 // デストラクタのコンパイルが完了したことを通知 583 compiler. pCompilingClass->NotifyFinishDestructorCompile();584 585 if( compiler. pCompilingClass->HasSuperClass() ){583 compiler.GetCompilingClass().NotifyFinishDestructorCompile(); 584 585 if( compiler.GetCompilingClass().HasSuperClass() ){ 586 586 /* サブクラスのデストラクタをコンパイルしているときは、 587 587 基底クラスのデストラクタを呼び出す */ 588 588 589 const CMethod *method = compiler. pCompilingClass->GetSuperClass().GetDestructorMethod();589 const CMethod *method = compiler.GetCompilingClass().GetSuperClass().GetDestructorMethod(); 590 590 if( method ){ 591 591 Opcode_CallProc("", -
trunk/ab5.0/abdev/compiler_x86/Compile_Var.cpp
r508 r536 194 194 195 195 //アクセシビリティをチェック 196 if( &objClass==compiler.pCompilingClass){196 if( compiler.IsCompilingClass() && &objClass == &compiler.GetCompilingClass() ){ 197 197 //同一クラスオブジェクトの場合はプライベートアクセスを容認する 198 198 if(pMember->IsNoneAccess()){ … … 447 447 } 448 448 449 if( compiler.pCompilingClass){449 if( compiler.IsCompilingClass() ){ 450 450 ////////////////////// 451 451 // クラスメンバの参照 … … 460 460 pRelativeVar->dwKind=VAR_DIRECTMEM; 461 461 462 resultType.SetType( DEF_OBJECT, compiler.pCompilingClass);462 resultType.SetType( DEF_OBJECT, &compiler.GetCompilingClass() ); 463 463 return true; 464 464 } … … 472 472 //クラス内の動的メンバを参照するとき(通常) 473 473 474 if( !compiler. pCompilingClass->HasDynamicMember( VarName ) )474 if( !compiler.GetCompilingClass().HasDynamicMember( VarName ) ) 475 475 { 476 476 goto NonClassMember; … … 483 483 if( isWriteAccess && 484 484 pMethod->IsConst() && 485 compiler. pCompilingClass->IsCompilingConstructor() == false &&486 compiler. pCompilingClass->IsCompilingDestructor() == false485 compiler.GetCompilingClass().IsCompilingConstructor() == false && 486 compiler.GetCompilingClass().IsCompilingDestructor() == false 487 487 ){ 488 488 compiler.errorMessenger.Output(131, NULL, cp ); … … 499 499 isErrorEnabled, 500 500 isWriteAccess, 501 Type( DEF_OBJECT, *compiler.pCompilingClass),501 Type( DEF_OBJECT, compiler.GetCompilingClass() ), 502 502 variable, 503 503 pRelativeVar, … … 559 559 } 560 560 561 if( compiler.pCompilingClass){561 if( compiler.IsCompilingClass() ){ 562 562 //自身のクラスから静的メンバを参照する場合 563 563 char temp2[VN_SIZE]; 564 sprintf(temp2,"%s.%s",compiler. pCompilingClass->GetName().c_str(),VarName);564 sprintf(temp2,"%s.%s",compiler.GetCompilingClass().GetName().c_str(),VarName); 565 565 pVar = compiler.GetObjectModule().meta.GetGlobalVars().Find( LexicalAnalyzer::FullNameToSymbol( temp2 ) ); 566 566 if( pVar ){ -
trunk/ab5.0/abdev/compiler_x86/MakePeHdr.cpp
r525 r536 193 193 194 194 // サブルーチン(ユーザー定義、DLL関数)の識別子、アドレスを取得 195 compiler. pCompilingClass = NULL;195 compiler.SetCompilingClass( NULL ); 196 196 ActiveBasic::Compiler::LexicalAnalyzer::CollectProcedures( 197 197 compiler.GetObjectModule().GetCurrentSource(), -
trunk/ab5.0/abdev/compiler_x86/NumOpe.cpp
r523 r536 430 430 431 431 if(lstrcmpi(termFull,"This")==0 && isProcedureCallOnly == false ){ 432 if( compiler.pCompilingClass == NULL)432 if( !compiler.IsCompilingClass() ) 433 433 { 434 434 compiler.errorMessenger.Output(142,NULL,cp); … … 437 437 438 438 //Thisオブジェクト 439 resultType.SetType( DEF_OBJECT, compiler.pCompilingClass);439 resultType.SetType( DEF_OBJECT, &compiler.GetCompilingClass() ); 440 440 441 441 SetThisPtrToReg( useReg );
Note:
See TracChangeset
for help on using the changeset viewer.