Changeset 55 in dev for BasicCompiler32


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:
BasicCompiler32
Files:
10 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);
Note: See TracChangeset for help on using the changeset viewer.