Changeset 828 in dev for trunk/ab5.0/abdev/BasicCompiler_Common
- Timestamp:
- Mar 19, 2012, 1:59:48 AM (13 years ago)
- Location:
- trunk
- Files:
-
- 39 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk
-
Property svn:mergeinfo
set to
/branches/egtra merged eligible
-
Property svn:mergeinfo
set to
-
trunk/ab5.0/abdev
-
Property svn:ignore
set to
*.opensdf
*.sdf
*.suo
*.user
int
ipch
out
-
Property svn:ignore
set to
-
trunk/ab5.0/abdev/BasicCompiler_Common/BasicCompiler.cpp
r773 r828 253 253 } 254 254 255 BOOL GetFilePathDialog(HWND hwnd,char *filename,LP STR Filter,LPSTR Title,BOOL bOpen){255 BOOL GetFilePathDialog(HWND hwnd,char *filename,LPCSTR Filter,LPCSTR Title,BOOL bOpen){ 256 256 OPENFILENAME ofstr; 257 257 filename[0]=0; … … 325 325 //生成するファイルの相対パスを取得 326 326 char relationalPath[MAX_PATH]; 327 lstrcpy( relationalPath, program.GetOutputFilePath().c_str() );327 strcpy( relationalPath, program.GetOutputFilePath().c_str() ); 328 328 GetRelationalPath( relationalPath, BasicCurDir ); 329 329 … … 375 375 SetWindowPos(hwnd,0,x,y,0,0,SWP_NOSIZE); 376 376 } 377 BOOLCALLBACK DlgCompile(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){377 INT_PTR CALLBACK DlgCompile(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){ 378 378 extern HANDLE hDebugProcess; 379 extern DWORD processIdDebug; 379 380 char temporary[MAX_PATH]; 380 381 RECT rect; … … 444 445 TerminateProcess(hDebugProcess,0); 445 446 hDebugProcess=0; 447 processIdDebug = 0; 446 448 447 449 //デバッグダイアログを終了 … … 475 477 TerminateProcess(hDebugProcess,0); 476 478 hDebugProcess=0; 479 processIdDebug = 0; 477 480 478 481 //デバッグダイアログを終了 … … 587 590 588 591 // グローバルローケルを日本語にする 589 std::locale::global(std::locale("japanese"));590 _setmode(_fileno(stdout), _O_BINARY);592 //std::locale::global(std::locale("japanese")); 593 //_setmode(_fileno(stdout), _O_BINARY); 591 594 592 595 //_Test(); … … 642 645 if( program.IsDebugRun() || compiler.IsDebug() ) 643 646 { 644 lstrcat(tempOutputFileName,"_debug.abobj");647 strcat(tempOutputFileName,"_debug.abobj"); 645 648 } 646 649 else 647 650 { 648 lstrcat(tempOutputFileName,".abobj");651 strcat(tempOutputFileName,".abobj"); 649 652 } 650 653 } … … 653 656 if( program.IsDebugRun() || compiler.IsDebug() ) 654 657 { 655 lstrcat(tempOutputFileName,"_debug.exe");658 strcat(tempOutputFileName,"_debug.exe"); 656 659 } 657 660 else 658 661 { 659 lstrcat(tempOutputFileName,".exe");662 strcat(tempOutputFileName,".exe"); 660 663 } 661 664 } … … 719 722 } 720 723 if(temporary[i]){ 721 lstrcpy(szDebugCmdLine,temporary+i+2);724 strcpy(szDebugCmdLine,temporary+i+2); 722 725 } 723 726 } 724 727 725 728 _splitpath( program.GetSourceFilePath().c_str(), BasicCurDir,temporary,NULL,NULL); 726 lstrcat(BasicCurDir,temporary);729 strcat(BasicCurDir,temporary); 727 730 728 731 if( program.IsClipCompileView() ){ 729 732 //ProjectEditor埋め込み型インターフェイス 730 hMainDlg=CreateDialog(hInst, MAKEINTRESOURCE(IDD_CLIPMAIN),hOwnerEditor,(DLGPROC)DlgCompile);733 hMainDlg=CreateDialog(hInst, MAKEINTRESOURCE(IDD_CLIPMAIN), hOwnerEditor, DlgCompile); 731 734 ShowWindow(hMainDlg,SW_SHOW); 732 735 SendMessage(hOwnerEditor,WM_SETCOMPILEVIEW,0,(LPARAM)hMainDlg); … … 759 762 trace("Complete ActiveBasic Compiler!"); 760 763 761 ExitProcess( program.GetExitCode() ); 762 return 0; 764 return program.GetExitCode(); 763 765 } 764 766 else … … 770 772 771 773 //エラーリストをサブクラス化 772 OldErrorListProc=(WNDPROC)GetWindowLongPtr(GetDlgItem(hMainDlg,IDC_ERRORLIST),GWLP_WNDPROC); 773 SetWindowLongPtr(GetDlgItem(hMainDlg,IDC_ERRORLIST),GWLP_WNDPROC,(LONG_PTR)ErrorListProc); 774 OldErrorListProc = reinterpret_cast<WNDPROC>(SetWindowLongPtr(GetDlgItem(hMainDlg, IDC_ERRORLIST), GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(ErrorListProc))); 774 775 775 776 //デバッグリストをサブクラス化 776 OldDebugListProc=(WNDPROC)GetWindowLongPtr(GetDlgItem(hMainDlg,IDC_DEBUGLIST),GWLP_WNDPROC); 777 SetWindowLongPtr(GetDlgItem(hMainDlg,IDC_DEBUGLIST),GWLP_WNDPROC,(LONG_PTR)DebugListProc); 777 OldDebugListProc = reinterpret_cast<WNDPROC>(SetWindowLongPtr(GetDlgItem(hMainDlg, IDC_DEBUGLIST), GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(DebugListProc))); 778 778 779 779 if( program.IsKickedFromEditor() ) … … 804 804 trace("Complete ActiveBasic Compiler!"); 805 805 806 ExitProcess( program.GetExitCode() ); 807 808 return 0; 809 } 806 return program.GetExitCode(); 807 } -
trunk/ab5.0/abdev/BasicCompiler_Common/BasicCompiler.h
r641 r828 1 1 #include "../BasicCompiler_Common/common.h" 2 2 3 LPSTR BasicFileFilter="プログラム ファイル(*.ab;*.bas;*.abp;*.sbp)\0*.ab;*.bas;*.abp;*sbp\0テキスト ファイル(*.txt)\0*.txt\0すべてのファイル(*.*)\0*\0\0";4 LPSTR ExeFileFilter="実行可能ファイル(*.exe)\0*.exe\0すべてのファイル(*.*)\0*\0\0";3 extern const LPCSTR BasicFileFilter = "プログラム ファイル(*.ab;*.bas;*.abp;*.sbp)\0*.ab;*.bas;*.abp;*sbp\0テキスト ファイル(*.txt)\0*.txt\0すべてのファイル(*.*)\0*\0\0"; 4 extern const LPCSTR ExeFileFilter = "実行可能ファイル(*.exe)\0*.exe\0すべてのファイル(*.*)\0*\0\0"; 5 5 6 6 HINSTANCE hInst; -
trunk/ab5.0/abdev/BasicCompiler_Common/CDebugThreadInfo.cpp
r741 r828 4 4 #include "DebugSection.h" 5 5 6 #include <ProcessAndModule.h> 6 7 7 8 //デバッグ用 … … 10 11 11 12 extern HANDLE hDebugProcess; 13 extern DWORD processIdDebug; 12 14 extern DebugSectionCollection debugSectionCollection; 13 15 … … 67 69 68 70 //マッピングされているモジュールのイメージベースを取得 69 HMODULE array_hModule[1024]; 70 DWORD cbReturned; 71 if(!EnumProcessModules( hDebugProcess, array_hModule, sizeof(HMODULE)*1024, &cbReturned )) return 0; 71 //HMODULE array_hModule[1024]; 72 //DWORD cbReturned; 73 //if(!EnumProcessModules( hDebugProcess, array_hModule, sizeof(HMODULE)*1024, &cbReturned )) return 0; 74 auto modules = ActiveBasic::Common::GetModules(processIdDebug); 72 75 73 int i;74 76 HMODULE hTargetModule=0; 75 for(i=0;i<(int)(cbReturned/sizeof(HMODULE));i++){ 76 if((LONG_PTR)array_hModule[i]<=(LONG_PTR)EIP_RIP(Context)){ 77 if(hTargetModule<array_hModule[i]) hTargetModule=array_hModule[i]; 77 for (std::size_t i = 0; i < modules.size(); ++i) 78 { 79 if ((LONG_PTR)modules[i]<=(LONG_PTR)EIP_RIP(Context)) 80 { 81 if (hTargetModule<modules[i]) 82 { 83 hTargetModule=modules[i]; 84 } 78 85 } 79 86 } … … 81 88 extern DWORD ImageBase; 82 89 if((HMODULE)(ULONG_PTR)ImageBase!=hTargetModule){ 83 for( i=0;i<debugSectionCollection.debugSections.size();i++){90 for(std::size_t i=0;i<debugSectionCollection.debugSections.size();i++){ 84 91 if((HMODULE)(ULONG_PTR)debugSectionCollection.debugSections[i]->dwImageBase==hTargetModule){ 85 92 debugSectionCollection.choice(i); -
trunk/ab5.0/abdev/BasicCompiler_Common/Debug.cpp
r750 r828 9 9 #include "../BasicCompiler_Common/debug.h" 10 10 11 #include <Path.h> 12 #include <ProcessAndModule.h> 13 11 14 char *OpBuffer; 12 15 … … 14 17 15 18 HANDLE hDebugProcess; 19 DWORD processIdDebug; 16 20 17 21 DWORD _DebugSys_dwThreadID[MAX_DEBUG_THREAD]; … … 155 159 TerminateProcess(hDebugProcess,0); 156 160 hDebugProcess=0; 161 processIdDebug = 0; 157 162 158 163 //デバッグダイアログを終了 … … 271 276 UserProc *GetSubFromObp(ULONG_PTR pos) 272 277 { 273 compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset(); 274 while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() ) 278 foreach (auto pUserProc, compiler.GetObjectModule().meta.GetUserProcs()) 275 279 { 276 UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();277 278 280 if(rva_to_real(pUserProc->GetBeginOpAddress()) <= pos && 279 281 pos < rva_to_real(pUserProc->GetEndOpAddress())) … … 406 408 //ユーザーに実行ファイルを選択させる 407 409 extern HWND hOwnerEditor; 408 extern LPSTR ExeFileFilter;410 extern const LPCSTR ExeFileFilter; 409 411 if(!GetFilePathDialog(hOwnerEditor,ExeFilePathForDll,ExeFileFilter,"デバッグ用の実行可能ファイルを指定してください。",1)) return; 410 412 } … … 435 437 if( program.IsAttach() ) 436 438 { 437 //プロセスIDを元にハンドルを取得 438 HANDLE hProcess; 439 hProcess=OpenProcess(PROCESS_ALL_ACCESS,0, program.GetAttachProcessId() ); 440 if(!hProcess) goto AttachError; 441 442 //そのプロセスにおける実行モジュールのインスタンスハンドルを取得 443 HINSTANCE hModule; 444 DWORD cbReturned; 445 if(!EnumProcessModules( hProcess, &hModule, sizeof(HINSTANCE), &cbReturned )) goto AttachError; 439 ////プロセスIDを元にハンドルを取得 440 //HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,0, program.GetAttachProcessId() ); 441 //if(!hProcess) 442 //{ 443 // DebugMessage("アタッチに失敗しました。"); 444 // return; 445 //} 446 447 ////そのプロセスにおける実行モジュールのインスタンスハンドルを取得 448 //HINSTANCE hModule; 449 //DWORD cbReturned; 450 //if(!EnumProcessModules( hProcess, &hModule, sizeof(HINSTANCE), &cbReturned )) 451 //{ 452 // DebugMessage("アタッチに失敗しました。"); 453 // return; 454 //} 446 455 447 456 //実行ファイル名を取得 448 char tempOutputFileName[MAX_PATH]; 449 GetModuleFileNameEx(hProcess,hModule,tempOutputFileName,MAX_PATH); 450 program.SetOutputFilePath( tempOutputFileName ); 451 452 CloseHandle(hProcess); 457 auto tempOutputFilePath = ActiveBasic::Common::GetExecutableModulePath(program.GetAttachProcessId()); 458 program.SetOutputFilePath( tempOutputFilePath.string().c_str() ); 459 460 //CloseHandle(hProcess); 453 461 454 462 /* … … 456 464 pobj_DebugSection->load(program.GetOutputFilePath().c_str());*/ 457 465 458 if(!DebugActiveProcess( program.GetAttachProcessId() )) {459 AttachError: 466 if(!DebugActiveProcess( program.GetAttachProcessId() )) 467 { 460 468 DebugMessage("アタッチに失敗しました。"); 461 469 return; … … 532 540 else{ 533 541 Attach_DllLoad: 534 //アタッチした場合 535 GetModuleFileNameEx(hDebugProcess,(HINSTANCE)de.u.LoadDll.lpBaseOfDll,temporary,MAX_PATH); 542 { 543 //アタッチした場合 544 auto path = ActiveBasic::Common::GetModuleFilePath(hDebugProcess, reinterpret_cast<HINSTANCE>(de.u.LoadDll.lpBaseOfDll)); 545 strncpy_s(temporary, path.string().c_str(), _TRUNCATE); 546 } 536 547 } 537 548 … … 562 573 hDebugProcess=de.u.CreateProcessInfo.hProcess; 563 574 hMainThread=de.u.CreateProcessInfo.hThread; 575 processIdDebug = de.dwProcessId; 564 576 565 577 if(debugSectionCollection.add((HMODULE)de.u.CreateProcessInfo.lpBaseOfImage)){ -
trunk/ab5.0/abdev/BasicCompiler_Common/Diagnose.cpp
r750 r828 34 34 int codeSizeOfGlobalProc = 0; 35 35 int codeSizeOfClassMethod = 0; 36 compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset(); 37 while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() ) 36 foreach (auto pUserProc, compiler.GetObjectModule().meta.GetUserProcs()) 38 37 { 39 UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();40 38 if( pUserProc->IsCompiled() ){ 41 39 if( pUserProc->HasParentClass() ){ … … 60 58 int codeSizeOfEnum = 0; 61 59 62 // イテレータをリセット 63 compiler.GetObjectModule().meta.GetClasses().Iterator_Reset(); 64 65 while( compiler.GetObjectModule().meta.GetClasses().Iterator_HasNext() ){ 60 foreach (auto pClass, compiler.GetObjectModule().meta.GetClasses()) 61 { 66 62 int codeSizeOfClass = 0; 67 63 68 CClass &objClass = * compiler.GetObjectModule().meta.GetClasses().Iterator_GetNext();64 CClass &objClass = *pClass; 69 65 70 66 if( !objClass.IsEnum() ){ … … 82 78 // 静的メソッド 83 79 foreach( const CMethod *pMethod, objClass.GetStaticMethods() ){ 84 80 codeSizeOfClass += pMethod->GetUserProc().GetCodeSize(); 85 81 } 86 82 … … 99 95 /////////////////////////////////////////////////////////////////// 100 96 101 // イテレータをリセット 102 compiler.GetObjectModule().meta.GetClasses().Iterator_Reset(); 103 104 while( compiler.GetObjectModule().meta.GetClasses().Iterator_HasNext() ){ 97 foreach (auto pClass, compiler.GetObjectModule().meta.GetClasses()) 98 { 105 99 int codeSizeOfClass = 0; 106 100 107 CClass &objClass = * compiler.GetObjectModule().meta.GetClasses().Iterator_GetNext();101 CClass &objClass = *pClass; 108 102 109 103 // 動的メソッド … … 116 110 // 静的メソッド 117 111 foreach( const CMethod *pMethod, objClass.GetStaticMethods() ){ 118 112 codeSizeOfClass += pMethod->GetUserProc().GetCodeSize(); 119 113 } 120 114 121 if( codeSizeOfClass ){ 122 temporary[0]=0; 123 lstrcat( temporary, "------------------------------------------------------------------\n" ); 124 sprintf( temporary + lstrlen(temporary), "【 %s クラスのコード情報】\n", objClass.GetName().c_str() ); 125 sprintf( temporary + lstrlen(temporary), "class code size: %d bytes\n", codeSizeOfClass ); 126 lstrcat( temporary, "------------------------------------------------------------------\n" ); 127 lstrcat( temporary, "\n" ); 115 if( codeSizeOfClass ) 116 { 117 sprintf(temporary, 118 "------------------------------------------------------------------\n" 119 "【 %s クラスのコード情報】\n" 120 "class code size: %d bytes\n" 121 "------------------------------------------------------------------\n" 122 "\n", 123 objClass.GetName().c_str(), codeSizeOfClass); 128 124 trace_for_size( temporary ); 129 125 } -
trunk/ab5.0/abdev/BasicCompiler_Common/MakeExe.cpp
r750 r828 26 26 } 27 27 28 void AddSourceCode(const char *buffer){ 29 char *temp=(char *)HeapAlloc(hHeap,0,lstrlen(buffer)+8192); 30 lstrcpy(temp,buffer); 31 32 MakeMiddleCode( temp ); 28 void AddSourceCode(const char *buffer) 29 { 30 std::size_t size = std::strlen(buffer) + 8192; 31 std::unique_ptr<char[]> temp(new char[size]); 32 strcpy_s(temp.get(), size, buffer); 33 34 MakeMiddleCode(temp.get()); 33 35 34 36 //最後尾に貼り付け 35 compiler.GetObjectModule().GetSource().Addition( temp ); 36 37 HeapDefaultFree(temp); 37 compiler.GetObjectModule().GetSource().Addition(temp.get()); 38 38 } 39 39 -
trunk/ab5.0/abdev/BasicCompiler_Common/NonVolatile.h
r523 r828 39 39 void load(); 40 40 void save(); 41 42 private: 43 CNonVolatile(CNonVolatile const&); 44 CNonVolatile& operator =(CNonVolatile const&); 41 45 }; 42 46 extern CNonVolatile *pobj_nv; -
trunk/ab5.0/abdev/BasicCompiler_Common/StrOperation.cpp
r736 r828 1 1 #include "stdafx.h" 2 3 void KillSpaces(char *str1,char *str2){ 2 #include <abdev/ab_common/include/ab_common.h> 3 #include "StrOperation.h" 4 #include "common.h" 5 6 void KillSpaces(char const *str1,char *str2){ 4 7 int i,i2,i3,IsStr; 5 8 for(i=0,i2=0,IsStr=0;;i++,i2++){ … … 30 33 } 31 34 } 32 void KillStringSpaces(char *str){ 33 char *s2; 34 35 extern HANDLE hHeap; 36 s2=(char *)HeapAlloc(hHeap,0,lstrlen(str)+1); 37 lstrcpy(s2,str); 38 KillSpaces(s2,str); 39 HeapDefaultFree(s2); 40 return; 35 void KillStringSpaces(char *str) 36 { 37 std::string s2(str); 38 KillSpaces(s2.c_str(), str); 41 39 } 42 40 BOOL RemoveStringQuotes(char *str){ … … 362 360 } 363 361 } 364 const std::string &FormatEscapeSequenceStringToDefaultString( const std::string &source )362 std::string FormatEscapeSequenceStringToDefaultString( const std::string &source ) 365 363 { 366 364 int maxLength = (int)source.size(); -
trunk/ab5.0/abdev/BasicCompiler_Common/StrOperation.h
r603 r828 1 #pragma once 1 2 2 3 enum ReferenceKind -
trunk/ab5.0/abdev/BasicCompiler_Common/Subroutine.cpp
r751 r828 319 319 320 320 bool IsNeedProcCompile(){ 321 compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset(); 322 while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() ) 323 { 324 UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext(); 321 foreach (auto pUserProc, compiler.GetObjectModule().meta.GetUserProcs()) 322 { 325 323 if( pUserProc->IsUsing() && pUserProc->IsCompiled() == false ){ 326 324 return true; … … 385 383 386 384 repeat: 387 compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset(); 388 while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() ) 389 { 390 UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext(); 385 foreach (auto pUserProc, compiler.GetObjectModule().meta.GetUserProcs()) 386 { 391 387 CompileBufferInProcedure( *pUserProc ); 392 388 } … … 410 406 //プロシージャコンパイルによって、プロシージャコンパイルが必要になる場合 411 407 412 compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset(); 413 while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() ) 408 foreach(auto pUserProc, compiler.GetObjectModule().meta.GetUserProcs()) 414 409 { 415 UserProc *pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext();416 410 CompileBufferInProcedure( *pUserProc ); 417 411 } -
trunk/ab5.0/abdev/BasicCompiler_Common/VarList.cpp
r763 r828 1 1 #include "stdafx.h" 2 2 3 #include <boost/range/algorithm.hpp> 3 4 #include <Compiler.h> 4 5 … … 411 412 if(pobj_dti->lplpSpBase[i2]==0) return; 412 413 413 UserProc *pUserProc = NULL; 414 compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset(); 415 while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() ) 414 auto const& t = compiler.GetObjectModule().meta.GetUserProcs(); 415 auto it = boost::find_if<boost::return_found>(t, [&](UserProc *pUserProc) -> bool { 416 return rva_to_real(pUserProc->GetBeginOpAddress()) <= pobj_dti->lplpObp[i2] && 417 pobj_dti->lplpObp[i2] < rva_to_real(pUserProc->GetEndOpAddress()); 418 }); 419 if (it == boost::end(t)) 416 420 { 417 pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext(); 418 if(rva_to_real(pUserProc->GetBeginOpAddress()) <= pobj_dti->lplpObp[i2] && 419 pobj_dti->lplpObp[i2] < rva_to_real(pUserProc->GetEndOpAddress())){ 420 break; 421 } 422 } 423 if(!pUserProc) return; 421 return; 422 } 423 UserProc *pUserProc = *it; 424 424 425 425 foreach( Variable *pVar, pUserProc->GetLocalVars() ){ … … 696 696 //プロシージャ コンボボックス 697 697 SendMessage(hProcCombo,CB_RESETCONTENT,0,0); 698 for(i2=pobj_dti->iProcLevel;i2>=0;i2--){ 699 698 for(i2=pobj_dti->iProcLevel;i2>=0;i2--) 699 { 700 auto const& t = compiler.GetObjectModule().meta.GetUserProcs(); 701 auto it = boost::find_if<boost::return_found>(t, [&](UserProc* p) { 702 return rva_to_real(p->GetBeginOpAddress()) <= pobj_dti->lplpObp[i2] && 703 pobj_dti->lplpObp[i2] < rva_to_real(p->GetEndOpAddress()); 704 }); 700 705 UserProc *pUserProc = NULL; 701 compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset(); 702 while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() ) 706 if (it != boost::end(t)) 703 707 { 704 pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext(); 705 706 if(rva_to_real(pUserProc->GetBeginOpAddress()) <= pobj_dti->lplpObp[i2] && 707 pobj_dti->lplpObp[i2] < rva_to_real(pUserProc->GetEndOpAddress())) 708 { 709 lstrcpy(temporary,pUserProc->GetName().c_str()); 710 break; 711 } 708 pUserProc = *it; 709 lstrcpy(temporary, pUserProc->GetName().c_str()); 712 710 } 713 711 if(!pUserProc){ … … 811 809 i2=pobj_dti->iProcLevel-i2; 812 810 813 if(pobj_dti->lplpSpBase[i2]){ 814 815 UserProc *pUserProc = NULL; 816 compiler.GetObjectModule().meta.GetUserProcs().Iterator_Reset(); 817 while( compiler.GetObjectModule().meta.GetUserProcs().Iterator_HasNext() ) 811 if(pobj_dti->lplpSpBase[i2]) 812 { 813 auto const& t = compiler.GetObjectModule().meta.GetUserProcs(); 814 auto it = boost::find_if<boost::return_found>(t, [&](UserProc* p) { 815 return rva_to_real(p->GetBeginOpAddress()) <= pobj_dti->lplpObp[i2] && 816 pobj_dti->lplpObp[i2] < rva_to_real(p->GetEndOpAddress()); 817 }); 818 819 if (it != boost::end(t)) 818 820 { 819 pUserProc = compiler.GetObjectModule().meta.GetUserProcs().Iterator_GetNext(); 820 821 if(rva_to_real(pUserProc->GetBeginOpAddress()) <= pobj_dti->lplpObp[i2] && 822 pobj_dti->lplpObp[i2] < rva_to_real(pUserProc->GetEndOpAddress())){ 823 break; 824 } 825 } 826 827 if(pUserProc){ 828 compiler.StartProcedureCompile( pUserProc ); 821 compiler.StartProcedureCompile(*it); 829 822 } 830 823 } -
trunk/ab5.0/abdev/BasicCompiler_Common/common.h
r824 r828 1 1 #pragma once 2 2 3 //#define _CRT_SECURE_NO_DEPRECATE 4 # pragma warning(disable : 4996)3 4 #include <psapi.h> 5 5 6 6 #include <option.h> … … 17 17 18 18 #include "../BasicCompiler_Common/NonVolatile.h" 19 #include <psapi.h>20 19 21 20 … … 36 35 #define MAX_PARMS 64 37 36 #define MAX_ARRAYDIM 16 38 #define MAX_HASH 3276139 37 40 38 … … 42 40 #define PLATFORM 64 43 41 #else 44 #define PLATFORM 32 45 #ifndef LONG_PTR 46 typedef long LONG_PTR; 47 typedef DWORD ULONG_PTR; 48 #endif 42 #define PLATFORM 32 49 43 #endif 50 44 … … 217 211 void GetFullPath( char *path, const std::string &baseDirPath ); 218 212 void ShowErrorLine(int LineNum,const char *FileName); 219 BOOL GetFilePathDialog(HWND hwnd,char *filename,LP STR Filter,LPSTR Title,BOOL bOpen);213 BOOL GetFilePathDialog(HWND hwnd,char *filename,LPCSTR Filter,LPCSTR Title,BOOL bOpen); 220 214 void MakeMessageText(char *buffer,char *msg,int flag); 221 215 222 216 //hash.cpp 223 int hash_default(const char *name);224 217 DllProc *GetDeclareHash(const char *name); 225 218 void GetOverloadSubHash( const char *lpszName, std::vector<const UserProc *> &subs ); … … 303 296 304 297 // StrOperation.cpp 305 void KillSpaces(c har *str1,char *str2);298 void KillSpaces(const char *str1,char *str2); 306 299 void KillStringSpaces(char *str); 307 300 BOOL RemoveStringQuotes(char *str); … … 316 309 char GetEndXXXCommand(char es); 317 310 void GetDefaultNameFromES(char es,char *name); 318 const std::string &FormatEscapeSequenceStringToDefaultString( const std::string &source );311 std::string FormatEscapeSequenceStringToDefaultString( const std::string &source ); 319 312 bool IsFileExist(const char *path); 320 313 BOOL ShortPathToLongPath(char ShortPath[MAX_PATH],char *LongPath); … … 370 363 void SplitGenericClassInstance( const char *fullName, char *className, Jenga::Common::Strings &typeParameters, bool isDefiningClass = false, Jenga::Common::Strings *pTypeParameterBaseClassNames = NULL ); 371 364 int JumpStatement(const char *source, int &pos); 365 366 //MakePeHdr.cpp 372 367 void MakeExe(); 373 368 -
trunk/ab5.0/abdev/BasicCompiler_Common/error.cpp
r562 r828 4 4 5 5 #define STRING_SYSTEM_DECLAREHANDLE "*_System_DeclareHandle_" 6 void DifferentTypeError( const Type &varType, const Type &calcFormalType, const int iWarning,const char *pszFuncName,const int ParmNum){ 6 void DifferentTypeError(const Type &varType, const Type &calcFormalType, const int iWarning, const char *pszFuncName, const int ParmNum) 7 { 7 8 ////////////////////////// 8 9 // キャストに関する警告 9 10 ////////////////////////// 10 char temporary[255];11 Type calcType( calcFormalType);12 13 if (IS_LITERAL(calcType.GetIndex()))11 std::ostringstream s; 12 Type calcType(calcFormalType); 13 14 if (IS_LITERAL(calcType.GetIndex())) 14 15 { 15 16 calcType.SetIndex( -1 ); 16 17 } 17 18 18 if(pszFuncName) 19 sprintf(temporary,"\"%s\"の第%dパラメータが、",pszFuncName,ParmNum+1); 20 else temporary[0]=0; 21 22 std::string varTypeName = compiler.TypeToString( varType ); 23 if(memcmp( varTypeName.c_str(),STRING_SYSTEM_DECLAREHANDLE,lstrlen(STRING_SYSTEM_DECLAREHANDLE))==0) 24 { 25 varTypeName = varTypeName.substr( lstrlen(STRING_SYSTEM_DECLAREHANDLE) ); 26 } 27 28 std::string calcTypeName = compiler.TypeToString( calcType ); 29 if(memcmp( calcTypeName.c_str(),STRING_SYSTEM_DECLAREHANDLE,lstrlen(STRING_SYSTEM_DECLAREHANDLE))==0) 30 { 31 calcTypeName = calcTypeName.substr( lstrlen(STRING_SYSTEM_DECLAREHANDLE) ); 32 } 33 sprintf(temporary+lstrlen(temporary),"%sから%s",calcTypeName.c_str(),varTypeName.c_str()); 19 if (pszFuncName) 20 { 21 s << boost::format("\"%s\"の第%dパラメータが、") % pszFuncName % (ParmNum + 1); 22 } 23 24 std::string varTypeName = compiler.TypeToString(varType); 25 if (memcmp(varTypeName.c_str(), STRING_SYSTEM_DECLAREHANDLE, lstrlen(STRING_SYSTEM_DECLAREHANDLE)) == 0) 26 { 27 varTypeName = varTypeName.substr(strlen(STRING_SYSTEM_DECLAREHANDLE)); 28 } 29 30 std::string calcTypeName = compiler.TypeToString(calcType); 31 if (memcmp(calcTypeName.c_str(), STRING_SYSTEM_DECLAREHANDLE, strlen(STRING_SYSTEM_DECLAREHANDLE)) == 0) 32 { 33 calcTypeName = calcTypeName.substr(strlen(STRING_SYSTEM_DECLAREHANDLE)); 34 } 35 s << boost::format("%sから%s") % calcTypeName % varTypeName; 34 36 35 37 extern int cp; 36 if(iWarning==1) compiler.errorMessenger.Output(-101,temporary,cp); 37 else if(iWarning==2) compiler.errorMessenger.Output(-102,temporary,cp); 38 else if(iWarning==3) compiler.errorMessenger.Output(50,temporary,cp); 38 int errorCode; 39 switch (iWarning) 40 { 41 case 1: errorCode = -101; break; 42 case 2: errorCode = -102; break; 43 case 3: errorCode = 50; break; 44 } 45 compiler.errorMessenger.Output(errorCode, s.str().c_str(), cp); 39 46 } 40 47 -
trunk/ab5.0/abdev/BasicCompiler_Common/hash.cpp
r598 r828 13 13 using namespace ActiveBasic::Compiler; 14 14 15 int hash_default(const char *name){16 int key;17 18 for(key=0;*name!='\0';name++){19 key=((key<<8)+ *name )%MAX_HASH;20 }21 22 return key;23 }24 25 15 DllProc *GetDeclareHash(const char *fullName){ 26 16 char namespaceStr[VN_SIZE]; //オブジェクト変数 … … 32 22 /////////////////////////// 33 23 24 auto const s = LexicalAnalyzer::FullNameToSymbol( fullName ); 25 34 26 // ハッシュ値を取得 35 DllProc *pDllProc = compiler.GetObjectModule().meta.GetDllProcs().GetHashArrayElement( simpleName ); 36 while(pDllProc){ 37 if( pDllProc->IsEqualSymbol( LexicalAnalyzer::FullNameToSymbol( fullName ) ) ){ 27 foreach (auto pDllProc, compiler.GetObjectModule().meta.GetDllProcs().GetHashArrayElement(simpleName)) 28 { 29 if( pDllProc->IsEqualSymbol( s ) ) 30 { 38 31 return pDllProc; 39 32 } 40 41 pDllProc=pDllProc->GetChainNext();42 33 } 43 34 -
trunk/ab5.0/abdev/BasicCompiler_Common/include/BreakPoint.h
- Property svn:mergeinfo changed
/branches/egtra/ab5.0/abdev/BasicCompiler_Common/include/BreakPoint.h (added) merged: 817
r743 r828 9 9 BreakPointsPerFile(const char *lpszFileName,int iLineNum); 10 10 11 BreakPointsPerFile(BreakPointsPerFile&& y) 12 : filename(std::move(y.filename)) 13 , lines(std::move(y.lines)) 14 { 15 } 16 17 BreakPointsPerFile(BreakPointsPerFile const& y) 18 : filename(y.filename) 19 , lines(y.lines) 20 { 21 } 22 23 BreakPointsPerFile& operator =(BreakPointsPerFile&& y) 24 { 25 filename = std::move(y.filename); 26 lines = std::move(y.lines); 27 return *this; 28 } 29 30 BreakPointsPerFile& operator =(BreakPointsPerFile const& y) 31 { 32 return *this = std::move(BreakPointsPerFile(y)); 33 } 34 11 35 void add(int iLineNum); 12 36 void remove(int iLineNum); 13 37 14 38 void update( char *nativeCodeBuffer, const SourceLines &sourceLines ); 39 15 40 }; 16 41 typedef std::vector<BreakPointsPerFile> BreakPointsPerFiles; … … 27 52 28 53 char *update( char *nativeCodeBuffer, int SizeOf_CodeSection, const SourceLines &sourceLines ); 54 55 private: 56 BreakPointManager(BreakPointManager const&); 57 BreakPointManager& operator =(BreakPointManager const&); 29 58 }; 30 59 - Property svn:mergeinfo changed
-
trunk/ab5.0/abdev/BasicCompiler_Common/include/CodeGenerator.h
r641 r828 33 33 return typeSize; 34 34 } 35 36 private: 37 PertialSchedule(PertialSchedule const&); 38 PertialSchedule& operator =(PertialSchedule const&); 35 39 }; 36 40 typedef std::vector<const PertialSchedule *> PertialSchedules; … … 68 72 return sourceCodePos; 69 73 } 74 75 private: 76 GotoLabelSchedule(GotoLabelSchedule const&); 77 GotoLabelSchedule& operator =(GotoLabelSchedule const&); 70 78 }; 71 79 typedef std::vector<const GotoLabelSchedule *> GotoLabelSchedules; … … 90 98 , address( nativeCodePos ) 91 99 { 100 } 101 102 GotoLabel(GotoLabel&& y) 103 : name(std::move(y.name)) 104 , line(std::move(y.line)) 105 , address(std::move(y.address)) 106 { 107 } 108 109 GotoLabel(GotoLabel const& y) 110 : name(y.name) 111 , line(y.line) 112 , address(y.address) 113 { 114 } 115 116 GotoLabel& operator =(GotoLabel&& y) 117 { 118 name = std::move(y.name); 119 line = std::move(y.line); 120 address = std::move(y.address); 121 return *this; 122 } 123 124 GotoLabel& operator =(GotoLabel const& y) 125 { 126 return *this = std::move(GotoLabel(y)); 92 127 } 93 128 }; … … 147 182 void Break(); 148 183 void RunScheduleOfBreak(); 184 185 private: 186 LexicalScope(LexicalScope const&); 187 LexicalScope& operator =(LexicalScope const&); 149 188 }; 150 189 … … 184 223 //Returnステートメント用のデストラクタ呼び出し 185 224 void CallDestructorsOfReturn( int BaseLevel = 0 ); 225 226 private: 227 LexicalScopes(LexicalScopes const&); 228 LexicalScopes& operator =(LexicalScopes const&); 186 229 }; 187 230 … … 534 577 pNativeCode->Put( c6 ); 535 578 } 579 580 private: 581 CodeGenerator(CodeGenerator const&); 582 CodeGenerator& operator =(CodeGenerator const&); 536 583 }; -
trunk/ab5.0/abdev/BasicCompiler_Common/include/Compiler.h
r745 r828 1 #include "Messenger.h" 2 #include "CodeGenerator.h" 3 #include "Linker.h" 4 #include "Enum.h" 5 #include "ErrorCode.h" 6 1 7 #pragma once 2 8 … … 209 215 bool IsCompilingClass(); 210 216 const CClass &GetCompilingClass(); 217 218 private: 219 Compiler(Compiler const&); 220 Compiler& operator =(Compiler const&); 211 221 }; 212 222 -
trunk/ab5.0/abdev/BasicCompiler_Common/include/Configuration.h
r477 r828 27 27 ar & BOOST_SERIALIZATION_NVP( abdevRootRelativePath ); 28 28 } 29 30 Configuration(Configuration const&); 31 Configuration& operator =(Configuration const&); 29 32 }; -
trunk/ab5.0/abdev/BasicCompiler_Common/include/DataTableGenerator.h
r589 r828 17 17 } 18 18 19 private: 20 DataTableGenerator(); 21 DataTableGenerator(DataTableGenerator const&); 22 DataTableGenerator& operator =(DataTableGenerator const&); 19 23 }; 20 24 -
trunk/ab5.0/abdev/BasicCompiler_Common/include/Debugger.h
r467 r828 24 24 return isRunning; 25 25 } 26 27 private: 28 Debugger(Debugger const&); 29 Debugger& operator =(Debugger const&); 26 30 }; 27 31 -
trunk/ab5.0/abdev/BasicCompiler_Common/include/Enum.h
r750 r828 6 6 std::string value; 7 7 int sourceIndex; 8 8 9 public: 9 10 EnumMember( const std::string &name, const std::string &value, int sourceIndex ) … … 13 14 { 14 15 } 16 17 EnumMember(EnumMember&& y) 18 : name(std::move(y.name)) 19 , value(std::move(y.value)) 20 , sourceIndex(std::move(y.sourceIndex)) 21 { 22 } 23 24 EnumMember(EnumMember const& y) 25 : name(y.name) 26 , value(y.value) 27 , sourceIndex(y.sourceIndex) 28 { 29 } 30 31 EnumMember& operator =(EnumMember&& y) 32 { 33 name = std::move(y.name); 34 value = std::move(y.value); 35 sourceIndex = std::move(y.sourceIndex); 36 return *this; 37 } 38 39 EnumMember& operator =(EnumMember const& y) 40 { 41 return *this = std::move(EnumMember(y)); 42 } 43 15 44 const std::string &GetName() const 16 45 { … … 39 68 : Symbol( namespaceScopes, name ) 40 69 { 70 } 71 72 EnumInfo(EnumInfo&& y) 73 : Symbol(std::move(y)) 74 , bConst(std::move(y.bConst)) 75 , members(std::move(y.members)) 76 { 77 } 78 79 EnumInfo(EnumInfo const& y) 80 : Symbol(y) 81 , bConst(y.bConst) 82 , members(y.members) 83 { 84 } 85 86 EnumInfo& operator =(EnumInfo&& y) 87 { 88 Symbol::operator =(std::move(y)); 89 bConst = std::move(y.bConst); 90 members = std::move(y.members); 91 return *this; 92 } 93 94 EnumInfo& operator =(EnumInfo const& y) 95 { 96 return *this = std::move(EnumInfo(y)); 41 97 } 42 98 … … 80 136 return NULL; 81 137 }; 138 139 EnumInfoCollection() {} 140 141 private: 142 EnumInfoCollection(EnumInfoCollection const&); 143 EnumInfoCollection& operator =(EnumInfoCollection const&); 82 144 }; -
trunk/ab5.0/abdev/BasicCompiler_Common/include/LexicalAnalyzer.h
r728 r828 1 #include <string> 2 1 3 #pragma once 4 5 class EnumInfo; 6 class EnumInfoCollection; 2 7 3 8 namespace ActiveBasic{ namespace Compiler{ … … 24 29 25 30 // TypeDefを収集する 26 static void AddTypeDef( TypeDefCollection &typeDefs, const NamespaceScopes &namespaceScopes, const std::string&expression, int nowLine );31 static void AddTypeDef( TypeDefCollection &typeDefs, const NamespaceScopes &namespaceScopes, const boost::iterator_range<char const*> &expression, int nowLine ); 27 32 static void CollectTypeDefs( const char *source, TypeDefCollection &typeDefs ); 28 33 … … 30 35 static void AddConstEnum( Consts &consts, const NamespaceScopes &namespaceScopes, const char *buffer ); 31 36 static void CollectConsts( const char *source, Consts &consts, ConstMacros &constMacros ); 32 static bool ConstMacroToExpression( const ConstMacro &constMacro, const char *parameterStr, char *dest ); 37 static bool ConstMacroToExpression( const ConstMacro &constMacro, const char *parameterStr, std::string& dest ); 38 static bool ConstMacroToExpression( const ConstMacro &constMacro, const char *parameterStr, char *dest, std::size_t destSize ); 39 template<std::size_t N> 40 static bool ConstMacroToExpression( const ConstMacro &constMacro, const char *parameterStr, char (&dest)[N] ) 41 { 42 return ConstMacroToExpression(constMacro, parameterStr, dest, N); 43 } 33 44 34 45 // クラスを収集する -
trunk/ab5.0/abdev/BasicCompiler_Common/include/Linker.h
r357 r828 54 54 // データテーブルをセット 55 55 void SetDataTable( DataTable &dataTable ); 56 57 private: 58 Linker(Linker const&); 59 Linker& operator =(Linker const&); 56 60 }; -
trunk/ab5.0/abdev/BasicCompiler_Common/include/Messenger.h
r541 r828 1 #pragma once 1 2 2 3 class Messenger … … 23 24 { 24 25 } 26 25 27 ErrorInfo( int errorCode, const std::string &keyword, int sourceIndex ); 28 29 ErrorInfo(ErrorInfo&& y) 30 : errorCode(std::move(y.errorCode)) 31 , keyword(std::move(y.keyword)) 32 , sourceFilePath(std::move(y.sourceFilePath)) 33 , sourceLineNum(std::move(y.sourceLineNum)) 34 , errorLineNum(std::move(y.errorLineNum)) 35 { 36 } 37 38 ErrorInfo(ErrorInfo const& y) 39 : errorCode(y.errorCode) 40 , keyword(y.keyword) 41 , sourceFilePath(y.sourceFilePath) 42 , sourceLineNum(y.sourceLineNum) 43 , errorLineNum(y.errorLineNum) 44 { 45 } 46 47 ErrorInfo& operator =(ErrorInfo&& y) 48 { 49 errorCode = std::move(y.errorCode); 50 keyword = std::move(y.keyword); 51 sourceFilePath = std::move(y.sourceFilePath); 52 sourceLineNum = std::move(y.sourceLineNum); 53 errorLineNum = std::move(y.errorLineNum); 54 return *this; 55 } 56 57 ErrorInfo& operator =(ErrorInfo const& y) 58 { 59 return *this = std::move(ErrorInfo(y)); 60 } 26 61 27 62 int GetErrorCode() const … … 62 97 63 98 public: 99 ErrorMessenger() {} 100 64 101 void Output( const ErrorInfo &errorInfo ); 65 102 void Output( int errorCode, const std::string &keyword, int sourceIndex = -1 ); … … 74 111 75 112 void ShowErrorLine( int errorLineNum ); 113 114 private: 115 ErrorMessenger(ErrorMessenger const&); 116 ErrorMessenger& operator =(ErrorMessenger const&); 76 117 }; -
trunk/ab5.0/abdev/BasicCompiler_Common/include/Program.h
r719 r828 96 96 97 97 int GetExitCode() const; 98 99 private: 100 Program(Program const&); 101 Program& operator =(Program const&); 98 102 }; 99 103 -
trunk/ab5.0/abdev/BasicCompiler_Common/include/logger.h
r523 r828 28 28 ar & BOOST_SERIALIZATION_NVP( stopStep ); 29 29 } 30 31 LoggerSetting(LoggerSetting const&); 32 LoggerSetting operator =(LoggerSetting const&); 30 33 }; 31 34 -
trunk/ab5.0/abdev/BasicCompiler_Common/src/BoostSerializationSupport.cpp
r751 r828 1 #pragma warning(disable : 4996)2 3 1 #include <map> 4 2 #include <string> … … 19 17 #include <limits.h> 20 18 #include <shlobj.h> 21 #include <process.h>22 #include <fcntl.h>23 #include <io.h>24 19 #include <shlwapi.h> 25 20 #include <tchar.h> 26 #include <stdarg.h>27 21 28 22 //boost libraries 29 23 #include <boost/foreach.hpp> 30 24 #include <boost/cast.hpp> 25 26 #pragma warning(push) 27 #pragma warning(disable: 4244 6326) 31 28 #include <boost/archive/xml_oarchive.hpp> 32 29 #include <boost/archive/xml_iarchive.hpp> … … 41 38 #include <boost/serialization/map.hpp> 42 39 #include <boost/serialization/version.hpp> 43 # include <boost/serialization/is_abstract.hpp>40 #pragma warning(pop) 44 41 45 42 #include <jenga/include/jenga.h> … … 49 46 using namespace Jenga::Common; 50 47 48 using boost::polymorphic_downcast; 49 51 50 template<class T_xml_schema> void BoostSerializationSupport<T_xml_schema>::echo( const char *msg ) const 52 51 { 53 MessageBox( NULL, msg, " XMLシリアライズの例外", MB_OK );52 MessageBox( NULL, msg, "シリアライズの例外", MB_OK ); 54 53 } 55 54 template<class T_xml_schema> bool BoostSerializationSupport<T_xml_schema>::ReadXml( std::istream& ifs, bool isShowExceptionMessage ) … … 61 60 62 61 // ファイルから読込 63 ia >> boost::serialization::make_nvp( RootTagName(), * (T_xml_schema *)this);64 65 isSuccessful = true; 66 } 67 catch( boost::archive::archive_exception e )62 ia >> boost::serialization::make_nvp( RootTagName(), *polymorphic_downcast<T_xml_schema*>(this) ); 63 64 isSuccessful = true; 65 } 66 catch( boost::archive::archive_exception const& e ) 68 67 { 69 68 if( isShowExceptionMessage ) … … 94 93 95 94 // ファイルに書き出し 96 oa << boost::serialization::make_nvp( RootTagName(), * (T_xml_schema *)this);97 98 isSuccessful = true; 99 } 100 catch( boost::archive::archive_exception e )95 oa << boost::serialization::make_nvp( RootTagName(), *polymorphic_downcast<T_xml_schema const*>(this) ); 96 97 isSuccessful = true; 98 } 99 catch( boost::archive::archive_exception const& e ) 101 100 { 102 101 if( isShowExceptionMessage ) … … 154 153 155 154 // 文字列ストリームから読込 156 ia >> boost::serialization::make_nvp( RootTagName(), * (T_xml_schema *)this);155 ia >> boost::serialization::make_nvp( RootTagName(), *polymorphic_downcast<T_xml_schema*>(this) ); 157 156 158 157 isSuccessful = true; … … 179 178 180 179 // 文字列ストリームに書き出し 181 oa << boost::serialization::make_nvp( RootTagName(), * (T_xml_schema *)this);182 183 isSuccessful = true; 184 } 185 catch( boost::archive::archive_exception e )180 oa << boost::serialization::make_nvp( RootTagName(), *polymorphic_downcast<T_xml_schema const*>(this) ); 181 182 isSuccessful = true; 183 } 184 catch( boost::archive::archive_exception const& e ) 186 185 { 187 186 echo( e.what() ); … … 211 210 212 211 // ファイルから読込 213 ia >> boost::serialization::make_nvp( RootTagName(), * (T_xml_schema *)this);214 215 isSuccessful = true; 216 } 217 catch( boost::archive::archive_exception e )212 ia >> boost::serialization::make_nvp( RootTagName(), *polymorphic_downcast<T_xml_schema*>(this) ); 213 214 isSuccessful = true; 215 } 216 catch( boost::archive::archive_exception const& e ) 218 217 { 219 218 if( isShowExceptionMessage ) … … 249 248 250 249 // ファイルに書き出し 251 oa << boost::serialization::make_nvp( RootTagName(), * (T_xml_schema *)this);252 253 isSuccessful = true; 254 } 255 catch( boost::archive::archive_exception e )250 oa << boost::serialization::make_nvp( RootTagName(), *polymorphic_downcast<T_xml_schema const*>(this) ); 251 252 isSuccessful = true; 253 } 254 catch( boost::archive::archive_exception const& e ) 256 255 { 257 256 if( isShowExceptionMessage ) … … 289 288 290 289 // 文字列ストリームから読込 291 ia >> boost::serialization::make_nvp( RootTagName(), * (T_xml_schema *)this);292 293 isSuccessful = true; 294 } 295 catch( boost::archive::archive_exception e )290 ia >> boost::serialization::make_nvp( RootTagName(), *polymorphic_downcast<T_xml_schema*>(this) ); 291 292 isSuccessful = true; 293 } 294 catch( boost::archive::archive_exception const& e ) 296 295 { 297 296 echo( e.what() ); … … 313 312 314 313 // 文字列ストリームに書き出し 315 oa << boost::serialization::make_nvp( RootTagName(), * (T_xml_schema *)this);316 317 isSuccessful = true; 318 } 319 catch( boost::archive::archive_exception e )314 oa << boost::serialization::make_nvp( RootTagName(), *polymorphic_downcast<T_xml_schema const*>(this) ); 315 316 isSuccessful = true; 317 } 318 catch( boost::archive::archive_exception const& e ) 320 319 { 321 320 echo( e.what() ); … … 342 341 343 342 // ファイルから読込 344 ia >> boost::serialization::make_nvp( RootTagName(), * (T_xml_schema *)this);345 346 isSuccessful = true; 347 } 348 catch( boost::archive::archive_exception e )343 ia >> boost::serialization::make_nvp( RootTagName(), *polymorphic_downcast<T_xml_schema*>(this) ); 344 345 isSuccessful = true; 346 } 347 catch( boost::archive::archive_exception const& e ) 349 348 { 350 349 if( isShowExceptionMessage ) … … 380 379 381 380 // ファイルに書き出し 382 oa << boost::serialization::make_nvp( RootTagName(), * (T_xml_schema *)this);383 384 isSuccessful = true; 385 } 386 catch( boost::archive::archive_exception e )381 oa << boost::serialization::make_nvp( RootTagName(), *polymorphic_downcast<T_xml_schema const*>(this) ); 382 383 isSuccessful = true; 384 } 385 catch( boost::archive::archive_exception const& e ) 387 386 { 388 387 if( isShowExceptionMessage ) … … 420 419 421 420 // 文字列ストリームから読込 422 ia >> boost::serialization::make_nvp( RootTagName(), * (T_xml_schema *)this);421 ia >> boost::serialization::make_nvp( RootTagName(), *polymorphic_downcast<T_xml_schema*>(this) ); 423 422 424 423 isSuccessful = true; … … 445 444 446 445 // 文字列ストリームに書き出し 447 oa << boost::serialization::make_nvp( RootTagName(), * (T_xml_schema *)this);448 449 isSuccessful = true; 450 } 451 catch( boost::archive::archive_exception e )446 oa << boost::serialization::make_nvp( RootTagName(), *polymorphic_downcast<T_xml_schema const*>(this) ); 447 448 isSuccessful = true; 449 } 450 catch( boost::archive::archive_exception const& e ) 452 451 { 453 452 echo( e.what() ); … … 478 477 479 478 // 文字列ストリームから読込 480 ia >> boost::serialization::make_nvp( RootTagName(), * (T_xml_schema *)this);479 ia >> boost::serialization::make_nvp( RootTagName(), *polymorphic_downcast<T_xml_schema*>(this) ); 481 480 482 481 isSuccessful = true; -
trunk/ab5.0/abdev/BasicCompiler_Common/src/Compiler.cpp
r750 r828 353 353 const std::string Compiler::TypeToString( const Type &type ) 354 354 { 355 if( PTR_LEVEL( type.GetBasicType() ) ){355 if(type.GetBasicType() != DEF_NON && PTR_LEVEL( type.GetBasicType() ) ){ 356 356 //ポインタレベルが1以上の場合 357 357 Type tempType( type ); -
trunk/ab5.0/abdev/BasicCompiler_Common/src/LexicalAnalyzer.cpp
r625 r828 3 3 using namespace ActiveBasic::Compiler; 4 4 5 bool LexicalAnalyzer::CollectNamespaces( const char *source, NamespaceScopesCollection &namespaceScopesCollection ) 5 using boost::numeric_cast; 6 7 bool LexicalAnalyzer::CollectNamespaces(char const* source, NamespaceScopesCollection &namespaceScopesCollection) 6 8 { 7 int i, i2;8 char temporary[1024];9 10 9 bool isSuccessful = true; 11 10 … … 13 12 NamespaceScopes namespaceScopes; 14 13 15 for(i=0;;i++){ 14 for (int i = 0; ; i++) 15 { 16 16 if(source[i]=='\0') break; 17 17 18 18 if( source[i] == 1 && source[i+1] == ESC_NAMESPACE ){ 19 for(i+=2,i2=0;;i2++,i++){ 20 if( IsCommandDelimitation( source[i] ) ){ 21 temporary[i2]=0; 22 break; 23 } 24 temporary[i2]=source[i]; 19 i+=2; 20 char const* p = &source[i]; 21 while (!IsCommandDelimitation(source[i])) 22 { 23 ++i; 25 24 } 26 namespaceScopes.push_back( temporary);25 namespaceScopes.push_back(std::string(p, &source[i])); 27 26 28 27 if( !namespaceScopesCollection.IsExist( namespaceScopes ) ){ … … 46 45 } 47 46 48 if( namespaceScopes.size() > 0){47 if( !namespaceScopes.empty() ){ 49 48 compiler.errorMessenger.Output( 63, NULL, cp ); 50 49 isSuccessful = false; -
trunk/ab5.0/abdev/BasicCompiler_Common/src/LexicalAnalyzer_Class.cpp
r750 r828 15 15 void LexicalAnalyzer::CollectClassesForNameOnly( const char *source, Classes &classes ) 16 16 { 17 int i , i2;17 int i2; 18 18 char temporary[VN_SIZE]; 19 19 … … 25 25 compiler.GetNamespaceSupporter().ClearImportedNamespaces(); 26 26 27 for(i =0;;i++){27 for(int i=0;;i++){ 28 28 if(source[i]=='\0') break; 29 29 30 30 if( source[i] == 1 && source[i+1] == ESC_NAMESPACE ){ 31 for(i+=2,i2=0;;i2++,i++){ 32 if( IsCommandDelimitation( source[i] ) ){ 33 temporary[i2]=0; 34 break; 35 } 36 temporary[i2]=source[i]; 37 } 38 namespaceScopes.push_back( temporary ); 31 i+=2; 32 char const* p = &source[i]; 33 while (!IsCommandDelimitation(source[i])) 34 { 35 ++i; 36 } 37 namespaceScopes.push_back(std::string(p, &source[i])); 39 38 40 39 continue; … … 52 51 } 53 52 else if( source[i] == 1 && source[i+1] == ESC_IMPORTS ){ 54 for(i+=2,i2=0;;i2++,i++){55 if( IsCommandDelimitation( source[i] ) ){56 temporary[i2]=0;57 break;58 }59 temporary[i2]=source[i];60 }61 if ( !compiler.GetNamespaceSupporter().ImportsNamespace( temporary ))62 { 63 compiler.errorMessenger.Output(64, temporary,i);53 i+=2; 54 char const* p = &source[i]; 55 while (!IsCommandDelimitation(source[i])) 56 { 57 ++i; 58 } 59 std::string s(p, &source[i]); 60 if (!compiler.GetNamespaceSupporter().ImportsNamespace(s)) 61 { 62 compiler.errorMessenger.Output(64, s.c_str(), i); 64 63 } 65 64 … … 1348 1347 delete pobj_LoopRefCheck; 1349 1348 pobj_LoopRefCheck=0; 1350 1351 // イテレータの準備1352 classes.Iterator_Init();1353 1349 } 1354 1350 … … 1412 1408 1413 1409 compiler.GetObjectModule().meta.GetUserProcs().Put( pUserProc ); 1414 compiler.GetObjectModule().meta.GetUserProcs().Iterator_Init();1415 1410 1416 1411 LexicalAnalyzer::AddMethod( … … 1522 1517 else 1523 1518 { 1524 for( int i=0; i<pInterface->GetDynamicMethods().size(); i++ )1519 for( std::size_t i=0; i<pInterface->GetDynamicMethods().size(); i++ ) 1525 1520 { 1526 1521 if( pInterface->GetDynamicMethods()[i]->IsAbstract() != pExpandedInterface->GetDynamicMethods()[i]->IsAbstract() ) -
trunk/ab5.0/abdev/BasicCompiler_Common/src/LexicalAnalyzer_Const.cpp
r637 r828 85 85 86 86 int i2; 87 char temporary[1024];88 87 89 88 // 名前空間管理 … … 91 90 namespaceScopes.clear(); 92 91 93 for(int i=0;;i++){ 92 for (int i = 0; ; ++i) 93 { 94 94 if( source[i] == '\0' ) break; 95 95 96 96 if( source[i] == 1 && source[i+1] == ESC_NAMESPACE ){ 97 for(i+=2,i2=0;;i2++,i++){ 98 if( IsCommandDelimitation( source[i] ) ){ 99 temporary[i2]=0; 100 break; 101 } 102 temporary[i2]=source[i]; 103 } 104 namespaceScopes.push_back( temporary ); 97 i+=2; 98 char const* p = &source[i]; 99 while (!IsCommandDelimitation(source[i])) 100 { 101 ++i; 102 } 103 namespaceScopes.push_back(std::string(p, &source[i])); 105 104 106 105 continue; … … 131 130 } 132 131 132 char const* beginTemp = &source[i]; 133 char const* endTemp = &source[i]; 134 133 135 for(i2=0;;i++,i2++){ 134 136 if(source[i]=='\"'){ 135 temporary[i2]=source[i];136 137 for(i++,i2++;;i++,i2++){ 137 temporary[i2]=source[i];138 138 if(source[i]=='\"') break; 139 139 } … … 141 141 } 142 142 if(IsCommandDelimitation(source[i])){ 143 temporary[i2]=0;143 endTemp = beginTemp + i2; 144 144 break; 145 145 } 146 temporary[i2]=source[i];147 146 } 148 147 149 148 //名前を取得 150 char name[VN_SIZE];149 char const* nameEnd; 151 150 for(i2=0;;i2++){ 152 if( temporary[i2]=='\0'){151 if(beginTemp[i2]=='\0'){ 153 152 compiler.errorMessenger.Output(10,"Const",cp); 154 153 return; 155 154 } 156 if( temporary[i2]=='='||temporary[i2]=='('){157 name [i2]=0;155 if(beginTemp[i2]=='='||beginTemp[i2]=='('){ 156 nameEnd = beginTemp + i2; 158 157 break; 159 158 } 160 name[i2]=temporary[i2];161 }159 } 160 std::string name(beginTemp, nameEnd); 162 161 163 162 //重複チェック … … 165 164 || compiler.GetObjectModule().meta.GetGlobalConsts().IsExistDuplicationKeyName( name ) ) 166 165 { 167 compiler.errorMessenger.Output(15, name,cp);166 compiler.errorMessenger.Output(15, name, cp); 168 167 return; 169 168 } 170 169 171 if( temporary[i2] == '=' )170 if( beginTemp[i2] == '=' ) 172 171 { 173 172 // 定数 174 const char *expression = temporary + i2 + 1;173 std::string expression(beginTemp + i2 + 1, endTemp); 175 174 176 175 _int64 i64data; 177 176 Type resultType; 178 if( StaticCalculation(false, expression , 0, &i64data, resultType) )177 if( StaticCalculation(false, expression.c_str(), 0, &i64data, resultType) ) 179 178 { 180 179 consts.Add( Symbol( namespaceScopes, name ), i64data, resultType ); … … 184 183 { 185 184 // 定数マクロ 186 const char *params = temporary + i2;187 if( !constMacros.Add( Symbol( namespaceScopes, name ), params ) )185 std::string params(beginTemp + i2, endTemp); 186 if( !constMacros.Add( Symbol( namespaceScopes, name ), params.c_str() ) ) 188 187 { 189 188 compiler.errorMessenger.Output( 1, NULL, i ); … … 206 205 } 207 206 } 208 209 // イテレータを初期化 210 compiler.GetObjectModule().meta.GetGlobalConsts().Iterator_Init(); 211 compiler.GetObjectModule().meta.GetGlobalConstMacros().Iterator_Init(); 212 } 213 214 bool LexicalAnalyzer::ConstMacroToExpression( const ConstMacro &constMacro, const char *parameterStr, char *dest ) 215 { 216 extern HANDLE hHeap; 217 int i2,i3,i4,num; 207 } 208 209 bool LexicalAnalyzer::ConstMacroToExpression( const ConstMacro &constMacro, const char *parameterStr, char *dest, std::size_t destSize ) 210 { 211 std::string s; 212 auto ret = ConstMacroToExpression(constMacro, parameterStr, s); 213 strcpy_s(dest, destSize, s.c_str()); 214 return ret; 215 } 216 217 bool LexicalAnalyzer::ConstMacroToExpression( const ConstMacro &constMacro, const char *parameterStr, std::string& dest ) 218 { 219 int i2,i3; 218 220 char temporary[VN_SIZE]; 219 char *pParms[MAX_PARMS];220 num=0;221 std::vector<std::string> Parms; 222 dest.reserve(8192); 221 223 i2=0; 222 224 while(1){ 223 225 i2=GetOneParameter(parameterStr,i2,temporary); 224 226 225 pParms[num]=(char *)HeapAlloc(hHeap,0,lstrlen(temporary)+1); 226 lstrcpy(pParms[num],temporary); 227 228 num++; 227 Parms.push_back(temporary); 228 229 229 if(parameterStr[i2]=='\0') break; 230 230 } 231 if( num!= constMacro.GetParameters().size() ){231 if( Parms.size() != constMacro.GetParameters().size() ){ 232 232 extern int cp; 233 for(i2=0;i2<num;i2++) HeapDefaultFree(pParms[i2]);234 233 compiler.errorMessenger.Output(10,constMacro.GetName().c_str(),cp); 235 lstrcpy(dest,"0");234 dest = '0'; 236 235 return true; 237 236 } 238 237 239 238 i2=0; 240 i4=0;241 239 while(1){ 242 240 … … 257 255 if( i3 == (int)constMacro.GetParameters().size() ){ 258 256 //パラメータでないとき 259 lstrcpy(dest+i4,temporary); 260 i4+=lstrlen(temporary); 257 dest += temporary; 261 258 } 262 259 else{ 263 260 //パラメータのとき 264 lstrcpy(dest+i4,pParms[i3]); 265 i4+=lstrlen(pParms[i3]); 261 dest += Parms[i3]; 266 262 } 267 263 268 264 //演算子をコピー 269 for(;;i2++ ,i4++){265 for(;;i2++){ 270 266 if( constMacro.GetExpression()[i2] == 1 ){ 271 dest [i4++]= constMacro.GetExpression()[i2++];272 dest [i4]= constMacro.GetExpression()[i2];267 dest += constMacro.GetExpression()[i2++]; 268 dest += constMacro.GetExpression()[i2]; 273 269 continue; 274 270 } 275 271 if(IsVariableTopChar( constMacro.GetExpression()[i2] )) break; 276 dest [i4]= constMacro.GetExpression()[i2];272 dest += constMacro.GetExpression()[i2]; 277 273 if( constMacro.GetExpression()[i2] == '\0' ) break; 278 274 } … … 281 277 } 282 278 283 for(i2=0;i2<num;i2++) HeapDefaultFree(pParms[i2]);284 285 279 return true; 286 280 } -
trunk/ab5.0/abdev/BasicCompiler_Common/src/LexicalAnalyzer_Delegate.cpp
r750 r828 5 5 void LexicalAnalyzer::CollectDelegates( const char *source, Delegates &delegates ) 6 6 { 7 int i2;8 char temporary[VN_SIZE];9 10 7 // 名前空間管理 11 8 NamespaceScopes &namespaceScopes = compiler.GetNamespaceSupporter().GetLivingNamespaceScopes(); … … 15 12 compiler.GetNamespaceSupporter().ClearImportedNamespaces(); 16 13 17 int length = lstrlen( source ); 18 for( int i=0; i<length; i++ ) 14 for (int i=0; source[i] != '\0'; i++) 19 15 { 20 16 if( source[i] == 1 && source[i+1] == ESC_NAMESPACE ){ 21 for(i+=2,i2=0;;i2++,i++){ 22 if( IsCommandDelimitation( source[i] ) ){ 23 temporary[i2]=0; 24 break; 25 } 26 temporary[i2]=source[i]; 27 } 28 namespaceScopes.push_back( temporary ); 17 i+=2; 18 char const* p = &source[i]; 19 while (!IsCommandDelimitation(source[i])) 20 { 21 ++i; 22 } 23 namespaceScopes.push_back(std::string(p, &source[i])); 29 24 30 25 continue; … … 42 37 } 43 38 else if( source[i] == 1 && source[i+1] == ESC_IMPORTS ){ 44 for(i+=2,i2=0;;i2++,i++){45 if( IsCommandDelimitation( source[i] ) ){46 temporary[i2]=0;47 break;48 }49 temporary[i2]=source[i];50 }51 if ( !compiler.GetNamespaceSupporter().ImportsNamespace( temporary ))52 { 53 compiler.errorMessenger.Output(64, temporary,i);39 i+=2; 40 char const* p = &source[i]; 41 while (!IsCommandDelimitation(source[i])) 42 { 43 ++i; 44 } 45 std::string s(p, &source[i]); 46 if (!compiler.GetNamespaceSupporter().ImportsNamespace(s)) 47 { 48 compiler.errorMessenger.Output(64, s.c_str(), i); 54 49 } 55 50 … … 112 107 { 113 108 compiler.errorMessenger.Output(-104,name,nowLine); 114 lstrcpy( returnTypeName, "Double" );109 strcpy( returnTypeName, "Double" ); 115 110 } 116 111 } … … 127 122 Jenga::Common::SourceTemplate sourceTemplate( ActiveBasic::Common::Environment::GetAbdevSystemDirPath() + "\\templates\\delegate_class.tab" ); 128 123 129 delegates.Iterator_Reset(); 130 while( delegates.Iterator_HasNext() ) 131 { 132 const Delegate &dg = *delegates.Iterator_GetNext(); 124 foreach (auto pDelegate, delegates) 125 { 126 const Delegate &dg = *pDelegate; 133 127 134 128 if( dg.IsExternal() ) … … 263 257 void LexicalAnalyzer::RefleshDelegatesParameterAndReturnType( Delegates &delegates ) 264 258 { 265 delegates.Iterator_Reset(); 266 while( delegates.Iterator_HasNext() ) 267 { 268 Delegate &dg = *delegates.Iterator_GetNext(); 269 RefleshDelegateParameterAndReturnType( dg ); 270 } 271 } 259 foreach (auto *pDelegate, delegates) 260 { 261 RefleshDelegateParameterAndReturnType(*pDelegate); 262 } 263 } -
trunk/ab5.0/abdev/BasicCompiler_Common/src/LexicalAnalyzer_Procedure.cpp
r750 r828 913 913 914 914 if( source[i] == 1 && source[i+1] == ESC_NAMESPACE ){ 915 for(i+=2,i2=0;;i2++,i++){ 916 if( IsCommandDelimitation( source[i] ) ){ 917 temporary[i2]=0; 918 break; 919 } 920 temporary[i2]=source[i]; 921 } 922 namespaceScopes.push_back( temporary ); 915 i+=2; 916 char const* p = &source[i]; 917 while (!IsCommandDelimitation(source[i])) 918 { 919 ++i; 920 } 921 namespaceScopes.push_back(std::string(p, &source[i])); 923 922 924 923 continue; … … 936 935 } 937 936 else if( source[i] == 1 && source[i+1] == ESC_IMPORTS ){ 938 for(i+=2,i2=0;;i2++,i++){939 if( IsCommandDelimitation( source[i] ) ){940 temporary[i2]=0;941 break;942 }943 temporary[i2]=source[i];944 }945 if ( !compiler.GetNamespaceSupporter().ImportsNamespace( temporary ))946 { 947 compiler.errorMessenger.Output(64, temporary,cp);937 i+=2; 938 char const* p = &source[i]; 939 while (!IsCommandDelimitation(source[i])) 940 { 941 ++i; 942 } 943 std::string s(p, &source[i]); 944 if (!compiler.GetNamespaceSupporter().ImportsNamespace(s)) 945 { 946 compiler.errorMessenger.Output(64, s.c_str(), i); 948 947 } 949 948 -
trunk/ab5.0/abdev/BasicCompiler_Common/src/LexicalAnalyzer_TypeDef.cpp
r668 r828 1 1 #include "stdafx.h" 2 #include <abdev/ab_common/include/ab_common.h> 3 #include "LexicalAnalyzer.h" 4 #include "Compiler.h" 5 #include "StrOperation.h" 6 #include <boost/algorithm/string/predicate.hpp> 2 7 3 8 using namespace ActiveBasic::Compiler; 4 9 5 void LexicalAnalyzer::AddTypeDef( TypeDefCollection &typeDefs, const NamespaceScopes &namespaceScopes, const std::string&expression, int nowLine )10 void LexicalAnalyzer::AddTypeDef( TypeDefCollection &typeDefs, const NamespaceScopes &namespaceScopes, const boost::iterator_range<char const*> &expression, int nowLine ) 6 11 { 7 int i; 8 char temporary[VN_SIZE]; 12 auto name = boost::find<boost::return_begin_found>(expression, '='); 9 13 10 for(i=0;;i++){ 11 if(expression[i]=='='||expression[i]=='\0'){ 12 temporary[i]=0; 13 break; 14 } 15 temporary[i]=expression[i]; 16 } 17 18 if(expression[i]!='='){ 19 compiler.errorMessenger.Output(10,"TypeDef",nowLine); 14 if (boost::end(name) == boost::end(expression)) 15 { 16 compiler.errorMessenger.Output(10, "TypeDef", nowLine); 20 17 return; 21 18 } 22 19 23 const char *pTemp =expression.c_str()+i+1;20 const char *pTemp = expression.begin() + boost::size(name) + 1; 24 21 25 22 //識別文字のエラーチェック(新しい型) 26 i=0; 27 for(;;i++){ 28 if(temporary[i]=='\0') break; 29 if( !( IsVariableChar( temporary[i], true) ) ){ 30 compiler.errorMessenger.Output(10,"TypeDef",nowLine); 31 return; 32 } 23 if (!boost::algorithm::all(name, [](char c) {return IsVariableChar(c, true);})) 24 { 25 compiler.errorMessenger.Output(10, "TypeDef", nowLine); 26 return; 33 27 } 34 28 … … 41 35 } 42 36 } 43 else{ 44 i=0; 37 else 38 { 39 int i=0; 45 40 while(pTemp[i]=='*') i++; 46 for(;;i++){ 47 if(pTemp[i]=='\0') break; 48 if( !( IsVariableChar( pTemp[i], true) ) ) 49 { 50 compiler.errorMessenger.Output(10,"TypeDef",nowLine); 51 return; 52 } 41 if (!boost::algorithm::all(name, [](char c) {return IsVariableChar(c, true);})) 42 { 43 compiler.errorMessenger.Output(10,"TypeDef",nowLine); 44 return; 53 45 } 54 46 } 55 47 48 std::string baseName(pTemp, expression.end()); 49 56 50 //識別子が重複している場合はエラーにする 57 if(lstrcmp(temporary,pTemp)==0){ 51 if (boost::algorithm::equals(name, baseName)) 52 { 58 53 compiler.errorMessenger.Output(1,NULL,nowLine); 59 54 return; … … 67 62 68 63 Type baseType; 69 if( !compiler.StringToType( pTemp, baseType ) )64 if( !compiler.StringToType( baseName, baseType ) ) 70 65 { 71 compiler.errorMessenger.Output(3, pTemp, nowLine );66 compiler.errorMessenger.Output(3, baseName, nowLine ); 72 67 return; 73 68 } … … 75 70 typeDefs.push_back( 76 71 TypeDef( 77 Symbol( namespaceScopes, temporary),78 pTemp,72 Symbol(namespaceScopes, boost::copy_range<std::string>(name)), 73 baseName, 79 74 baseType 80 75 ) … … 90 85 compiler.GetNamespaceSupporter().ClearImportedNamespaces(); 91 86 92 int i=-1, i2; 93 char temporary[VN_SIZE]; 94 while(1){ 95 96 i++; 97 87 for (int i = 0; ; ++i) 88 { 98 89 if( source[i] == 1 && source[i+1] == ESC_NAMESPACE ){ 99 for(i+=2,i2=0;;i2++,i++){ 100 if( IsCommandDelimitation( source[i] ) ){ 101 temporary[i2]=0; 102 break; 103 } 104 temporary[i2]=source[i]; 90 i+=2; 91 char const* p = &source[i]; 92 while (!IsCommandDelimitation(source[i])) 93 { 94 ++i; 105 95 } 106 namespaceScopes.push_back( temporary);96 namespaceScopes.push_back(std::string(p, &source[i])); 107 97 108 98 continue; … … 120 110 } 121 111 else if( source[i] == 1 && source[i+1] == ESC_IMPORTS ){ 122 for(i+=2,i2=0;;i2++,i++){ 123 if( IsCommandDelimitation( source[i] ) ){ 124 temporary[i2]=0; 125 break; 126 } 127 temporary[i2]=source[i]; 112 i+=2; 113 char const* p = &source[i]; 114 while (!IsCommandDelimitation(source[i])) 115 { 116 ++i; 128 117 } 129 if( !compiler.GetNamespaceSupporter().ImportsNamespace( temporary ) ) 118 std::string s(p, &source[i]); 119 if (!compiler.GetNamespaceSupporter().ImportsNamespace(s)) 130 120 { 131 compiler.errorMessenger.Output(64, temporary,i);121 compiler.errorMessenger.Output(64, s.c_str(), i); 132 122 } 133 123 … … 144 134 char temporary[VN_SIZE]; 145 135 if(source[i+1]==ESC_TYPEDEF){ 146 int i2 = 0; 147 for(i+=2;;i2++,i++){ 148 if(source[i]=='\n'){ 149 temporary[i2]=0; 150 break; 151 } 152 temporary[i2]=source[i]; 153 if(source[i]=='\0') break; 136 i+=2; 137 char const* p = &source[i]; 138 while (!IsCommandDelimitation(source[i])) 139 { 140 ++i; 154 141 } 155 AddTypeDef( typeDefs, namespaceScopes, temporary, i ); 156 142 AddTypeDef(typeDefs, namespaceScopes, boost::make_iterator_range(p, &source[i]), i); 157 143 continue; 158 144 } … … 168 154 } 169 155 170 Type baseType;171 if( !compiler.StringToType( "Long", baseType ) )172 {173 throw;174 }175 176 156 typeDefs.push_back( 177 157 TypeDef( 178 158 Symbol( namespaceScopes, temporary ), 179 159 "Long", 180 baseType160 Type(DEF_LONG) 181 161 ) 182 162 ); -
trunk/ab5.0/abdev/BasicCompiler_Common/src/Linker.cpp
r750 r828 257 257 nativeCode.PutEx( masterObjectModule.globalNativeCode ); 258 258 259 masterObjectModule.meta.GetUserProcs().Iterator_Reset(); 260 while( masterObjectModule.meta.GetUserProcs().Iterator_HasNext() ) 261 { 262 const UserProc *pUserProc = masterObjectModule.meta.GetUserProcs().Iterator_GetNext(); 263 259 foreach (auto pUserProc, masterObjectModule.meta.GetUserProcs()) 260 { 264 261 if( pUserProc->GetNativeCode().GetSize() > 0 ) 265 262 { -
trunk/ab5.0/abdev/BasicCompiler_Common/src/ProcedureGenerator.cpp
r750 r828 18 18 int back_cp=cp; 19 19 20 classes.Iterator_Reset();21 while(classes.Iterator_HasNext()){22 CClass &objClass = * classes.Iterator_GetNext();20 foreach(auto pClass, classes) 21 { 22 CClass &objClass = *pClass; 23 23 if( objClass.IsExternal() ) 24 24 { … … 83 83 //////////////////////////////////////////////////////////////////// 84 84 85 // イテレータをリセット 86 classes.Iterator_Reset(); 87 88 while( classes.Iterator_HasNext() ){ 89 const CClass &objClass = *classes.Iterator_GetNext(); 85 foreach (auto pClass, classes) 86 { 87 const CClass &objClass = *pClass; 90 88 91 89 if( !objClass.IsUsing() ){ … … 152 150 ChangeOpcode( temporary ); 153 151 154 // イテレータをリセット 155 classes.Iterator_Reset(); 156 157 while( classes.Iterator_HasNext() ){ 158 const CClass &objClass = *classes.Iterator_GetNext(); 152 foreach (auto pClass, classes) 153 { 154 const CClass &objClass = *pClass; 159 155 160 156 if( !objClass.IsUsing() ){ -
trunk/ab5.0/abdev/BasicCompiler_Common/src/VtblGenerator.cpp
r750 r828 93 93 void VtblGenerator::GenerateVTablesForAllClasses( Classes &classes ) 94 94 { 95 classes.Iterator_Reset(); 96 while( classes.Iterator_HasNext() ) 95 foreach (auto pClass, classes) 97 96 { 98 CClass *pClass = classes.Iterator_GetNext();99 97 GenerateFullVTables( *pClass ); 100 98 … … 177 175 void VtblGenerator::ActionVtblScheduleForAllClasses( Classes &classes, LONG_PTR ImageBase, LONG_PTR MemPos_CodeSection, LONG_PTR MemPos_DataSection ) 178 176 { 179 classes.Iterator_Reset(); 180 while( classes.Iterator_HasNext() ) 177 foreach(auto pClass, classes) 181 178 { 182 CClass *pClass = classes.Iterator_GetNext();183 179 ActionVtblSchedule( *pClass, ImageBase, MemPos_CodeSection, MemPos_DataSection ); 184 180
Note:
See TracChangeset
for help on using the changeset viewer.