Added runtime checks and started fixing test code

This commit is contained in:
Samuel D. Crow
2022-06-30 11:41:31 -05:00
parent 6a3c37b02c
commit 7f1539c421
2 changed files with 17 additions and 8 deletions

View File

@@ -4,6 +4,7 @@
** by Samuel D. Crow ** by Samuel D. Crow
*/ */
#include "runtime.h" #include "runtime.h"
#include <cstdio>
subroutine *callStack=nullptr; subroutine *callStack=nullptr;
@@ -26,9 +27,18 @@ unsigned int subroutine::close()
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
unsigned int ret=run(); unsigned int ret=run();
if (ret!=EXIT) switch (ret) {
{ case STACK_UNDERFLOW_ERROR:
return 1; puts("Stack Underflow\n");
} break;
case UNDEFINED_STATE_ERROR:
puts("Program encountered an undefined state\n");
break;
case EXIT:
return 0; return 0;
default:
puts("Illegal fallthrough encountered\n");
break;
}
return 1;
} }

View File

@@ -75,8 +75,7 @@ void fn::addParameter(string &name, enum TYPES t)
/* TODO needs to be broken into smaller pieces */ /* TODO needs to be broken into smaller pieces */
operands *fn::generateCall(string &name, list<operands *>&paramList) operands *fn::generateCall(string &name, list<operands *>&paramList)
{ {
static unsigned int callID; static unsigned int callEnumerator;
unsigned int callEnumerator;
auto v=params.begin(); auto v=params.begin();
operands *current; operands *current;
label *retAddr=new label(); label *retAddr=new label();
@@ -90,10 +89,10 @@ operands *fn::generateCall(string &name, list<operands *>&paramList)
error(E_TOO_MANY_PARAMETERS); error(E_TOO_MANY_PARAMETERS);
} }
/* TODO CHECK THIS */ /* TODO CHECK THIS */
callEnumerator = ++callID; ++callEnumerator;
heap_h << "struct f" << g->getID() heap_h << "struct f" << g->getID()
<< " *sub" << callEnumerator << ";\n"; << " *sub" << callEnumerator << ";\n";
output_cpp << " sub" << this->getID() output_cpp << " sub" << callEnumerator
<< "= new f" << g->getID() << "= new f" << g->getID()
<< "(" << retAddr->getID() << ");\n" << "(" << retAddr->getID() << ");\n"
<< "callStack = sub" << callEnumerator << ";\n"; << "callStack = sub" << callEnumerator << ";\n";