home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.tree;
-
- import java.util.Hashtable;
- import sun.tools.asm.Assembler;
- import sun.tools.java.CompilerError;
- import sun.tools.java.Constants;
- import sun.tools.java.Environment;
- import sun.tools.java.Type;
-
- public class IncDecExpression extends UnaryExpression {
- public IncDecExpression(int var1, int var2, Expression var3) {
- super(var1, var2, var3.type, var3);
- }
-
- public Vset checkValue(Environment var1, Context var2, Vset var3, Hashtable var4) {
- var3 = super.right.checkAssignOp(var1, var2, var3, var4, this);
- if (super.right.type.inMask(254)) {
- super.type = super.right.type;
- } else {
- if (!super.right.type.isType(13)) {
- var1.error(super.where, "invalid.arg.type", super.right.type, Constants.opNames[super.op]);
- }
-
- super.type = Type.tError;
- }
-
- return var3;
- }
-
- public Vset check(Environment var1, Context var2, Vset var3, Hashtable var4) {
- return this.checkValue(var1, var2, var3, var4);
- }
-
- public Expression inline(Environment var1, Context var2) {
- return this.inlineValue(var1, var2);
- }
-
- public Expression inlineValue(Environment var1, Context var2) {
- super.right = super.right.inlineValue(var1, var2);
- return this;
- }
-
- void codeIncDec(Environment var1, Context var2, Assembler var3, boolean var4, boolean var5, boolean var6) {
- if (super.right.op == 60 && super.type.isType(4) && ((IdentifierExpression)super.right).field.isLocal()) {
- if (var6 && !var5) {
- super.right.codeLoad(var1, var2, var3);
- }
-
- int var9 = ((LocalField)((IdentifierExpression)super.right).field).number;
- int[] var8 = new int[]{var9, var4 ? 1 : -1};
- var3.add(super.where, 132, var8);
- if (var6 && var5) {
- super.right.codeLoad(var1, var2, var3);
- }
-
- } else {
- int var7 = super.right.codeLValue(var1, var2, var3);
- ((Expression)this).codeDup(var1, var2, var3, var7, 0);
- super.right.codeLoad(var1, var2, var3);
- if (var6 && !var5) {
- ((Expression)this).codeDup(var1, var2, var3, super.type.stackSize(), var7);
- }
-
- switch (super.type.getTypeCode()) {
- case 1:
- var3.add(super.where, 18, new Integer(1));
- var3.add(super.where, var4 ? 96 : 100);
- var3.add(super.where, 145);
- break;
- case 2:
- var3.add(super.where, 18, new Integer(1));
- var3.add(super.where, var4 ? 96 : 100);
- var3.add(super.where, 146);
- break;
- case 3:
- var3.add(super.where, 18, new Integer(1));
- var3.add(super.where, var4 ? 96 : 100);
- var3.add(super.where, 147);
- break;
- case 4:
- var3.add(super.where, 18, new Integer(1));
- var3.add(super.where, var4 ? 96 : 100);
- break;
- case 5:
- var3.add(super.where, 20, new Long(1L));
- var3.add(super.where, var4 ? 97 : 101);
- break;
- case 6:
- var3.add(super.where, 18, new Float(1.0F));
- var3.add(super.where, var4 ? 98 : 102);
- break;
- case 7:
- var3.add(super.where, 20, new Double((double)1.0F));
- var3.add(super.where, var4 ? 99 : 103);
- break;
- default:
- throw new CompilerError("invalid type");
- }
-
- if (var6 && var5) {
- ((Expression)this).codeDup(var1, var2, var3, super.type.stackSize(), var7);
- }
-
- super.right.codeStore(var1, var2, var3);
- }
- }
- }
-