diff options
author | FlavioJS <FlavioJS@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2007-11-22 19:00:39 +0000 |
---|---|---|
committer | FlavioJS <FlavioJS@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2007-11-22 19:00:39 +0000 |
commit | 7929930775b05bd5fbb21be659f32050dc7216bd (patch) | |
tree | bc7603cb5cd1940063292ce0a5a21b038c926f05 /src | |
parent | 4c0b24774cd026a2c31b8fd96e4670e53e5597da (diff) | |
download | hercules-7929930775b05bd5fbb21be659f32050dc7216bd.tar.gz hercules-7929930775b05bd5fbb21be659f32050dc7216bd.tar.bz2 hercules-7929930775b05bd5fbb21be659f32050dc7216bd.tar.xz hercules-7929930775b05bd5fbb21be659f32050dc7216bd.zip |
* Moved the reset of references to after the empty script checks in parse_script. (fixes bugreport:222 and bugreport:449)
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@11782 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src')
-rw-r--r-- | src/map/script.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/src/map/script.c b/src/map/script.c index 14302250a..e5a7f832c 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -1876,8 +1876,8 @@ struct script_code* parse_script(const char *src,const char *file,int line,int o if(first){ add_buildin_func(); read_constdb(); + first=0; } - first=0; script_buf=(unsigned char *)aMalloc(SCRIPT_BLOCK_SIZE*sizeof(unsigned char)); script_pos=0; @@ -1885,16 +1885,6 @@ struct script_code* parse_script(const char *src,const char *file,int line,int o str_data[LABEL_NEXTLINE].type=C_NOP; str_data[LABEL_NEXTLINE].backpatch=-1; str_data[LABEL_NEXTLINE].label=-1; - for(i=LABEL_START;i<str_num;i++){ - if( - str_data[i].type==C_POS || str_data[i].type==C_NAME || - str_data[i].type==C_USERFUNC || str_data[i].type == C_USERFUNC_POS - ){ - str_data[i].type=C_NOP; - str_data[i].backpatch=-1; - str_data[i].label=-1; - } - } // who called parse_script is responsible for clearing the database after using it, but just in case... lets clear it here if( options&SCRIPT_USE_LABEL_DB ) @@ -1950,6 +1940,18 @@ struct script_code* parse_script(const char *src,const char *file,int line,int o end = '}'; } + // clear references of labels, variables and internal functions + for(i=LABEL_START;i<str_num;i++){ + if( + str_data[i].type==C_POS || str_data[i].type==C_NAME || + str_data[i].type==C_USERFUNC || str_data[i].type == C_USERFUNC_POS + ){ + str_data[i].type=C_NOP; + str_data[i].backpatch=-1; + str_data[i].label=-1; + } + } + while( syntax.curly_count != 0 || *p != end ) { if( *p == '\0' ) @@ -1979,10 +1981,11 @@ struct script_code* parse_script(const char *src,const char *file,int line,int o add_scriptc(C_NOP); + // trim code to size script_size = script_pos; RECREATE(script_buf,unsigned char,script_pos); - // 未解決のラベルを解決 + // default unknown references to variables for(i=LABEL_START;i<str_num;i++){ if(str_data[i].type==C_NOP){ int j,next; |