Main Page | Packages | Class Hierarchy | Class List | Directories | File List | Class Members | Related Pages

ExpEquals.java

Go to the documentation of this file.
00001 package plp.orientadaObjetos1.expressao.binaria;
00002 
00003 import plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException;
00004 import plp.orientadaObjetos1.excecao.declaracao.ObjetoNaoDeclaradoException;
00005 import plp.orientadaObjetos1.excecao.declaracao.VariavelJaDeclaradaException;
00006 import plp.orientadaObjetos1.excecao.declaracao.VariavelNaoDeclaradaException;
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.AmbienteCompilacao;
00012 import plp.orientadaObjetos1.memoria.AmbienteExecucao;
00013 import plp.orientadaObjetos1.util.Tipo;
00014 import plp.orientadaObjetos1.util.TipoClasse;
00015 import plp.orientadaObjetos1.util.TipoGeneric;
00016 import plp.orientadaObjetos1.util.TipoPrimitivo;
00017 
00018 
00023 public class ExpEquals extends ExpBinaria{
00024 
00032     public ExpEquals(Expressao esq, Expressao dir){
00033         super(esq, dir, "==");
00034     }
00035 
00039     public Valor avaliar(AmbienteExecucao ambiente)
00040         throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException,
00041         ObjetoNaoDeclaradoException {
00042         return verificarIgualdade(ambiente);
00043     }
00044 
00056     public boolean checaTipo(AmbienteCompilacao ambiente)
00057         throws VariavelNaoDeclaradaException, ClasseNaoDeclaradaException {
00058         boolean result = false;
00059         if (super.checaTipo(ambiente)) {
00060             Tipo tipoEsq = getEsq().getTipo(ambiente);
00061             if( tipoEsq instanceof TipoClasse || tipoEsq instanceof TipoGeneric) {
00062             result = getDir().getTipo(ambiente).equals(TipoClasse.TIPO_NULL) ||
00063                      getEsq().getTipo(ambiente).equals(getDir().getTipo(ambiente));
00064            }
00065            else {
00066             result = getEsq().getTipo(ambiente).equals(getDir().getTipo(ambiente));
00067            }
00068         }
00069         return result;
00070     }
00071 
00078     public Tipo getTipo(AmbienteCompilacao ambiente) {
00079         return TipoPrimitivo.TIPO_BOOLEANO;
00080     }
00081 
00088     private ValorBooleano verificarIgualdade(AmbienteExecucao ambiente)
00089             throws VariavelJaDeclaradaException, VariavelNaoDeclaradaException,
00090                    ObjetoNaoDeclaradoException{
00091         Valor v1 = getEsq().avaliar(ambiente);
00092         Valor v2 = getDir().avaliar(ambiente);
00093         boolean compara;
00094         if (v1 instanceof ValorConcreto && v2 instanceof ValorConcreto){
00095             compara = ((ValorConcreto)v1).equals((ValorConcreto)(v2));
00096         } else {
00097             compara =  v1.equals(v2);
00098         }
00099         return new ValorBooleano(compara);
00100     }
00101 }

Generated on Mon Aug 8 20:20:46 2005 for Linguagem OO1 - Generics by  doxygen 1.4.4