Changeset 308 in dev for trunk/abdev/BasicCompiler32
- Timestamp:
- Aug 29, 2007, 9:05:22 AM (17 years ago)
- Location:
- trunk/abdev/BasicCompiler32
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/Compile_Calc_PushVar.cpp
r290 r308 59 59 } 60 60 } 61 void SetReg_WholeVariable( Type &type, RELATIVE_VAR *pRelativeVar,int reg, bool is64Head)61 void SetReg_WholeVariable( const Type &type, RELATIVE_VAR *pRelativeVar,int reg, bool is64Head) 62 62 { 63 63 int varSize; -
trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp
r299 r308 226 226 Compile_AddGlobalRootsForGc(); 227 227 } 228 else if( userProc.GetName() == compiler.globalAreaProcName ){ 229 //////////////////////////////////////// 230 // グローバル領域をコンパイル 231 //////////////////////////////////////// 232 233 const UserProc *pBackUserProc = &UserProc::CompilingUserProc(); 234 UserProc::CompileStartForGlobalArea(); 235 236 int BackCp = cp; 237 cp=-1; 238 239 //クラスに属する静的メンバを定義 240 compiler.GetObjectModule().meta.GetClasses().InitStaticMember(); 241 242 //グローバル実行領域をコンパイル開始 243 CompileBuffer(0,0); 244 245 //Goto未知ラベルスケジュールが存在したらエラーにする 246 BOOST_FOREACH( const GotoLabelSchedule *pGotoLabelSchedule, compiler.codeGenerator.gotoLabelSchedules ) 247 { 248 if(pGotoLabelSchedule->GetName().size()>0){ 249 SetError(6,pGotoLabelSchedule->GetName(),pGotoLabelSchedule->GetSourceCodePos()); 250 } 251 else{ 252 char temporary[255]; 253 sprintf(temporary,"%d",pGotoLabelSchedule->GetLineNum()); 254 SetError(6,temporary,pGotoLabelSchedule->GetSourceCodePos()); 255 } 256 } 257 258 UserProc::CompileStartForUserProc( pBackUserProc ); 259 cp=BackCp; 260 } 228 261 else{ 229 262 SetError(); … … 422 455 //Continueアドレスを初期化 423 456 compiler.codeGenerator.ClearContinueArea(); 457 458 //レキシカルスコープ情報を初期化 459 compiler.codeGenerator.lexicalScopes.Init( compiler.codeGenerator.GetNativeCodeSize() ); 424 460 425 461 const PertialSchedule *pEspOffsetPertialSchedule = NULL; … … 768 804 } 769 805 void CompileLocal(){ 770 if( compiler.IsDll() ){ 806 if( compiler.IsDll() ) 807 { 771 808 //DLLの場合はグローバル変数を初期化するための関数を一番初めにコンパイルする 772 809 const UserProc *pUserProc=GetSubHash("_System_InitDllGlobalVariables"); … … 775 812 } 776 813 else SetError(300,NULL,cp); 814 } 815 else 816 { 817 // グローバル領域を一番初めにコンパイルする 818 extern const UserProc *pSub_System_GlobalArea; 819 CompileBufferInProcedure( *pSub_System_GlobalArea ); 777 820 } 778 821 -
trunk/abdev/BasicCompiler32/MakePeHdr.cpp
r294 r308 7 7 #include <jenga/include/smoothie/Smoothie.h> 8 8 9 #include <LexicalScope.h>10 9 #include <Class.h> 11 10 #include <Compiler.h> 12 #include <NamespaceSupporter.h>13 11 14 12 #include <../Enum.h> … … 18 16 #include "Opcode.h" 19 17 20 extern int GlobalOpBufferSize;21 22 18 23 19 //////////////////////////// … … 28 24 const UserProc 29 25 *pSub_System_StartupProgram, 26 *pSub_System_GlobalArea, 30 27 *pSub_DebugSys_StartProc, 31 28 *pSub_DebugSys_EndProc, … … 106 103 107 104 108 void DebugVariable(void){109 char temporary[255];110 if( compiler.GetObjectModule().meta.GetGlobalVars().Find( Symbol( "_DebugSys_dwThreadID" ) ) == NULL )111 {112 // 未定義の場合は定義する113 sprintf(temporary,"_DebugSys_dwThreadID[255]%c%cDWord",1,ESC_AS);114 OpcodeDim(temporary,DIMFLAG_INITDEBUGVAR);115 sprintf(temporary,"_DebugSys_ProcNum[255]%c%cDWord",1,ESC_AS);116 OpcodeDim(temporary,DIMFLAG_INITDEBUGVAR);117 sprintf(temporary,"_DebugSys_lplpObp[255]%c%c*ULONG_PTR",1,ESC_AS);118 OpcodeDim(temporary,DIMFLAG_INITDEBUGVAR);119 sprintf(temporary,"_DebugSys_lplpSpBase[255]%c%c*ULONG_PTR",1,ESC_AS);120 OpcodeDim(temporary,DIMFLAG_INITDEBUGVAR);121 }122 }123 124 105 void Compile(void){ 125 106 extern HWND hMainDlg; … … 220 201 pSub_System_StartupProgram->Using(); 221 202 203 if(pSub_System_GlobalArea=GetSubHash(compiler.globalAreaProcName.c_str(),1)) 204 { 205 pSub_System_GlobalArea->Using(); 206 pSub_System_GlobalArea->ThisIsAutoGenerationProc(); 207 } 208 222 209 if(pSub_DebugSys_StartProc=GetSubHash("_DebugSys_StartProc",1)) 223 210 pSub_DebugSys_StartProc->Using(); … … 392 379 if(bDebugCompile) 393 380 { 394 // デバッグ用の変数を定義381 // デバッグ用の変数を定義 395 382 DebugVariable(); 396 383 } 397 384 398 // GC用の変数を定義385 // GC用の変数を定義 399 386 InitGCVariables(); 400 387 401 // _System_StartupProgramの呼び出し388 // _System_StartupProgram の呼び出し 402 389 compiler.codeGenerator.op_call(pSub_System_StartupProgram); 403 390 } 404 391 405 //クラスに属する静的メンバを定義 406 compiler.GetObjectModule().meta.GetClasses().InitStaticMember(); 407 408 //グローバル実行領域をコンパイル開始 409 CompileBuffer(0,0); 410 411 //Goto未知ラベルスケジュールが存在したらエラーにする 412 BOOST_FOREACH( const GotoLabelSchedule *pGotoLabelSchedule, compiler.codeGenerator.gotoLabelSchedules ) 413 { 414 if(pGotoLabelSchedule->GetName().size()>0){ 415 SetError(6,pGotoLabelSchedule->GetName(),pGotoLabelSchedule->GetSourceCodePos()); 416 } 417 else{ 418 sprintf(temporary,"%d",pGotoLabelSchedule->GetLineNum()); 419 SetError(6,temporary,pGotoLabelSchedule->GetSourceCodePos()); 420 } 421 } 422 392 // _System_GlobalArea の呼び出し 393 compiler.codeGenerator.op_call( pSub_System_GlobalArea ); 423 394 424 395 if( !compiler.IsStaticLibrary() ) … … 444 415 445 416 //グローバル実行領域のコードサイズ 417 extern int GlobalOpBufferSize; 446 418 GlobalOpBufferSize = compiler.linker.GetNativeCode().GetSize(); 447 419 -
trunk/abdev/BasicCompiler32/NumOpe_Logical.cpp
r290 r308 450 450 451 451 //cmp eax,0 452 compiler.codeGenerator.op_cmp_value(Type(type[sp-1] ,-1).GetSize(),REG_EAX,0);452 compiler.codeGenerator.op_cmp_value(Type(type[sp-1]).GetSize(),REG_EAX,0); 453 453 454 454 //setne al -
trunk/abdev/BasicCompiler32/Opcode.h
r301 r308 147 147 //Compile_Calc_PushVar.cpp 148 148 void SetReg_RealVariable(int type,RELATIVE_VAR *pRelativeVar); 149 void SetReg_WholeVariable( Type &type, RELATIVE_VAR *pRelativeVar,int reg, bool is64Head = false);149 void SetReg_WholeVariable( const Type &type, RELATIVE_VAR *pRelativeVar,int reg, bool is64Head = false); 150 150 void PushLongVariable(RELATIVE_VAR *pRelativeVar); 151 151
Note:
See TracChangeset
for help on using the changeset viewer.