#include <stdio.h>
#include <stdarg.h>
#include <setjmp.h>
#include "DBG.h"
#include "calc.h"
extern char *yytext;
static char *compile_error_message[] = {
"internal error: bad error message(0)",
"parse error.",
"character invalid. ",
"function multiple define error. ",
"bad function call error. ",
"internal error: bad error message(MAX)"
};
static char *runtime_error_message[] = {
"internal error: bad error message(0)",
"variable not found. ",
"function not found error. ",
"boolean expected error. ",
"argument too many error. ",
"argument too few error. ",
"internal error: bad error message(MAX)"
};
void
clc_compile_error(CompileError id, char *fmt,...)
{
va_list ap;
va_start(ap,fmt);
if (fmt) {
fprintf(stderr,"%s ", compile_error_message[id]);
vfprintf(stderr,fmt,ap);
} else {
fprintf(stderr,"%s\n", compile_error_message[id]);
}
va_end(ap);
}
void
clc_runtime_error(RuntimeError id, char *fmt,...)
{
va_list ap;
va_start(ap,fmt);
if (fmt) {
fprintf(stderr,"%s ", runtime_error_message[id]);
vfprintf(stderr,fmt,ap);
} else {
fprintf(stderr,"%s\n", runtime_error_message[id]);
}
va_end(ap);
longjmp(clc_current_interpreter->error_recovery_environment,
id);
}
int
yyerror(char const *str)
{
clc_compile_error(PARSE_ERR,"near token %s\n", yytext);
return 0;
}