Changeset 55 in dev


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

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

Files:
25 edited

Legend:

Unmodified
Added
Removed
  • BasicCompiler32/CParameter.cpp

    r51 r55  
    334334                ParmSize+=sizeof(long);
    335335            }
    336             else if(DummyTypeInfo.type==DEF_INTEGER||DummyTypeInfo.type==DEF_WORD){
     336            else if(DummyTypeInfo.type==DEF_INTEGER||DummyTypeInfo.type==DEF_WORD || (isUnicode&&DummyTypeInfo.type==DEF_CHAR)){
    337337                ChangeTypeToInteger(CalcType);
    338338                ParmSize+=sizeof(long);
    339339            }
    340             else if(DummyTypeInfo.type==DEF_CHAR||DummyTypeInfo.type==DEF_BYTE||DummyTypeInfo.type==DEF_BOOLEAN){
     340            else if(DummyTypeInfo.type==DEF_SBYTE||DummyTypeInfo.type==DEF_BYTE||DummyTypeInfo.type==DEF_BOOLEAN || (isUnicode==false&&DummyTypeInfo.type==DEF_CHAR)){
    341341                ChangeTypeToByte(CalcType);
    342342                ParmSize+=sizeof(long);
  • BasicCompiler32/Compile_Calc.cpp

    r46 r55  
    7878            //符号あり
    7979
    80             if(OldType==DEF_INTEGER){
     80            if(OldType==DEF_INTEGER || (isUnicode&&OldType==DEF_CHAR)){
    8181                //pop eax
    8282                op_pop(REG_EAX);
     
    9090                op_push(REG_EAX);
    9191            }
    92             else if(OldType==DEF_CHAR){
     92            else if(OldType==DEF_SBYTE || (isUnicode==false&&OldType==DEF_CHAR)){
    9393                //pop eax
    9494                op_pop(REG_EAX);
     
    170170            //符号あり
    171171
    172             if(OldType==DEF_INTEGER){
     172            if(OldType==DEF_INTEGER || (isUnicode&&OldType==DEF_CHAR)){
    173173                //pop eax
    174174                op_pop(REG_EAX);
     
    182182                op_push(REG_EAX);
    183183            }
    184             else if(OldType==DEF_CHAR){
     184            else if(OldType==DEF_SBYTE || (isUnicode==false&&OldType==DEF_CHAR)){
    185185                //pop eax
    186186                op_pop(REG_EAX);
     
    320320    if(OldType==DEF_BOOLEAN||
    321321        OldType==DEF_BYTE||
    322         OldType==DEF_WORD||OldType==DEF_INTEGER) return;
    323     else if(OldType==DEF_CHAR){
     322        OldType==DEF_WORD||OldType==DEF_INTEGER || (isUnicode&&OldType==DEF_CHAR)) return;
     323    else if(OldType==DEF_SBYTE || (isUnicode==false&&OldType==DEF_CHAR)){
    324324        //pop eax
    325325        op_pop(REG_EAX);
     
    350350void ChangeTypeToByte(int OldType){
    351351    //現在のスタックの内容をbyte型に変換する
    352     if(OldType==DEF_BYTE||OldType==DEF_CHAR) return;
     352    if(OldType==DEF_BYTE||OldType==DEF_SBYTE || (isUnicode==false&&OldType==DEF_CHAR)) return;
    353353
    354354    ChangeTypeToLong(OldType);
     
    572572        SetBooleanVariable(CalcType,&VarRelativeVar);
    573573    }
    574     else if(VarType==DEF_CHAR||VarType==DEF_BYTE){
     574    else if(VarType==DEF_SBYTE||VarType==DEF_BYTE || (isUnicode==false&&VarType==DEF_CHAR)){
    575575        //8ビット整数型変数へスタックの内容を格納する
    576576        Set8Variable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
    577577    }
    578     else if(VarType==DEF_INTEGER||VarType==DEF_WORD){
     578    else if(VarType==DEF_INTEGER||VarType==DEF_WORD || (isUnicode&&VarType==DEF_CHAR)){
    579579        //16ビット整数型変数へスタックの内容を格納する
    580580        Set16Variable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
     
    687687        SetBooleanVariable(CalcType,&VarRelativeVar);
    688688    }
    689     else if(VarType==DEF_CHAR||VarType==DEF_BYTE){
     689    else if(VarType==DEF_SBYTE||VarType==DEF_BYTE || (isUnicode==false&&VarType==DEF_CHAR)){
    690690        //8ビット整数型変数へスタックの内容を格納する
    691691        Set8Variable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
    692692    }
    693     else if(VarType==DEF_INTEGER||VarType==DEF_WORD){
     693    else if(VarType==DEF_INTEGER||VarType==DEF_WORD || (isUnicode&&VarType==DEF_CHAR)){
    694694        //16ビット整数型変数へスタックの内容を格納する
    695695        Set16Variable(CalcType,VarRelativeVar.dwKind,VarRelativeVar.offset,VarRelativeVar.bOffsetOffset);
  • BasicCompiler32/Compile_ProcOp.cpp

    r51 r55  
    774774            obp+=sizeof(long);
    775775        }
    776         else if(i3==DEF_INTEGER||i3==DEF_WORD){
     776        else if(i3==DEF_INTEGER||i3==DEF_WORD || (isUnicode&&i3==DEF_CHAR)){
    777777            //xor eax,eax(eaxを0に初期化する)
    778778            op_zero_reg(REG_EAX);
     
    786786            obp+=sizeof(long);
    787787        }
    788         else if(i3==DEF_CHAR||i3==DEF_BYTE||i3==DEF_BOOLEAN){
     788        else if(i3==DEF_SBYTE||i3==DEF_BYTE||i3==DEF_BOOLEAN || (isUnicode==false&&i3==DEF_CHAR)){
    789789            //xor eax,eax(eaxを0に初期化する)
    790790            op_zero_reg(REG_EAX);
  • BasicCompiler32/Compile_Set_Var.cpp

    r36 r55  
    804804}
    805805void Set8Variable(int type,DWORD VarKind,DWORD offset,BOOL bOffsetOffset){
    806     ChangeTypeToWhole(type,DEF_CHAR);
     806    ChangeTypeToWhole(type,DEF_SBYTE);
    807807
    808808    //pop eax
  • BasicCompiler32/Compile_Statement.cpp

    r51 r55  
    990990    if(type1==DEF_INTEGER||
    991991        type1==DEF_WORD||
    992         type1==DEF_CHAR||
     992        type1==DEF_SBYTE||
    993993        type1==DEF_BYTE||
    994         type1==DEF_BOOLEAN) CaseTypeSize=sizeof(long);
     994        type1==DEF_BOOLEAN||
     995        type1==DEF_CHAR) CaseTypeSize=sizeof(long);
    995996    else{
    996997        CaseTypeSize=GetTypeSize(type1,lpIndex);
  • BasicCompiler32/Compile_Var.cpp

    r50 r55  
    872872        }
    873873    }
    874     else if(type==DEF_INTEGER||type==DEF_WORD)
     874    else if(type==DEF_INTEGER||type==DEF_WORD || (isUnicode&&type==DEF_CHAR))
    875875        *(WORD *)(initGlobalBuf+offset)=(WORD)i64data;
    876     else if(type==DEF_CHAR||type==DEF_BYTE||type==DEF_BOOLEAN)
     876    else if(type==DEF_SBYTE||type==DEF_BYTE||type==DEF_BOOLEAN || (isUnicode==false&&type==DEF_CHAR))
    877877        *(BYTE *)(initGlobalBuf+offset)=(BYTE)i64data;
    878878    //String型が未完成
     
    10661066        obp+=sizeof(long);
    10671067    }
    1068     else if(type==DEF_INTEGER||type==DEF_WORD){
     1068    else if(type==DEF_INTEGER||type==DEF_WORD || (isUnicode&&type==DEF_CHAR)){
    10691069        //mov ax,InitValue
    10701070        OpBuffer[obp++]=(char)0x66;
     
    10811081        obp+=sizeof(long);
    10821082    }
    1083     else if(type==DEF_CHAR||type==DEF_BYTE||type==DEF_BOOLEAN){
     1083    else if(type==DEF_SBYTE||type==DEF_BYTE||type==DEF_BOOLEAN || (isUnicode==false&&type==DEF_CHAR)){
    10841084        //mov byte ptr[ebp+offset],InitValue
    10851085        OpBuffer[obp++]=(char)0xC6;
  • BasicCompiler32/NumOpe.cpp

    r51 r55  
    3939        op_push(REG_EAX);
    4040    }
    41     else if(type==DEF_INTEGER){
     41    else if(type==DEF_INTEGER || (isUnicode&&type==DEF_CHAR)){
    4242        //movsx ebx,ax
    4343        OpBuffer[obp++]=(char)0x0F;
     
    4848        op_push(REG_EBX);
    4949    }
    50     else if(type==DEF_CHAR){
     50    else if(type==DEF_SBYTE || (isUnicode==false&&type==DEF_CHAR)){
    5151        //movsx ebx,al
    5252        OpBuffer[obp++]=(char)0x0F;
     
    418418                            PushLongVariable(&RelativeVar);
    419419                        }
    420                         else if(i2==DEF_INTEGER){
     420                        else if(i2==DEF_INTEGER || (isUnicode&&i2==DEF_CHAR)){
    421421                            PushIntegerVariable(&RelativeVar);
    422422                        }
     
    424424                            PushWordVariable(&RelativeVar);
    425425                        }
    426                         else if(i2==DEF_CHAR){
     426                        else if(i2==DEF_SBYTE || (isUnicode==false&&i2==DEF_CHAR)){
    427427                            PushCharVariable(&RelativeVar);
    428428                        }
     
    739739            i3=(long)i64data;
    740740
    741             if(i2==DEF_CHAR||i2==DEF_BYTE||i2==DEF_BOOLEAN) i3=i3&0x000000FF;
    742             if(i2==DEF_INTEGER||i2==DEF_WORD) i3=i3&0x0000FFFF;
     741            if(i2==DEF_SBYTE||i2==DEF_BYTE||i2==DEF_BOOLEAN || (isUnicode==false&&i2==DEF_CHAR)) i3=i3&0x000000FF;
     742            if(i2==DEF_INTEGER||i2==DEF_WORD || (isUnicode&&i2==DEF_CHAR)) i3=i3&0x0000FFFF;
    743743
    744744            //push term
  • BasicCompiler32/NumOpe_TypeOperation.cpp

    r36 r55  
    5151        op_push(REG_EAX);
    5252    }
    53     else if(type==DEF_INTEGER){
     53    else if(type==DEF_INTEGER || (isUnicode&&type==DEF_CHAR)){
    5454        //pop eax
    5555        op_pop(REG_EAX);
     
    7575        op_push(REG_EAX);
    7676    }
    77     else if(type==DEF_CHAR){
     77    else if(type==DEF_SBYTE || (isUnicode==false&&type==DEF_CHAR)){
    7878        //pop eax
    7979        op_pop(REG_EAX);
     
    101101}
    102102void ExtendStackTo16(int type){
    103     if(type==DEF_CHAR){
     103    if(type==DEF_SBYTE || (isUnicode==false&&type==DEF_CHAR)){
    104104        //pop eax
    105105        op_pop(REG_EAX);
  • BasicCompiler32/VarList.cpp

    r36 r55  
    103103            else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
    104104        }
    105         else if(type==DEF_INTEGER){
     105        else if(type==DEF_INTEGER || (isUnicode&&type==DEF_CHAR)){
    106106            if(ReadProcessMemory(hDebugProcess,(void *)offset,&wData,sizeof(WORD),&dwAccessByte)){
    107107                sprintf(lptv->item.pszText,"%s %d(&H%X)",VarName,(short)wData,(short)wData);
     
    115115            else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
    116116        }
    117         else if(type==DEF_CHAR){
     117        else if(type==DEF_SBYTE || (isUnicode==false&&type==DEF_CHAR)){
    118118            if(ReadProcessMemory(hDebugProcess,(void *)offset,&byteData,sizeof(BYTE),&dwAccessByte)){
    119119                temporary[0]=byteData;
  • BasicCompiler32/increment.cpp

    r36 r55  
    8080}
    8181void ExtendTypeTo32(int type,int reg){
    82     if(type==DEF_INTEGER){
     82    if(type==DEF_INTEGER || (isUnicode&&type==DEF_CHAR)){
    8383        //movsx reg32,reg16
    8484        op_movsx_R32R16(reg,reg);
     
    8888        op_and_RV(reg,(int)0x0000FFFF);
    8989    }
    90     else if(type==DEF_CHAR){
     90    else if(type==DEF_SBYTE || (isUnicode==false&&type==DEF_CHAR)){
    9191        //movsx reg32,reg8
    9292        op_movsx_R32R8(reg,reg);
     
    9898}
    9999void ExtendTypeTo16(int type,int reg){
    100     if(type==DEF_CHAR){
     100    if(type==DEF_SBYTE || (isUnicode==false&&type==DEF_CHAR)){
    101101        //movsx reg16,reg8
    102102        op_movsx_R16R8(reg,reg);
  • BasicCompiler64/Compile_Calc.cpp

    r46 r55  
    1111        SetBooleanVariable(CalcType,pRelativeVar);
    1212    }
    13     if(VarType==DEF_CHAR||VarType==DEF_BYTE){
     13    else if(VarType==DEF_SBYTE||VarType==DEF_BYTE || (isUnicode==false&&VarType==DEF_CHAR)){
    1414        //8ビット変数へalレジスタの内容を格納する
    1515        SetWholeVariable(sizeof(char),CalcType,pRelativeVar);
    1616    }
    17     else if(VarType==DEF_INTEGER||VarType==DEF_WORD){
     17    else if(VarType==DEF_INTEGER||VarType==DEF_WORD || (isUnicode&&VarType==DEF_CHAR)){
    1818        //16ビット変数へaxレジスタの内容を格納する
    1919        SetWholeVariable(sizeof(short),CalcType,pRelativeVar);
     
    3434        //Single型変数へスタックの内容を格納する
    3535        SetSingleVariable(CalcType,pRelativeVar);
     36    }
     37    else{
     38        SetError(300,NULL,cp);
    3639    }
    3740}
  • BasicCompiler64/Compile_Var.cpp

    r50 r55  
    909909    else if(type==DEF_LONG||type==DEF_DWORD)
    910910        *(DWORD *)(initGlobalBuf+offset)=(DWORD)i64data;
    911     else if(type==DEF_INTEGER||type==DEF_WORD)
     911    else if(type==DEF_INTEGER||type==DEF_WORD || (isUnicode&&type==DEF_CHAR))
    912912        *(WORD *)(initGlobalBuf+offset)=(WORD)i64data;
    913     else if(type==DEF_CHAR||type==DEF_BYTE||type==DEF_BOOLEAN)
     913    else if(type==DEF_SBYTE||type==DEF_BYTE||type==DEF_BOOLEAN || (isUnicode==false&&type==DEF_CHAR))
    914914        *(BYTE *)(initGlobalBuf+offset)=(BYTE)i64data;
    915915
     
    10791079        obp+=sizeof(long)+sizeof(long);
    10801080    }
    1081     else if(type==DEF_INTEGER||type==DEF_WORD){
     1081    else if(type==DEF_INTEGER||type==DEF_WORD || (isUnicode&&type==DEF_CHAR)){
    10821082        //mov word ptr[rsp+offset],value
    10831083        op_mov_MV(sizeof(short),REG_RSP,offset,USE_OFFSET,(int)i64data);
     
    10861086        obp+=sizeof(long)+sizeof(short);
    10871087    }
    1088     else if(type==DEF_CHAR||type==DEF_BYTE||type==DEF_BOOLEAN){
     1088    else if(type==DEF_SBYTE||type==DEF_BYTE||type==DEF_BOOLEAN || (isUnicode==false&&type==DEF_CHAR)){
    10891089        //mov byte ptr[rsp+offset],value
    10901090        op_mov_MV(sizeof(char),REG_RSP,offset,USE_OFFSET,(int)i64data);
  • BasicCompiler64/NumOpe_TypeOperation.cpp

    r36 r55  
    1010        //and reg,00000000FFFFFFFFh
    1111    }
    12     else if(type==DEF_INTEGER){
     12    else if(type==DEF_INTEGER || (isUnicode&&type==DEF_CHAR)){
    1313        //movsx reg64,reg16
    1414        op_movsx64_FromReg16(reg,reg);
     
    1818        op_and64_value(reg,(int)0xFFFF);
    1919    }
    20     else if(type==DEF_CHAR){
     20    else if(type==DEF_SBYTE || (isUnicode==false&&type==DEF_CHAR)){
    2121        //movsx reg64,reg8
    2222        op_movsx64_FromReg8(reg,reg);
     
    2828}
    2929void ExtendTypeTo32(int type,int reg){
    30     if(type==DEF_INTEGER){
     30    if(type==DEF_INTEGER || (isUnicode&&type==DEF_CHAR)){
    3131        //movsx reg32,reg16
    3232        op_movsx32_FromReg16(reg,reg);
     
    3636        op_and32_value(reg,(int)0xFFFF);
    3737    }
    38     else if(type==DEF_CHAR){
     38    else if(type==DEF_SBYTE || (isUnicode==false&&type==DEF_CHAR)){
    3939        //movsx reg32,reg8
    4040        op_movsx32_FromReg8(reg,reg);
     
    4646}
    4747void ExtendTypeTo16(int type,int reg){
    48     if(type==DEF_CHAR){
     48    if(type==DEF_SBYTE || (isUnicode==false&&type==DEF_CHAR)){
    4949        //movsx reg16,reg8
    5050        op_movsx16_FromReg8(reg,reg);
  • BasicCompiler64/varlist.cpp

    r36 r55  
    104104            else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
    105105        }
    106         else if(type==DEF_INTEGER){
     106        else if(type==DEF_INTEGER || (isUnicode&&type==DEF_CHAR)){
    107107            if(ReadProcessMemory(hDebugProcess,(void *)offset,&wData,sizeof(WORD),&stAccBytes)){
    108108                sprintf(lptv->item.pszText,"%s %d(&H%X)",VarName,(short)wData,(short)wData);
     
    116116            else sprintf(lptv->item.pszText,"%s %s",VarName,STRING_CANNOTACCESS);
    117117        }
    118         else if(type==DEF_CHAR){
     118        else if(type==DEF_SBYTE || (isUnicode==false&&type==DEF_CHAR)){
    119119            if(ReadProcessMemory(hDebugProcess,(void *)offset,&byteData,sizeof(BYTE),&stAccBytes)){
    120120                temporary[0]=byteData;
  • 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);
  • ProjectEditor/Common.h

    r43 r55  
    603603#define PJ_OP_STRICT        0x00010000
    604604#define PJ_OP_RC_MANIFEST   0x00020000
     605#define PJ_OP_UNICODE       0x00040000
    605606struct PROJECTINFO{
    606607    DWORD dwModuleType;
  • ProjectEditor/DialogBoxes.cpp

    r22 r55  
    328328                    if(SendDlgItemMessage(hwnd,IDC_STRICT,BM_GETCHECK,0,0))
    329329                        NewProjectInfo.dwOption|=PJ_OP_STRICT;
     330                    if(SendDlgItemMessage(hwnd,IDC_UNICODE,BM_GETCHECK,0,0))
     331                        NewProjectInfo.dwOption|=PJ_OP_UNICODE;
    330332                    if(SendDlgItemMessage(hwnd,IDC_API_COMMCTRL,BM_GETCHECK,0,0))
    331333                        NewProjectInfo.dwOption|=PJ_OP_COMMCTRL;
     
    797799                SendDlgItemMessage(hwnd,IDC_STRICT,BM_SETCHECK,BST_CHECKED,0);
    798800
     801            //Unicode
     802            if(temp_dwPjOption&PJ_OP_UNICODE)
     803                SendDlgItemMessage(hwnd,IDC_UNICODE,BM_SETCHECK,BST_CHECKED,0);
     804
    799805            break;
    800806        case WM_NOTIFY:
     
    808814                    temp_dwPjOption|=PJ_OP_STRICT;
    809815                else temp_dwPjOption&=~PJ_OP_STRICT;
     816
     817                //Unicode
     818                if(SendDlgItemMessage(hwnd,IDC_UNICODE,BM_GETCHECK,0,0))
     819                    temp_dwPjOption|=PJ_OP_UNICODE;
     820                else temp_dwPjOption&=~PJ_OP_UNICODE;
    810821
    811822                if(nmhdr->code==PSN_APPLY) SaveSetting_DlgPjOption();
  • ProjectEditor/ProjectEditor.cpp

    r37 r55  
    19951995                        if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
    19961996
     1997                        //Unicodeオプション
     1998                        if(ProjectInfo.dwOption==PJ_OP_UNICODE) lstrcat(temporary," /unicode");
     1999
    19972000                        //ブレークポイントをセーブ
    19982001                        ProjectInfo.pobj_DBBreakPoint->SaveToTempFile();
     
    20462049                        //DLLオプション
    20472050                        if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
     2051
     2052                        //Unicodeオプション
     2053                        if(ProjectInfo.dwOption==PJ_OP_UNICODE) lstrcat(temporary," /unicode");
    20482054                    }
    20492055                    else{
     
    21292135                        //DLLオプション
    21302136                        if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
     2137
     2138                        //Unicodeオプション
     2139                        if(ProjectInfo.dwOption==PJ_OP_UNICODE) lstrcat(temporary," /unicode");
    21312140                    }
    21322141                    else{
Note: See TracChangeset for help on using the changeset viewer.