From 7f1539c421f6207409a8fd65037018fe27ba472c Mon Sep 17 00:00:00 2001 From: "Samuel D. Crow" Date: Thu, 30 Jun 2022 11:41:31 -0500 Subject: [PATCH] Added runtime checks and started fixing test code --- runtime/main.cpp | 18 ++++++++++++++---- yabFunctions.cpp | 7 +++---- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/runtime/main.cpp b/runtime/main.cpp index 4f901d1..8ee2fc0 100644 --- a/runtime/main.cpp +++ b/runtime/main.cpp @@ -4,6 +4,7 @@ ** by Samuel D. Crow */ #include "runtime.h" +#include subroutine *callStack=nullptr; @@ -26,9 +27,18 @@ unsigned int subroutine::close() int main(int argc, char *argv[]) { unsigned int ret=run(); - if (ret!=EXIT) - { - return 1; + 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 0; + return 1; } diff --git a/yabFunctions.cpp b/yabFunctions.cpp index 67772b0..41d8f9e 100644 --- a/yabFunctions.cpp +++ b/yabFunctions.cpp @@ -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¶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¶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";