/
llamarnode.cpp
50 lines (37 loc) · 1.43 KB
/
llamarnode.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "llamarnode.h"
LlamarNode::LlamarNode(string idProcedure, vector<ExpressionNode *> parameters)
{
this->idProcedure=idProcedure;
this->parameters=parameters;
}
LlamarNode::~LlamarNode()
{
}
string LlamarNode::GetName()
{
return "LlamarNode";
}
void LlamarNode::ValidateSemantic()
{
StatementNode* proc = SymbolTable::Instance()->GetFuncionRegisterType(idProcedure);
if (proc->GetName().compare("ProcedimientoNode")!=0)
throw invalid_argument("Se esperaba que la llamada fuese a un procedimiento. Columna: "+to_string(column)+" Fila: "+to_string(row) );
ProcedimientoNode* procedimiento = dynamic_cast<ProcedimientoNode*>(proc);
TypeNode* typeI;
TypeNode* typeJ;
if(procedimiento->parameters.size()!=parameters.size())
throw invalid_argument("Se esperaba "+to_string(procedimiento->parameters.size())+" parametros. Columna: "+to_string(column)+" Fila: "+to_string(row) );
for(unsigned int i=0;i<parameters.size();i++)
{
for (unsigned int j=0;j<procedimiento->parameters.size();i++)
{
typeI=parameters[i]->ValidateSemantic();
typeJ=procedimiento->parameters[j]->ValidateSemantic();
if(typeI->GetName().compare(typeJ->GetName())!=0)
throw invalid_argument("Tipo no compatible en parametros de procedimiento. Columna: "+to_string(column)+" Fila: "+to_string(row) );
}
}
}
void LlamarNode::Interpret()
{
}