示例#1
0
 private void TranslateStm(CJUMP stm)
 {
     if (stm.Left is CONST)
     {
         Temp.Temp r = TranslateExpr(stm.Right);
         if (stm.Relop == CJUMP.Rel.Equal || stm.Relop == CJUMP.Rel.NotEqual)
         {
             InstrList.Add(new CJumpInt(stm.Relop, r, (stm.Left as CONST).Value, new Label(stm.IfTrue)));
         }
         else
         {
             InstrList.Add(new CJumpInt(CJUMP.NotRel(stm.Relop), r, (stm.Left as CONST).Value, new Label(stm.IfTrue)));
         }
     }
     else if (stm.Right is CONST)
     {
         Temp.Temp l = TranslateExpr(stm.Left);
         InstrList.Add(new CJumpInt(stm.Relop, l, (stm.Right as CONST).Value, new Label(stm.IfTrue)));
     }
     else
     {
         Temp.Temp l = TranslateExpr(stm.Left);
         Temp.Temp r = TranslateExpr(stm.Right);
         InstrList.Add(new CJump(stm.Relop, l, r, new Label(stm.IfTrue)));
     }
 }