package loo2.plp.orientadaObjetos1.declaracao.procedimento;
import loo2.plp.expressions2.memory.VariavelJaDeclaradaException;
import loo2.plp.expressions2.memory.VariavelNaoDeclaradaException;
import loo2.plp.orientadaObjetos1.excecao.declaracao.ClasseNaoDeclaradaException;
import loo2.plp.orientadaObjetos1.expressao.leftExpression.Id;
import loo2.plp.orientadaObjetos1.memoria.AmbienteCompilacaoOO1;
import loo2.plp.orientadaObjetos1.memoria.AmbienteExecucaoOO1;
import loo2.plp.orientadaObjetos1.util.Tipo;
/**
* Classe que representa uma declara��o de par�metros.
*/
public class DecParametro {
/**
* Identificador declarado.
*/
private Id id;
/**
* Tipo do identificador declarado.
*/
private Tipo tipo;
/**
* Construtor.
* @param id Identificador declarado.
* @param tipo Tipo do identificador declarado.
*/
public DecParametro(Id id, Tipo tipo){
this.id = id;
this.tipo = tipo;
}
/**
* Obt�m o identificador declarado.
* @return o identificador.
*/
public Id getId() {
return id;
}
/**
* Obt�m o tipo do identifador declarado.
* @return o tipo do identifador declarado.
*/
public Tipo getTipo() {
return tipo;
}
/**
* Cria um mapeamento do identificador para o valor da express�o
* desta declara��o no AmbienteExecucao
* @param ambiente o ambiente que contem o mapeamento entre identificadores
* e valores.
* @return o ambiente modificado pela inicializa��o da vari�vel.
*/
public AmbienteExecucaoOO1 elabora(AmbienteExecucaoOO1 ambiente) {
return ambiente;
}
/**
* Verifica se a declara��o est� bem tipada, ou seja, se a
* express�o de inicializa��o est� bem tipada.
* @param ambiente o ambiente que contem o mapeamento entre identificadores
* e seus tipos.
* @return true se os tipos da declara��o s�o v�lidos;
* false caso contrario.
*/
public boolean checaTipo(AmbienteCompilacaoOO1 ambiente)throws ClasseNaoDeclaradaException {
return tipo.eValido(ambiente);
}
/**
* Cria um mapeamento do identificador para o tipo do parametro
* desta declara��o no AmbienteCompilacao
*
* @param ambiente o ambiente que contem o mapeamento entre identificador
* e seu tipo.
* @return o ambiente modificado pela declara��o do parametro.
*/
public AmbienteCompilacaoOO1 declaraParametro(AmbienteCompilacaoOO1 ambiente)
throws VariavelNaoDeclaradaException, VariavelJaDeclaradaException {
ambiente.map(id, tipo);
return ambiente;
}
}