home *** CD-ROM | disk | FTP | other *** search
- package espresso;
-
- class ConstantFolder implements Constants {
- static Item fold(int var0, ImmediateItem var1, int var2) {
- try {
- Number var3 = (Number)var1.value;
- Object var4;
- switch (var2) {
- case 0:
- var4 = var3;
- break;
- case 116:
- var4 = new Integer(-var3.intValue());
- break;
- case 130:
- var4 = new Integer(~var3.intValue());
- break;
- case 257:
- var4 = new Integer(~var3.intValue() & 1);
- break;
- case 153:
- var4 = new Integer(b2i(var3.intValue() == 0));
- break;
- case 154:
- var4 = new Integer(b2i(var3.intValue() != 0));
- break;
- case 155:
- var4 = new Integer(b2i(var3.intValue() < 0));
- break;
- case 157:
- var4 = new Integer(b2i(var3.intValue() > 0));
- break;
- case 158:
- var4 = new Integer(b2i(var3.intValue() <= 0));
- break;
- case 156:
- var4 = new Integer(b2i(var3.intValue() >= 0));
- break;
- case 117:
- var4 = new Long(-var3.longValue());
- break;
- case 131:
- var4 = new Long(var3.longValue() ^ 0L - 1L);
- break;
- case 118:
- var4 = new Float(-var3.floatValue());
- break;
- case 119:
- var4 = new Double(-var3.doubleValue());
- break;
- default:
- throw new CompilerError(String.valueOf("fold ").concat(String.valueOf(var2)));
- }
-
- return new ImmediateItem(var4);
- } catch (ArithmeticException var6) {
- Report.error(var0, ((Throwable)var6).toString());
- return Item.stackItem;
- }
- }
-
- static Item fold(int var0, ImmediateItem var1, ImmediateItem var2, int var3) {
- try {
- if (var3 >= 512) {
- Item var4 = fold(var0, var1, var2, var3 >> 9);
- return var4 instanceof ImmediateItem ? fold(var0, (ImmediateItem)var4, var3 & 511) : var4;
- } else if (var3 == 165) {
- return new ImmediateItem(new Integer(var1.value == var2.value ? 1 : 0));
- } else if (var3 == 166) {
- return new ImmediateItem(new Integer(var1.value != var2.value ? 1 : 0));
- } else {
- Number var5 = (Number)var1.value;
- Number var6 = (Number)var2.value;
- Object var7;
- switch (var3) {
- case 96:
- var7 = new Integer(var5.intValue() + var6.intValue());
- break;
- case 97:
- var7 = new Long(var5.longValue() + var6.longValue());
- break;
- case 98:
- var7 = new Float(var5.floatValue() + var6.floatValue());
- break;
- case 99:
- var7 = new Double(var5.doubleValue() + var6.doubleValue());
- break;
- case 100:
- var7 = new Integer(var5.intValue() - var6.intValue());
- break;
- case 101:
- var7 = new Long(var5.longValue() - var6.longValue());
- break;
- case 102:
- var7 = new Float(var5.floatValue() - var6.floatValue());
- break;
- case 103:
- var7 = new Double(var5.doubleValue() - var6.doubleValue());
- break;
- case 104:
- var7 = new Integer(var5.intValue() * var6.intValue());
- break;
- case 105:
- var7 = new Long(var5.longValue() * var6.longValue());
- break;
- case 106:
- var7 = new Float(var5.floatValue() * var6.floatValue());
- break;
- case 107:
- var7 = new Double(var5.doubleValue() * var6.doubleValue());
- break;
- case 108:
- var7 = new Integer(var5.intValue() / var6.intValue());
- break;
- case 109:
- var7 = new Long(var5.longValue() / var6.longValue());
- break;
- case 110:
- var7 = new Float(var5.floatValue() / var6.floatValue());
- break;
- case 111:
- var7 = new Double(var5.doubleValue() / var6.doubleValue());
- break;
- case 112:
- var7 = new Integer(var5.intValue() % var6.intValue());
- break;
- case 113:
- var7 = new Long(var5.longValue() % var6.longValue());
- break;
- case 114:
- var7 = new Float(var5.floatValue() % var6.floatValue());
- break;
- case 115:
- var7 = new Double(var5.doubleValue() % var6.doubleValue());
- break;
- case 116:
- case 117:
- case 118:
- case 119:
- case 132:
- case 133:
- case 134:
- case 135:
- case 136:
- case 137:
- case 138:
- case 139:
- case 140:
- case 141:
- case 142:
- case 143:
- case 144:
- case 145:
- case 146:
- case 147:
- case 153:
- case 154:
- case 155:
- case 156:
- case 157:
- case 158:
- case 165:
- case 166:
- case 167:
- case 168:
- case 169:
- case 170:
- case 171:
- case 172:
- case 173:
- case 174:
- case 175:
- case 176:
- case 177:
- case 178:
- case 179:
- case 180:
- case 181:
- case 182:
- case 183:
- case 184:
- case 185:
- case 186:
- case 187:
- case 188:
- case 189:
- case 190:
- case 191:
- case 192:
- case 193:
- case 194:
- case 195:
- case 196:
- case 197:
- case 198:
- case 199:
- case 200:
- case 201:
- case 202:
- case 203:
- case 204:
- case 205:
- case 206:
- case 207:
- case 208:
- case 209:
- case 210:
- case 211:
- case 212:
- case 213:
- case 214:
- case 215:
- case 216:
- case 217:
- case 218:
- case 219:
- case 220:
- case 221:
- case 222:
- case 223:
- case 224:
- case 225:
- case 226:
- case 227:
- case 228:
- case 229:
- case 230:
- case 231:
- case 232:
- case 233:
- case 234:
- case 235:
- case 236:
- case 237:
- case 238:
- case 239:
- case 240:
- case 241:
- case 242:
- case 243:
- case 244:
- case 245:
- case 246:
- case 247:
- case 248:
- case 249:
- case 250:
- case 251:
- case 252:
- case 253:
- case 254:
- case 255:
- case 256:
- case 257:
- default:
- throw new CompilerError(String.valueOf("fold ").concat(String.valueOf(var3)));
- case 120:
- var7 = new Integer(var5.intValue() << var6.intValue());
- break;
- case 121:
- var7 = new Long(var5.longValue() << var6.intValue());
- break;
- case 122:
- var7 = new Integer(var5.intValue() >> var6.intValue());
- break;
- case 123:
- var7 = new Long(var5.longValue() >> var6.intValue());
- break;
- case 124:
- var7 = new Integer(var5.intValue() >>> var6.intValue());
- break;
- case 125:
- var7 = new Long(var5.longValue() >>> var6.intValue());
- break;
- case 126:
- case 258:
- var7 = new Integer(var5.intValue() & var6.intValue());
- break;
- case 127:
- var7 = new Long(var5.longValue() & var6.longValue());
- break;
- case 128:
- case 259:
- var7 = new Integer(var5.intValue() | var6.intValue());
- break;
- case 129:
- var7 = new Long(var5.longValue() | var6.longValue());
- break;
- case 130:
- var7 = new Integer(var5.intValue() ^ var6.intValue());
- break;
- case 131:
- var7 = new Long(var5.longValue() ^ var6.longValue());
- break;
- case 148:
- if (var5.longValue() < var6.longValue()) {
- var7 = new Integer(-1);
- } else if (var5.longValue() > var6.longValue()) {
- var7 = new Integer(1);
- } else {
- var7 = new Integer(0);
- }
- break;
- case 149:
- case 150:
- if (var5.floatValue() < var6.floatValue()) {
- var7 = new Integer(-1);
- } else if (var5.floatValue() > var6.floatValue()) {
- var7 = new Integer(1);
- } else if (var5.floatValue() == var6.floatValue()) {
- var7 = new Integer(0);
- } else if (var3 == 150) {
- var7 = new Integer(1);
- } else {
- var7 = new Integer(-1);
- }
- break;
- case 151:
- case 152:
- if (var5.doubleValue() < var6.doubleValue()) {
- var7 = new Integer(-1);
- } else if (var5.doubleValue() > var6.doubleValue()) {
- var7 = new Integer(1);
- } else if (var5.doubleValue() == var6.doubleValue()) {
- var7 = new Integer(0);
- } else if (var3 == 152) {
- var7 = new Integer(1);
- } else {
- var7 = new Integer(-1);
- }
- break;
- case 159:
- var7 = new Integer(b2i(var5.intValue() == var6.intValue()));
- break;
- case 160:
- var7 = new Integer(b2i(var5.intValue() != var6.intValue()));
- break;
- case 161:
- var7 = new Integer(b2i(var5.intValue() < var6.intValue()));
- break;
- case 162:
- var7 = new Integer(b2i(var5.intValue() >= var6.intValue()));
- break;
- case 163:
- var7 = new Integer(b2i(var5.intValue() > var6.intValue()));
- break;
- case 164:
- var7 = new Integer(b2i(var5.intValue() <= var6.intValue()));
- }
-
- return new ImmediateItem(var7);
- }
- } catch (ArithmeticException var9) {
- Report.error(var0, ((Throwable)var9).toString());
- return Item.stackItem;
- }
- }
-
- static int b2i(boolean var0) {
- return var0 ? 1 : 0;
- }
-
- public ConstantFolder() {
- }
- }
-