IDefn.java |
1 // Copyright 2012- Bill Campbell, Swami Iyer and Bahar Akbal-Delibas 2 3 package jminusminus; 4 5 /** 6 * The IDefn type is used to implement definitions of things (local variables, formal arguments, 7 * types) that are named in some context (aka scope). 8 */ 9 interface IDefn { 10 /** 11 * The (local variable, formal parameter, or local or imported name) definition's type. 12 * 13 * @return the definition's type. 14 */ 15 public Type type(); 16 } 17 18 /** 19 * A definition of a type name. In the first instance, an identifier, but later resolved to a 20 * local name or an imported name. 21 */ 22 class TypeNameDefn implements IDefn { 23 /** 24 * The definition's type. 25 */ 26 private Type type; 27 28 /** 29 * Constructs a type name definition for a type. 30 * 31 * @param type the definition's type. 32 */ 33 public TypeNameDefn(Type type) { 34 this.type = type; 35 } 36 37 /** 38 * Returns the type for this definition. 39 * 40 * @return the definition's type. 41 */ 42 public Type type() { 43 return type; 44 } 45 } 46 47 /** 48 * The definition for a local variable (including formal parameters). All local variables are 49 * allocated on the stack at fixed offsets from the base of the stack frame and all have types. 50 * Some local variables have initializations. 51 */ 52 class LocalVariableDefn implements IDefn { 53 // The local variable's type. 54 private Type type; 55 56 // The local variable's offset from the base of the current the stack frame. 57 private int offset; 58 59 // Has this local variable been initialized? 60 private boolean isInitialized; 61 62 /** 63 * Constructs a local variable definition for a local variable. 64 * 65 * @param type the variable's type. 66 * @param offset the variable's offset from the base of the current stack frame (allocated 67 * for each method invocation). 68 */ 69 public LocalVariableDefn(Type type, int offset) { 70 this.type = type; 71 this.offset = offset; 72 } 73 74 /** 75 * Returns the type for this variable. 76 * 77 * @return the type. 78 */ 79 public Type type() { 80 return type; 81 } 82 83 /** 84 * Returns the offset of this variable on the stack frame. 85 * 86 * @return the offset. 87 */ 88 public int offset() { 89 return offset; 90 } 91 92 /** 93 * Initializes this local variable. 94 */ 95 public void initialize() { 96 this.isInitialized = true; 97 } 98 99 /** 100 * Returns true if this local variable has been initialized, and false otherwise. 101 * 102 * @returntrue if this local variable has been initialized, and false otherwise. 103 */ 104 public boolean isInitialized() { 105 return isInitialized; 106 } 107 } 108