Changeset 276 in dev for trunk/abdev/BasicCompiler32


Ignore:
Timestamp:
Aug 12, 2007, 1:25:20 AM (17 years ago)
Author:
dai_9181
Message:
 
Location:
trunk/abdev/BasicCompiler32
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler32/Compile_ProcOp.cpp

    r275 r276  
    120120        };
    121121
    122         compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allrem, 178, false ) );
     122        compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allrem, 178 ) );
    123123    }
    124124    else if( userProc.GetName() == "_aullrem" ){
     
    136136        };
    137137
    138         compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_aullrem, 117, false ) );
     138        compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_aullrem, 117 ) );
    139139    }
    140140    else if( userProc.GetName() == "_allmul" ){
     
    144144        };
    145145
    146         compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allmul, 52, false ) );
     146        compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allmul, 52 ) );
    147147    }
    148148    else if( userProc.GetName() == "_alldiv" ){
     
    152152        };
    153153
    154         compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_alldiv, 170, false ) );
     154        compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_alldiv, 170 ) );
    155155    }
    156156    else if( userProc.GetName() == "_aulldiv" ){
     
    167167        };
    168168
    169         compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_aulldiv, 104, false ) );
     169        compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_aulldiv, 104 ) );
    170170    }
    171171    else if( userProc.GetName() == "_allshl" ){
     
    175175        };
    176176
    177         compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allshl, 31, false ) );
     177        compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allshl, 31 ) );
    178178    }
    179179    else if( userProc.GetName() == "_allshr" ){
     
    183183        };
    184184
    185         compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allshr, 33, false ) );
     185        compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_allshr, 33 ) );
    186186    }
    187187    else if( userProc.GetName() == "_aullshr" ){
     
    207207        };
    208208
    209         compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_aullshr, 31, false ) );
     209        compiler.codeGenerator.PutOld( NativeCode( (const char *)Buffer_aullshr, 31 ) );
    210210    }
    211211    else{
     
    262262    else bDebugSupportProc=0;
    263263
    264     extern int obp;
    265     pUserProc->_beginOpAddressOld = obp;
     264    if( pUserProc->GetCodeSize() != 0 )
     265    {
     266        // 既にコード生成が行われている場合はエラー
     267        SetError();
     268    }
    266269
    267270    //コンパイル中の関数が属するクラス
     
    292295
    293296        SystemProc(*pUserProc);
    294 
    295         pUserProc->_endOpAddressOld = obp;
    296297        return;
    297298    }
     
    399400    //プロシージャ抜け出しスケジュール(Exit Sub/Function)
    400401    compiler.codeGenerator.exitSubCodePositions.clear();
    401     compiler.codeGenerator._exitSubCodePositions_ObpOld.clear();
    402402
    403403    //ラベル管理オブジェクトを初期化
     
    727727
    728728
    729     pUserProc->_endOpAddressOld = obp;
    730 
    731 
    732729    //重複エラー情報管理のメモリを解放
    733730    for(i3=0;i3<SynonymErrorNum;i3++) HeapDefaultFree(SynonymErrorWords[i3]);
  • trunk/abdev/BasicCompiler32/Compile_Statement.cpp

    r261 r276  
    240240
    241241    //レキシカルスコープをレベルアップ
    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    );
    244246
    245247    i2=CompileBuffer(ESC_ENDIF,0);
     
    263265
    264266        //レキシカルスコープをレベルアップ
    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        );
    266271
    267272        CompileBuffer(ESC_ENDIF,0);
     
    320325        {
    321326            //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            );
    324333        }
    325334    }
     
    336345        {
    337346            //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            );
    340353        }
    341354    }
     
    445458
    446459    //レキシカルスコープをレベルアップ
    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 );
    449461
    450462    //While内をコンパイル
     
    562574
    563575    //レキシカルスコープをレベルアップ
    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 );
    566577
    567578    //For内をコンパイル
     
    599610
    600611    //レキシカルスコープをレベルアップ
    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 );
    603613
    604614    //Do内をコンパイル
     
    10401050
    10411051    //レキシカルスコープをレベルアップ
    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 );
    10441053
    10451054    //Select Case内をコンパイル
     
    10901099void OpcodeGosub(char *Parameter){
    10911100    extern HANDLE hHeap;
    1092     extern int obp;
    10931101    int i,LineNum;
    10941102
     
    11041112        {
    11051113            //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            );
    11071120        }
    11081121    }
     
    11191132        {
    11201133            //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            );
    11221140        }
    11231141    }
  • trunk/abdev/BasicCompiler32/Compile_Var.cpp

    r275 r276  
    13001300            // call AddGlobalRootPtr
    13011301            compiler.codeGenerator.op_call( pUserProc_AddGlobalRootPtr );
    1302 
    1303             ReallocNativeCodeBuffer();
    13041302        }
    13051303    }
  • trunk/abdev/BasicCompiler32/MakePeHdr.cpp

    r273 r276  
    122122    extern BOOL bDebugCompile;
    123123    extern DWORD ImageBase;
    124     extern int obp_AllocSize;
    125124    extern char *basbuf;
    126125    extern char OutputFileName[MAX_PATH];
     
    355354
    356355
    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 
    374356    //グローバル変数の初期バッファ
    375357    extern BYTE *initGlobalBuf;
     
    379361    pobj_Reloc=new CReloc();
    380362
    381     extern char *OpBuffer;
    382     extern int obp;
    383     obp_AllocSize=8192*2;
    384     OpBuffer=(char *)malloc(obp_AllocSize);
    385     obp=0;
    386 
    387363    //レキシカルスコープ情報を初期化
    388     compiler.codeGenerator.lexicalScopes.Init(obp);
     364    compiler.codeGenerator.lexicalScopes.Init( 0 );
     365    //compiler.codeGenerator.lexicalScopes.Init( compiler.codeGenerator.GetNativeCodeSize() );
    389366
    390367
     
    702679
    703680            if( pUserProc->GetName() == "DllMain" ){
    704                 // TODO: 未完成
    705                 DllMain_EntryPoint=pUserProc->_beginOpAddressOld;
     681                DllMain_EntryPoint = pUserProc->GetBeginOpAddress();
    706682            }
    707683
    708684            lpdwExportAddressTable=(DWORD *)HeapReAlloc(hHeap,0,lpdwExportAddressTable,(ExportNum+1)*sizeof(DWORD));
    709             lpdwExportAddressTable[ExportNum]=pUserProc->_beginOpAddressOld;
     685            lpdwExportAddressTable[ExportNum] = pUserProc->GetBeginOpAddress();
    710686
    711687            lpdwExportNamePointerTable=(DWORD *)HeapReAlloc(hHeap,0,lpdwExportNamePointerTable,(ExportNum+1)*sizeof(DWORD));
     
    11431119
    11441120
    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==0
    1171             &&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 
    11871121    if( compiler.IsDll() ){
    11881122        //DLLの場合はリロケーション情報を生成
    11891123        pobj_Reloc->ResetRelocBuffer();
    11901124    }
    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;
    12171125
    12181126
     
    17841692    HeapDefaultFree(initGlobalBuf);
    17851693
    1786     //コードバッファを解放
    1787     free(OpBuffer);
    1788     OpBuffer=0;
    1789 
    17901694    //リソースセクションバッファを解放
    17911695    HeapDefaultFree(RSrcSectionBuffer);
  • trunk/abdev/BasicCompiler32/NumOpe.cpp

    r265 r276  
    677677    //リテラル値のみの計算かどうかを判別するためのフラグ
    678678    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;
    688679
    689680    //リテラル演算の場合を考慮した演算前の再配置スケジュール
Note: See TracChangeset for help on using the changeset viewer.