Added runtime checks and started fixing test code
This commit is contained in:
@@ -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:
|
||||||
|
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 1;
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -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 *>¶mList)
|
operands *fn::generateCall(string &name, list<operands *>¶mList)
|
||||||
{
|
{
|
||||||
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 *>¶mList)
|
|||||||
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";
|
||||||
|
|||||||
Reference in New Issue
Block a user