home *** CD-ROM | disk | FTP | other *** search
/ Macwelt 1 / Macwelt DVD 1.toast / Software für Mac-OS X / Entwickler-Tools / netbeans / modules / ext / djava.jar / koala / dynamicjava / interpreter / modifier / ArrayModifier.class (.txt) next >
Encoding:
Java Class File  |  2000-03-14  |  2.0 KB  |  50 lines

  1. package koala.dynamicjava.interpreter.modifier;
  2.  
  3. import java.lang.reflect.Array;
  4. import java.util.LinkedList;
  5. import java.util.List;
  6. import koala.dynamicjava.interpreter.context.Context;
  7. import koala.dynamicjava.tree.ArrayAccess;
  8. import koala.dynamicjava.tree.visitor.Visitor;
  9.  
  10. public class ArrayModifier extends LeftHandSideModifier {
  11.    protected ArrayAccess node;
  12.    protected Object array;
  13.    protected Number cell;
  14.    protected List arrays = new LinkedList();
  15.    protected List cells = new LinkedList();
  16.  
  17.    public Object prepare(Visitor var1, Context var2) {
  18.       this.arrays.add(0, this.array);
  19.       this.cells.add(0, this.cell);
  20.       this.array = this.node.getExpression().acceptVisitor(var1);
  21.       Object var3 = this.node.getCellNumber().acceptVisitor(var1);
  22.       if (var3 instanceof Character) {
  23.          var3 = new Integer((Character)var3);
  24.       }
  25.  
  26.       this.cell = (Number)var3;
  27.       return Array.get(this.array, this.cell.intValue());
  28.    }
  29.  
  30.    public void modify(Context var1, Object var2) {
  31.       try {
  32.          Array.set(this.array, this.cell.intValue(), var2);
  33.       } catch (IllegalArgumentException var8) {
  34.          if (var8.getMessage().equals("array element type mismatch")) {
  35.             throw new ArrayStoreException();
  36.          }
  37.  
  38.          throw var8;
  39.       } finally {
  40.          this.array = this.arrays.remove(0);
  41.          this.cell = (Number)this.cells.remove(0);
  42.       }
  43.  
  44.    }
  45.  
  46.    public ArrayModifier(ArrayAccess var1) {
  47.       this.node = var1;
  48.    }
  49. }
  50.