* Script parse errors displayed with one ShowError instead of several ShowMessage's.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@12637 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
FlavioJS 2008-04-23 04:35:32 +00:00
parent 2ab6929481
commit d903fda1c7
3 changed files with 20 additions and 15 deletions

View File

@ -3,6 +3,8 @@ Date Added
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK. AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
2008/04/23
* Script parse errors displayed with one ShowError instead of several ShowMessage's. [FlavioJS]
2008/04/22 2008/04/22
* Changed itemdb_reload to clear the database before reloading, so it is possible * Changed itemdb_reload to clear the database before reloading, so it is possible
can remove an item from the DB without restarting the server (bugreport:1348) (r12635). [Kevin] can remove an item from the DB without restarting the server (bugreport:1348) (r12635). [Kevin]

View File

@ -1828,31 +1828,32 @@ static void read_constdb(void)
/*========================================== /*==========================================
* *
*------------------------------------------*/ *------------------------------------------*/
const char* script_print_line( const char *p, const char *mark, int line ) static const char* script_print_line(StringBuf* buf, const char* p, const char* mark, int line)
{ {
int i; int i;
if( p == NULL || !p[0] ) return NULL; if( p == NULL || !p[0] ) return NULL;
if( line < 0 ) if( line < 0 )
ShowMessage("*% 5d : ", -line); StringBuf_Printf(buf, "*% 5d : ", -line);
else else
ShowMessage(" % 5d : ", line); StringBuf_Printf(buf, " % 5d : ", line);
for(i=0;p[i] && p[i] != '\n';i++){ for(i=0;p[i] && p[i] != '\n';i++){
if(p + i != mark) if(p + i != mark)
ShowMessage("%c",p[i]); StringBuf_Printf(buf, "%c", p[i]);
else else
ShowMessage("\'%c\'",p[i]); StringBuf_Printf(buf, "\'%c\'", p[i]);
} }
ShowMessage("\n"); StringBuf_AppendStr(buf, "\n");
return p+i+(p[i] == '\n' ? 1 : 0); return p+i+(p[i] == '\n' ? 1 : 0);
} }
void script_error(const char *src,const char *file,int start_line, const char *error_msg, const char *error_pos) void script_error(const char* src, const char* file, int start_line, const char* error_msg, const char* error_pos)
{ {
// エラーが発生した行を求める // エラーが発生した行を求める
int j; int j;
int line = start_line; int line = start_line;
const char *p; const char *p;
const char *linestart[5] = { NULL, NULL, NULL, NULL, NULL }; const char *linestart[5] = { NULL, NULL, NULL, NULL, NULL };
StringBuf buf;
for(p=src;p && *p;line++){ for(p=src;p && *p;line++){
const char *lineend=strchr(p,'\n'); const char *lineend=strchr(p,'\n');
@ -1866,16 +1867,19 @@ void script_error(const char *src,const char *file,int start_line, const char *e
p=lineend+1; p=lineend+1;
} }
ShowMessage("\a\n"); StringBuf_Init(&buf);
ShowMessage("script error on %s line %d\n", file, line); StringBuf_AppendStr(&buf, "\a\n");
ShowMessage(" %s\n", error_msg); StringBuf_Printf(&buf, "script error on %s line %d\n", file, line);
StringBuf_Printf(&buf, " %s\n", error_msg);
for(j = 0; j < 5; j++ ) { for(j = 0; j < 5; j++ ) {
script_print_line( linestart[j], NULL, line + j - 5); script_print_line(&buf, linestart[j], NULL, line + j - 5);
} }
p = script_print_line( p, error_pos, -line); p = script_print_line(&buf, p, error_pos, -line);
for(j = 0; j < 5; j++) { for(j = 0; j < 5; j++) {
p = script_print_line( p, NULL, line + j + 1 ); p = script_print_line(&buf, p, NULL, line + j + 1 );
} }
ShowError("%s", StringBuf_Value(&buf));
StringBuf_Destroy(&buf);
} }
/*========================================== /*==========================================

View File

@ -118,8 +118,7 @@ enum script_parse_options {
}; };
const char* skip_space(const char* p); const char* skip_space(const char* p);
const char* script_print_line(const char* p, const char* mark, int line); void script_error(const char* src, const char* file, int start_line, const char* error_msg, const char* error_pos);
void script_error(const char *src,const char *file,int start_line, const char *error_msg, const char *error_pos);
struct script_code* parse_script(const char* src,const char* file,int line,int options); struct script_code* parse_script(const char* src,const char* file,int line,int options);
void run_script_sub(struct script_code *rootscript,int pos,int rid,int oid, char* file, int lineno); void run_script_sub(struct script_code *rootscript,int pos,int rid,int oid, char* file, int lineno);