/* *******************************************************************
* Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
* All rights reserved.
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v1.0
* which accompanies this distribution and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* PARC initial implementation
* ******************************************************************/
package org.aspectj.weaver.bcel;
import org.aspectj.apache.bcel.Constants;
import org.aspectj.apache.bcel.generic.Instruction;
import org.aspectj.apache.bcel.generic.InstructionFactory;
import org.aspectj.apache.bcel.generic.InstructionList;
import org.aspectj.weaver.ResolvedType;
XXX Erik and I need to discuss this hierarchy. Having FieldRef extend Var is convenient, but hopefully there's a better design.
This is always a static reference.
/**
* XXX Erik and I need to discuss this hierarchy. Having FieldRef extend Var is convenient, but hopefully there's a better design.
*
* This is always a static reference.
*/
public class BcelFieldRef extends BcelVar {
private String className, fieldName;
public BcelFieldRef(ResolvedType type, String className, String fieldName) {
super(type, 0);
this.className = className;
this.fieldName = fieldName;
}
public String toString() {
return "BcelFieldRef(" + getType() + " " + className + "." + fieldName + ")";
}
// public int getSlot() { return slot; }
public Instruction createLoad(InstructionFactory fact) {
return fact.createFieldAccess(className, fieldName, BcelWorld.makeBcelType(getType()), Constants.GETSTATIC);
}
public Instruction createStore(InstructionFactory fact) {
return fact.createFieldAccess(className, fieldName, BcelWorld.makeBcelType(getType()), Constants.PUTSTATIC);
}
public InstructionList createCopyFrom(InstructionFactory fact, int oldSlot) {
throw new RuntimeException("unimplemented");
}
// this is an array var
// void appendConvertableArrayLoad(
// InstructionList il,
// InstructionFactory fact,
// int index,
// ResolvedType convertTo)
// {
// ResolvedType convertFromType = getType().getResolvedComponentType();
// appendLoad(il, fact);
// il.append(Utility.createConstant(fact, index));
// il.append(fact.createArrayLoad(BcelWorld.makeBcelType(convertFromType)));
// Utility.appendConversion(il, fact, convertFromType, convertTo);
// }
//
// void appendConvertableArrayStore(
// InstructionList il,
// InstructionFactory fact,
// int index,
// BcelFieldRef storee)
// {
// ResolvedType convertToType = getType().getResolvedComponentType();
// appendLoad(il, fact);
// il.append(Utility.createConstant(fact, index));
// storee.appendLoad(il, fact);
// Utility.appendConversion(il, fact, storee.getType(), convertToType);
// il.append(fact.createArrayStore(BcelWorld.makeBcelType(convertToType)));
// }
//
// InstructionList createConvertableArrayStore(
// InstructionFactory fact,
// int index,
// BcelFieldRef storee)
// {
// InstructionList il = new InstructionList();
// appendConvertableArrayStore(il, fact, index, storee);
// return il;
// }
// InstructionList createConvertableArrayLoad(
// InstructionFactory fact,
// int index,
// ResolvedType convertTo)
// {
// InstructionList il = new InstructionList();
// appendConvertableArrayLoad(il, fact, index, convertTo);
// return il;
// }
}