Changeset 55 in dev for BasicCompiler64


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

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

Location:
BasicCompiler64
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • 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;
Note: See TracChangeset for help on using the changeset viewer.