home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VPage / Java.bin / CLASSES.ZIP / sun / tools / tree / InlineMethodExpression.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  2.4 KB  |  66 lines

  1. package sun.tools.tree;
  2.  
  3. import java.io.PrintStream;
  4. import sun.tools.asm.Assembler;
  5. import sun.tools.java.CompilerError;
  6. import sun.tools.java.Constants;
  7. import sun.tools.java.Environment;
  8. import sun.tools.java.FieldDefinition;
  9. import sun.tools.java.Type;
  10.  
  11. public class InlineMethodExpression extends Expression {
  12.    FieldDefinition field;
  13.    Statement body;
  14.  
  15.    InlineMethodExpression(int var1, Type var2, FieldDefinition var3, Statement var4) {
  16.       super(150, var1, var2);
  17.       this.field = var3;
  18.       this.body = var4;
  19.    }
  20.  
  21.    public Expression inline(Environment var1, Context var2) {
  22.       this.body = this.body.inline(var1, new Context(var2, this));
  23.       if (this.body == null) {
  24.          return null;
  25.       } else if (this.body.op == 149) {
  26.          Expression var3 = ((InlineReturnStatement)this.body).expr;
  27.          if (var3 != null && super.type.isType(11)) {
  28.             throw new CompilerError("value on inline-void return");
  29.          } else {
  30.             return var3;
  31.          }
  32.       } else {
  33.          return this;
  34.       }
  35.    }
  36.  
  37.    public Expression inlineValue(Environment var1, Context var2) {
  38.       return this.inline(var1, var2);
  39.    }
  40.  
  41.    public Expression copyInline(Context var1) {
  42.       InlineMethodExpression var2 = (InlineMethodExpression)((Node)this).clone();
  43.       if (this.body != null) {
  44.          var2.body = this.body.copyInline(var1, true);
  45.       }
  46.  
  47.       return var2;
  48.    }
  49.  
  50.    public void code(Environment var1, Context var2, Assembler var3) {
  51.       super.code(var1, var2, var3);
  52.    }
  53.  
  54.    public void codeValue(Environment var1, Context var2, Assembler var3) {
  55.       CodeContext var4 = new CodeContext(var2, this);
  56.       this.body.code(var1, var4, var3);
  57.       var3.add(var4.breakLabel);
  58.    }
  59.  
  60.    public void print(PrintStream var1) {
  61.       var1.print("(" + Constants.opNames[super.op] + "\n");
  62.       this.body.print(var1, 1);
  63.       var1.print(")");
  64.    }
  65. }
  66.