001 package serp.bytecode; 002 003 import serp.bytecode.visitor.*; 004 005 /** 006 * Loads a value from a field onto the stack. 007 * 008 * @author Abe White 009 */ 010 public 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 }