home *** CD-ROM | disk | FTP | other *** search
/ Tutto per Internet / Internet.iso / soft95 / Java / espints / espinst.exe / classes / espresso / ConstantFolder.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-02-28  |  4.5 KB  |  366 lines

  1. package espresso;
  2.  
  3. class ConstantFolder implements Constants {
  4.    static Item fold(int var0, ImmediateItem var1, int var2) {
  5.       try {
  6.          Number var3 = (Number)var1.value;
  7.          Object var4;
  8.          switch (var2) {
  9.             case 0:
  10.                var4 = var3;
  11.                break;
  12.             case 116:
  13.                var4 = new Integer(-var3.intValue());
  14.                break;
  15.             case 130:
  16.                var4 = new Integer(~var3.intValue());
  17.                break;
  18.             case 257:
  19.                var4 = new Integer(~var3.intValue() & 1);
  20.                break;
  21.             case 153:
  22.                var4 = new Integer(b2i(var3.intValue() == 0));
  23.                break;
  24.             case 154:
  25.                var4 = new Integer(b2i(var3.intValue() != 0));
  26.                break;
  27.             case 155:
  28.                var4 = new Integer(b2i(var3.intValue() < 0));
  29.                break;
  30.             case 157:
  31.                var4 = new Integer(b2i(var3.intValue() > 0));
  32.                break;
  33.             case 158:
  34.                var4 = new Integer(b2i(var3.intValue() <= 0));
  35.                break;
  36.             case 156:
  37.                var4 = new Integer(b2i(var3.intValue() >= 0));
  38.                break;
  39.             case 117:
  40.                var4 = new Long(-var3.longValue());
  41.                break;
  42.             case 131:
  43.                var4 = new Long(var3.longValue() ^ 0L - 1L);
  44.                break;
  45.             case 118:
  46.                var4 = new Float(-var3.floatValue());
  47.                break;
  48.             case 119:
  49.                var4 = new Double(-var3.doubleValue());
  50.                break;
  51.             default:
  52.                throw new CompilerError(String.valueOf("fold ").concat(String.valueOf(var2)));
  53.          }
  54.  
  55.          return new ImmediateItem(var4);
  56.       } catch (ArithmeticException var6) {
  57.          Report.error(var0, ((Throwable)var6).toString());
  58.          return Item.stackItem;
  59.       }
  60.    }
  61.  
  62.    static Item fold(int var0, ImmediateItem var1, ImmediateItem var2, int var3) {
  63.       try {
  64.          if (var3 >= 512) {
  65.             Item var4 = fold(var0, var1, var2, var3 >> 9);
  66.             return var4 instanceof ImmediateItem ? fold(var0, (ImmediateItem)var4, var3 & 511) : var4;
  67.          } else if (var3 == 165) {
  68.             return new ImmediateItem(new Integer(var1.value == var2.value ? 1 : 0));
  69.          } else if (var3 == 166) {
  70.             return new ImmediateItem(new Integer(var1.value != var2.value ? 1 : 0));
  71.          } else {
  72.             Number var5 = (Number)var1.value;
  73.             Number var6 = (Number)var2.value;
  74.             Object var7;
  75.             switch (var3) {
  76.                case 96:
  77.                   var7 = new Integer(var5.intValue() + var6.intValue());
  78.                   break;
  79.                case 97:
  80.                   var7 = new Long(var5.longValue() + var6.longValue());
  81.                   break;
  82.                case 98:
  83.                   var7 = new Float(var5.floatValue() + var6.floatValue());
  84.                   break;
  85.                case 99:
  86.                   var7 = new Double(var5.doubleValue() + var6.doubleValue());
  87.                   break;
  88.                case 100:
  89.                   var7 = new Integer(var5.intValue() - var6.intValue());
  90.                   break;
  91.                case 101:
  92.                   var7 = new Long(var5.longValue() - var6.longValue());
  93.                   break;
  94.                case 102:
  95.                   var7 = new Float(var5.floatValue() - var6.floatValue());
  96.                   break;
  97.                case 103:
  98.                   var7 = new Double(var5.doubleValue() - var6.doubleValue());
  99.                   break;
  100.                case 104:
  101.                   var7 = new Integer(var5.intValue() * var6.intValue());
  102.                   break;
  103.                case 105:
  104.                   var7 = new Long(var5.longValue() * var6.longValue());
  105.                   break;
  106.                case 106:
  107.                   var7 = new Float(var5.floatValue() * var6.floatValue());
  108.                   break;
  109.                case 107:
  110.                   var7 = new Double(var5.doubleValue() * var6.doubleValue());
  111.                   break;
  112.                case 108:
  113.                   var7 = new Integer(var5.intValue() / var6.intValue());
  114.                   break;
  115.                case 109:
  116.                   var7 = new Long(var5.longValue() / var6.longValue());
  117.                   break;
  118.                case 110:
  119.                   var7 = new Float(var5.floatValue() / var6.floatValue());
  120.                   break;
  121.                case 111:
  122.                   var7 = new Double(var5.doubleValue() / var6.doubleValue());
  123.                   break;
  124.                case 112:
  125.                   var7 = new Integer(var5.intValue() % var6.intValue());
  126.                   break;
  127.                case 113:
  128.                   var7 = new Long(var5.longValue() % var6.longValue());
  129.                   break;
  130.                case 114:
  131.                   var7 = new Float(var5.floatValue() % var6.floatValue());
  132.                   break;
  133.                case 115:
  134.                   var7 = new Double(var5.doubleValue() % var6.doubleValue());
  135.                   break;
  136.                case 116:
  137.                case 117:
  138.                case 118:
  139.                case 119:
  140.                case 132:
  141.                case 133:
  142.                case 134:
  143.                case 135:
  144.                case 136:
  145.                case 137:
  146.                case 138:
  147.                case 139:
  148.                case 140:
  149.                case 141:
  150.                case 142:
  151.                case 143:
  152.                case 144:
  153.                case 145:
  154.                case 146:
  155.                case 147:
  156.                case 153:
  157.                case 154:
  158.                case 155:
  159.                case 156:
  160.                case 157:
  161.                case 158:
  162.                case 165:
  163.                case 166:
  164.                case 167:
  165.                case 168:
  166.                case 169:
  167.                case 170:
  168.                case 171:
  169.                case 172:
  170.                case 173:
  171.                case 174:
  172.                case 175:
  173.                case 176:
  174.                case 177:
  175.                case 178:
  176.                case 179:
  177.                case 180:
  178.                case 181:
  179.                case 182:
  180.                case 183:
  181.                case 184:
  182.                case 185:
  183.                case 186:
  184.                case 187:
  185.                case 188:
  186.                case 189:
  187.                case 190:
  188.                case 191:
  189.                case 192:
  190.                case 193:
  191.                case 194:
  192.                case 195:
  193.                case 196:
  194.                case 197:
  195.                case 198:
  196.                case 199:
  197.                case 200:
  198.                case 201:
  199.                case 202:
  200.                case 203:
  201.                case 204:
  202.                case 205:
  203.                case 206:
  204.                case 207:
  205.                case 208:
  206.                case 209:
  207.                case 210:
  208.                case 211:
  209.                case 212:
  210.                case 213:
  211.                case 214:
  212.                case 215:
  213.                case 216:
  214.                case 217:
  215.                case 218:
  216.                case 219:
  217.                case 220:
  218.                case 221:
  219.                case 222:
  220.                case 223:
  221.                case 224:
  222.                case 225:
  223.                case 226:
  224.                case 227:
  225.                case 228:
  226.                case 229:
  227.                case 230:
  228.                case 231:
  229.                case 232:
  230.                case 233:
  231.                case 234:
  232.                case 235:
  233.                case 236:
  234.                case 237:
  235.                case 238:
  236.                case 239:
  237.                case 240:
  238.                case 241:
  239.                case 242:
  240.                case 243:
  241.                case 244:
  242.                case 245:
  243.                case 246:
  244.                case 247:
  245.                case 248:
  246.                case 249:
  247.                case 250:
  248.                case 251:
  249.                case 252:
  250.                case 253:
  251.                case 254:
  252.                case 255:
  253.                case 256:
  254.                case 257:
  255.                default:
  256.                   throw new CompilerError(String.valueOf("fold ").concat(String.valueOf(var3)));
  257.                case 120:
  258.                   var7 = new Integer(var5.intValue() << var6.intValue());
  259.                   break;
  260.                case 121:
  261.                   var7 = new Long(var5.longValue() << var6.intValue());
  262.                   break;
  263.                case 122:
  264.                   var7 = new Integer(var5.intValue() >> var6.intValue());
  265.                   break;
  266.                case 123:
  267.                   var7 = new Long(var5.longValue() >> var6.intValue());
  268.                   break;
  269.                case 124:
  270.                   var7 = new Integer(var5.intValue() >>> var6.intValue());
  271.                   break;
  272.                case 125:
  273.                   var7 = new Long(var5.longValue() >>> var6.intValue());
  274.                   break;
  275.                case 126:
  276.                case 258:
  277.                   var7 = new Integer(var5.intValue() & var6.intValue());
  278.                   break;
  279.                case 127:
  280.                   var7 = new Long(var5.longValue() & var6.longValue());
  281.                   break;
  282.                case 128:
  283.                case 259:
  284.                   var7 = new Integer(var5.intValue() | var6.intValue());
  285.                   break;
  286.                case 129:
  287.                   var7 = new Long(var5.longValue() | var6.longValue());
  288.                   break;
  289.                case 130:
  290.                   var7 = new Integer(var5.intValue() ^ var6.intValue());
  291.                   break;
  292.                case 131:
  293.                   var7 = new Long(var5.longValue() ^ var6.longValue());
  294.                   break;
  295.                case 148:
  296.                   if (var5.longValue() < var6.longValue()) {
  297.                      var7 = new Integer(-1);
  298.                   } else if (var5.longValue() > var6.longValue()) {
  299.                      var7 = new Integer(1);
  300.                   } else {
  301.                      var7 = new Integer(0);
  302.                   }
  303.                   break;
  304.                case 149:
  305.                case 150:
  306.                   if (var5.floatValue() < var6.floatValue()) {
  307.                      var7 = new Integer(-1);
  308.                   } else if (var5.floatValue() > var6.floatValue()) {
  309.                      var7 = new Integer(1);
  310.                   } else if (var5.floatValue() == var6.floatValue()) {
  311.                      var7 = new Integer(0);
  312.                   } else if (var3 == 150) {
  313.                      var7 = new Integer(1);
  314.                   } else {
  315.                      var7 = new Integer(-1);
  316.                   }
  317.                   break;
  318.                case 151:
  319.                case 152:
  320.                   if (var5.doubleValue() < var6.doubleValue()) {
  321.                      var7 = new Integer(-1);
  322.                   } else if (var5.doubleValue() > var6.doubleValue()) {
  323.                      var7 = new Integer(1);
  324.                   } else if (var5.doubleValue() == var6.doubleValue()) {
  325.                      var7 = new Integer(0);
  326.                   } else if (var3 == 152) {
  327.                      var7 = new Integer(1);
  328.                   } else {
  329.                      var7 = new Integer(-1);
  330.                   }
  331.                   break;
  332.                case 159:
  333.                   var7 = new Integer(b2i(var5.intValue() == var6.intValue()));
  334.                   break;
  335.                case 160:
  336.                   var7 = new Integer(b2i(var5.intValue() != var6.intValue()));
  337.                   break;
  338.                case 161:
  339.                   var7 = new Integer(b2i(var5.intValue() < var6.intValue()));
  340.                   break;
  341.                case 162:
  342.                   var7 = new Integer(b2i(var5.intValue() >= var6.intValue()));
  343.                   break;
  344.                case 163:
  345.                   var7 = new Integer(b2i(var5.intValue() > var6.intValue()));
  346.                   break;
  347.                case 164:
  348.                   var7 = new Integer(b2i(var5.intValue() <= var6.intValue()));
  349.             }
  350.  
  351.             return new ImmediateItem(var7);
  352.          }
  353.       } catch (ArithmeticException var9) {
  354.          Report.error(var0, ((Throwable)var9).toString());
  355.          return Item.stackItem;
  356.       }
  357.    }
  358.  
  359.    static int b2i(boolean var0) {
  360.       return var0 ? 1 : 0;
  361.    }
  362.  
  363.    public ConstantFolder() {
  364.    }
  365. }
  366.