Skip to content

Commit

Permalink
Resuelvo errata #3: Error al asignar un valor negativo a una variable…
Browse files Browse the repository at this point in the history
… de tipo entero.

#3
  • Loading branch information
eduardogarre committed Oct 31, 2021
1 parent c97fcad commit ab16717
Showing 1 changed file with 45 additions and 1 deletion.
46 changes: 45 additions & 1 deletion ñ/constructor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2372,11 +2372,55 @@ namespace Ñ
{
Ñ::ResultadoLlvm resultado;
Ñ::OperaciónUnaria* op = (Ñ::OperaciónUnaria*)nodo;
if(nodo->ramas.size() < 1)
{
resultado.error("Operación unaria mal construida.");
resultado.posición(nodo->posición());
return resultado;
}
Ñ::Nodo* hijo = nodo->ramas[0];
llvm::Value* valor;
llvm::Value* valorFinal;

if(op->operación == "@")
if(op->operación == "-")
{
if(hijo == nullptr)
{
resultado.error("No puedo negar el valor.");
resultado.posición(nodo->posición());
return resultado;
}

Ñ::ResultadoLlvm rValor = construyeLDA(hijo);
if(rValor.error())
{
return rValor;
}

valor = rValor.valor();

if(valor == nullptr)
{
resultado.error("No puedo negar el valor.");
resultado.posición(nodo->posición());
return resultado;
}

auto valorCero = llvm::ConstantInt::get(valor->getType(), 0, false);
valorFinal = entorno->constructorLlvm.CreateSub(valorCero, valor, "negativiza");

if(valorFinal == nullptr)
{
resultado.error("Error al intentar negar el valor.");
resultado.posición(nodo->posición());
return resultado;
}

resultado.éxito();
resultado.valor(valorFinal);
return resultado;
}
else if(op->operación == "@")
{
if(hijo == nullptr)
{
Expand Down

0 comments on commit ab16717

Please sign in to comment.