Changeset 265 in dev for trunk/abdev/BasicCompiler32/MakePeHdr.cpp
- Timestamp:
- Aug 6, 2007, 11:44:42 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/MakePeHdr.cpp
r263 r265 146 146 ////////////////// 147 147 // データテーブル 148 compiler. objectModule.dataTable.Clear();148 compiler.GetObjectModule().dataTable.Clear(); 149 149 if(bDebugCompile){ 150 compiler. objectModule.dataTable.Add( (long)0x00000002 );150 compiler.GetObjectModule().dataTable.Add( (long)0x00000002 ); 151 151 } 152 152 … … 172 172 173 173 //関数ポインタ情報を初期化 174 compiler. objectModule.meta.GetProcPointers().clear();174 compiler.GetObjectModule().meta.GetProcPointers().clear(); 175 175 176 176 // 名前空間情報を取得 177 177 NamespaceSupporter::CollectNamespaces( 178 178 Smoothie::Lexical::source.GetBuffer(), 179 compiler. objectModule.meta.GetNamespaces()179 compiler.GetObjectModule().meta.GetNamespaces() 180 180 ); 181 181 … … 183 183 // CollectProcedures関数の中で参照されるオブジェクト名を事前に取得する。 184 184 // ※オブジェクトの内容までは取得しない 185 compiler. objectModule.meta.GetClasses().CollectClassesForNameOnly( Smoothie::Lexical::source );185 compiler.GetObjectModule().meta.GetClasses().CollectClassesForNameOnly( Smoothie::Lexical::source ); 186 186 187 187 //TypeDef情報を初期化 188 compiler. objectModule.meta.GetTypeDefs().Init();188 compiler.GetObjectModule().meta.GetTypeDefs().Init(); 189 189 190 190 //定数情報を取得 … … 195 195 CollectProcedures( 196 196 Smoothie::Lexical::source, 197 compiler. objectModule.meta.GetUserProcs(),198 compiler. objectModule.meta.GetDllProcs()197 compiler.GetObjectModule().meta.GetUserProcs(), 198 compiler.GetObjectModule().meta.GetDllProcs() 199 199 ); 200 200 201 201 // クラス情報を取得(※注 - CollectProceduresの後に呼び出す) 202 compiler. objectModule.meta.GetClasses().GetAllClassInfo();202 compiler.GetObjectModule().meta.GetClasses().GetAllClassInfo(); 203 203 204 204 // サブルーチン(ユーザー定義、DLL関数)のイテレータの準備 205 compiler. objectModule.meta.GetUserProcs().Iterator_Init();206 compiler. objectModule.meta.GetDllProcs().Iterator_Init();205 compiler.GetObjectModule().meta.GetUserProcs().Iterator_Init(); 206 compiler.GetObjectModule().meta.GetDllProcs().Iterator_Init(); 207 207 208 208 /* 209 if( !compiler. objectModule.WriteXml( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.xml" ) )209 if( !compiler.GetObjectModule().WriteXml( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.xml" ) ) 210 210 { 211 211 MessageBox(0,"XML書き込みに失敗","test",0); … … 217 217 } 218 218 219 if( !compiler. objectModule.meta.WriteBinary( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )219 if( !compiler.GetObjectModule().meta.WriteBinary( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) ) 220 220 { 221 221 MessageBox(0,"バイナリ書き込みに失敗","test",0); … … 226 226 MessageBox(0,"バイナリ読み込みに失敗","test",0); 227 227 } 228 if( !compiler. objectModule.meta.WriteText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )228 if( !compiler.GetObjectModule().meta.WriteText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) ) 229 229 { 230 230 MessageBox(0,"バイナリ書き込みに失敗","test",0); … … 431 431 432 432 // コード生成対象を選択 433 compiler.codeGenerator.Select( compiler. objectModule.globalNativeCode );433 compiler.codeGenerator.Select( compiler.GetObjectModule().globalNativeCode ); 434 434 435 435 trace_for_sourcecodestep( "★★★ グローバル領域のコンパイルを開始" ); … … 456 456 457 457 //クラスに属する静的メンバを定義 458 compiler. objectModule.meta.GetClasses().InitStaticMember();458 compiler.GetObjectModule().meta.GetClasses().InitStaticMember(); 459 459 460 460 //グローバル実行領域をコンパイル開始 … … 542 542 543 543 vector<ObjectModule *> masterObjectModules; 544 masterObjectModules.push_back( &compiler. objectModule);544 masterObjectModules.push_back( &compiler.GetObjectModule() ); 545 545 compiler.linker.Link( masterObjectModules ); 546 547 oldSourceLines = compiler.linker.GetNativeCode().GetSourceLines(); 546 548 547 549 … … 549 551 int t,t2; 550 552 t=GetTickCount(); 551 if( !compiler. objectModule.WriteText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.xml" ) )553 if( !compiler.GetObjectModule().WriteText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.xml" ) ) 552 554 { 553 555 MessageBox(0,"XML書き込みに失敗","test",0); 554 556 } 555 if( !compiler. objectModule.ReadText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.xml" ) )557 if( !compiler.GetObjectModule().ReadText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.xml" ) ) 556 558 { 557 559 MessageBox(0,"XML読み込みに失敗","test",0); … … 563 565 MessageBox(0,s,"test",0); 564 566 565 if( !compiler. objectModule.meta.WriteBinary( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )567 if( !compiler.GetObjectModule().meta.WriteBinary( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) ) 566 568 { 567 569 MessageBox(0,"バイナリ書き込みに失敗","test",0); … … 572 574 MessageBox(0,"バイナリ読み込みに失敗","test",0); 573 575 } 574 if( !compiler. objectModule.meta.WriteText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) )576 if( !compiler.GetObjectModule().meta.WriteText( Jenga::Common::Environment::GetAppDir() + "\\objectModule_test.dat" ) ) 575 577 { 576 578 MessageBox(0,"バイナリ書き込みに失敗","test",0); … … 594 596 // 使用するDLL関数のチェック 595 597 //////////////////////////////// 596 compiler. objectModule.meta.GetDllProcs().Iterator_Reset();597 while( compiler. objectModule.meta.GetDllProcs().Iterator_HasNext() )598 compiler.GetObjectModule().meta.GetDllProcs().Iterator_Reset(); 599 while( compiler.GetObjectModule().meta.GetDllProcs().Iterator_HasNext() ) 598 600 { 599 const DllProc *pDllProc = compiler. objectModule.meta.GetDllProcs().Iterator_GetNext();601 const DllProc *pDllProc = compiler.GetObjectModule().meta.GetDllProcs().Iterator_GetNext(); 600 602 601 603 if( !pDllProc->IsUsing() ){ … … 667 669 //辞書順にサーチ 668 670 temporary[0]=0; 669 compiler. objectModule.meta.GetUserProcs().Iterator_Reset();670 while( compiler. objectModule.meta.GetUserProcs().Iterator_HasNext() )671 compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset(); 672 while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() ) 671 673 { 672 pUserProc = compiler. objectModule.meta.GetUserProcs().Iterator_GetNext();674 pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext(); 673 675 if(pUserProc->IsExport()){ 674 676 if(temporary[0]=='\0'){ … … 693 695 694 696 if( pUserProc->GetName() == "DllMain" ){ 697 // TODO: 未完成 695 698 DllMain_EntryPoint=pUserProc->_beginOpAddressOld; 696 699 } … … 757 760 int ImportDllNum=0; 758 761 759 compiler. objectModule.meta.GetDllProcs().Iterator_Reset();760 while( compiler. objectModule.meta.GetDllProcs().Iterator_HasNext() )762 compiler.GetObjectModule().meta.GetDllProcs().Iterator_Reset(); 763 while( compiler.GetObjectModule().meta.GetDllProcs().Iterator_HasNext() ) 761 764 { 762 const DllProc *pDllProc = compiler. objectModule.meta.GetDllProcs().Iterator_GetNext();765 const DllProc *pDllProc = compiler.GetObjectModule().meta.GetDllProcs().Iterator_GetNext(); 763 766 764 767 if( !pDllProc->IsUsing() ){ … … 797 800 pImportTable[i].Name=i3+i*0x10; 798 801 799 compiler. objectModule.meta.GetDllProcs().Iterator_Reset();800 while( compiler. objectModule.meta.GetDllProcs().Iterator_HasNext() )802 compiler.GetObjectModule().meta.GetDllProcs().Iterator_Reset(); 803 while( compiler.GetObjectModule().meta.GetDllProcs().Iterator_HasNext() ) 801 804 { 802 const DllProc *pDllProc = compiler. objectModule.meta.GetDllProcs().Iterator_GetNext();805 const DllProc *pDllProc = compiler.GetObjectModule().meta.GetDllProcs().Iterator_GetNext(); 803 806 804 807 if( !pDllProc->IsUsing() ){ … … 826 829 i3+=ImportDllNum*0x10; 827 830 for(i=0,i5=0;i<ImportDllNum;i++){ 828 compiler. objectModule.meta.GetDllProcs().Iterator_Reset();829 while( compiler. objectModule.meta.GetDllProcs().Iterator_HasNext() )831 compiler.GetObjectModule().meta.GetDllProcs().Iterator_Reset(); 832 while( compiler.GetObjectModule().meta.GetDllProcs().Iterator_HasNext() ) 830 833 { 831 DllProc *pDllProc = compiler. objectModule.meta.GetDllProcs().Iterator_GetNext();834 DllProc *pDllProc = compiler.GetObjectModule().meta.GetDllProcs().Iterator_GetNext(); 832 835 833 836 if( !pDllProc->IsUsing() ){ … … 872 875 //(デバッグ情報で利用される) 873 876 extern int AllInitGlobalVarSize; 874 BOOST_FOREACH( Variable *pVar, compiler. objectModule.meta.GetGlobalVars() ){877 BOOST_FOREACH( Variable *pVar, compiler.GetObjectModule().meta.GetGlobalVars() ){ 875 878 if(pVar->GetOffsetAddress()&0x80000000){ 876 879 pVar->SetOffsetAddress( (pVar->GetOffsetAddress()&0x7FFFFFFF)+AllInitGlobalVarSize ); … … 883 886 // デバッグセクションを生成 884 887 //////////////////////////////////// 885 886 //機械語コードとBasicコードの関係を整理887 extern SourceLines oldSourceLines;888 int MinObp,MaxObp;889 SourceLines tempSourceLines;890 MaxObp=0;891 while(1){892 for(i3=0,MinObp=0x0FFFFFFF;i3<(int)oldSourceLines.size();i3++){893 if(oldSourceLines[i3].GetNativeCodePos()<MinObp&&MaxObp<oldSourceLines[i3].GetNativeCodePos()){894 MinObp=oldSourceLines[i3].GetNativeCodePos();895 i4=i3;896 }897 }898 if(MinObp==0x0FFFFFFF) break;899 tempSourceLines.push_back( oldSourceLines[i4] );900 MaxObp=tempSourceLines.back().GetNativeCodePos();901 }902 oldSourceLines = tempSourceLines;903 888 904 889 //デバッグセクションを生成 … … 946 931 947 932 //データセクションのファイル上のサイズ 948 if(compiler. objectModule.dataTable.GetSize()%FILE_ALIGNMENT) FileSize_DataSection=compiler.objectModule.dataTable.GetSize()+(FILE_ALIGNMENT-compiler.objectModule.dataTable.GetSize()%FILE_ALIGNMENT);949 else FileSize_DataSection=compiler. objectModule.dataTable.GetSize();933 if(compiler.GetObjectModule().dataTable.GetSize()%FILE_ALIGNMENT) FileSize_DataSection=compiler.GetObjectModule().dataTable.GetSize()+(FILE_ALIGNMENT-compiler.GetObjectModule().dataTable.GetSize()%FILE_ALIGNMENT); 934 else FileSize_DataSection=compiler.GetObjectModule().dataTable.GetSize(); 950 935 if(FileSize_DataSection) bUse_DataSection=1; 951 936 else bUse_DataSection=0; … … 1109 1094 HintSize; //ヒント名(関数名)テーブル 1110 1095 1111 compiler. objectModule.meta.GetDllProcs().Iterator_Reset();1112 while( compiler. objectModule.meta.GetDllProcs().Iterator_HasNext() )1096 compiler.GetObjectModule().meta.GetDllProcs().Iterator_Reset(); 1097 while( compiler.GetObjectModule().meta.GetDllProcs().Iterator_HasNext() ) 1113 1098 { 1114 const DllProc *pDllProc = compiler. objectModule.meta.GetDllProcs().Iterator_GetNext();1099 const DllProc *pDllProc = compiler.GetObjectModule().meta.GetDllProcs().Iterator_GetNext(); 1115 1100 1116 1101 if( !pDllProc->IsUsing() ){ … … 1130 1115 //////////////////////////////////////// 1131 1116 //仮想関数データテーブルスケジュール 1132 compiler. objectModule.meta.GetClasses().ActionVtblSchedule(ImageBase,MemPos_CodeSection);1117 compiler.GetObjectModule().meta.GetClasses().ActionVtblSchedule(ImageBase,MemPos_CodeSection); 1133 1118 1134 1119 … … 1215 1200 if( obp == compiler.linker.GetNativeCode().GetSize() ) 1216 1201 { 1217 //memcpy( OpBuffer, compiler.linker.GetNativeCode().GetCodeBuffer(), compiler.linker.GetNativeCode().GetSize() );1202 memcpy( OpBuffer, compiler.linker.GetNativeCode().GetCodeBuffer(), compiler.linker.GetNativeCode().GetSize() ); 1218 1203 } 1219 1204 else … … 1681 1666 if(bUse_DataSection){ 1682 1667 //データ テーブル 1683 WriteFile(hFile,compiler. objectModule.dataTable.GetPtr(),compiler.objectModule.dataTable.GetSize(),(DWORD *)&i2,NULL);1668 WriteFile(hFile,compiler.GetObjectModule().dataTable.GetPtr(),compiler.GetObjectModule().dataTable.GetSize(),(DWORD *)&i2,NULL); 1684 1669 i+=i2; 1685 1670 } … … 1793 1778 1794 1779 //クラスに関するメモリを解放 1795 compiler. objectModule.meta.GetClasses().Clear();1780 compiler.GetObjectModule().meta.GetClasses().Clear(); 1796 1781 }
Note:
See TracChangeset
for help on using the changeset viewer.