Changeset 56 in dev


Ignore:
Timestamp:
Feb 15, 2007, 3:39:40 AM (17 years ago)
Author:
dai_9181
Message:

・[Unicode]リテラル文字列のスイッチング
・[Unicode]Char型を文字型として扱うようにする
・[Unicode]SByte型を追加する
に対応。

/unicodeコマンドオプションに対応。

Files:
18 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/BasicCompiler.vcproj

    r50 r56  
    147147                Optimization="2"
    148148                InlineFunctionExpansion="1"
     149                AdditionalIncludeDirectories="..\cpplibs\boost"
    149150                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;JPN"
    150151                StringPooling="true"
     
    244245                Optimization="2"
    245246                InlineFunctionExpansion="1"
     247                AdditionalIncludeDirectories="..\cpplibs\boost"
    246248                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;ENG"
    247249                StringPooling="true"
     
    828830                    Name="Parts"
    829831                    >
     832                    <File
     833                        RelativePath="..\BasicCompiler_Common\DataTable.cpp"
     834                        >
     835                    </File>
    830836                    <File
    831837                        RelativePath="..\BasicCompiler_Common\LoopRefCheck.cpp"
  • BasicCompiler32/Compile_Var.cpp

    r55 r56  
    853853            char *temp;
    854854            temp=(char *)i64data;
    855             i2=AddDataTable(temp,lstrlen(temp));
     855            i2=dataTable.AddString(temp,lstrlen(temp));
    856856            HeapDefaultFree(temp);
    857857
     
    10431043            char *temp;
    10441044            temp=(char *)i64data;
    1045             i2=AddDataTable(temp,lstrlen(temp));
     1045            i2=dataTable.AddString(temp,lstrlen(temp));
    10461046            HeapDefaultFree(temp);
    10471047
  • BasicCompiler32/MakePeHdr.cpp

    r51 r56  
    7777
    7878
    79 int AddDataTable(char *buffer,int length){
    80     extern HANDLE hHeap;
    81     extern char *DataTable;
    82     extern int DataTableSize;
    83     int RetNum;
    84 
    85     DataTable=(char *)HeapReAlloc(hHeap,0,DataTable,DataTableSize+length+1);
    86     memcpy(DataTable+DataTableSize,buffer,length);
    87     DataTable[DataTableSize+length]=0;
    88 
    89     RetNum=DataTableSize; //ImageBase+MemPos_DataSectionが後に足される
    90 
    91     DataTableSize+=length+1;
    92 
    93     return RetNum;
    94 }
    95 
    9679void DebugVariable(void){
    9780    char temporary[255];
     
    136119    //////////////////
    137120    // データテーブル
    138     extern char *DataTable;
    139     extern int DataTableSize;
     121    dataTable.Init();
    140122    if(bDebugCompile){
    141         DataTable=(char *)HeapAlloc(hHeap,0,2);
    142         DataTable[0]=2;
    143         DataTable[1]=0;
    144         DataTableSize=2;
    145     }
    146     else{
    147         DataTable=(char *)HeapAlloc(hHeap,0,1);
    148         DataTableSize=0;
     123        dataTable.Add( (long)0x00000002 );
    149124    }
    150125
     
    828803
    829804    //データセクションのファイル上のサイズ
    830     if(DataTableSize%FILE_ALIGNMENT) FileSize_DataSection=DataTableSize+(FILE_ALIGNMENT-DataTableSize%FILE_ALIGNMENT);
    831     else FileSize_DataSection=DataTableSize;
     805    if(dataTable.GetSize()%FILE_ALIGNMENT) FileSize_DataSection=dataTable.GetSize()+(FILE_ALIGNMENT-dataTable.GetSize()%FILE_ALIGNMENT);
     806    else FileSize_DataSection=dataTable.GetSize();
    832807    if(FileSize_DataSection) bUse_DataSection=1;
    833808    else bUse_DataSection=0;
     
    15561531    if(bUse_DataSection){
    15571532        //データ テーブル
    1558         WriteFile(hFile,DataTable,DataTableSize,(DWORD *)&i2,NULL);
     1533        WriteFile(hFile,dataTable.GetPtr(),dataTable.GetSize(),(DWORD *)&i2,NULL);
    15591534        i+=i2;
    15601535    }
     
    16481623    HeapDefaultFree(pHintTable);
    16491624
    1650     //データテーブルに関する情報を解放
    1651     HeapDefaultFree(DataTable);
    1652 
    16531625    //グローバル変数の初期バッファを解放
    16541626    HeapDefaultFree(initGlobalBuf);
  • BasicCompiler32/NumOpe.cpp

    r55 r56  
    9999    }
    100100
    101     int i2;
    102     i2=AddDataTable(lpszText,lstrlen(lpszText));
     101    // TODO: Ex表記による文字列長に対応する
     102    int i2 = dataTable.AddString( lpszText );
    103103
    104104    //push lpszPtr
     
    244244                    bLiteralCalculation=0;
    245245
    246                     i2=AddDataTable(term,i3);
     246                    i2=dataTable.AddString(term,i3);
    247247
    248248                    //push DataSize
  • BasicCompiler32/Opcode.h

    r50 r56  
    7878};
    7979
    80 
    81 //MakePeHdr.cpp
    82 int AddDataTable(char *buffer,int length);
    8380
    8481//RSrcSection.cpp
  • BasicCompiler64/BasicCompiler.vcproj

    r50 r56  
    152152                Optimization="2"
    153153                InlineFunctionExpansion="1"
     154                AdditionalIncludeDirectories="..\cpplibs\boost;..\cpplibs\Base"
    154155                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;JPN;_AMD64_;_WIN64"
    155156                StringPooling="true"
     
    252253                Optimization="2"
    253254                InlineFunctionExpansion="1"
     255                AdditionalIncludeDirectories="..\cpplibs\boost;..\cpplibs\Base"
    254256                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;ENG"
    255257                StringPooling="true"
     
    346348                Name="VCCLCompilerTool"
    347349                Optimization="2"
     350                AdditionalIncludeDirectories="..\cpplibs\boost;..\cpplibs\Base"
    348351                PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;JPN;_AMD64_;_WIN64"
    349352                MinimalRebuild="false"
     
    14031406                    >
    14041407                    <File
     1408                        RelativePath="..\BasicCompiler_Common\DataTable.cpp"
     1409                        >
     1410                    </File>
     1411                    <File
    14051412                        RelativePath="..\BasicCompiler_Common\LoopRefCheck.cpp"
    14061413                        >
  • BasicCompiler64/Compile_Statement.cpp

    r52 r56  
    123123    if(type==DEF_DOUBLE){
    124124        double dbl=0;
    125         offset=AddDataTable((char *)&dbl,sizeof(double));
     125        offset=dataTable.Add( dbl );
    126126
    127127        //comisd xmm0,qword ptr[data table offset]
     
    137137    else if(type==DEF_SINGLE){
    138138        float flt=0;
    139         offset=AddDataTable((char *)&flt,sizeof(float));
     139        offset=dataTable.Add( flt );
    140140
    141141        //comiss xmm0,dword ptr[data table offset]
  • BasicCompiler64/Compile_Var.cpp

    r55 r56  
    888888            char *temp;
    889889            temp=(char *)i64data;
    890             i2=AddDataTable(temp,lstrlen(temp));
     890            i2=dataTable.AddString( temp );
    891891            HeapDefaultFree(temp);
    892892
     
    10371037            char *temp;
    10381038            temp=(char *)i64data;
    1039             i2=AddDataTable(temp,lstrlen(temp));
     1039            i2=dataTable.AddString( temp );
    10401040            HeapDefaultFree(temp);
    10411041
  • BasicCompiler64/MakePeHdr.cpp

    r51 r56  
    6565    bUse_DebugSection;
    6666
    67 int AddDataTable(char *buffer,int length){
    68     extern HANDLE hHeap;
    69     extern char *DataTable;
    70     extern int DataTableSize;
    71     int RetNum;
    72 
    73     DataTable=(char *)HeapReAlloc(hHeap,0,DataTable,DataTableSize+length+1);
    74     memcpy(DataTable+DataTableSize,buffer,length);
    75     DataTable[DataTableSize+length]=0;
    76 
    77     RetNum=DataTableSize; //ImageBase+MemPos_DataSectionが後に足される
    78 
    79     DataTableSize+=length+1;
    80 
    81     return RetNum;
    82 }
    83 
    8467
    8568void DebugVariable(void){
     
    124107    //////////////////
    125108    // データテーブル
    126     extern char *DataTable;
    127     extern int DataTableSize;
     109    dataTable.Init();
    128110    if(bDebugCompile){
    129         DataTable=(char *)HeapAlloc(hHeap,0,2);
    130         DataTable[0]=2;
    131         DataTable[1]=0;
    132         DataTableSize=2;
    133     }
    134     else{
    135         DataTable=(char *)HeapAlloc(hHeap,0,1);
    136         DataTableSize=0;
     111        dataTable.Add( (long)0x00000002 );
    137112    }
    138113
     
    841816
    842817    //データセクションのファイル上のサイズ
    843     if(DataTableSize%FILE_ALIGNMENT) FileSize_DataSection=DataTableSize+(FILE_ALIGNMENT-DataTableSize%FILE_ALIGNMENT);
    844     else FileSize_DataSection=DataTableSize;
     818    if(dataTable.GetSize()%FILE_ALIGNMENT) FileSize_DataSection=dataTable.GetSize()+(FILE_ALIGNMENT-dataTable.GetSize()%FILE_ALIGNMENT);
     819    else FileSize_DataSection=dataTable.GetSize();
    845820    if(FileSize_DataSection) bUse_DataSection=1;
    846821    else bUse_DataSection=0;
     
    15771552    if(bUse_DataSection){
    15781553        //データ テーブル
    1579         WriteFile(hFile,DataTable,DataTableSize,(DWORD *)&i2,NULL);
     1554        WriteFile(hFile,dataTable.GetPtr(),dataTable.GetSize(),(DWORD *)&i2,NULL);
    15801555        i+=i2;
    15811556    }
     
    16691644    HeapDefaultFree(pHintTable);
    16701645
    1671     //データテーブルに関する情報を解放
    1672     HeapDefaultFree(DataTable);
    1673 
    16741646    //グローバル変数の初期バッファを解放
    16751647    HeapDefaultFree(initGlobalBuf);
  • BasicCompiler64/NumOpe.cpp

    r51 r56  
    3737        op_call(pobj_StringClass->GetConstructorMethod()->psi);
    3838
    39         int i2;
    40         i2=AddDataTable(lpszText,lstrlen(lpszText));
     39        // TODO: Ex表記による文字列長に対応する
     40        int i2 = dataTable.AddString( lpszText );
    4141
    4242        //mov rax,i2
     
    269269                    bLiteralCalculation=0;
    270270
    271                     i2=AddDataTable(term,i3);
     271                    i2 = dataTable.AddString( term, i3 );
    272272
    273273                    //mov reg,i2
     
    622622                        }
    623623                        else{
    624                             i3=AddDataTable((char *)&i64data,sizeof(_int64));
     624                            i3 = dataTable.Add( i64data );
    625625
    626626                            //movlpd xmm_reg,qword ptr[data table offset]
     
    650650                        }
    651651                        else{
    652                             i3=AddDataTable((char *)&i32data,sizeof(long));
     652                            i3=dataTable.Add( i32data );
    653653
    654654                            //movss xmm_reg,dword ptr[data table offset]
     
    789789
    790790            if(i2==DEF_DOUBLE){
    791                 i3=AddDataTable((char *)&i64data,sizeof(_int64));
     791                i3 = dataTable.Add( i64data );
    792792
    793793                //movlpd xmm_reg,qword ptr[data table offset]
     
    809809                memcpy(&i32data,&flt,sizeof(long));
    810810
    811                 i3=AddDataTable((char *)&i32data,sizeof(long));
     811                i3 = dataTable.Add( i32data );
    812812
    813813                //movss xmm_reg,dword ptr[data table offset]
  • BasicCompiler64/NumOpe_Arithmetic.cpp

    r19 r56  
    452452        double dbl;
    453453        dbl=-1;
    454         i32data=AddDataTable((char *)&dbl,sizeof(double));
     454        i32data = dataTable.Add( dbl );
    455455
    456456        //mulsd xmm_reg,qword ptr[data table offset]   ※data = -1
     
    474474        float flt;
    475475        flt=-1;
    476         i32data=AddDataTable((char *)&flt,sizeof(float));
     476        i32data = dataTable.Add( flt );
    477477
    478478        //mulss xmm_reg,dword ptr[data table offset]   ※data = -1
  • BasicCompiler64/NumOpe_TypeOperation.cpp

    r55 r56  
    8585            int temp;
    8686            _int64 i64data=0x43f0000000000000;
    87             temp=AddDataTable((char *)&i64data,sizeof(_int64));
     87            temp=dataTable.Add( i64data );
    8888            OpBuffer[obp++]=(char)0xF2;
    8989            OpBuffer[obp++]=(char)0x0F;
     
    144144            int temp;
    145145            long i32data=0x5f800000;
    146             temp=AddDataTable((char *)&i32data,sizeof(long));
     146            temp=dataTable.Add( i32data );
    147147            OpBuffer[obp++]=(char)0xF3;
    148148            OpBuffer[obp++]=(char)0x0F;
  • BasicCompiler64/Opcode.h

    r50 r56  
    229229
    230230
    231 
    232 //MakePeHdr.cpp
    233 int AddDataTable(char *buffer,int length);
    234231
    235232//RSrcSection.cpp
  • BasicCompiler_Common/Class.cpp

    r53 r56  
    1313
    1414CMember *pCompilingMethod;
    15 
    16 int AddDataTable(char *buffer,int length);
    1715
    1816
     
    412410
    413411
    414 LONG_PTR CClass::AddVtblDataTable(SUBINFO **ppsi,int length){
    415     return AddDataTable((char *)ppsi,length);
    416 }
    417412int CClass::GetFuncNumInVtbl( const SUBINFO *psi ) const
    418413{
     
    454449    }
    455450
    456     vtbl_offset=AddDataTable((char *)ppsi,vtbl_num*sizeof(LONG_PTR));
     451    vtbl_offset=dataTable.AddBinary((void *)ppsi,vtbl_num*sizeof(LONG_PTR));
    457452
    458453    for( int i=0; i < vtbl_num; i++ ){
     
    467462    if(vtbl_offset==-1) return;
    468463
    469     extern char *DataTable;
    470464    LONG_PTR *pVtbl;
    471     pVtbl=(LONG_PTR *)(DataTable+vtbl_offset);
     465    pVtbl=(LONG_PTR *)((char *)dataTable.GetPtr()+vtbl_offset);
    472466
    473467    int i;
  • BasicCompiler_Common/Class.h

    r53 r56  
    140140private:
    141141    long vtbl_offset;
    142     LONG_PTR AddVtblDataTable(SUBINFO **ppsi,int length);
    143142public:
    144143    int GetFuncNumInVtbl( const SUBINFO *psi ) const;
  • BasicCompiler_Common/Compile.cpp

    r34 r56  
    3030GOTOLABELSCHEDULE *pGotoLabelSchedule;
    3131int GotoLabelScheduleNum;
    32 
    33 //データ テーブル
    34 char *DataTable;
    35 int DataTableSize;
    3632
    3733//グローバル変数初期バッファ
  • BasicCompiler_Common/common.h

    r55 r56  
    592592extern CLoopRefCheck *pobj_LoopRefCheck;
    593593
     594//DataTable.cpp
     595class DataTable{
     596    void *pdata;
     597    int size;
     598
     599public:
     600    DataTable();
     601    ~DataTable();
     602    void Init();
     603
     604    int AddBinary( const void *pdata, int size );
     605    int Add( _int64 i64data );
     606    int Add( int i32data );
     607    int Add( double dbl );
     608    int Add( float flt );
     609    int AddString( const char *str, int length );
     610    int AddString( const char *str );
     611
     612    const void *GetPtr() const;
     613    int GetSize() const;
     614};
     615extern DataTable dataTable;
     616
    594617//error.cpp
    595618void SetError(int ErrorNum,const char *KeyWord,int pos);
  • ProjectEditor/ProjectEditor.cpp

    r55 r56  
    19961996
    19971997                        //Unicodeオプション
    1998                         if(ProjectInfo.dwOption==PJ_OP_UNICODE) lstrcat(temporary," /unicode");
     1998                        if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
    19991999
    20002000                        //ブレークポイントをセーブ
     
    20512051
    20522052                        //Unicodeオプション
    2053                         if(ProjectInfo.dwOption==PJ_OP_UNICODE) lstrcat(temporary," /unicode");
     2053                        if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
    20542054                    }
    20552055                    else{
     
    21372137
    21382138                        //Unicodeオプション
    2139                         if(ProjectInfo.dwOption==PJ_OP_UNICODE) lstrcat(temporary," /unicode");
     2139                        if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
    21402140                    }
    21412141                    else{
Note: See TracChangeset for help on using the changeset viewer.