Changeset 55 in dev for BasicCompiler_Common


Ignore:
Timestamp:
Feb 13, 2007, 3:14:57 AM (17 years ago)
Author:
dai_9181
Message:

・コマンドラインオプション "/unicode" に対応。
・Unicode文字セットを使用する場合に "UNICODE" が自動的に#defineされるようにしました。
・SByte型(8ビット符号付き整数型)を追加。
・Char型を文字型に変更。
・プロジェクトオプションから「Unicode文字セットを使用する」チェックを選択できるようにしました。

Location:
BasicCompiler_Common
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler_Common/BasicCompiler.cpp

    r15 r55  
    691691        else if(lstrcmp(temp2,"dll")==0) bDll=1;
    692692
     693        //Unicode
     694        else if( lstrcmp( temp2, "unicode" ) ==0 ) isUnicode = true;
     695
    693696        //埋め込み型コンパイラビュー
    694697        else if(lstrcmp(temp2,"clip_compile_view")==0) bClipCompileView=1;
  • BasicCompiler_Common/BasicCompiler.h

    r15 r55  
    8282
    8383BOOL bDll;
     84bool isUnicode = false;
    8485
    8586char *basbuf;
  • BasicCompiler_Common/BasicFixed.h

    r46 r55  
    1919
    2020//整数型
    21 #define DEF_CHAR        0x00000001
     21#define DEF_SBYTE       0x00000001
    2222#define DEF_BYTE        0x00000002
    2323#define DEF_INTEGER     0x00000003
     
    3232#define DEF_DOUBLE      0x0000000A
    3333
     34//文字型
     35#define DEF_CHAR        0x0000000B
     36
    3437//bool型
    35 #define DEF_BOOLEAN     0x0000000B
     38#define DEF_BOOLEAN     0x0000000C
    3639
    3740//文字列型
    38 #define DEF_STRING      0x0000000C
     41#define DEF_STRING      0x0000000D
    3942
    4043//ポインタ型
    41 #define DEF_PTR_VOID    0x0000000D
    42 #define DEF_PTR_PROC    0x0000000E
     44#define DEF_PTR_VOID    0x0000000E
     45#define DEF_PTR_PROC    0x0000000F
    4346
    4447//特殊型
  • BasicCompiler_Common/NumOpe_GetType.cpp

    r50 r55  
    55    switch(size){
    66        case 1:
    7             if(bSigned) return DEF_CHAR;
     7            if(bSigned) return DEF_SBYTE;
    88            else return DEF_BYTE;
    99            break;
  • BasicCompiler_Common/Variable.cpp

    r51 r55  
    2727BOOL IsSignedType(int type){
    2828    switch(type){
    29         case DEF_CHAR:
     29        case DEF_SBYTE:
    3030        case DEF_INTEGER:
    3131        case DEF_LONG:
     
    3333        case DEF_SINGLE:
    3434        case DEF_DOUBLE:
     35        case DEF_CHAR:
    3536            return 1;
    3637        default:
     
    4142BOOL IsNaturalWholeNumberType(int type){
    4243    switch(type){
    43         case DEF_CHAR:
     44        case DEF_SBYTE:
    4445        case DEF_BYTE:
    4546        case DEF_INTEGER:
     
    4950        case DEF_INT64:
    5051        case DEF_QWORD:
     52        case DEF_CHAR:
    5153            return 1;
    5254        default:
     
    8991    switch(type){
    9092        case DEF_BYTE:
    91             return DEF_CHAR;
     93            return DEF_SBYTE;
    9294        case DEF_WORD:
    9395            return DEF_INTEGER;
     
    108110int GetUnsignedType(int type){
    109111    switch(type){
    110         case DEF_CHAR:
     112        case DEF_SBYTE:
    111113            return DEF_BYTE;
    112114        case DEF_INTEGER:
     
    116118        case DEF_INT64:
    117119            return DEF_QWORD;
     120        case DEF_CHAR:
     121            if( isUnicode ) return DEF_WORD;
     122            return DEF_BYTE;
    118123    }
    119124    return type;
     
    136141    else if(type==DEF_INTEGER||type==DEF_WORD)
    137142        return sizeof(WORD);
    138     else if(type==DEF_CHAR||type==DEF_BYTE || type == DEF_BOOLEAN)
     143    else if(type==DEF_SBYTE||type==DEF_BYTE || type == DEF_BOOLEAN)
    139144        return sizeof(BYTE);
    140145
     
    142147    else if(type==DEF_DOUBLE)       return sizeof(double);
    143148    else if(type==DEF_SINGLE)       return sizeof(float);
     149
     150    //文字型
     151    else if( type == DEF_CHAR ){
     152        if( isUnicode ) return sizeof( WORD );
     153        return sizeof( BYTE );
     154    }
    144155
    145156    //ポインタ型
     
    178189
    179190    //整数型
    180     if(lstrcmpi(TypeName,"Char")==0)            return DEF_CHAR;
     191    if(lstrcmpi(TypeName,"SByte")==0)           return DEF_SBYTE;
    181192    else if(lstrcmpi(TypeName,"Byte")==0)       return DEF_BYTE;
    182193    else if(lstrcmpi(TypeName,"Integer")==0)    return DEF_INTEGER;
     
    191202    else if(lstrcmpi(TypeName,"Double")==0)     return DEF_DOUBLE;
    192203
     204    //文字型
     205    else if( lstrcmpi( TypeName, "Char" ) == 0 ) return DEF_CHAR;
     206
    193207    //bool型
    194208    else if( lstrcmpi( TypeName, "Boolean" ) == 0 ) return DEF_BOOLEAN;
     
    248262
    249263    //整数型
    250     if(type==DEF_CHAR)              lstrcpy(name,"Char");
     264    if(type==DEF_SBYTE)             lstrcpy(name,"SByte");
    251265    else if(type==DEF_BYTE)         lstrcpy(name,"Byte");
    252266    else if(type==DEF_INTEGER)      lstrcpy(name,"Integer");
     
    260274    else if(type==DEF_SINGLE)       lstrcpy(name,"Single");
    261275    else if(type==DEF_DOUBLE)       lstrcpy(name,"Double");
     276
     277    //文字型
     278    else if(type==DEF_CHAR)             lstrcpy(name,"Char");
    262279
    263280    //bool型
  • BasicCompiler_Common/calculation.cpp

    r50 r55  
    162162    if(IsSignedType(type1)||IsSignedType(type2)){
    163163        //符号あり
    164         if(size1==sizeof(char))     return DEF_CHAR;
     164        if(size1==sizeof(char))     return DEF_SBYTE;
    165165        if(size1==sizeof(short))    return DEF_INTEGER;
    166166        if(size1==sizeof(long))     return DEF_LONG;
     
    362362
    363363        if(IsSignedType(AnswerType)){
    364             if(AnswerType==DEF_CHAR&&(i64stack[sp-2]<CHAR_MIN||CHAR_MAX<i64stack[sp-2])){
     364            if(AnswerType==DEF_SBYTE&&(i64stack[sp-2]<CHAR_MIN||CHAR_MAX<i64stack[sp-2])){
    365365                //符号有り8ビット値をはみ出したとき
    366366                AnswerType=DEF_INTEGER;
     
    604604                                    }
    605605                                }
    606                                 else if(i2==DEF_INTEGER){
     606                                else if(i2==DEF_INTEGER || (isUnicode&&i2==DEF_CHAR)){
    607607                                    short shortData;
    608608                                    if(i3=ReadProcessMemory(hDebugProcess,offset,&shortData,sizeof(short),&stAccBytes)){
     
    616616                                    }
    617617                                }
    618                                 else if(i2==DEF_CHAR){
     618                                else if(i2==DEF_SBYTE || (isUnicode==false&&i2==DEF_CHAR)){
    619619                                    char charData;
    620620                                    if(i3=ReadProcessMemory(hDebugProcess,offset,&charData,sizeof(char),&stAccBytes)){
  • BasicCompiler_Common/common.h

    r50 r55  
    8888extern char BasicSystemDir[MAX_PATH];
    8989extern int cp;
     90extern bool isUnicode;
    9091
    9192
  • BasicCompiler_Common/preprocessor.cpp

    r43 r55  
    7979    }
    8080
     81    extern bool isUnicode;
     82    if( isUnicode ){
     83        add( "UNICODE" );
     84    }
     85
    8186    char temporary[255];
    8287    sprintf(temporary,"_AB_VER%d",MAJOR_VER);
Note: See TracChangeset for help on using the changeset viewer.