summaryrefslogtreecommitdiff
path: root/src/map/script.c
diff options
context:
space:
mode:
authorFlavioJS <FlavioJS@54d463be-8e91-2dee-dedb-b68131a5f0ec>2007-11-22 19:00:39 +0000
committerFlavioJS <FlavioJS@54d463be-8e91-2dee-dedb-b68131a5f0ec>2007-11-22 19:00:39 +0000
commit7929930775b05bd5fbb21be659f32050dc7216bd (patch)
treebc7603cb5cd1940063292ce0a5a21b038c926f05 /src/map/script.c
parent4c0b24774cd026a2c31b8fd96e4670e53e5597da (diff)
downloadhercules-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/map/script.c')
-rw-r--r--src/map/script.c27
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;