Changeset 55 in dev for BasicCompiler32/Compile_Calc.cpp


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

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

File:
1 edited

Legend:

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