Changeset 584 in dev for trunk/ab5.0/abdev/compiler_x64
- Timestamp:
- May 10, 2008, 12:19:15 PM (17 years ago)
- Location:
- trunk/ab5.0/abdev/compiler_x64
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ab5.0/abdev/compiler_x64/CodeGenerator.cpp
r468 r584 128 128 } 129 129 130 pNativeCode->PutEx( disp, scheduleType );130 this->PutWithSchedule( disp, scheduleType ); 131 131 } 132 132 … … 182 182 pPertialSchedule = pertialSchedules.back(); 183 183 } 184 pNativeCode->PutEx( i32data, scheduleType );184 this->PutWithSchedule( i32data, scheduleType ); 185 185 186 186 return pPertialSchedule; … … 264 264 pPertialSchedule = pertialSchedules.back(); 265 265 } 266 pNativeCode->PutEx( offset, scheduleType );266 this->PutWithSchedule( offset, scheduleType ); 267 267 } 268 268 else{ … … 337 337 pPertialSchedule = pertialSchedules.back(); 338 338 } 339 pNativeCode->PutEx( offset, scheduleType );339 this->PutWithSchedule( offset, scheduleType ); 340 340 } 341 341 else{ … … 662 662 pPertialSchedule = pertialSchedules.back(); 663 663 } 664 pNativeCode->PutEx( offset, scheduleType );664 this->PutWithSchedule( offset, scheduleType ); 665 665 666 666 return pPertialSchedule; -
trunk/ab5.0/abdev/compiler_x64/Compile_Calc.cpp
r528 r584 93 93 } 94 94 else{ 95 if( compiler.GetObjectModule().meta.GetGlobalConsts().IsExist (variable)96 || compiler.GetObjectModule().meta.GetGlobalConstMacros().IsExist (variable) )95 if( compiler.GetObjectModule().meta.GetGlobalConsts().IsExistDuplicationKeyName(variable) 96 || compiler.GetObjectModule().meta.GetGlobalConstMacros().IsExistDuplicationKeyName(variable) ) 97 97 { 98 98 //定数リストに該当したとき -
trunk/ab5.0/abdev/compiler_x64/Compile_CallProc.cpp
r514 r584 121 121 { 122 122 //クラスメンバ関数内から基底クラスの呼び出し 123 pobj_c=&compiler. pCompilingClass->GetSuperClass();123 pobj_c=&compiler.GetCompilingClass().GetSuperClass(); 124 124 125 125 isFixedClass = true; … … 140 140 if( !pobj_c ) 141 141 { 142 pobj_c =compiler.GetObjectModule().meta.GetClasses().Find(ObjectName);142 pobj_c = compiler.GetObjectModule().meta.FindClassSupportedTypeDef( ObjectName ); 143 143 if( pobj_c ){ 144 144 isStatic = true; … … 155 155 156 156 //New演算子によるコンストラクタ呼び出し 157 pobj_c =pUserProc->GetParentClassPtr();157 pobj_c = pUserProc->GetParentClassPtr(); 158 158 } 159 159 else{ 160 160 //クラスメンバ関数内から同一クラスのメンバ関数の呼び出し 161 pobj_c =compiler.pCompilingClass;161 pobj_c = &compiler.GetCompilingClass(); 162 162 } 163 163 } … … 188 188 if(ObjectName[0]){ 189 189 //外部からの呼び出し 190 if(pobj_c==compiler.pCompilingClass){ 190 if( compiler.IsCompilingClass() && pobj_c == &compiler.GetCompilingClass() ) 191 { 191 192 //同一クラスオブジェクトの場合はプライベートアクセスを容認する 192 if( pMethod->IsNoneAccess() ){ 193 if( pMethod->IsNoneAccess() ) 194 { 193 195 compiler.errorMessenger.Output(109,pUserProc->GetName(),cp); 194 196 return false; 195 197 } 196 198 } 197 else{ 199 else 200 { 198 201 if( pMethod->IsPrivate() 199 || pMethod->IsNoneAccess() ){ 202 || pMethod->IsNoneAccess() ) 203 { 200 204 compiler.errorMessenger.Output(109,pUserProc->GetName(),cp); 201 205 return false; 202 206 } 203 if( !pMethod->GetUserProc().GetParentClass().IsEqualsOrSubClass( pobj_c ) && pMethod->IsProtected() ){ 207 if( !pMethod->GetUserProc().GetParentClass().IsEqualsOrSubClass( pobj_c ) && pMethod->IsProtected() ) 208 { 204 209 compiler.errorMessenger.Output(110,pUserProc->GetName(),cp); 205 210 return false; -
trunk/ab5.0/abdev/compiler_x64/Compile_Func.cpp
r528 r584 120 120 SetThisPtrToReg(REG_RCX); 121 121 122 pobj_c =compiler.pCompilingClass;122 pobj_c = &compiler.GetCompilingClass(); 123 123 } 124 124 … … 295 295 { 296 296 // 左辺でデリゲートを要求されているとき 297 const Delegate *pTempDelegate = & baseType.GetClass().GetDelegate();297 const Delegate *pTempDelegate = &compiler.GetObjectModule().meta.ToDelegate( baseType.GetClass() ); 298 298 pBaseParams = &pTempDelegate->Params(); 299 299 pBaseReturnType = &pTempDelegate->ReturnType(); … … 474 474 } 475 475 476 Opcode_CallDelegate( compiler. pCompilingClass->GetDelegate(), methodPtrParamStr, objPtrValueStr, paramsStr + i );477 } 478 479 resultType = UserProc::CompilingUserProc().ReturnType();476 Opcode_CallDelegate( compiler.GetObjectModule().meta.ToDelegate( compiler.GetCompilingClass() ), methodPtrParamStr, objPtrValueStr, paramsStr + i ); 477 } 478 479 resultType = compiler.GetCompilingUserProc().ReturnType(); 480 480 } 481 481 -
trunk/ab5.0/abdev/compiler_x64/Compile_ProcOp.cpp
r468 r584 27 27 } 28 28 29 const UserProc *pBackUserProc = &UserProc::CompilingUserProc(); 30 UserProc::CompileStartForGlobalArea(); 29 const UserProc *pBackUserProc; 30 pBackUserProc = &compiler.GetCompilingUserProc(); 31 compiler.StartGlobalAreaCompile(); 31 32 32 33 int BackCp; … … 51 52 52 53 //クラスに属する静的メンバを定義 53 compiler.GetObjectModule().meta.GetClasses().InitStaticMember(); 54 ActiveBasic::Compiler::ProcedureGenerator::Generate_InitStaticMember( 55 compiler.GetObjectModule().meta.GetClasses() 56 ); 54 57 55 58 GetGlobalDataForDll(); … … 61 64 compiler.codeGenerator.opfix( pStackFramePertialSchedule, pobj_sf->GetFrameSize(0) ); 62 65 63 UserProc::CompileStartForUserProc( pBackUserProc );66 compiler.SetCompilingUserProc( pBackUserProc ); 64 67 cp=BackCp; 65 68 … … 103 106 compiler.codeGenerator.op_sub_rsp(0x8); 104 107 105 106 const UserProc *pBackUserProc = &UserProc::CompilingUserProc();107 UserProc::CompileStartForGlobalArea();108 const UserProc *pBackUserProc; 109 pBackUserProc = &compiler.GetCompilingUserProc(); 110 compiler.StartGlobalAreaCompile(); 108 111 109 112 compiler.codeGenerator.lexicalScopes.CallDestructorsOfScopeEnd(); 110 113 111 UserProc::CompileStartForUserProc( pBackUserProc );114 compiler.SetCompilingUserProc( pBackUserProc ); 112 115 113 116 … … 127 130 && userProc.GetParentClass().GetName() == "_System_TypeBase" ) 128 131 { 129 compiler.GetObjectModule().meta.GetClasses().Compile_System_InitializeUserTypes(); 132 ActiveBasic::Compiler::ProcedureGenerator::Generate_System_InitializeUserTypes( 133 compiler.GetObjectModule().meta.GetClasses() 134 ); 130 135 } 131 136 else if( userProc.GetName() == "InitializeUserTypesForBaseType" … … 133 138 && userProc.GetParentClass().GetName() == "_System_TypeBase" ) 134 139 { 135 compiler.GetObjectModule().meta.GetClasses().Compile_System_InitializeUserTypesForBaseType(); 140 ActiveBasic::Compiler::ProcedureGenerator::Generate_System_InitializeUserTypesForBaseType( 141 compiler.GetObjectModule().meta.GetClasses() 142 ); 136 143 } 137 144 else if( userProc.GetName() == "RegisterGlobalRoots" … … 148 155 UserProc::pGlobalProc = &userProc; 149 156 150 const UserProc *pBackUserProc = & UserProc::CompilingUserProc();151 UserProc::CompileStartForGlobalArea();157 const UserProc *pBackUserProc = &compiler.GetCompilingUserProc(); 158 compiler.StartGlobalAreaCompile(); 152 159 153 160 int BackCp = cp; … … 155 162 156 163 //クラスに属する静的メンバを定義 157 compiler.GetObjectModule().meta.GetClasses().InitStaticMember(); 164 ActiveBasic::Compiler::ProcedureGenerator::Generate_InitStaticMember( 165 compiler.GetObjectModule().meta.GetClasses() 166 ); 158 167 159 168 //グローバル実行領域をコンパイル開始 … … 173 182 } 174 183 175 UserProc::CompileStartForUserProc( pBackUserProc );184 compiler.SetCompilingUserProc( pBackUserProc ); 176 185 cp=BackCp; 177 186 } … … 227 236 else bDebugSupportProc=0; 228 237 229 //コンパイル中の関数が属するクラス 230 compiler.pCompilingClass=pUserProc->GetParentClassPtr(); 231 232 //コンパイルスタートをクラス管理クラスに追加 233 compiler.GetObjectModule().meta.GetClasses().StartCompile( pUserProc ); 234 235 //コンパイル中の関数 236 UserProc::CompileStartForUserProc( pUserProc ); 237 238 // コンパイル中の関数が属する名前空間 239 compiler.GetNamespaceSupporter().SetLivingNamespaceScopes( pUserProc->GetNamespaceScopes() ); 240 241 // コンパイル中の関数でImportsされている名前空間 242 compiler.GetNamespaceSupporter().SetImportedNamespaces( pUserProc->GetImportedNamespaces() ); 243 244 // コード生成対象を選択 245 compiler.codeGenerator.Select( (const_cast<UserProc *>(pUserProc))->GetNativeCode() ); 238 compiler.StartProcedureCompile( pUserProc ); 246 239 247 240 if(pUserProc->IsSystem()){ … … 290 283 WithInfo.num=0; 291 284 292 //重複エラー情報管理のメモリを確保293 extern char **SynonymErrorWords;294 extern int SynonymErrorNum;295 SynonymErrorNum=0;296 SynonymErrorWords=(char **)HeapAlloc(hHeap,0,1);297 298 285 //Continueアドレスを初期化 299 286 compiler.codeGenerator.ClearContinueArea(); … … 315 302 Parameter ¶m = *pUserProc->RealParams()[i3]; 316 303 317 Variable *pVar = new Variable( param.GetVarName(), param, false, param.IsRef(), "", false ); 304 Variable *pVar = new Variable( 305 ActiveBasic::Compiler::LexicalAnalyzer::FullNameToSymbol( param.GetVarName().c_str() ), 306 param, 307 false, 308 param.IsRef(), 309 "", 310 false 311 ); 318 312 319 313 if( param.IsArray() ){ … … 463 457 } 464 458 465 if( compiler.pCompilingClass){466 if( pUserProc->GetName() == compiler. pCompilingClass->GetName() ){459 if( compiler.IsCompilingClass() ){ 460 if( pUserProc->GetName() == compiler.GetCompilingClass().GetName() ){ 467 461 //////////////////////////////////// 468 462 // コンストラクタをコンパイルするとき … … 470 464 471 465 //コンストラクタのコンパイル開始を通知 472 compiler. pCompilingClass->NotifyStartConstructorCompile();466 compiler.GetCompilingClass().NotifyStartConstructorCompile(); 473 467 474 468 //基底クラスかどうかの識別 475 469 //(継承元がインターフェイスの場合も基底クラスと見なす) 476 470 BOOL bThisIsSuperClass; 477 if( !compiler. pCompilingClass->HasSuperClass() ) bThisIsSuperClass=1;478 else if( compiler. pCompilingClass->GetSuperClass().GetConstructorMethod() == NULL ){471 if( !compiler.GetCompilingClass().HasSuperClass() ) bThisIsSuperClass=1; 472 else if( compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod() == NULL ){ 479 473 //インターフェイスを継承したときはコンストラクタを持たない 480 474 bThisIsSuperClass=1; … … 495 489 temporary[i4]=basbuf[i3]; 496 490 } 497 if( compiler. pCompilingClass->GetSuperClass().GetName() == temporary ){491 if( compiler.GetCompilingClass().GetSuperClass().GetName() == temporary ){ 498 492 //基底クラスのコンストラクタを呼び出す 499 493 cp=i3; … … 512 506 Type dummyType; 513 507 CallProc( PROC_DEFAULT 514 , &compiler. pCompilingClass->GetSuperClass().GetConstructorMethod()->GetUserProc()515 , compiler. pCompilingClass->GetSuperClass().GetConstructorMethod()->GetUserProc().GetName().c_str()508 , &compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod()->GetUserProc() 509 , compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod()->GetUserProc().GetName().c_str() 516 510 , temporary 517 511 , Type() // baseTypeはなし … … 522 516 //基底クラスのコンストラクタを暗黙的に呼び出す 523 517 Opcode_CallProc("", 524 &compiler. pCompilingClass->GetSuperClass().GetConstructorMethod()->GetUserProc(),518 &compiler.GetCompilingClass().GetSuperClass().GetConstructorMethod()->GetUserProc(), 525 519 0, 526 520 ""); … … 532 526 533 527 //デストラクタのコンパイル開始を通知 534 compiler. pCompilingClass->NotifyStartDestructorCompile();528 compiler.GetCompilingClass().NotifyStartDestructorCompile(); 535 529 } 536 530 } … … 558 552 ////////////////////////////////////////// 559 553 560 if( compiler. pCompilingClass){561 562 if( compiler. pCompilingClass->IsCompilingConstructor() ){554 if( compiler.IsCompilingClass() ){ 555 556 if( compiler.GetCompilingClass().IsCompilingConstructor() ){ 563 557 // コンストラクタをコンパイルしていたとき 564 558 565 559 // コンストラクタのコンパイルが完了したことを通知 566 compiler. pCompilingClass->NotifyFinishConstructorCompile();560 compiler.GetCompilingClass().NotifyFinishConstructorCompile(); 567 561 } 568 562 else if( pUserProc->IsDestructor() ){ … … 572 566 573 567 // デストラクタのコンパイルが完了したことを通知 574 compiler. pCompilingClass->NotifyFinishDestructorCompile();575 576 if( compiler. pCompilingClass->HasSuperClass() ){568 compiler.GetCompilingClass().NotifyFinishDestructorCompile(); 569 570 if( compiler.GetCompilingClass().HasSuperClass() ){ 577 571 /* サブクラスのデストラクタをコンパイルしているときは、 578 572 基底クラスのデストラクタを呼び出す */ 579 573 580 const CMethod *method = compiler. pCompilingClass->GetSuperClass().GetDestructorMethod();574 const CMethod *method = compiler.GetCompilingClass().GetSuperClass().GetDestructorMethod(); 581 575 if( method ){ 582 576 Opcode_CallProc("", … … 705 699 706 700 707 //重複エラー情報管理のメモリを解放 708 for(i3=0;i3<SynonymErrorNum;i3++) HeapDefaultFree(SynonymErrorWords[i3]); 709 HeapDefaultFree(SynonymErrorWords); 701 compiler.FinishProcedureCompile(); 702 703 704 //ローカル変数のネーム情報は後に解放する 710 705 } -
trunk/ab5.0/abdev/compiler_x64/Compile_Statement.cpp
r468 r584 640 640 641 641 void OpcodeExitSub(void){ 642 if( UserProc::IsGlobalAreaCompiling() ){642 if( compiler.IsGlobalAreaCompiling() ){ 643 643 compiler.errorMessenger.Output(12,"Exit Sub/Function",cp); 644 644 return; … … 917 917 } 918 918 void OpcodeReturn(char *Parameter){ 919 if( UserProc::IsGlobalAreaCompiling() ){919 if( compiler.IsGlobalAreaCompiling() ){ 920 920 compiler.errorMessenger.Output(62,NULL,cp); 921 921 } … … 923 923 //戻り値をセット 924 924 if(Parameter[0]){ 925 const UserProc &proc = UserProc::CompilingUserProc();925 const UserProc &proc = compiler.GetCompilingUserProc(); 926 926 927 927 const char *temp = "_System_ReturnValue"; -
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 } -
trunk/ab5.0/abdev/compiler_x64/MakePeHdr.cpp
r528 r584 119 119 120 120 121 //"メタ情報を解析中..." 122 compiler.messenger.Output( STRING_ANALYZING_META_INFO ); 123 124 121 125 ////////////////////// 122 126 // コード生成前の準備 123 127 ////////////////////// 124 128 125 //重複エラー情報管理のメモリを確保(グローバル領域コンパイル用) 126 extern char **SynonymErrorWords; 127 extern int SynonymErrorNum; 128 SynonymErrorNum=0; 129 SynonymErrorWords=(char **)HeapAlloc(hHeap,0,1); 129 // 重複エラー情報をクリア 130 compiler.errorMessenger.ClearSynonymKeyWords(); 130 131 131 132 //列挙体に関する情報を収集 132 compiler.enumInfoCollection.InitEnum(); 133 134 //列挙体からクラスコードを生成 135 char *temp; 136 temp = compiler.enumInfoCollection.GenerateSourceCode(); 137 AddSourceCode(temp); 138 HeapDefaultFree(temp); 133 { 134 ActiveBasic::Compiler::LexicalAnalyzer::CollectEnums( 135 compiler.GetObjectModule().GetCurrentSource().GetBuffer(), 136 compiler.enumInfoCollection 137 ); 138 139 // デリゲートからクラスコードを生成 140 std::string tempSource = ActiveBasic::Compiler::LexicalAnalyzer::GenerateEnumsSourceCode( 141 compiler.enumInfoCollection 142 ); 143 AddSourceCode( tempSource.c_str() ); 144 } 139 145 140 146 // 名前空間情報を取得 … … 147 153 { 148 154 ActiveBasic::Compiler::LexicalAnalyzer::CollectDelegates( 149 compiler.GetObjectModule().GetCurrentSource() ,155 compiler.GetObjectModule().GetCurrentSource().GetBuffer(), 150 156 compiler.GetObjectModule().meta.GetDelegates() 151 157 ); … … 167 173 ); 168 174 169 //TypeDef情報を初期化 170 compiler.GetObjectModule().meta.GetTypeDefs().CollectTypeDefs(); 175 //TypeDef情報を収集 176 ActiveBasic::Compiler::LexicalAnalyzer::CollectTypeDefs( 177 compiler.GetObjectModule().GetCurrentSource().GetBuffer(), 178 compiler.GetObjectModule().meta.GetTypeDefs() 179 ); 171 180 172 181 /* … … 180 189 181 190 //定数情報を取得 182 GetConstInfo(); 191 ActiveBasic::Compiler::LexicalAnalyzer::CollectConsts( 192 compiler.GetObjectModule().GetCurrentSource().GetBuffer(), 193 compiler.GetObjectModule().meta.GetGlobalConsts(), 194 compiler.GetObjectModule().meta.GetGlobalConstMacros() 195 ); 183 196 184 197 //サブルーチン(ユーザー定義、DLL関数)の識別子、アドレスを取得 185 compiler. pCompilingClass = NULL;198 compiler.SetCompilingClass( NULL ); 186 199 ActiveBasic::Compiler::LexicalAnalyzer::CollectProcedures( 187 compiler.GetObjectModule().GetCurrentSource() ,200 compiler.GetObjectModule().GetCurrentSource().GetBuffer(), 188 201 compiler.GetObjectModule().meta.GetUserProcs(), 189 202 compiler.GetObjectModule().meta.GetDllProcs() … … 320 333 321 334 335 //"コンパイル中..." 336 compiler.messenger.Output(STRING_COMPILE_COMPILING); 337 338 322 339 ////////////////////// 323 340 // グローバル実行領域 … … 325 342 326 343 cp=-1; 327 UserProc::CompileStartForGlobalArea();344 compiler.StartGlobalAreaCompile(); 328 345 329 346 if( !compiler.IsDll() ){ … … 434 451 } 435 452 436 //重複エラー情報管理のメモリを解放(グローバル領域用)437 for(i=0;i<SynonymErrorNum;i++) HeapDefaultFree(SynonymErrorWords[i]);438 HeapDefaultFree(SynonymErrorWords);439 440 453 441 454 StepCompileProgress(); … … 499 512 ///////////////////////////////////////////////////////////////// 500 513 501 compiler.GetObjectModule().meta.GetClasses().GenerateVTables(); 514 ActiveBasic::Compiler::VtblGenerator::GenerateVTablesForAllClasses( 515 compiler.GetObjectModule().meta.GetClasses() 516 ); 502 517 503 518 … … 1077 1092 //////////////////////////////////////// 1078 1093 //仮想関数データテーブルスケジュール 1079 compiler.GetObjectModule().meta.GetClasses().ActionVtblSchedule( ImageBase, MemPos_CodeSection, MemPos_DataSection ); 1094 ActiveBasic::Compiler::VtblGenerator::ActionVtblScheduleForAllClasses( 1095 compiler.GetObjectModule().meta.GetClasses(), 1096 ImageBase, 1097 MemPos_CodeSection, 1098 MemPos_DataSection 1099 ); 1080 1100 1081 1101 -
trunk/ab5.0/abdev/compiler_x64/NumOpe.cpp
r528 r584 426 426 427 427 if( pIsClassName ){ 428 if( compiler.GetObjectModule().meta. GetClasses().Find( termFull ) ){428 if( compiler.GetObjectModule().meta.FindClassSupportedTypeDef( termFull ) ){ 429 429 *pIsClassName = true; 430 430 return true; … … 442 442 443 443 if(lstrcmpi(termFull,"This")==0 && isProcedureCallOnly == false ){ 444 if( compiler.pCompilingClass == NULL)444 if( !compiler.IsCompilingClass() ) 445 445 { 446 446 compiler.errorMessenger.Output(142,NULL,cp); … … 449 449 450 450 //Thisオブジェクト 451 resultType.SetType( DEF_OBJECT, compiler.pCompilingClass);451 resultType.SetType( DEF_OBJECT, &compiler.GetCompilingClass() ); 452 452 453 453 SetThisPtrToReg( UseReg ); … … 527 527 } 528 528 529 ConstMacro *pConstMacro = compiler.GetObjectModule().meta.GetGlobalConstMacros().Find( procName ); 529 ConstMacro *pConstMacro = compiler.GetObjectModule().meta.GetGlobalConstMacros().Find( 530 ActiveBasic::Compiler::LexicalAnalyzer::FullNameToSymbol( procName ) 531 ); 530 532 if( pConstMacro ) 531 533 { 532 if( pConstMacro->GetCalcBuffer(parameter, temporary ) )534 if( ActiveBasic::Compiler::LexicalAnalyzer::ConstMacroToExpression( *pConstMacro, parameter, temporary ) ) 533 535 { 534 536 ///////////////////////// … … 1143 1145 ////////////// 1144 1146 1145 i3 = compiler.GetObjectModule().meta.GetGlobalConsts().GetBasicType(term); 1147 i3 = compiler.GetObjectModule().meta.GetGlobalConsts().GetBasicType( 1148 ActiveBasic::Compiler::LexicalAnalyzer::FullNameToSymbol( term ) 1149 ); 1146 1150 if(i3){ 1147 if( compiler.GetObjectModule().meta.GetGlobalConsts().IsStringPtr( term) ){1151 if( compiler.GetObjectModule().meta.GetGlobalConsts().IsStringPtr( ActiveBasic::Compiler::LexicalAnalyzer::FullNameToSymbol( term ) ) ){ 1148 1152 //リテラル文字列 1149 1153 … … 1166 1170 } 1167 1171 1168 double dbl = compiler.GetObjectModule().meta.GetGlobalConsts().GetDoubleData(term); 1172 double dbl = compiler.GetObjectModule().meta.GetGlobalConsts().GetDoubleData( 1173 ActiveBasic::Compiler::LexicalAnalyzer::FullNameToSymbol( term ) 1174 ); 1169 1175 memcpy(&i64data,&dbl,sizeof(double)); 1170 1176 … … 1180 1186 if(IsRealNumberType(i3)){ 1181 1187 //実数 1182 double dbl = compiler.GetObjectModule().meta.GetGlobalConsts().GetDoubleData(term); 1188 double dbl = compiler.GetObjectModule().meta.GetGlobalConsts().GetDoubleData( 1189 ActiveBasic::Compiler::LexicalAnalyzer::FullNameToSymbol( term ) 1190 ); 1183 1191 memcpy(&i64data,&dbl,sizeof(double)); 1184 1192 goto Literal; … … 1186 1194 else if(IsWholeNumberType(i3)){ 1187 1195 //整数 1188 i64data = compiler.GetObjectModule().meta.GetGlobalConsts().GetWholeData(term); 1196 i64data = compiler.GetObjectModule().meta.GetGlobalConsts().GetWholeData( 1197 ActiveBasic::Compiler::LexicalAnalyzer::FullNameToSymbol( term ) 1198 ); 1189 1199 goto Literal; 1190 1200 } -
trunk/ab5.0/abdev/compiler_x64/compiler_x64.vcproj
r529 r584 337 337 > 338 338 </File> 339 <File 340 RelativePath="..\BasicCompiler_Common\include\ProcedureGenerator.h" 341 > 342 </File> 343 <File 344 RelativePath="..\BasicCompiler_Common\include\VtblGenerator.h" 345 > 346 </File> 339 347 <Filter 340 348 Name="Language Classes" … … 1224 1232 </File> 1225 1233 <File 1234 RelativePath="..\BasicCompiler_Common\src\LexicalAnalyzer_Const.cpp" 1235 > 1236 </File> 1237 <File 1226 1238 RelativePath="..\BasicCompiler_Common\src\LexicalAnalyzer_Delegate.cpp" 1227 1239 > 1228 1240 </File> 1229 1241 <File 1242 RelativePath="..\BasicCompiler_Common\src\LexicalAnalyzer_Enum.cpp" 1243 > 1244 </File> 1245 <File 1246 RelativePath="..\BasicCompiler_Common\src\LexicalAnalyzer_Procedure.cpp" 1247 > 1248 </File> 1249 <File 1250 RelativePath="..\BasicCompiler_Common\src\LexicalAnalyzer_TypeDef.cpp" 1251 > 1252 </File> 1253 <File 1230 1254 RelativePath="..\BasicCompiler_Common\src\Linker.cpp" 1231 1255 > … … 1233 1257 <File 1234 1258 RelativePath="..\BasicCompiler_Common\src\Messenger.cpp" 1259 > 1260 </File> 1261 <File 1262 RelativePath="..\BasicCompiler_Common\src\ProcedureGenerator.cpp" 1263 > 1264 </File> 1265 <File 1266 RelativePath="..\BasicCompiler_Common\src\VtblGenerator.cpp" 1235 1267 > 1236 1268 </File> -
trunk/ab5.0/abdev/compiler_x64/stdafx.h
r529 r584 56 56 #include <Const.h> 57 57 #include <Delegate.h> 58 #include <Enum.h>59 #include <DataTable.h>60 58 #include <Exception.h> 61 59 #include <Meta.h> 62 60 61 #include <Enum.h> 63 62 #include <logger.h> 64 63 #include <Configuration.h> 65 64 #include <CodeGenerator.h> 66 65 #include <Messenger.h> 66 #include <DataTable.h> 67 67 #include <ObjectModule.h> 68 68 #include <Linker.h> … … 71 71 #include <Program.h> 72 72 #include <LexicalAnalyzer.h> 73 #include <VtblGenerator.h> 74 #include <ProcedureGenerator.h>
Note:
See TracChangeset
for help on using the changeset viewer.