From ac60336e9e78265b5597301d6ae24baa73d9d0f6 Mon Sep 17 00:00:00 2001 From: Spoike Date: Sat, 14 Jan 2006 03:37:22 +0000 Subject: [PATCH] Slightly easier to use. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@1867 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/qclib/comprout.c | 2 ++ engine/qclib/qcc_pr_lex.c | 26 +++++++++++++++++++++++++- engine/qclib/qccmain.c | 2 ++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/engine/qclib/comprout.c b/engine/qclib/comprout.c index 4199eea0c..a4f9dcc80 100644 --- a/engine/qclib/comprout.c +++ b/engine/qclib/comprout.c @@ -54,6 +54,8 @@ void PostCompile(void) } pbool PreCompile(void) { + QCC_PR_ResetErrorScope(); + qccClearHunk(); strcpy(qcc_gamedir, ""); qcchunk = malloc(qcchunksize=128*1024*1024); diff --git a/engine/qclib/qcc_pr_lex.c b/engine/qclib/qcc_pr_lex.c index 82589c216..648e65307 100644 --- a/engine/qclib/qcc_pr_lex.c +++ b/engine/qclib/qcc_pr_lex.c @@ -2336,7 +2336,26 @@ void QCC_PR_ParsePrintDef (int type, QCC_def_t *def) if (def->s_file) printf ("%s:%i: %s is defined here\n", strings + def->s_file, def->s_line, def->name); } - +void *errorscope; +void QCC_PR_PrintScope (void) +{ + if (pr_scope) + { + if (errorscope != pr_scope) + printf ("in function %s (line %i)\n", pr_scope->name, pr_scope->s_line); + errorscope = pr_scope; + } + else + { + if (errorscope) + printf ("at global scope\n"); + errorscope = NULL; + } +} +void QCC_PR_ResetErrorScope(void) +{ + errorscope = NULL; +} /* ============ PR_ParseError @@ -2359,6 +2378,8 @@ void VARGS QCC_PR_ParseError (int errortype, char *error, ...) #ifndef QCC editbadfile(strings+s_file, pr_source_line); #endif + + QCC_PR_PrintScope(); printf ("%s:%i: error: %s\n", strings + s_file, pr_source_line, string); longjmp (pr_parse_abort, 1); @@ -2375,6 +2396,7 @@ void VARGS QCC_PR_ParseErrorPrintDef (int errortype, QCC_def_t *def, char *error #ifndef QCC editbadfile(strings+s_file, pr_source_line); #endif + QCC_PR_PrintScope(); printf ("%s:%i: error: %s\n", strings + s_file, pr_source_line, string); QCC_PR_ParsePrintDef(WARN_ERROR, def); @@ -2393,6 +2415,7 @@ void VARGS QCC_PR_ParseWarning (int type, char *error, ...) QC_vsnprintf (string,sizeof(string)-1, error,argptr); va_end (argptr); + QCC_PR_PrintScope(); if (type >= ERR_PARSEERRORS) { printf ("%s:%i: error: %s\n", strings + s_file, pr_source_line, string); @@ -2417,6 +2440,7 @@ void VARGS QCC_PR_Warning (int type, char *file, int line, char *error, ...) QC_vsnprintf (string,sizeof(string)-1, error,argptr); va_end (argptr); + QCC_PR_PrintScope(); if (file) printf ("%s:%i: warning: %s\n", file, line, string); else diff --git a/engine/qclib/qccmain.c b/engine/qclib/qccmain.c index 8c0b464b3..a6a675ab2 100644 --- a/engine/qclib/qccmain.c +++ b/engine/qclib/qccmain.c @@ -1424,6 +1424,8 @@ void QCC_PR_BeginCompilation (void *memory, int memsize) pr.def_tail = &pr.def_head; + QCC_PR_ResetErrorScope(); + /* numpr_globals = RESERVED_OFS; for (i=0 ; i