00001 package plp.orientadaObjetos1.expressao.valor; 00002 00003 import plp.orientadaObjetos1.memoria.AmbienteCompilacao; 00004 import plp.orientadaObjetos1.memoria.AmbienteExecucao; 00005 import plp.orientadaObjetos1.util.Tipo; 00006 import plp.orientadaObjetos1.util.TipoPrimitivo; 00010 public class ValorRef implements Valor{ 00014 public static final int VALOR_INICIAL = 0; 00018 private int valor; 00023 public ValorRef(int valor){ 00024 if ( valor >= ValorRef.VALOR_INICIAL){ 00025 this.valor = valor; 00026 } 00027 else this.valor = VALOR_INICIAL; 00028 } 00029 00034 public int valor() { 00035 return valor; 00036 } 00042 public Valor avaliar(AmbienteExecucao ambiente) { 00043 return this; 00044 } 00045 00046 //Os métodos getTipo e checaTipo de ValorRef 00047 //não foram utilizados nessa linguagem. 00048 public int hashCode() { 00049 return valor; 00050 } 00056 public Tipo getTipo(AmbienteCompilacao amb) { 00057 return TipoPrimitivo.TIPO_INTEIRO; 00058 } 00064 public boolean checaTipo(AmbienteCompilacao amb) { 00065 return true; 00066 } 00072 public boolean equals(Valor val){ 00073 if ( val instanceof ValorRef) 00074 return valor == ((ValorRef)val).valor(); 00075 else return false; 00076 } 00077 00082 public ValorRef incrementa(){ 00083 valor = valor + 1; 00084 return this; 00085 } 00086 00087 00088 }