ExpEquals.java

Go to the documentation of this file.
00001 package plp.orientadaObjetos1.expressao.binaria;
00002 
00003 import plp.expressions2.memory.VariavelJaDeclaradaException;
00004 import plp.expressions2.memory.VariavelNaoDeclaradaException;
00005 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException;
00006 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException;
00007 import plp.orientadaObjetos1.expressao.Expressao;
00008 import plp.orientadaObjetos1.expressao.valor.Valor;
00009 import plp.orientadaObjetos1.expressao.valor.ValorBooleano;
00010 import plp.orientadaObjetos1.expressao.valor.ValorConcreto;
00011 import plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1;
00012 import plp.orientadaObjetos1.memoria.AmbienteExecucaoOO1;
00013 import plp.orientadaObjetos1.util.Tipo;
00014 import plp.orientadaObjetos1.util.TipoClasse;
00015 import plp.orientadaObjetos1.util.TipoPrimitivo;
00016 
00017 
00022 public class ExpEquals extends ExpBinaria{
00023 
00031     public ExpEquals(Expressao esq, Expressao dir){
00032         super(esq, dir, "==");
00033     }
00034 
00038     public Valor avaliar(AmbienteExecucaoOO1 ambiente)
00039         throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException,
00040         ObjetoNaoDeclaradoException, ClasseNaoDeclaradaException {
00041         return verificarIgualdade(ambiente);
00042     }
00043 
00055     public boolean checaTipo(AmbienteCompilacaoOO1 ambiente)
00056         throws VariavelNaoDeclaradaException, ClasseNaoDeclaradaException {
00057         boolean result = false;
00058         if (super.checaTipo(ambiente)) {
00059            if(getEsq().getTipo(ambiente) instanceof TipoClasse) {
00060             result = getDir().getTipo(ambiente).equals(TipoClasse.TIPO_NULL) ||
00061                      getEsq().getTipo(ambiente).equals(getDir().getTipo(ambiente));
00062            }
00063            else {
00064             result = getEsq().getTipo(ambiente).equals(getDir().getTipo(ambiente));
00065            }
00066         }
00067         return result;
00068     }
00069 
00076     public Tipo getTipo(AmbienteCompilacaoOO1 ambiente) {
00077         return TipoPrimitivo.TIPO_BOOLEANO;
00078     }
00079 
00087     private ValorBooleano verificarIgualdade(AmbienteExecucaoOO1 ambiente)
00088             throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException,
00089                    ObjetoNaoDeclaradoException, ClasseNaoDeclaradaException{
00090         Valor v1 = getEsq().avaliar(ambiente);
00091         Valor v2 = getDir().avaliar(ambiente);
00092         boolean compara;
00093         if (v1 instanceof ValorConcreto && v2 instanceof ValorConcreto){
00094             compara = ((ValorConcreto)v1).equals((ValorConcreto)(v2));
00095         } else {
00096             compara =  v1.equals(v2);
00097         }
00098         return new ValorBooleano(compara);
00099     }
00100 }

Generated on Tue Sep 12 21:51:57 2006 for PLP by  doxygen 1.4.7