Added runtime checks and started fixing test code
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
** by Samuel D. Crow
|
||||
*/
|
||||
#include "runtime.h"
|
||||
#include <cstdio>
|
||||
|
||||
subroutine *callStack=nullptr;
|
||||
|
||||
@@ -26,9 +27,18 @@ unsigned int subroutine::close()
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
unsigned int ret=run();
|
||||
if (ret!=EXIT)
|
||||
{
|
||||
switch (ret) {
|
||||
case STACK_UNDERFLOW_ERROR:
|
||||
puts("Stack Underflow\n");
|
||||
break;
|
||||
case UNDEFINED_STATE_ERROR:
|
||||
puts("Program encountered an undefined state\n");
|
||||
break;
|
||||
case EXIT:
|
||||
return 0;
|
||||
default:
|
||||
puts("Illegal fallthrough encountered\n");
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -75,8 +75,7 @@ void fn::addParameter(string &name, enum TYPES t)
|
||||
/* TODO needs to be broken into smaller pieces */
|
||||
operands *fn::generateCall(string &name, list<operands *>¶mList)
|
||||
{
|
||||
static unsigned int callID;
|
||||
unsigned int callEnumerator;
|
||||
static unsigned int callEnumerator;
|
||||
auto v=params.begin();
|
||||
operands *current;
|
||||
label *retAddr=new label();
|
||||
@@ -90,10 +89,10 @@ operands *fn::generateCall(string &name, list<operands *>¶mList)
|
||||
error(E_TOO_MANY_PARAMETERS);
|
||||
}
|
||||
/* TODO CHECK THIS */
|
||||
callEnumerator = ++callID;
|
||||
++callEnumerator;
|
||||
heap_h << "struct f" << g->getID()
|
||||
<< " *sub" << callEnumerator << ";\n";
|
||||
output_cpp << " sub" << this->getID()
|
||||
output_cpp << " sub" << callEnumerator
|
||||
<< "= new f" << g->getID()
|
||||
<< "(" << retAddr->getID() << ");\n"
|
||||
<< "callStack = sub" << callEnumerator << ";\n";
|
||||
|
||||
Reference in New Issue
Block a user