/** The argument stack */
static long ArgStack[32];
+/** A state variable used to flag when the interpreter reads a line of input */
static long Line_Read;
/**
CodePtr = prev_code;
}
+static void check_stack(void)
+{
+ if(ArgStackPtr < (ArgStack-1))
+ {
+ puts("Stack Underflow!");
+ exit(1);
+ }
+
+ if(ArgStackPtr > (ArgStack+30))
+ {
+ puts("Stack Overflow!");
+ exit(1);
+ }
+}
+
/**
* Define a built-in word that executes native code */
#define defcode(name_str,c_name,flags,prev) \
defcode("parsenum", parse_num, 0, &exec_word){
char* end;
long num = strtol((const char *)*(ArgStackPtr), &end, 10);
- //*(ArgStackPtr) = strtol((const char *)*(ArgStackPtr), &end, 10);
if(end != (char *)*(ArgStackPtr))
{
*(ArgStackPtr) = num;
while(1)
{
EXEC(interpret);
-
if(Line_Read)
{
+ check_stack();
long stacksz = ArgStackPtr - ArgStack + 1;
if (stacksz > 5)
printf("( ... ");