static void vhandleError(FILE* file, BaseAST* ast, const char *fmt, va_list args) { if (err_ignore) return; bool guess = false; if (file == stderr) guess = printErrorHeader(ast); if (err_user || developer) { vfprintf(file, fmt, args); } if (fPrintIDonError && ast) fprintf(file, " [%d]", ast->id); if (file == stderr) printErrorFooter(guess); fprintf(file, "\n"); if (file == stderr) printCallStackOnError(); if (!err_user && !developer) return; if (exit_immediately) { if (ignore_errors_for_pass) { exit_end_of_pass = true; } else if (!ignore_errors) { clean_exit(1); } } }
void handleError(const char* fmt, ...) { fflush(stdout); fflush(stderr); if (err_ignore) { return; } bool guess = printErrorHeader(NULL); // // Only print out the arguments if this is a user error or we're // in developer mode. // if (err_user || developer) { va_list args; va_start(args, fmt); vfprintf(stderr, fmt, args); va_end(args); } printErrorFooter(guess); fprintf(stderr, "\n"); printCallStackOnError(); if (!err_user && !developer) { return; } if (exit_immediately) { if (ignore_errors_for_pass) { exit_end_of_pass = true; } else if (!ignore_errors && !(ignore_user_errors && err_user)) { clean_exit(1); } } }