001package serp.bytecode;
002
003import serp.bytecode.visitor.*;
004
005/**
006 * Loads a value from a field onto the stack.
007 *
008 * @author Abe White
009 */
010public class GetFieldInstruction extends FieldInstruction {
011    GetFieldInstruction(Code owner, int opcode) {
012        super(owner, opcode);
013    }
014
015    public int getLogicalStackChange() {
016        if (getOpcode() == Constants.GETSTATIC)
017            return 1;
018        return 0;
019    }
020
021    public int getStackChange() {
022        String type = getFieldTypeName();
023        if (type == null)
024            return 0;
025
026        int stack = 0;
027        if (long.class.getName().equals(type) 
028            || double.class.getName().equals(type))
029            stack++;
030        if (getOpcode() == Constants.GETSTATIC)
031            stack++;
032        return stack;
033    }
034
035    public void acceptVisit(BCVisitor visit) {
036        visit.enterGetFieldInstruction(this);
037        visit.exitGetFieldInstruction(this);
038    }
039}