mirror of
https://github.com/QB64Official/qb64.git
synced 2024-07-18 05:55:14 +00:00
Extended error reporting, pointing to included lines.
The "Unhandled error" message will now display "Line: #### (included line: ####)" with the line number in the included file that generated the error. 0 will be reported if the error wasn't in an included line. Also: - Add function _INCLERRORLINE, which returns a value greater than zero when _ERRORLINE points to an $INCLUDEd file.
This commit is contained in:
parent
a23a733bf0
commit
e891ce0891
|
@ -216,7 +216,7 @@ extern "C" int QB64_Resizable(){
|
||||||
|
|
||||||
int32 sub_gl_called=0;
|
int32 sub_gl_called=0;
|
||||||
|
|
||||||
extern void evnt(uint32 linenumber);
|
extern void evnt(uint32 linenumber, uint32 inclinenumber = 0);
|
||||||
|
|
||||||
extern "C" int qb64_custom_event(int event,int v1,int v2,int v3,int v4,int v5,int v6,int v7,int v8,void *p1,void *p2);
|
extern "C" int qb64_custom_event(int event,int v1,int v2,int v3,int v4,int v5,int v6,int v7,int v8,void *p1,void *p2);
|
||||||
#ifdef QB64_WINDOWS
|
#ifdef QB64_WINDOWS
|
||||||
|
@ -4135,6 +4135,7 @@ void convert_text_to_utf16(int32 fonthandle,void *buf,int32 size){
|
||||||
qbs *unknown_opcode_mess;
|
qbs *unknown_opcode_mess;
|
||||||
|
|
||||||
extern uint32 ercl;
|
extern uint32 ercl;
|
||||||
|
extern uint32 inclercl;
|
||||||
|
|
||||||
int32 exit_blocked=0;
|
int32 exit_blocked=0;
|
||||||
int32 exit_value=0;
|
int32 exit_value=0;
|
||||||
|
@ -7188,7 +7189,7 @@ const char fixerr_strcont[]="\nContinue?";
|
||||||
const char fixerr_strunhan[]="Unhandled Error #";
|
const char fixerr_strunhan[]="Unhandled Error #";
|
||||||
const char fixerr_strcrit[]="Critical Error #";
|
const char fixerr_strcrit[]="Critical Error #";
|
||||||
|
|
||||||
void fix_error(){
|
void fix_error(uint32 inclinenumber = 0){
|
||||||
static char errtitle[256];//builds message
|
static char errtitle[256];//builds message
|
||||||
static char errmess[256];//builds message
|
static char errmess[256];//builds message
|
||||||
static char *cp;
|
static char *cp;
|
||||||
|
@ -7284,7 +7285,7 @@ void fix_error(){
|
||||||
|
|
||||||
i=0;
|
i=0;
|
||||||
memcpy(&errmess[i],&fixerr_strline[0],strlen(fixerr_strline)); i=i+strlen(fixerr_strline);
|
memcpy(&errmess[i],&fixerr_strline[0],strlen(fixerr_strline)); i=i+strlen(fixerr_strline);
|
||||||
i2=sprintf(&errmess[i],"%u\n",ercl); i=i+i2;
|
i2=sprintf(&errmess[i],"%u (included line: %u)\n",ercl,inclercl); i=i+i2;
|
||||||
memcpy(&errmess[i],cp,strlen(cp)); i=i+strlen(cp);
|
memcpy(&errmess[i],cp,strlen(cp)); i=i+strlen(cp);
|
||||||
if (!prevent_handling) {memcpy(&errmess[i],&fixerr_strcont[0],strlen(fixerr_strcont)); i=i+strlen(fixerr_strcont);}
|
if (!prevent_handling) {memcpy(&errmess[i],&fixerr_strcont[0],strlen(fixerr_strcont)); i=i+strlen(fixerr_strcont);}
|
||||||
errmess[i]=0;
|
errmess[i]=0;
|
||||||
|
|
|
@ -286,7 +286,7 @@ extern uint32 *rm32();
|
||||||
extern void cpu_call();
|
extern void cpu_call();
|
||||||
extern int64 build_int64(uint32 val2,uint32 val1);
|
extern int64 build_int64(uint32 val2,uint32 val1);
|
||||||
extern uint64 build_uint64(uint32 val2,uint32 val1);
|
extern uint64 build_uint64(uint32 val2,uint32 val1);
|
||||||
extern void fix_error();
|
extern void fix_error(uint32 inclinenumber = 0);
|
||||||
extern double get_error_erl();
|
extern double get_error_erl();
|
||||||
extern uint32 get_error_err();
|
extern uint32 get_error_err();
|
||||||
extern void end();
|
extern void end();
|
||||||
|
@ -655,6 +655,7 @@ int32 key_event_id=0;
|
||||||
int32 strig_event_occurred=0;//inc/dec as each GOSUB to QBMAIN () begins/ends
|
int32 strig_event_occurred=0;//inc/dec as each GOSUB to QBMAIN () begins/ends
|
||||||
int32 strig_event_id=0;
|
int32 strig_event_id=0;
|
||||||
uint32 ercl;
|
uint32 ercl;
|
||||||
|
uint32 inclercl;
|
||||||
uint16 call_absolute_offsets[256];
|
uint16 call_absolute_offsets[256];
|
||||||
uint32 dbgline;
|
uint32 dbgline;
|
||||||
uint32 qbs_cmem_sp=256;
|
uint32 qbs_cmem_sp=256;
|
||||||
|
@ -1055,6 +1056,10 @@ return ercl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int32 func__inclerrorline(){
|
||||||
|
return inclercl;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void chain_input(){
|
void chain_input(){
|
||||||
//note: common data or not, every program must check for chained data,
|
//note: common data or not, every program must check for chained data,
|
||||||
|
@ -1932,7 +1937,7 @@ extern int64 display_lock_released;
|
||||||
extern int32 disableEvents;
|
extern int32 disableEvents;
|
||||||
|
|
||||||
uint32 r;
|
uint32 r;
|
||||||
void evnt(uint32 linenumber){
|
void evnt(uint32 linenumber, uint32 inclinenumber = 0){
|
||||||
if (disableEvents) return;
|
if (disableEvents) return;
|
||||||
|
|
||||||
qbevent=0;
|
qbevent=0;
|
||||||
|
@ -1953,7 +1958,8 @@ Sleep(10);
|
||||||
|
|
||||||
if(new_error){
|
if(new_error){
|
||||||
ercl=linenumber;
|
ercl=linenumber;
|
||||||
fix_error();
|
inclercl=inclinenumber;
|
||||||
|
fix_error(inclinenumber);
|
||||||
if (error_retry){error_retry=0; r=1;}
|
if (error_retry){error_retry=0; r=1;}
|
||||||
}else{
|
}else{
|
||||||
if (sub_gl_called==0) events();
|
if (sub_gl_called==0) events();
|
||||||
|
|
|
@ -10262,7 +10262,11 @@ DO
|
||||||
dynscope = 0
|
dynscope = 0
|
||||||
PRINT #12, "if(qbevent){evnt(" + str2$(linenumber) + ");if(r)goto S_" + str2$(statementn) + ";}"
|
PRINT #12, "if(qbevent){evnt(" + str2$(linenumber) + ");if(r)goto S_" + str2$(statementn) + ";}"
|
||||||
ELSE
|
ELSE
|
||||||
PRINT #12, "if(!qbevent)break;evnt(" + str2$(linenumber) + ");}while(r);"
|
inclinenump$ = ""
|
||||||
|
IF inclinenumber(inclevel) THEN
|
||||||
|
inclinenump$ = ", " + str2$(inclinenumber(inclevel))
|
||||||
|
END IF
|
||||||
|
PRINT #12, "if(!qbevent)break;evnt(" + str2$(linenumber) + inclinenump$ + ");}while(r);"
|
||||||
END IF
|
END IF
|
||||||
END IF
|
END IF
|
||||||
|
|
||||||
|
|
|
@ -745,6 +745,14 @@ id.callname = "func__errorline"
|
||||||
id.ret = LONGTYPE - ISPOINTER
|
id.ret = LONGTYPE - ISPOINTER
|
||||||
regid
|
regid
|
||||||
|
|
||||||
|
clearid
|
||||||
|
id.n = "_INCLERRORLINE"
|
||||||
|
id.subfunc = 1
|
||||||
|
id.callname = "func__inclerrorline"
|
||||||
|
id.ret = LONGTYPE - ISPOINTER
|
||||||
|
regid
|
||||||
|
|
||||||
|
|
||||||
clearid
|
clearid
|
||||||
id.n = "_DISPLAY"
|
id.n = "_DISPLAY"
|
||||||
id.subfunc = 2
|
id.subfunc = 2
|
||||||
|
|
Loading…
Reference in a new issue