Changeset 584 in dev for trunk/ab5.0/abdev/compiler_x64/Compile_Var.cpp
- Timestamp:
- May 10, 2008, 12:19:15 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ab5.0/abdev/compiler_x64/Compile_Var.cpp
r514 r584 209 209 //////////////////////////// 210 210 211 const CMember *pMember = objClass.FindDynamicMember( VarName );211 const Member *pMember = objClass.FindDynamicMember( VarName ); 212 212 if( !pMember ) 213 213 { … … 220 220 221 221 //アクセシビリティをチェック 222 if( &objClass==compiler.pCompilingClass){222 if( compiler.IsCompilingClass() && &objClass == &compiler.GetCompilingClass() ){ 223 223 //同一クラスオブジェクトの場合はプライベートアクセスを容認する 224 224 if(pMember->IsNoneAccess()){ … … 412 412 413 413 414 if( UserProc::IsLocalAreaCompiling() ){414 if( compiler.IsLocalAreaCompiling() ){ 415 415 ////////////////// 416 416 // ローカル変数 417 417 ////////////////// 418 418 419 const Variable *pVar = UserProc::CompilingUserProc().GetLocalVars().BackSearch( LexicalAnalyzer::FullNameToSymbol( VarName ) ); 419 const Variable *pVar = compiler.GetCompilingUserProc().GetLocalVars().BackSearch( 420 LexicalAnalyzer::FullNameToSymbol( VarName ), 421 compiler.codeGenerator.lexicalScopes.GetNowLevel() 422 ); 420 423 if( pVar ){ 421 424 //ポインタ変数の場合 … … 470 473 } 471 474 472 473 if(compiler.pCompilingClass){ 475 if( compiler.IsCompilingClass() ){ 474 476 ////////////////////// 475 477 // クラスメンバの参照 … … 482 484 pRelativeVar->dwKind=VAR_DIRECTMEM; 483 485 484 resultType.SetType( DEF_OBJECT, compiler.pCompilingClass);486 resultType.SetType( DEF_OBJECT, &compiler.GetCompilingClass() ); 485 487 return true; 486 488 } … … 494 496 //クラス内の動的メンバを参照するとき(通常) 495 497 496 if( !compiler. pCompilingClass->HasDynamicMember( VarName ) )498 if( !compiler.GetCompilingClass().HasDynamicMember( VarName ) ) 497 499 { 498 500 goto NonClassMember; … … 502 504 //Const修飾子のメソッド内でメンバ書き込みアクセスが発生したとき 503 505 //(コンストラクタ、デストラクタ内を除く) 504 const CMethod *pMethod = compiler.GetObjectModule().meta.GetClasses().GetNowCompilingMethodInfo();506 const CMethod *pMethod = &compiler.GetCompilingUserProc().GetMethod(); 505 507 if( isWriteAccess && 506 508 pMethod->IsConst() && 507 compiler. pCompilingClass->IsCompilingConstructor() == false &&508 compiler. pCompilingClass->IsCompilingDestructor() == false509 compiler.GetCompilingClass().IsCompilingConstructor() == false && 510 compiler.GetCompilingClass().IsCompilingDestructor() == false 509 511 ){ 510 512 compiler.errorMessenger.Output(131, NULL, cp ); … … 518 520 isErrorEnabled, 519 521 isWriteAccess, 520 Type( DEF_OBJECT, *compiler.pCompilingClass),522 Type( DEF_OBJECT, compiler.GetCompilingClass() ), 521 523 variable, 522 524 pRelativeVar, … … 536 538 537 539 char temporary[VN_SIZE]; 538 if( UserProc::IsLocalAreaCompiling() ){540 if( compiler.IsLocalAreaCompiling() ){ 539 541 GetNowStaticVarFullName(VarName,temporary); 540 542 … … 578 580 } 579 581 580 if( compiler.pCompilingClass){582 if( compiler.IsCompilingClass() ){ 581 583 //自身のクラスから静的メンバを参照する場合 582 584 char temp2[VN_SIZE]; 583 sprintf(temp2,"%s.%s",compiler. pCompilingClass->GetName().c_str(),VarName);585 sprintf(temp2,"%s.%s",compiler.GetCompilingClass().GetName().c_str(),VarName); 584 586 pVar = compiler.GetObjectModule().meta.GetGlobalVars().Find( LexicalAnalyzer::FullNameToSymbol( temp2 ) ); 585 587 if( pVar ){ … … 592 594 ///////////////////// 593 595 594 pVar = compiler.GetObjectModule().meta.GetGlobalVars().BackSearch( LexicalAnalyzer::FullNameToSymbol( VarName ) ); 596 pVar = compiler.GetObjectModule().meta.GetGlobalVars().BackSearch( 597 LexicalAnalyzer::FullNameToSymbol( VarName ), 598 compiler.codeGenerator.lexicalScopes.GetNowLevel() 599 ); 595 600 if( pVar ){ 596 601 goto GlobalOk; … … 806 811 807 812 int i = 0; 808 BOOST_FOREACH( CMember *pMember, objClass.GetDynamicMembers() ){813 BOOST_FOREACH( Member *pMember, objClass.GetDynamicMembers() ){ 809 814 if(InitBuf[i]=='\0'){ 810 815 compiler.errorMessenger.Output(41,0,cp); … … 968 973 969 974 int i = 0; 970 BOOST_FOREACH( CMember *pMember, objClass.GetDynamicMembers() ){975 BOOST_FOREACH( Member *pMember, objClass.GetDynamicMembers() ){ 971 976 if(InitBuf[i]=='\0'){ 972 977 compiler.errorMessenger.Output(41,0,cp); … … 1100 1105 void dim( char *VarName, const Subscripts &subscripts, const Type &type,const char *InitBuf,const char *ConstractParameter,DWORD dwFlags) 1101 1106 { 1102 if( UserProc::IsGlobalAreaCompiling() ){1107 if( compiler.IsGlobalAreaCompiling() ){ 1103 1108 ///////////////////////// 1104 1109 // グローバル変数 … … 1112 1117 ///////////////// 1113 1118 1114 if( UserProc::CompilingUserProc().GetLocalVars().DuplicateCheck( LexicalAnalyzer::FullNameToSymbol( VarName) ) ){1119 if( compiler.GetCompilingUserProc().GetLocalVars().DuplicateCheck( LexicalAnalyzer::FullNameToSymbol( VarName ), compiler.codeGenerator.lexicalScopes.GetNowLevel() ) ){ 1115 1120 //2重定義のエラー 1116 1121 compiler.errorMessenger.Output(15,VarName,cp); … … 1120 1125 bool isConst = ( dwFlags & DIMFLAG_CONST ) ? true:false; 1121 1126 1122 Variable *pVar = new Variable( VarName, type, isConst, false, ConstractParameter, false ); 1127 Variable *pVar = new Variable( 1128 ActiveBasic::Compiler::LexicalAnalyzer::FullNameToSymbol( VarName ), 1129 type, 1130 isConst, 1131 false, 1132 ConstractParameter, 1133 false 1134 ); 1123 1135 1124 1136 if( subscripts.size() > 0 ){ … … 1136 1148 1137 1149 // 変数を追加 1138 UserProc::CompilingUserProc().GetLocalVars().push_back( pVar );1150 compiler.GetCompilingUserProc().GetLocalVars().push_back( pVar ); 1139 1151 1140 1152 //アラインメントを考慮 … … 1153 1165 // 呼び出し側のオフセットズレを考慮する 1154 1166 1155 if( 0 == ( UserProc::CompilingUserProc().RealParams().GetMemorySize() + PTR_SIZE/*ret分*/ ) % alignment ){1167 if( 0 == ( compiler.GetCompilingUserProc().RealParams().GetMemorySize() + PTR_SIZE /* ret分 */ ) % alignment ){ 1156 1168 AllLocalVarSize += PTR_SIZE; 1157 1169 }
Note:
See TracChangeset
for help on using the changeset viewer.