Changeset 276 in dev for trunk/abdev/BasicCompiler32
- Timestamp:
- Aug 12, 2007, 1:25:20 AM (17 years ago)
- Location:
- trunk/abdev/BasicCompiler32
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp
r275 r276 120 120 }; 121 121 122 compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allrem, 178 , false) );122 compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allrem, 178 ) ); 123 123 } 124 124 else if( userProc.GetName() == "_aullrem" ){ … … 136 136 }; 137 137 138 compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_aullrem, 117 , false) );138 compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_aullrem, 117 ) ); 139 139 } 140 140 else if( userProc.GetName() == "_allmul" ){ … … 144 144 }; 145 145 146 compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allmul, 52 , false) );146 compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allmul, 52 ) ); 147 147 } 148 148 else if( userProc.GetName() == "_alldiv" ){ … … 152 152 }; 153 153 154 compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_alldiv, 170 , false) );154 compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_alldiv, 170 ) ); 155 155 } 156 156 else if( userProc.GetName() == "_aulldiv" ){ … … 167 167 }; 168 168 169 compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_aulldiv, 104 , false) );169 compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_aulldiv, 104 ) ); 170 170 } 171 171 else if( userProc.GetName() == "_allshl" ){ … … 175 175 }; 176 176 177 compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allshl, 31 , false) );177 compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allshl, 31 ) ); 178 178 } 179 179 else if( userProc.GetName() == "_allshr" ){ … … 183 183 }; 184 184 185 compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allshr, 33 , false) );185 compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allshr, 33 ) ); 186 186 } 187 187 else if( userProc.GetName() == "_aullshr" ){ … … 207 207 }; 208 208 209 compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_aullshr, 31 , false) );209 compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_aullshr, 31 ) ); 210 210 } 211 211 else{ … … 262 262 else bDebugSupportProc=0; 263 263 264 extern int obp; 265 pUserProc->_beginOpAddressOld = obp; 264 if( pUserProc->GetCodeSize() != 0 ) 265 { 266 // 既にコード生成が行われている場合はエラー 267 SetError(); 268 } 266 269 267 270 //コンパイル中の関数が属するクラス … … 292 295 293 296 SystemProc(*pUserProc); 294 295 pUserProc->_endOpAddressOld = obp;296 297 return; 297 298 } … … 399 400 //プロシージャ抜け出しスケジュール(Exit Sub/Function) 400 401 compiler.codeGenerator.exitSubCodePositions.clear(); 401 compiler.codeGenerator._exitSubCodePositions_ObpOld.clear();402 402 403 403 //ラベル管理オブジェクトを初期化 … … 727 727 728 728 729 pUserProc->_endOpAddressOld = obp;730 731 732 729 //重複エラー情報管理のメモリを解放 733 730 for(i3=0;i3<SynonymErrorNum;i3++) HeapDefaultFree(SynonymErrorWords[i3]); -
trunk/abdev/BasicCompiler32/Compile_Statement.cpp
r261 r276 240 240 241 241 //レキシカルスコープをレベルアップ 242 extern int obp; 243 compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_IF ); 242 compiler.codeGenerator.lexicalScopes.Start( 243 compiler.codeGenerator.GetNativeCodeSize(), 244 LexicalScope::SCOPE_TYPE_IF 245 ); 244 246 245 247 i2=CompileBuffer(ESC_ENDIF,0); … … 263 265 264 266 //レキシカルスコープをレベルアップ 265 compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_IF ); 267 compiler.codeGenerator.lexicalScopes.Start( 268 compiler.codeGenerator.GetNativeCodeSize(), 269 LexicalScope::SCOPE_TYPE_IF 270 ); 266 271 267 272 CompileBuffer(ESC_ENDIF,0); … … 320 325 { 321 326 //jmp ... 322 extern int obp; 323 compiler.codeGenerator.op_jmp( i-obp, sizeof(long), false, true ); 327 compiler.codeGenerator.op_jmp( 328 i-compiler.codeGenerator.GetNativeCodeSize(), 329 sizeof(long), 330 false, 331 true 332 ); 324 333 } 325 334 } … … 336 345 { 337 346 //jmp ... 338 extern int obp; 339 compiler.codeGenerator.op_jmp( i-obp, sizeof(long), false, true ); 347 compiler.codeGenerator.op_jmp( 348 i-compiler.codeGenerator.GetNativeCodeSize(), 349 sizeof(long), 350 false, 351 true 352 ); 340 353 } 341 354 } … … 445 458 446 459 //レキシカルスコープをレベルアップ 447 extern int obp; 448 compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_WHILE ); 460 compiler.codeGenerator.lexicalScopes.Start( compiler.codeGenerator.GetNativeCodeSize(), LexicalScope::SCOPE_TYPE_WHILE ); 449 461 450 462 //While内をコンパイル … … 562 574 563 575 //レキシカルスコープをレベルアップ 564 extern int obp; 565 compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_FOR ); 576 compiler.codeGenerator.lexicalScopes.Start( compiler.codeGenerator.GetNativeCodeSize(), LexicalScope::SCOPE_TYPE_FOR ); 566 577 567 578 //For内をコンパイル … … 599 610 600 611 //レキシカルスコープをレベルアップ 601 extern int obp; 602 compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_DO ); 612 compiler.codeGenerator.lexicalScopes.Start( compiler.codeGenerator.GetNativeCodeSize(), LexicalScope::SCOPE_TYPE_DO ); 603 613 604 614 //Do内をコンパイル … … 1040 1050 1041 1051 //レキシカルスコープをレベルアップ 1042 extern int obp; 1043 compiler.codeGenerator.lexicalScopes.Start( obp, LexicalScope::SCOPE_TYPE_SELECT ); 1052 compiler.codeGenerator.lexicalScopes.Start( compiler.codeGenerator.GetNativeCodeSize(), LexicalScope::SCOPE_TYPE_SELECT ); 1044 1053 1045 1054 //Select Case内をコンパイル … … 1090 1099 void OpcodeGosub(char *Parameter){ 1091 1100 extern HANDLE hHeap; 1092 extern int obp;1093 1101 int i,LineNum; 1094 1102 … … 1104 1112 { 1105 1113 //jmp ... 1106 compiler.codeGenerator.op_jmp( i-obp, sizeof(long), false, true ); 1114 compiler.codeGenerator.op_jmp( 1115 i-compiler.codeGenerator.GetNativeCodeSize(), 1116 sizeof(long), 1117 false, 1118 true 1119 ); 1107 1120 } 1108 1121 } … … 1119 1132 { 1120 1133 //jmp ... 1121 compiler.codeGenerator.op_jmp( i-obp, sizeof(long), false, true ); 1134 compiler.codeGenerator.op_jmp( 1135 i-compiler.codeGenerator.GetNativeCodeSize(), 1136 sizeof(long), 1137 false, 1138 true 1139 ); 1122 1140 } 1123 1141 } -
trunk/abdev/BasicCompiler32/Compile_Var.cpp
r275 r276 1300 1300 // call AddGlobalRootPtr 1301 1301 compiler.codeGenerator.op_call( pUserProc_AddGlobalRootPtr ); 1302 1303 ReallocNativeCodeBuffer();1304 1302 } 1305 1303 } -
trunk/abdev/BasicCompiler32/MakePeHdr.cpp
r273 r276 122 122 extern BOOL bDebugCompile; 123 123 extern DWORD ImageBase; 124 extern int obp_AllocSize;125 124 extern char *basbuf; 126 125 extern char OutputFileName[MAX_PATH]; … … 355 354 356 355 357 358 359 //データテーブルスケジュール360 pobj_DataTableSchedule=new CSchedule();361 pobj_DataTableSchedule->SetFlag(SCHEDULE_FLAG_RELOC);362 363 //インポートテーブルスケジュール364 pobj_ImportAddrSchedule=new CImportAddrSchedule();365 pobj_ImportAddrSchedule->SetFlag(SCHEDULE_FLAG_RELOC);366 367 //プロシージャポインタスケジュール368 pobj_SubAddrSchedule=new CSubAddrSchedule();369 370 //グローバル変数アドレススケジュール371 pobj_GlobalVarSchedule=new CSchedule();372 pobj_GlobalVarSchedule->SetFlag(SCHEDULE_FLAG_RELOC);373 374 356 //グローバル変数の初期バッファ 375 357 extern BYTE *initGlobalBuf; … … 379 361 pobj_Reloc=new CReloc(); 380 362 381 extern char *OpBuffer;382 extern int obp;383 obp_AllocSize=8192*2;384 OpBuffer=(char *)malloc(obp_AllocSize);385 obp=0;386 387 363 //レキシカルスコープ情報を初期化 388 compiler.codeGenerator.lexicalScopes.Init(obp); 364 compiler.codeGenerator.lexicalScopes.Init( 0 ); 365 //compiler.codeGenerator.lexicalScopes.Init( compiler.codeGenerator.GetNativeCodeSize() ); 389 366 390 367 … … 702 679 703 680 if( pUserProc->GetName() == "DllMain" ){ 704 // TODO: 未完成 705 DllMain_EntryPoint=pUserProc->_beginOpAddressOld; 681 DllMain_EntryPoint = pUserProc->GetBeginOpAddress(); 706 682 } 707 683 708 684 lpdwExportAddressTable=(DWORD *)HeapReAlloc(hHeap,0,lpdwExportAddressTable,(ExportNum+1)*sizeof(DWORD)); 709 lpdwExportAddressTable[ExportNum] =pUserProc->_beginOpAddressOld;685 lpdwExportAddressTable[ExportNum] = pUserProc->GetBeginOpAddress(); 710 686 711 687 lpdwExportNamePointerTable=(DWORD *)HeapReAlloc(hHeap,0,lpdwExportNamePointerTable,(ExportNum+1)*sizeof(DWORD)); … … 1143 1119 1144 1120 1145 //////////////////////////////1146 // データテーブルスケジュール1147 for(i=0;i<pobj_DataTableSchedule->num;i++){1148 *((long *)(OpBuffer+pobj_DataTableSchedule->pObpValues[i]))+=ImageBase+MemPos_DataSection;1149 }1150 delete pobj_DataTableSchedule;1151 1152 1153 //////////////////////////////////1154 // インポートテーブルスケジュール(インポート アドレス テーブルを指し示させる)1155 for(i=0;i<pobj_ImportAddrSchedule->num;i++){1156 const DllProc *pDllProc=pobj_ImportAddrSchedule->ppdi[i];1157 *((long *)(OpBuffer+pobj_ImportAddrSchedule->pObpValues[i]))=1158 ImageBase+1159 MemPos_ImportSection+1160 LookupSize+ //ルックアップテーブル1161 HintSize+ //ヒント名(関数名)テーブル1162 pDllProc->GetLookupAddress();1163 }1164 delete pobj_ImportAddrSchedule;1165 1166 1167 ////////////////////////////////////1168 // プロシージャポインタスケジュール1169 for(i=0;i<pobj_SubAddrSchedule->num;i++){1170 if(pobj_SubAddrSchedule->ppsi[i]->_beginOpAddressOld==01171 &&pobj_SubAddrSchedule->ppsi[i]->_endOpAddressOld==0){1172 SetError(300,NULL,-1);1173 }1174 1175 if(pobj_SubAddrSchedule->pbCall[i]){1176 *((long *)(OpBuffer+pobj_SubAddrSchedule->pObpValues[i]))=1177 pobj_SubAddrSchedule->ppsi[i]->_beginOpAddressOld-(pobj_SubAddrSchedule->pObpValues[i]+sizeof(long));1178 }1179 else{1180 *((long *)(OpBuffer+pobj_SubAddrSchedule->pObpValues[i]))=1181 pobj_SubAddrSchedule->ppsi[i]->_beginOpAddressOld+ImageBase+MemPos_CodeSection;1182 }1183 }1184 delete pobj_SubAddrSchedule;1185 1186 1187 1121 if( compiler.IsDll() ){ 1188 1122 //DLLの場合はリロケーション情報を生成 1189 1123 pobj_Reloc->ResetRelocBuffer(); 1190 1124 } 1191 1192 1193 1194 //////////////////////////////////////1195 // グローバル変数アドレススケジュール1196 //////////////////////////////////////1197 1198 /*1199 GlobalArea1 - 初期バッファあり1200 GlobalArea2 - 初期バッファなし1201 */1202 for(i=0;i<pobj_GlobalVarSchedule->num;i++){1203 if(*((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i])) & 0x80000000){1204 //初期バッファなし1205 *((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i]))=1206 compiler.GetObjectModule().meta.GetGlobalVars().GetAllInitSize() +1207 (*((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i])) & 0x7FFFFFFF)+1208 ImageBase+MemPos_RWSection;1209 }1210 else{1211 //初期バッファあり1212 *((long *)(OpBuffer+pobj_GlobalVarSchedule->pObpValues[i]))+=1213 ImageBase+MemPos_RWSection;1214 }1215 }1216 delete pobj_GlobalVarSchedule;1217 1125 1218 1126 … … 1784 1692 HeapDefaultFree(initGlobalBuf); 1785 1693 1786 //コードバッファを解放1787 free(OpBuffer);1788 OpBuffer=0;1789 1790 1694 //リソースセクションバッファを解放 1791 1695 HeapDefaultFree(RSrcSectionBuffer); -
trunk/abdev/BasicCompiler32/NumOpe.cpp
r265 r276 677 677 //リテラル値のみの計算かどうかを判別するためのフラグ 678 678 BOOL bLiteralCalculation=1; 679 680 //リテラル演算の場合を考慮した演算前のプロシージャスケジュール位置681 //※64ビットの掛け算、除算などで特殊関数が呼ばれるため682 int Before_ProcAddrScheduleNum;683 Before_ProcAddrScheduleNum=pobj_SubAddrSchedule->num;684 685 //リテラル演算の場合を考慮した演算前のデータテーブルスケジュール位置686 int Before_DataTableScheduleNum;687 Before_DataTableScheduleNum=pobj_DataTableSchedule->num;688 679 689 680 //リテラル演算の場合を考慮した演算前の再配置スケジュール
Note:
See TracChangeset
for help on using the changeset viewer.