1.1 --- a/sourcepawn/compiler/amx.h Sat Aug 19 20:52:42 2006 +0000
1.2 +++ b/sourcepawn/compiler/amx.h Mon Aug 28 15:22:02 2006 +0000
1.3 @@ -18,7 +18,7 @@
1.4 * misrepresented as being the original software.
1.5 * 3. This notice may not be removed or altered from any source distribution.
1.6 *
1.7 - * Version: $Id: amx.h 3579 2006-06-06 13:35:29Z thiadmer $
1.8 + * Version: $Id: amx.h 3633 2006-08-11 16:20:18Z thiadmer $
1.9 */
1.10
1.11 #ifndef AMX_H_INCLUDED
1.12 @@ -266,6 +266,7 @@
1.13 cell alt ;
1.14 cell reset_stk ;
1.15 cell reset_hea ;
1.16 + /* extra fields for increased performance */
1.17 cell sysreq_d ; /* relocated address/value for the SYSREQ.D opcode */
1.18 #if defined JIT
1.19 /* support variables for the JIT */
1.20 @@ -341,6 +342,7 @@
1.21 #define AMX_FLAG_COMPACT 0x04 /* compact encoding */
1.22 #define AMX_FLAG_SLEEP 0x08 /* script uses the sleep instruction (possible re-entry or power-down mode) */
1.23 #define AMX_FLAG_NOCHECKS 0x10 /* no array bounds checking; no BREAK opcodes */
1.24 +#define AMX_FLAG_SYSREQN 0x800 /* script new (optimized) version of SYSREQ opcode */
1.25 #define AMX_FLAG_NTVREG 0x1000 /* all native functions are registered */
1.26 #define AMX_FLAG_JITC 0x2000 /* abstract machine is JIT compiled */
1.27 #define AMX_FLAG_BROWSE 0x4000 /* busy browsing */
2.1 --- a/sourcepawn/compiler/amxdbg.h Sat Aug 19 20:52:42 2006 +0000
2.2 +++ b/sourcepawn/compiler/amxdbg.h Mon Aug 28 15:22:02 2006 +0000
2.3 @@ -21,7 +21,7 @@
2.4 * misrepresented as being the original software.
2.5 * 3. This notice may not be removed or altered from any source distribution.
2.6 *
2.7 - * Version: $Id: amxdbg.h 3519 2006-02-17 17:57:04Z thiadmer $
2.8 + * Version: $Id: amxdbg.h 3612 2006-07-22 09:59:46Z thiadmer $
2.9 */
2.10
2.11 #ifndef AMXDBG_H_INCLUDED
3.1 --- a/sourcepawn/compiler/libpawnc.c Sat Aug 19 20:52:42 2006 +0000
3.2 +++ b/sourcepawn/compiler/libpawnc.c Mon Aug 28 15:22:02 2006 +0000
3.3 @@ -20,7 +20,7 @@
3.4 * misrepresented as being the original software.
3.5 * 3. This notice may not be removed or altered from any source distribution.
3.6 *
3.7 - * Version: $Id: libsc.c 3114 2005-03-17 14:48:29Z thiadmer $
3.8 + * Version: $Id: libpawnc.c 3612 2006-07-22 09:59:46Z thiadmer $
3.9 */
3.10 #include <assert.h>
3.11 #include <stdio.h>
4.1 --- a/sourcepawn/compiler/pawncc.c Sat Aug 19 20:52:42 2006 +0000
4.2 +++ b/sourcepawn/compiler/pawncc.c Mon Aug 28 15:22:02 2006 +0000
4.3 @@ -139,7 +139,7 @@
4.4 cod.flags = 0;
4.5 if (hdr->flags & AMX_FLAG_DEBUG)
4.6 {
4.7 - cod.flags |= SP_FILE_DEBUG;
4.8 + cod.flags |= SP_FLAG_DEBUG;
4.9 }
4.10 cod.code = sizeof(cod);
4.11 cod.main = hdr->cip;
5.1 --- a/sourcepawn/compiler/sc.h Sat Aug 19 20:52:42 2006 +0000
5.2 +++ b/sourcepawn/compiler/sc.h Mon Aug 28 15:22:02 2006 +0000
5.3 @@ -25,7 +25,7 @@
5.4 * misrepresented as being the original software.
5.5 * 3. This notice may not be removed or altered from any source distribution.
5.6 *
5.7 - * Version: $Id: sc.h 3590 2006-06-24 14:16:39Z thiadmer $
5.8 + * Version: $Id: sc.h 3636 2006-08-14 15:42:05Z thiadmer $
5.9 */
5.10 #ifndef SC_H_INCLUDED
5.11 #define SC_H_INCLUDED
5.12 @@ -279,11 +279,11 @@
5.13 #define opargs(n) ((n)*sizeof(cell)) /* size of typical argument */
5.14
5.15 /* Tokens recognized by lex()
5.16 - * Some of these constants are assigned as well to the variable "lastst"
5.17 + * Some of these constants are assigned as well to the variable "lastst" (see SC1.C)
5.18 */
5.19 #define tFIRST 256 /* value of first multi-character operator */
5.20 #define tMIDDLE 280 /* value of last multi-character operator */
5.21 -#define tLAST 326 /* value of last multi-character match-able token */
5.22 +#define tLAST 329 /* value of last multi-character match-able token */
5.23 /* multi-character operators */
5.24 #define taMULT 256 /* *= */
5.25 #define taDIV 257 /* /= */
5.26 @@ -312,62 +312,66 @@
5.27 #define tDBLCOLON 280 /* :: */
5.28 /* reserved words (statements) */
5.29 #define tASSERT 281
5.30 -#define tBREAK 282
5.31 -#define tCASE 283
5.32 -#define tCHAR 284
5.33 -#define tCONST 285
5.34 -#define tCONTINUE 286
5.35 -#define tDEFAULT 287
5.36 -#define tDEFINED 288
5.37 -#define tDO 289
5.38 -#define tELSE 290
5.39 -#define tENUM 291
5.40 -#define tEXIT 292
5.41 -#define tFOR 293
5.42 -#define tFORWARD 294
5.43 -#define tGOTO 295
5.44 -#define tIF 296
5.45 -#define tNATIVE 297
5.46 -#define tNEW 298
5.47 -#define tDECL 299
5.48 -#define tOPERATOR 300
5.49 -#define tPUBLIC 301
5.50 -#define tRETURN 302
5.51 -#define tSIZEOF 303
5.52 -#define tSLEEP 304
5.53 -#define tSTATE 305
5.54 -#define tSTATIC 306
5.55 -#define tSTOCK 307
5.56 -#define tSWITCH 308
5.57 -#define tTAGOF 309
5.58 -#define tWHILE 310
5.59 +#define tBEGIN 282
5.60 +#define tBREAK 283
5.61 +#define tCASE 284
5.62 +#define tCHAR 285
5.63 +#define tCONST 286
5.64 +#define tCONTINUE 287
5.65 +#define tDEFAULT 288
5.66 +#define tDEFINED 289
5.67 +#define tDO 290
5.68 +#define tELSE 291
5.69 +#define tEND 292
5.70 +#define tENUM 293
5.71 +#define tEXIT 294
5.72 +#define tFOR 295
5.73 +#define tFORWARD 296
5.74 +#define tGOTO 297
5.75 +#define tIF 298
5.76 +#define tNATIVE 299
5.77 +#define tNEW 300
5.78 +#define tDECL 301
5.79 +#define tOPERATOR 302
5.80 +#define tPUBLIC 303
5.81 +#define tRETURN 304
5.82 +#define tSIZEOF 305
5.83 +#define tSLEEP 306
5.84 +#define tSTATE 307
5.85 +#define tSTATIC 308
5.86 +#define tSTOCK 309
5.87 +#define tSWITCH 310
5.88 +#define tTAGOF 311
5.89 +#define tTHEN 312
5.90 +#define tWHILE 313
5.91 /* compiler directives */
5.92 -#define tpASSERT 311 /* #assert */
5.93 -#define tpDEFINE 312
5.94 -#define tpELSE 313 /* #else */
5.95 -#define tpELSEIF 314 /* #elseif */
5.96 -#define tpEMIT 315
5.97 -#define tpENDIF 316
5.98 -#define tpENDINPUT 317
5.99 -#define tpENDSCRPT 318
5.100 -#define tpERROR 319
5.101 -#define tpFILE 320
5.102 -#define tpIF 321 /* #if */
5.103 -#define tINCLUDE 322
5.104 -#define tpLINE 323
5.105 -#define tpPRAGMA 324
5.106 -#define tpTRYINCLUDE 325
5.107 -#define tpUNDEF 326
5.108 +#define tpASSERT 314 /* #assert */
5.109 +#define tpDEFINE 315
5.110 +#define tpELSE 316 /* #else */
5.111 +#define tpELSEIF 317 /* #elseif */
5.112 +#define tpEMIT 318
5.113 +#define tpENDIF 319
5.114 +#define tpENDINPUT 320
5.115 +#define tpENDSCRPT 321
5.116 +#define tpERROR 322
5.117 +#define tpFILE 323
5.118 +#define tpIF 324 /* #if */
5.119 +#define tINCLUDE 325
5.120 +#define tpLINE 326
5.121 +#define tpPRAGMA 327
5.122 +#define tpTRYINCLUDE 328
5.123 +#define tpUNDEF 329
5.124 /* semicolon is a special case, because it can be optional */
5.125 -#define tTERM 327 /* semicolon or newline */
5.126 -#define tENDEXPR 328 /* forced end of expression */
5.127 +#define tTERM 330 /* semicolon or newline */
5.128 +#define tENDEXPR 331 /* forced end of expression */
5.129 /* other recognized tokens */
5.130 -#define tNUMBER 329 /* integer number */
5.131 -#define tRATIONAL 330 /* rational number */
5.132 -#define tSYMBOL 331
5.133 -#define tLABEL 332
5.134 -#define tSTRING 333
5.135 -#define tEXPR 334 /* for assigment to "lastst" only */
5.136 +#define tNUMBER 332 /* integer number */
5.137 +#define tRATIONAL 333 /* rational number */
5.138 +#define tSYMBOL 334
5.139 +#define tLABEL 335
5.140 +#define tSTRING 336
5.141 +#define tEXPR 337 /* for assigment to "lastst" only (see SC1.C) */
5.142 +#define tENDLESS 338 /* endless loop, for assigment to "lastst" only */
5.143
5.144 /* (reversed) evaluation of staging buffer */
5.145 #define sSTARTREORDER 0x01
5.146 @@ -698,15 +702,15 @@
5.147 typedef unsigned char MEMFILE;
5.148 #define tMEMFILE 1
5.149 #endif
5.150 -MEMFILE *mfcreate(char *filename);
5.151 +MEMFILE *mfcreate(const char *filename);
5.152 void mfclose(MEMFILE *mf);
5.153 int mfdump(MEMFILE *mf);
5.154 -long mflength(MEMFILE *mf);
5.155 +long mflength(const MEMFILE *mf);
5.156 long mfseek(MEMFILE *mf,long offset,int whence);
5.157 -unsigned int mfwrite(MEMFILE *mf,unsigned char *buffer,unsigned int size);
5.158 +unsigned int mfwrite(MEMFILE *mf,const unsigned char *buffer,unsigned int size);
5.159 unsigned int mfread(MEMFILE *mf,unsigned char *buffer,unsigned int size);
5.160 char *mfgets(MEMFILE *mf,char *string,unsigned int size);
5.161 -int mfputs(MEMFILE *mf,char *string);
5.162 +int mfputs(MEMFILE *mf,const char *string);
5.163
5.164 /* function prototypes in SCI18N.C */
5.165 #define MAXCODEPAGE 12
6.1 --- a/sourcepawn/compiler/sc1.c Sat Aug 19 20:52:42 2006 +0000
6.2 +++ b/sourcepawn/compiler/sc1.c Mon Aug 28 15:22:02 2006 +0000
6.3 @@ -20,7 +20,7 @@
6.4 * misrepresented as being the original software.
6.5 * 3. This notice may not be removed or altered from any source distribution.
6.6 *
6.7 - * Version: $Id: sc1.c 3591 2006-06-25 14:30:07Z thiadmer $
6.8 + * Version: $Id: sc1.c 3636 2006-08-14 15:42:05Z thiadmer $
6.9 */
6.10 #include <assert.h>
6.11 #include <ctype.h>
6.12 @@ -109,21 +109,21 @@
6.13 static int testsymbols(symbol *root,int level,int testlabs,int testconst);
6.14 static void destructsymbols(symbol *root,int level);
6.15 static constvalue *find_constval_byval(constvalue *table,cell val);
6.16 +static symbol *fetchlab(char *name);
6.17 static void statement(int *lastindent,int allow_decl);
6.18 -static void compound(int stmt_sameline);
6.19 +static void compound(int stmt_sameline,int starttok);
6.20 +static int test(int label,int parens,int invert);
6.21 static int doexpr(int comma,int chkeffect,int allowarray,int mark_endexpr,
6.22 int *tag,symbol **symptr,int chkfuncresult);
6.23 static void doassert(void);
6.24 static void doexit(void);
6.25 -static void test(int label,int parens,int invert);
6.26 -static void doif(void);
6.27 -static void dowhile(void);
6.28 -static void dodo(void);
6.29 -static void dofor(void);
6.30 +static int doif(void);
6.31 +static int dowhile(void);
6.32 +static int dodo(void);
6.33 +static int dofor(void);
6.34 static void doswitch(void);
6.35 static void dogoto(void);
6.36 static void dolabel(void);
6.37 -static symbol *fetchlab(char *name);
6.38 static void doreturn(void);
6.39 static void dobreak(void);
6.40 static void docont(void);
6.41 @@ -134,10 +134,17 @@
6.42 static int *readwhile(void);
6.43 static void inst_datetime_defines(void);
6.44
6.45 +enum {
6.46 + TEST_PLAIN, /* no parentheses */
6.47 + TEST_THEN, /* '(' <expr> ')' or <expr> 'then' */
6.48 + TEST_DO, /* '(' <expr> ')' or <expr> 'do' */
6.49 + TEST_OPT, /* '(' <expr> ')' or <expr> */
6.50 +};
6.51 static int norun = 0; /* the compiler never ran */
6.52 -static int autozero = 1; /* if 1 will zero out the variable, if 0 omit the zeroing */
6.53 +static int autozero = 1; /* if 1 will zero out the variable, if 0 omit the zeroing */
6.54 static int lastst = 0; /* last executed statement type */
6.55 static int nestlevel = 0; /* number of active (open) compound statements */
6.56 +static int endlessloop= 0; /* nesting level of endless loop */
6.57 static int rettype = 0; /* the type that a "return" expression should have */
6.58 static int skipinput = 0; /* number of lines to skip from the first input file */
6.59 static int optproccall = TRUE; /* support "procedure call" */
6.60 @@ -449,9 +456,9 @@
6.61 pc_printf("Stack/heap size: %8ld bytes; ", (long)pc_stksize*sizeof(cell));
6.62 pc_printf("estimated max. usage");
6.63 if (recursion)
6.64 - pc_printf(" is unknown, due to recursion\n");
6.65 + pc_printf(": unknown, due to recursion\n");
6.66 else if ((pc_memflags & suSLEEP_INSTR)!=0)
6.67 - pc_printf(" is unknown, due to the \"sleep\" instruction\n");
6.68 + pc_printf(": unknown, due to the \"sleep\" instruction\n");
6.69 else
6.70 pc_printf("=%ld cells (%ld bytes)\n",stacksize,stacksize*sizeof(cell));
6.71 pc_printf("Total requirements:%8ld bytes\n", (long)hdrsize+(long)code_idx+(long)glb_declared*sizeof(cell)+(long)pc_stksize*sizeof(cell));
6.72 @@ -1415,6 +1422,9 @@
6.73 {
6.74 int j,k;
6.75
6.76 + if (sc_status==statSKIP)
6.77 + return;
6.78 +
6.79 k=0;
6.80 while (k<litidx){
6.81 /* should be in the data segment */
6.82 @@ -1444,7 +1454,7 @@
6.83 {
6.84 int i;
6.85
6.86 - if (count<=0)
6.87 + if (sc_status==statSKIP || count<=0)
6.88 return;
6.89 assert(curseg==2);
6.90 defstorage();
6.91 @@ -2196,6 +2206,24 @@
6.92 err++;
6.93 } /* if */
6.94 } /* for */
6.95 + if (numdim>1 && dim[numdim-1]==0) {
6.96 + /* also look whether, by any chance, all "counted" final dimensions are
6.97 + * the same value; if so, we can store this
6.98 + */
6.99 + constvalue *ld=lastdim.next;
6.100 + int d,match;
6.101 + for (d=0; d<dim[numdim-2]; d++) {
6.102 + assert(ld!=NULL);
6.103 + assert(strtol(ld->name,NULL,16)==d);
6.104 + if (d==0)
6.105 + match=ld->value;
6.106 + else if (match!=ld->value)
6.107 + break;
6.108 + ld=ld->next;
6.109 + } /* for */
6.110 + if (d==dim[numdim-2])
6.111 + dim[numdim-1]=match;
6.112 + } /* if */
6.113 /* after all arrays have been initalized, we know the (major) dimensions
6.114 * of the array and we can properly adjust the indirection vectors
6.115 */
6.116 @@ -2446,26 +2474,28 @@
6.117 int symbolline;
6.118 symbol *sym;
6.119
6.120 - insert_docstring_separator(); /* see comment in newfunc() */
6.121 - tag=pc_addtag(NULL);
6.122 - if (lex(&val,&str)!=tSYMBOL) /* read in (new) token */
6.123 - error(20,str); /* invalid symbol name */
6.124 - symbolline=fline; /* save line where symbol was found */
6.125 - strcpy(constname,str); /* save symbol name */
6.126 - needtoken('=');
6.127 - constexpr(&val,&exprtag,NULL);/* get value */
6.128 + insert_docstring_separator(); /* see comment in newfunc() */
6.129 + do {
6.130 + tag=pc_addtag(NULL);
6.131 + if (lex(&val,&str)!=tSYMBOL) /* read in (new) token */
6.132 + error(20,str); /* invalid symbol name */
6.133 + symbolline=fline; /* save line where symbol was found */
6.134 + strcpy(constname,str); /* save symbol name */
6.135 + needtoken('=');
6.136 + constexpr(&val,&exprtag,NULL); /* get value */
6.137 + /* add_constant() checks for duplicate definitions */
6.138 + if (!matchtag(tag,exprtag,FALSE)) {
6.139 + /* temporarily reset the line number to where the symbol was defined */
6.140 + int orgfline=fline;
6.141 + fline=symbolline;
6.142 + error(213); /* tagname mismatch */
6.143 + fline=orgfline;
6.144 + } /* if */
6.145 + sym=add_constant(constname,val,vclass,tag);
6.146 + if (sym!=NULL)
6.147 + sc_attachdocumentation(sym);/* attach any documenation to the constant */
6.148 + } while (matchtoken(',')); /* enddo */ /* more? */
6.149 needtoken(tTERM);
6.150 - /* add_constant() checks for duplicate definitions */
6.151 - if (!matchtag(tag,exprtag,FALSE)) {
6.152 - /* temporarily reset the line number to where the symbol was defined */
6.153 - int orgfline=fline;
6.154 - fline=symbolline;
6.155 - error(213); /* tagname mismatch */
6.156 - fline=orgfline;
6.157 - } /* if */
6.158 - sym=add_constant(constname,val,vclass,tag);
6.159 - if (sym!=NULL)
6.160 - sc_attachdocumentation(sym);/* attach any documenation to the function */
6.161 }
6.162
6.163 /* decl_enum - declare enumerated constants
6.164 @@ -4597,7 +4627,7 @@
6.165 */
6.166 static void statement(int *lastindent,int allow_decl)
6.167 {
6.168 - int tok;
6.169 + int tok,save;
6.170 cell val;
6.171 char *st;
6.172
6.173 @@ -4650,29 +4680,26 @@
6.174 } /* if */
6.175 break;
6.176 case '{':
6.177 - tok=fline;
6.178 + case tBEGIN:
6.179 + save=fline;
6.180 if (!matchtoken('}')) /* {} is the empty statement */
6.181 - compound(tok==fline);
6.182 + compound(save==fline,tok);
6.183 /* lastst (for "last statement") does not change */
6.184 break;
6.185 case ';':
6.186 error(36); /* empty statement */
6.187 break;
6.188 case tIF:
6.189 - doif();
6.190 - lastst=tIF;
6.191 + lastst=doif();
6.192 break;
6.193 case tWHILE:
6.194 - dowhile();
6.195 - lastst=tWHILE;
6.196 + lastst=dowhile();
6.197 break;
6.198 case tDO:
6.199 - dodo();
6.200 - lastst=tDO;
6.201 + lastst=dodo();
6.202 break;
6.203 case tFOR:
6.204 - dofor();
6.205 - lastst=tFOR;
6.206 + lastst=dofor();
6.207 break;
6.208 case tSWITCH:
6.209 doswitch();
6.210 @@ -4734,23 +4761,24 @@
6.211 } /* switch */
6.212 }
6.213
6.214 -static void compound(int stmt_sameline)
6.215 +static void compound(int stmt_sameline,int starttok)
6.216 {
6.217 int indent=-1;
6.218 cell save_decl=declared;
6.219 int count_stmt=0;
6.220 int block_start=fline; /* save line where the compound block started */
6.221 + int endtok;
6.222
6.223 /* if there is more text on this line, we should adjust the statement indent */
6.224 if (stmt_sameline) {
6.225 int i;
6.226 const unsigned char *p=lptr;
6.227 /* go back to the opening brace */
6.228 - while (*p!='{') {
6.229 + while (*p!=starttok) {
6.230 assert(p>pline);
6.231 p--;
6.232 } /* while */
6.233 - assert(*p=='{'); /* it should be found */
6.234 + assert(*p==starttok); /* it should be found */
6.235 /* go forward, skipping white-space */
6.236 p++;
6.237 while (*p<=' ' && *p!='\0')
6.238 @@ -4764,13 +4792,14 @@
6.239 stmtindent++;
6.240 } /* if */
6.241
6.242 + endtok=(starttok=='{') ? '}' : tEND;
6.243 nestlevel+=1; /* increase compound statement level */
6.244 - while (matchtoken('}')==0){ /* repeat until compound statement is closed */
6.245 + while (matchtoken(endtok)==0){/* repeat until compound statement is closed */
6.246 if (!freading){
6.247 error(30,block_start); /* compound block not closed at end of file */
6.248 break;
6.249 } else {
6.250 - if (count_stmt>0 && (lastst==tRETURN || lastst==tBREAK || lastst==tCONTINUE))
6.251 + if (count_stmt>0 && (lastst==tRETURN || lastst==tBREAK || lastst==tCONTINUE || lastst==tENDLESS))
6.252 error(225); /* unreachable code */
6.253 statement(&indent,TRUE); /* do a statement */
6.254 count_stmt++;
6.255 @@ -4864,11 +4893,12 @@
6.256 *
6.257 * Global references: sc_intest (altered, but restored upon termination)
6.258 */
6.259 -static void test(int label,int parens,int invert)
6.260 +static int test(int label,int parens,int invert)
6.261 {
6.262 int index,tok;
6.263 cell cidx;
6.264 int ident,tag;
6.265 + int endtok;
6.266 cell constval;
6.267 symbol *sym;
6.268 int localstaging=FALSE;
6.269 @@ -4884,8 +4914,15 @@
6.270
6.271 PUSHSTK_I(sc_intest);
6.272 sc_intest=TRUE;
6.273 - if (parens)
6.274 - needtoken('(');
6.275 + endtok=0;
6.276 + if (parens!=TEST_PLAIN) {
6.277 + if (matchtoken('('))
6.278 + endtok=')';
6.279 + else if (parens==TEST_THEN)
6.280 + endtok=tTHEN;
6.281 + else if (parens==TEST_DO)
6.282 + endtok=tDO;
6.283 + } /* if */
6.284 do {
6.285 stgget(&index,&cidx); /* mark position (of last expression) in
6.286 * code generator */
6.287 @@ -4894,17 +4931,19 @@
6.288 if (tok)
6.289 markexpr(sEXPR,NULL,0);
6.290 } while (tok); /* do */
6.291 - if (parens)
6.292 - needtoken(')');
6.293 + if (endtok!=0)
6.294 + needtoken(endtok);
6.295 if (ident==iARRAY || ident==iREFARRAY) {
6.296 char *ptr=(sym->name!=NULL) ? sym->name : "-unknown-";
6.297 error(33,ptr); /* array must be indexed */
6.298 } /* if */
6.299 if (ident==iCONSTEXPR) { /* constant expression */
6.300 + int testtype=0;
6.301 sc_intest=(short)POPSTK_I();/* restore stack */
6.302 stgdel(index,cidx);
6.303 if (constval) { /* code always executed */
6.304 error(206); /* redundant test: always non-zero */
6.305 + testtype=tENDLESS;
6.306 } else {
6.307 error(205); /* redundant code: never executed */
6.308 jumplabel(label);
6.309 @@ -4913,7 +4952,7 @@
6.310 stgout(0); /* write "jumplabel" code */
6.311 stgset(FALSE); /* stop staging */
6.312 } /* if */
6.313 - return;
6.314 + return testtype;
6.315 } /* if */
6.316 if (tag!=0 && tag!=pc_addtag("bool"))
6.317 if (check_userop(lneg,tag,0,1,NULL,&tag))
6.318 @@ -4929,37 +4968,49 @@
6.319 * assert() when localstaging is set to TRUE) */
6.320 stgset(FALSE); /* stop staging */
6.321 } /* if */
6.322 + return 0;
6.323 }
6.324
6.325 -static void doif(void)
6.326 +static int doif(void)
6.327 {
6.328 int flab1,flab2;
6.329 int ifindent;
6.330 + int lastst_true;
6.331
6.332 ifindent=stmtindent; /* save the indent of the "if" instruction */
6.333 flab1=getlabel(); /* get label number for false branch */
6.334 - test(flab1,TRUE,FALSE); /* get expression, branch to flab1 if false */
6.335 + test(flab1,TEST_THEN,FALSE); /* get expression, branch to flab1 if false */
6.336 statement(NULL,FALSE); /* if true, do a statement */
6.337 - if (matchtoken(tELSE)==0){ /* if...else ? */
6.338 + if (!matchtoken(tELSE)) { /* if...else ? */
6.339 setlabel(flab1); /* no, simple if..., print false label */
6.340 } else {
6.341 + lastst_true=lastst; /* save last statement of the "true" branch */
6.342 /* to avoid the "dangling else" error, we want a warning if the "else"
6.343 * has a lower indent than the matching "if" */
6.344 if (stmtindent<ifindent && sc_tabsize>0)
6.345 error(217); /* loose indentation */
6.346 flab2=getlabel();
6.347 if ((lastst!=tRETURN) && (lastst!=tGOTO))
6.348 - jumplabel(flab2);
6.349 + jumplabel(flab2); /* "true" branch jumps around "else" clause, unless the "true" branch statement already jumped */
6.350 setlabel(flab1); /* print false label */
6.351 statement(NULL,FALSE); /* do "else" clause */
6.352 setlabel(flab2); /* print true label */
6.353 - } /* endif */
6.354 + /* if both the "true" branch and the "false" branch ended with the same
6.355 + * kind of statement, set the last statement id to that kind, rather than
6.356 + * to the generic tIF; this allows for better "unreachable code" checking
6.357 + */
6.358 + if (lastst==lastst_true)
6.359 + return lastst;
6.360 + } /* if */
6.361 + return tIF;
6.362 }
6.363
6.364 -static void dowhile(void)
6.365 +static int dowhile(void)
6.366 {
6.367 int wq[wqSIZE]; /* allocate local queue */
6.368 -
6.369 + int save_endlessloop,retcode;
6.370 +
6.371 + save_endlessloop=endlessloop;
6.372 addwhile(wq); /* add entry to queue for "break" */
6.373 setlabel(wq[wqLOOP]); /* loop label */
6.374 /* The debugger uses the "break" opcode to be able to "break" out of
6.375 @@ -4967,21 +5018,27 @@
6.376 * tiniest loop, set it below the top of the loop
6.377 */
6.378 setline(TRUE);
6.379 - test(wq[wqEXIT],TRUE,FALSE); /* branch to wq[wqEXIT] if false */
6.380 + endlessloop=test(wq[wqEXIT],TEST_DO,FALSE);/* branch to wq[wqEXIT] if false */
6.381 statement(NULL,FALSE); /* if so, do a statement */
6.382 jumplabel(wq[wqLOOP]); /* and loop to "while" start */
6.383 setlabel(wq[wqEXIT]); /* exit label */
6.384 delwhile(); /* delete queue entry */
6.385 +
6.386 + retcode=endlessloop ? tENDLESS : tWHILE;
6.387 + endlessloop=save_endlessloop;
6.388 + return retcode;
6.389 }
6.390
6.391 /*
6.392 * Note that "continue" will in this case not jump to the top of the loop, but
6.393 * to the end: just before the TRUE-or-FALSE testing code.
6.394 */
6.395 -static void dodo(void)
6.396 +static int dodo(void)
6.397 {
6.398 int wq[wqSIZE],top;
6.399 -
6.400 + int save_endlessloop,retcode;
6.401 +
6.402 + save_endlessloop=endlessloop;
6.403 addwhile(wq); /* see "dowhile" for more info */
6.404 top=getlabel(); /* make a label first */
6.405 setlabel(top); /* loop label */
6.406 @@ -4989,26 +5046,32 @@
6.407 needtoken(tWHILE);
6.408 setlabel(wq[wqLOOP]); /* "continue" always jumps to WQLOOP. */
6.409 setline(TRUE);
6.410 - test(wq[wqEXIT],TRUE,FALSE);
6.411 + endlessloop=test(wq[wqEXIT],TEST_OPT,FALSE);
6.412 jumplabel(top);
6.413 setlabel(wq[wqEXIT]);
6.414 delwhile();
6.415 needtoken(tTERM);
6.416 +
6.417 + retcode=endlessloop ? tENDLESS : tDO;
6.418 + endlessloop=save_endlessloop;
6.419 + return retcode;
6.420 }
6.421
6.422 -static void dofor(void)
6.423 +static int dofor(void)
6.424 {
6.425 int wq[wqSIZE],skiplab;
6.426 cell save_decl;
6.427 - int save_nestlevel,index;
6.428 + int save_nestlevel,save_endlessloop;
6.429 + int index,endtok;
6.430 int *ptr;
6.431
6.432 save_decl=declared;
6.433 save_nestlevel=nestlevel;
6.434 + save_endlessloop=endlessloop;
6.435
6.436 addwhile(wq);
6.437 skiplab=getlabel();
6.438 - needtoken('(');
6.439 + endtok= matchtoken('(') ? ')' : tDO;
6.440 if (matchtoken(';')==0) {
6.441 /* new variable declarations are allowed here */
6.442 if (matchtoken(tNEW)) {
6.443 @@ -5016,7 +5079,7 @@
6.444 * 'compound statement' level of it own.
6.445 */
6.446 nestlevel++;
6.447 - autozero=1;
6.448 + autozero=1;
6.449 declloc(FALSE); /* declare local variable */
6.450 } else {
6.451 doexpr(TRUE,TRUE,TRUE,TRUE,NULL,NULL,FALSE); /* expression 1 */
6.452 @@ -5046,14 +5109,16 @@
6.453 stgmark(sSTARTREORDER);
6.454 stgmark((char)(sEXPRSTART+0)); /* mark start of 2nd expression in stage */
6.455 setlabel(skiplab); /* jump to this point after 1st expression */
6.456 - if (matchtoken(';')==0) {
6.457 - test(wq[wqEXIT],FALSE,FALSE); /* expression 2 (jump to wq[wqEXIT] if false) */
6.458 + if (matchtoken(';')) {
6.459 + endlessloop=1;
6.460 + } else {
6.461 + endlessloop=test(wq[wqEXIT],TEST_PLAIN,FALSE);/* expression 2 (jump to wq[wqEXIT] if false) */
6.462 needtoken(';');
6.463 } /* if */
6.464 stgmark((char)(sEXPRSTART+1)); /* mark start of 3th expression in stage */
6.465 - if (matchtoken(')')==0) {
6.466 + if (!matchtoken(endtok)) {
6.467 doexpr(TRUE,TRUE,TRUE,TRUE,NULL,NULL,FALSE); /* expression 3 */
6.468 - needtoken(')');
6.469 + needtoken(endtok);
6.470 } /* if */
6.471 stgmark(sENDREORDER); /* mark end of reversed evaluation */
6.472 stgout(index);
6.473 @@ -5075,6 +5140,10 @@
6.474 delete_symbols(&loctab,nestlevel,FALSE,TRUE);
6.475 nestlevel=save_nestlevel; /* reset 'compound statement' nesting level */
6.476 } /* if */
6.477 +
6.478 + index=endlessloop ? tENDLESS : tFOR;
6.479 + endlessloop=save_endlessloop;
6.480 + return index;
6.481 }
6.482
6.483 /* The switch statement is incompatible with its C sibling:
6.484 @@ -5092,16 +5161,17 @@
6.485 static void doswitch(void)
6.486 {
6.487 int lbl_table,lbl_exit,lbl_case;
6.488 - int tok,swdefault,casecount;
6.489 + int swdefault,casecount;
6.490 + int tok,endtok;
6.491 cell val;
6.492 char *str;
6.493 constvalue caselist = { NULL, "", 0, 0}; /* case list starts empty */
6.494 constvalue *cse,*csp;
6.495 char labelname[sNAMEMAX+1];
6.496
6.497 - needtoken('(');
6.498 + endtok= matchtoken('(') ? ')' : tDO;
6.499 doexpr(TRUE,FALSE,FALSE,FALSE,NULL,NULL,TRUE);/* evaluate switch expression */
6.500 - needtoken(')');
6.501 + needtoken(endtok);
6.502 /* generate the code for the switch statement, the label is the address
6.503 * of the case table (to be generated later).
6.504 */
6.505 @@ -5109,7 +5179,12 @@
6.506 lbl_case=0; /* just to avoid a compiler warning */
6.507 ffswitch(lbl_table);
6.508
6.509 - needtoken('{');
6.510 + if (matchtoken(tBEGIN)) {
6.511 + endtok=tEND;
6.512 + } else {
6.513 + endtok='}';
6.514 + needtoken('{');
6.515 + } /* if */
6.516 lbl_exit=getlabel(); /* get label number for jumping out of switch */
6.517 swdefault=FALSE;
6.518 casecount=0;
6.519 @@ -5195,15 +5270,14 @@
6.520 */
6.521 jumplabel(lbl_exit);
6.522 break;
6.523 - case '}':
6.524 - /* nothing, but avoid dropping into "default" */
6.525 - break;
6.526 default:
6.527 - error(2);
6.528 - indent_nowarn=TRUE; /* disable this check */
6.529 - tok='}'; /* break out of the loop after an error */
6.530 + if (tok!=endtok) {
6.531 + error(2);
6.532 + indent_nowarn=TRUE; /* disable this check */
6.533 + tok=endtok; /* break out of the loop after an error */
6.534 + } /* if */
6.535 } /* switch */
6.536 - } while (tok!='}');
6.537 + } while (tok!=endtok);
6.538
6.539 #if !defined NDEBUG
6.540 /* verify that the case table is sorted (unfortunatly, duplicates can
6.541 @@ -5238,7 +5312,7 @@
6.542
6.543 if ((sc_debug & sCHKBOUNDS)!=0) {
6.544 flab1=getlabel(); /* get label number for "OK" branch */
6.545 - test(flab1,FALSE,TRUE); /* get expression and branch to flab1 if true */
6.546 + test(flab1,TEST_PLAIN,TRUE);/* get expression and branch to flab1 if true */
6.547 insert_dbgline(fline); /* make sure we can find the correct line number */
6.548 ffabort(xASSERTION);
6.549 setlabel(flab1);
6.550 @@ -5260,6 +5334,9 @@
6.551 cell val;
6.552 symbol *sym;
6.553
6.554 + /* if we were inside an endless loop, assume that we jump out of it */
6.555 + endlessloop=0;
6.556 +
6.557 if (lex(&val,&st)==tSYMBOL) {
6.558 sym=fetchlab(st);
6.559 jumplabel((int)sym->addr);
6.560 @@ -5443,6 +5520,7 @@
6.561 {
6.562 int *ptr;
6.563
6.564 + endlessloop=0; /* if we were inside an endless loop, we just jumped out */
6.565 ptr=readwhile(); /* readwhile() gives an error if not in loop */
6.566 needtoken(tTERM);
6.567 if (ptr==NULL)
6.568 @@ -5530,7 +5608,7 @@
6.569 if (matchtoken('(')) {
6.570 flabel=getlabel(); /* get label number for "false" branch */
6.571 pc_docexpr=TRUE; /* attach expression as a documentation string */
6.572 - test(flabel,FALSE,FALSE); /* get expression, branch to flabel if false */
6.573 + test(flabel,TEST_PLAIN,FALSE);/* get expression, branch to flabel if false */
6.574 pc_docexpr=FALSE;
6.575 needtoken(')');
6.576 } else {
7.1 --- a/sourcepawn/compiler/sc2.c Sat Aug 19 20:52:42 2006 +0000
7.2 +++ b/sourcepawn/compiler/sc2.c Mon Aug 28 15:22:02 2006 +0000
7.3 @@ -18,7 +18,7 @@
7.4 * misrepresented as being the original software.
7.5 * 3. This notice may not be removed or altered from any source distribution.
7.6 *
7.7 - * Version: $Id: sc2.c 3590 2006-06-24 14:16:39Z thiadmer $
7.8 + * Version: $Id: sc2.c 3636 2006-08-14 15:42:05Z thiadmer $
7.9 */
7.10 #include <assert.h>
7.11 #include <stdio.h>
7.12 @@ -947,11 +947,27 @@
7.13 if ((ifstack[iflevel-1] & PARSEMODE)==PARSEMODE) {
7.14 /* there has been a parse mode already on this level, so skip the rest */
7.15 ifstack[iflevel-1] |= (char)SKIPMODE;
7.16 + /* if we were already skipping this section, allow expressions with
7.17 + * undefined symbols; otherwise check the expression to catch errors
7.18 + */
7.19 + if (tok==tpELSEIF) {
7.20 + if (skiplevel==iflevel)
7.21 + preproc_expr(&val,NULL); /* get, but ignore the expression */
7.22 + else
7.23 + lptr=strchr(lptr,'\0');
7.24 + } /* if */
7.25 } else {
7.26 /* previous conditions were all FALSE */
7.27 if (tok==tpELSEIF) {
7.28 - /* get new expression */
7.29 - preproc_expr(&val,NULL); /* get value (or 0 on error) */
7.30 + /* if we were already skipping this section, allow expressions with
7.31 + * undefined symbols; otherwise check the expression to catch errors
7.32 + */
7.33 + if (skiplevel==iflevel) {
7.34 + preproc_expr(&val,NULL); /* get value (or 0 on error) */
7.35 + } else {
7.36 + lptr=strchr(lptr,'\0');
7.37 + val=0;
7.38 + } /* if */
7.39 ifstack[iflevel-1]=(char)(val ? PARSEMODE : SKIPMODE);
7.40 } else {
7.41 /* a simple #else, clear skip mode */
7.42 @@ -1816,10 +1832,10 @@
7.43 "*=", "/=", "%=", "+=", "-=", "<<=", ">>>=", ">>=", "&=", "^=", "|=",
7.44 "||", "&&", "==", "!=", "<=", ">=", "<<", ">>>", ">>", "++", "--",
7.45 "...", "..", "::",
7.46 - "assert", "break", "case", "char", "const", "continue", "default",
7.47 - "defined", "do", "else", "enum", "exit", "for", "forward", "goto",
7.48 + "assert", "*begin", "break", "case", "char", "const", "continue", "default",
7.49 + "defined", "do", "else", "*end", "enum", "exit", "for", "forward", "goto",
7.50 "if", "native", "new", "decl", "operator", "public", "return", "sizeof",
7.51 - "sleep", "state", "static", "stock", "switch", "tagof", "while",
7.52 + "sleep", "state", "static", "stock", "switch", "tagof", "*then", "while",
7.53 "#assert", "#define", "#else", "#elseif", "#emit", "#endif", "#endinput",
7.54 "#endscript", "#error", "#file", "#if", "#include", "#line", "#pragma",
7.55 "#tryinclude", "#undef",
8.1 --- a/sourcepawn/compiler/sc3.c Sat Aug 19 20:52:42 2006 +0000
8.2 +++ b/sourcepawn/compiler/sc3.c Mon Aug 28 15:22:02 2006 +0000
8.3 @@ -18,7 +18,7 @@
8.4 * misrepresented as being the original software.
8.5 * 3. This notice may not be removed or altered from any source distribution.
8.6 *
8.7 - * Version: $Id: sc3.c 3598 2006-07-04 13:44:04Z thiadmer $
8.8 + * Version: $Id: sc3.c 3635 2006-08-13 12:19:41Z thiadmer $
8.9 */
8.10 #include <assert.h>
8.11 #include <stdio.h>
8.12 @@ -619,9 +619,26 @@
8.13 } /* if */
8.14 }
8.15
8.16 -static cell truemodulus(cell a,cell b)
8.17 +static cell flooreddiv(cell a,cell b,int return_remainder)
8.18 {
8.19 - return (a % b + b) % b;
8.20 + cell q,r;
8.21 +
8.22 + if (b==0) {
8.23 + error(29);
8.24 + return 0;
8.25 + } /* if */
8.26 + /* first implement truncated division in a portable way */
8.27 + #define IABS(a) ((a)>=0 ? (a) : (-a))
8.28 + q=IABS(a)/IABS(b);
8.29 + if ((cell)(a ^ b)<0)
8.30 + q=-q; /* swap sign if either "a" or "b" is negative (but not both) */
8.31 + r=a-q*b; /* calculate the matching remainder */
8.32 + /* now "fiddle" with the values to get floored division */
8.33 + if (r!=0 && (cell)(r ^ b)<0) {
8.34 + q--;
8.35 + r+=b;
8.36 + } /* if */
8.37 + return return_remainder ? r : q;
8.38 }
8.39
8.40 static cell calc(cell left,void (*oper)(),cell right,char *boolresult)
8.41 @@ -657,9 +674,9 @@
8.42 else if (oper==os_mult)
8.43 return (left * right);
8.44 else if (oper==os_div)
8.45 - return (left - truemodulus(left,right)) / right;
8.46 + return flooreddiv(left,right,0);
8.47 else if (oper==os_mod)
8.48 - return truemodulus(left,right);
8.49 + return flooreddiv(left,right,1);
8.50 else
8.51 error(29); /* invalid expression, assumed 0 (this should never occur) */
8.52 return 0;
9.1 --- a/sourcepawn/compiler/sc4.c Sat Aug 19 20:52:42 2006 +0000
9.2 +++ b/sourcepawn/compiler/sc4.c Mon Aug 28 15:22:02 2006 +0000
9.3 @@ -18,7 +18,7 @@
9.4 * misrepresented as being the original software.
9.5 * 3. This notice may not be removed or altered from any source distribution.
9.6 *
9.7 - * Version: $Id: sc4.c 3579 2006-06-06 13:35:29Z thiadmer $
9.8 + * Version: $Id: sc4.c 3633 2006-08-11 16:20:18Z thiadmer $
9.9 */
9.10 #include <assert.h>
9.11 #include <ctype.h>
9.12 @@ -214,7 +214,7 @@
9.13 */
9.14 SC_FUNC void begcseg(void)
9.15 {
9.16 - if (curseg!=sIN_CSEG || fcurrent!=fcurseg) {
9.17 + if (sc_status!=statSKIP && (curseg!=sIN_CSEG || fcurrent!=fcurseg)) {
9.18 stgwrite("\n");
9.19 stgwrite("CODE ");
9.20 outval(fcurrent,FALSE);
9.21 @@ -232,7 +232,7 @@
9.22 */
9.23 SC_FUNC void begdseg(void)
9.24 {
9.25 - if (curseg!=sIN_DSEG || fcurrent!=fcurseg) {
9.26 + if (sc_status!=statSKIP && (curseg!=sIN_DSEG || fcurrent!=fcurseg)) {
9.27 stgwrite("\n");
9.28 stgwrite("DATA ");
9.29 outval(fcurrent,FALSE);
9.30 @@ -245,6 +245,10 @@
9.31
9.32 SC_FUNC void setline(int chkbounds)
9.33 {
9.34 + if (sc_asmfile) {
9.35 + stgwrite("\t; line ");
9.36 + outval(fline,TRUE);
9.37 + } /* if */
9.38 if ((sc_debug & sSYMBOLIC)!=0 || chkbounds && (sc_debug & sCHKBOUNDS)!=0) {
9.39 /* generate a "break" (start statement) opcode rather than a "line" opcode
9.40 * because earlier versions of Small/Pawn have an incompatible version of the
10.1 --- a/sourcepawn/compiler/sc5.scp Sat Aug 19 20:52:42 2006 +0000
10.2 +++ b/sourcepawn/compiler/sc5.scp Mon Aug 28 15:22:02 2006 +0000
10.3 @@ -18,7 +18,7 @@
10.4 * misrepresented as being the original software.
10.5 * 3. This notice may not be removed or altered from any source distribution.
10.6 *
10.7 - * Version: $Id: sc5.sch 3590 2006-06-24 14:16:39Z thiadmer $
10.8 + * Version: $Id: sc5.sch 3633 2006-08-11 16:20:18Z thiadmer $
10.9 */
10.10
10.11 SC_FUNC int strexpand(char *dest, unsigned char *source, int maxlen, unsigned char pairtable[128][2]);
10.12 @@ -27,13 +27,13 @@
10.13 /*-*SCPACK start of pair table, do not change or remove this line */
10.14 unsigned char errstr_table[][2] = {
10.15 {101,32}, {111,110}, {116,32}, {105,110}, {97,114}, {116,105}, {100,32}, {115,32}, {101,114}, {97,108}, {101,110}, {37,115}, {133,129}, {34,139}, {141,34}, {117,110},
10.16 - {110,111}, {114,101}, {115,105}, {121,32}, {97,116}, {111,114}, {97,110}, {32,142}, {109,98}, {115,116}, {41,10}, {100,101}, {109,138}, {101,134}, {98,108}, {140,32},
10.17 - {111,108}, {114,97}, {144,130}, {118,137}, {143,99}, {102,164}, {115,121}, {166,152}, {167,160}, {117,115}, {97,32}, {115,146}, {97,158}, {149,32}, {132,161}, {105,134},
10.18 + {114,101}, {110,111}, {115,105}, {121,32}, {97,116}, {111,114}, {97,110}, {32,142}, {109,98}, {115,116}, {41,10}, {100,101}, {109,138}, {101,134}, {98,108}, {140,32},
10.19 + {111,108}, {114,97}, {145,130}, {118,137}, {143,99}, {102,164}, {115,121}, {166,152}, {167,160}, {117,115}, {97,32}, {115,146}, {97,158}, {149,32}, {132,161}, {105,134},
10.20 {103,32}, {163,175}, {103,117}, {178,156}, {136,32}, {132,179}, {131,177}, {111,102}, {116,104}, {101,120}, {105,135}, {165,159}, {101,100}, {99,104}, {118,132}, {168,151},
10.21 - {105,172}, {190,192}, {155,102}, {174,147}, {183,32}, {109,97}, {116,111}, {99,129}, {101,135}, {181,130}, {98,128}, {115,10}, {112,145}, {153,148}, {44,32}, {40,191},
10.22 - {169,130}, {151,10}, {101,10}, {207,154}, {109,208}, {116,97}, {105,99}, {194,131}, {193,128}, {34,32}, {129,32}, {132,97}, {100,105}, {146,122}, {110,32}, {137,32},
10.23 - {104,97}, {101,108}, {117,108}, {99,111}, {108,111}, {109,148}, {199,153}, {58,209}, {111,112}, {97,115}, {108,128}, {232,136}, {230,150}, {150,32}, {204,171}, {131,176},
10.24 - {212,202}, {102,105}, {119,105}, {185,238}, {109,112}, {116,136}, {165,140}, {197,147}, {102,149}, {111,32}, {131,32}, {213,176}, {110,117}, {115,117}, {118,128}
10.25 + {105,172}, {190,192}, {155,102}, {174,147}, {183,32}, {109,97}, {116,111}, {99,129}, {101,135}, {112,144}, {181,130}, {98,128}, {115,10}, {153,148}, {44,32}, {40,191},
10.26 + {169,130}, {151,10}, {101,10}, {207,154}, {109,208}, {116,97}, {194,131}, {193,128}, {34,32}, {129,32}, {105,99}, {132,97}, {100,105}, {146,122}, {110,32}, {137,32},
10.27 + {104,97}, {101,108}, {117,108}, {99,111}, {108,111}, {109,148}, {199,153}, {58,209}, {111,112}, {97,115}, {108,128}, {232,136}, {230,150}, {150,32}, {201,171}, {131,176},
10.28 + {212,203}, {102,105}, {119,105}, {185,238}, {109,112}, {116,136}, {165,140}, {197,147}, {102,149}, {111,32}, {131,32}, {213,176}, {110,117}, {115,117}, {118,128}
10.29 };
10.30 /*-*SCPACK end of pair table, do not change or remove this line */
10.31
10.32 @@ -134,96 +134,96 @@
10.33 #else
10.34 "\271pect\235\306k\212:\227\316bu\202fo\217\206\216\012",
10.35 "\201l\223\252s\203g\352\315e\234\202(\255\363\201) c\355f\240\344w ea\275 \042c\351e\042\012",
10.36 - "\233cl\333\237\304\252\344c\337\330\324appe\204 \372\252\343\364o\217\206\236ock\012",
10.37 + "\233cl\333\237\304\252\344c\337\327\324appe\204 \372\252\343\364o\217\206\236ock\012",
10.38 "\366\227 \272\242i\364le\234t\274\012",
10.39 - "\273\367\242\340\376\265t\313",
10.40 + "\273\367\242\340\376\265t\314",
10.41 "\360a\253gn\235\306 \355\256y\012",
10.42 - "\353\224\255c\226\242\312\221\327\274\012",
10.43 + "\353\224\255c\226\242\313\220\326\274\012",
10.44 "\360\252\354\202\363\201; \351\375m\235z\210o\012",
10.45 "\266\303\335\200(nega\205ve\316z\210\371\255ou\202\304bo\217ds\232",
10.46 "\266\273\255\233cl\333\214\012",
10.47 - "\266out\222d\200\366\313",
10.48 - "\266\273c\211l\316\242\252\261add\221s\313",
10.49 - "\220 \212tr\223po\203\202(\220 pu\236\326 \366s\232",
10.50 + "\266out\222d\200\366\314",
10.51 + "\266\273c\211l\316\242\252\261add\220s\314",
10.52 + "\221 \212tr\223po\203\202(\221 pu\236\332 \366s\232",
10.53 "\266\315e\234t; \242\372s\362t\275\012",
10.54 - "\042\302a\342t\331c\351\200\360\270\200l\351\202c\351\200\372s\362t\275 \315e\234t\012",
10.55 + "\042\302a\342t\330c\351\200\360\270\200l\351\202c\351\200\372s\362t\275 \315e\234t\012",
10.56 "m\342\205p\352\302a\342t\207\372\042s\362t\275\042\012",
10.57 - "\217\327\235\277\012",
10.58 + "\217\326\235\277\012",
10.59 "\203i\205\211iza\237d\224\252\271ce\274\207\233cl\204\235\335\322",
10.60 "\242\252lab\341\347",
10.61 "\266\250 nam\200\216\012",
10.62 - "\250 \211\221ad\223\327\274\347",
10.63 + "\250 \211\220ad\223\326\274\347",
10.64 "\360l\243u\200(n\201-\354t\232",
10.65 "\303a\253gn\234\202\360\222\364\352a\253gn\234t\012",
10.66 - "\042b\221ak\331\255\042\307t\203ue\331\272ou\202\304\307t\271t\012",
10.67 + "\042b\220ak\330\255\042\307t\203ue\330\272ou\202\304\307t\271t\012",
10.68 "\273head\357\334ff\210\207from pro\306typ\322",
10.69 - "\220 \345\275\357\042#if...\042\012",
10.70 + "\221 \345\275\357\042#if...\042\012",
10.71 "\266\275\333ct\264\354t\012",
10.72 "\266\375bscrip\202(\242\355\303\255\306\371m\226\223\375bscripts)\347",
10.73 "\266\363\201\316\351\375m\235z\210o\012",
10.74 "\343\364o\217\206\315e\234\202\242c\344s\235a\202\270\200\212\206\304\361\352(\231\204t\235a\202l\203\200%d\232",
10.75 - "\217k\220w\336\334\221c\205v\322",
10.76 - "\303\203\233x ou\202\304bo\217d\207(\330\216\232",
10.77 - "\303\360\203\233x\235(\330\216\232",
10.78 - "\311do\310\242\340\376\252\302a\342\202\243u\200(\311%d\232",
10.79 - "\311typ\200mis\345\275 (\311%d\232",
10.80 + "\217k\221w\336\334\220c\205v\322",
10.81 + "\303\203\233x ou\202\304bo\217d\207(\327\216\232",
10.82 + "\303\360\203\233x\235(\327\216\232",
10.83 + "\312do\310\242\340\376\252\302a\342\202\243u\200(\312%d\232",
10.84 + "\312typ\200mis\345\275 (\312%d\232",
10.85 "e\364t\223\315e\234t\012",
10.86 "\266\231r\357(po\253\236\223n\201-\365m\203\224\235\231r\203g\232",
10.87 - "\271t\241 \275\333c\365\207\332l\203\322",
10.88 - "\354\202\250 \340\207\220 \335\322",
10.89 - "dupl\326\224\200\042c\351e\331lab\341 (\243u\200%d\232",
10.90 - "\266\341lip\222s\316\303\335\200\272\242k\220wn\012",
10.91 - "\266\343\230\203a\237\304cl\351\207speci\361\210\313",
10.92 + "\271t\241 \275\333c\365\207\331l\203\322",
10.93 + "\354\202\250 \340\207\221 \335\322",
10.94 + "dupl\332\224\200\042c\351e\330lab\341 (\243u\200%d\232",
10.95 + "\266\341lip\222s\316\303\335\200\272\242k\221wn\012",
10.96 + "\266\343\230\203a\237\304cl\351\207speci\361\210\314",
10.97 "\275\333ct\264\354\202\271ce\274\207r\226g\200f\255pack\235\231r\203g\012",
10.98 - "po\222\214\337p\333me\365\207\324\314c\274\200\211l nam\235p\333me\365\313",
10.99 - "\306\371m\226\223\273\265t\313",
10.100 - "\217k\220w\336\303\335\200(\330\216\232",
10.101 + "po\222\214\337p\333me\365\207\324\311c\274\200\211l nam\235p\333me\365\314",
10.102 + "\306\371m\226\223\273\265t\314",
10.103 + "\217k\221w\336\303\335\200(\327\216\232",
10.104 "\303\335\310d\371\242\345\275\316\255\233\231\203a\237\303\272\306\371sm\211l\012",
10.105 "\303\334\234\222\201\207d\371\242\345\275\012",
10.106 "\266l\203\200\307t\203ua\214\012",
10.107 "\266r\226g\322",
10.108 - "\266\375bscript\316\251\200\042[ ]\331\353\224\225\207\332\305j\255\334\234\222\201\313",
10.109 + "\266\375bscript\316\251\200\042[ ]\330\353\224\225\207\331\305j\255\334\234\222\201\314",
10.110 "m\342\205-\334\234\222\201\337\256y\207\360f\342l\223\203i\205\211iz\274\012",
10.111 - "\271ce\274\357\305ximum \374\230\264\304\334\234\222\201\313",
10.112 + "\271ce\274\357\305ximum \374\230\264\304\334\234\222\201\314",
10.113 "\217\345\275\235c\344s\357b\241c\200(\042}\042\232",
10.114 "\231\204\202\304\273bod\223\362\270ou\202\273head\210\012",
10.115 - "\256ys\316\344c\337\301\310\226\206\273\265t\207c\226\242\312pu\236\326 (\330\216\232",
10.116 - "\217f\203ish\235\363\332be\370\200\343\364il\264\334\221c\205v\322",
10.117 - "dupl\326\224\200\265t; sam\200\311\272p\351s\235tw\326\322",
10.118 - "\273\311\367\242\340\376\252\302a\342\202\243u\200(\330\216\232",
10.119 - "m\342\205p\352\042#\341se\331\334\221c\205v\310betwe\212 \042#if ... #\212\334f\042\012",
10.120 - "\042#\341seif\331\334\221c\205\376f\240\344w\207\355\042#\341se\331\334\221c\205v\322",
10.121 + "\256ys\316\344c\337\301\310\226\206\273\265t\207c\226\242\313pu\236\332 (\327\216\232",
10.122 + "\217f\203ish\235\363\331be\370\200\343\364il\264\334\220c\205v\322",
10.123 + "dupl\332\224\200\265t; sam\200\312\272p\351s\235tw\332\322",
10.124 + "\273\312\367\242\340\376\252\302a\342\202\243u\200(\327\216\232",
10.125 + "m\342\205p\352\042#\341se\330\334\220c\205v\310betwe\212 \042#if ... #\212\334f\042\012",
10.126 + "\042#\341seif\330\334\220c\205\376f\240\344w\207\355\042#\341se\330\334\220c\205v\322",
10.127 "\374\230\264\304\353\226d\207do\310\242\361\202\270\200\353\224\225\012",
10.128 - "\273\221s\342\202\373\304\353\224\225\227 \360\216\012",
10.129 - "c\226\242\275\226g\200\314\327\235\353\224\225\313",
10.130 - "\273\311\367\201l\223\340\376\252s\203g\352\373(\311%d\232",
10.131 - "\273\311\367\242\312\252\221f\210\212c\200\311\255\355\303(\311\216\232",
10.132 - "\330c\226\242\312bo\270 \252\221f\210\212c\200\226\206\355\303(\330\216\232",
10.133 - "\266\241\214\337\374\230\264\314ci\222\332\372#p\241g\305\012",
10.134 - "\241\214\337\374\230\264\370\305\202\211\221ad\223\327\274\012",
10.135 + "\273\220s\342\202\373\304\353\224\225\227 \360\216\012",
10.136 + "c\226\242\275\226g\200\311\326\235\353\224\225\314",
10.137 + "\273\312\367\201l\223\340\376\252s\203g\352\373(\312%d\232",
10.138 + "\273\312\367\242\313\252\220f\210\212c\200\312\255\355\303(\312\216\232",
10.139 + "\327c\226\242\313bo\270 \252\220f\210\212c\200\226\206\355\303(\327\216\232",
10.140 + "\266\241\214\337\374\230\264\311ci\222\331\372#p\241g\305\012",
10.141 + "\241\214\337\374\230\264\370\305\202\211\220ad\223\326\274\012",
10.142 "\241\214\337\374\230\264\375pp\225\202wa\207\242\212\254\274\012",
10.143 - "\251\210-\327\235\353\224\255\360\233cl\204\235be\370\200\251\200(\366\227\232",
10.144 - "\042\335e\267\331\353\224\255\272\266\332\042\366\331\250\313",
10.145 - "\273\311\360\355\303(\311\216\232",
10.146 - "#\327\200p\224\365\336\324\231\204\202\362\270 \355\211p\340be\205c \275\333c\365\012",
10.147 + "\251\210-\326\235\353\224\255\360\233cl\204\235be\370\200\251\200(\366\227\232",
10.148 + "\042\335e\267\330\353\224\255\272\266\331\042\366\330\250\314",
10.149 + "\273\312\360\355\303(\312\216\232",
10.150 + "#\326\200p\224\365\336\324\231\204\202\362\270 \355\211p\340be\205c \275\333c\365\012",
10.151 "\203pu\202l\203\200\306\371l\201\260(aft\264\375bs\205tu\214s\232",
10.152 "\246n\325x \210r\255\372\270\200\363\201\316\255\266\273c\211l\012",
10.153 "m\211\370m\235UTF-8 \212\343d\203g\316\255c\225rupt\235\361le: \213\012",
10.154 - "\273\251\310bo\270 \042\221turn\331\226\206\042\221tur\336<\243ue>\042\012",
10.155 - "\203\307\222\231\212\202\221tur\336typ\310(\303& n\201-\256y\232",
10.156 - "\217k\220w\336\250\316\255\242\252\354\202\250 \323",
10.157 + "\273\251\310bo\270 \042\220turn\330\226\206\042\220tur\336<\243ue>\042\012",
10.158 + "\203\307\222\231\212\202\220tur\336typ\310(\303& n\201-\256y\232",
10.159 + "\217k\221w\336\250\316\255\242\252\354\202\250 \323",
10.160 "c\226\242\325k\200\252\373a\207\252\302a\342\202\243u\200f\255\355\203\233x\235\303p\333met\264\323",
10.161 - "\251\210-\327\235\353\224\225\207\226\206na\205\376\366\207\367\242\340\376\315e\313",
10.162 - "\252\273\255\330\367\201l\223b\341\201\260\306 \252s\203g\352au\306\345\332\323",
10.163 - "\315\200\307fl\326t: \201\200\304\270\200\315\310\272\211\221ad\223a\253gn\235\306 a\220\270\264i\364le\234\325\237\323",
10.164 - "\220 \315\310\204\200\327\235f\255\277\012",
10.165 - "\217k\220w\336au\306\345\201\321",
10.166 - "\217k\220w\336\315\200\216 f\255au\306\345\201\321",
10.167 - "pu\236\326 \301\310\226\206\344c\337\301\310\367\242\340\376\315\310\323",
10.168 - "\315\200\301\310\367\242\312\203i\205\211iz\235\323",
10.169 - "pu\236\326 \366\207\367\242\221tur\336\256y\207\323",
10.170 - "a\230i\262ou\207\354t; \373ov\210rid\200\272\221qui\221\206\323",
10.171 - "\374\230\264\304\265t\207do\310\242\345\275 \327i\214\012",
10.172 + "\251\210-\326\235\353\224\225\207\226\206na\205\376\366\207\367\242\340\376\315e\314",
10.173 + "\252\273\255\327\367\201l\223b\341\201\260\306 \252s\203g\352au\306\345\331\323",
10.174 + "\315\200\307fl\332t: \201\200\304\270\200\315\310\272\211\220ad\223a\253gn\235\306 a\221\270\264i\364le\234\325\237\323",
10.175 + "\221 \315\310\204\200\326\235f\255\277\012",
10.176 + "\217k\221w\336au\306\345\201\321",
10.177 + "\217k\221w\336\315\200\216 f\255au\306\345\201\321",
10.178 + "pu\236\332 \301\310\226\206\344c\337\301\310\367\242\340\376\315\310\323",
10.179 + "\315\200\301\310\367\242\313\203i\205\211iz\235\323",
10.180 + "pu\236\332 \366\207\367\242\220tur\336\256y\207\323",
10.181 + "a\230i\262ou\207\354t; \373ov\210rid\200\272\220qui\220\206\323",
10.182 + "\374\230\264\304\265t\207do\310\242\345\275 \326i\214\012"
10.183 #endif
10.184 };
10.185
10.186 @@ -248,14 +248,14 @@
10.187 /*110*/ "assertion failed: %s\n",
10.188 /*111*/ "user error: %s\n",
10.189 #else
10.190 - "c\226\242\221a\206from \361le\347",
10.191 + "c\226\242\220a\206from \361le\347",
10.192 "c\226\242writ\200\306 \361le\347",
10.193 "t\254\200ov\210f\344w\347",
10.194 - "\203\375ff\326i\212\202mem\225y\012",
10.195 + "\203\375ff\332i\212\202mem\225y\012",
10.196 "\266\351se\230l\264\203\231ruc\214\321",
10.197 - "\374m\210\326 ov\210f\344w\316\271ce\274\357capacity\012",
10.198 + "\374m\210\332 ov\210f\344w\316\271ce\274\357capacity\012",
10.199 "\343\364il\235scrip\202\271ce\274\207\270\200\305ximum mem\225\223\335\200(%l\206bytes\232",
10.200 - "\306\371m\226\223\210r\255messag\310\332\201\200l\203\322",
10.201 + "\306\371m\226\223\210r\255messag\310\331\201\200l\203\322",
10.202 "\343\233pag\200\305pp\357\361\352\242fo\217d\012",
10.203 "\266p\224h\347",
10.204 "\351s\210\237fail\274: \213\012",
10.205 @@ -303,42 +303,42 @@
10.206 /*235*/ "public function lacks forward declaration (symbol \"%s\")\n",
10.207 /*236*/ "unknown parameter in substitution (incorrect #define pattern)\n"
10.208 #else
10.209 - "\277 \272tr\244\224\235\306 %\206\275\333c\365\313",
10.210 - "\221\327i\237\304\354t/\305cr\371\323",
10.211 - "\374\230\264\304\265t\207do\310\242\345\275 \327i\214\012",
10.212 + "\277 \272tr\244\224\235\306 %\206\275\333c\365\314",
10.213 + "\220\326i\237\304\354t/\305cr\371\323",
10.214 + "\374\230\264\304\265t\207do\310\242\345\275 \326i\214\012",
10.215 "\250 \272nev\264\251\274\347",
10.216 "\250 \272a\253gn\235\252\243u\200\270a\202\272nev\264\251\274\347",
10.217 - "\221d\217d\226\202\343\233: \354\202\363\332\272z\210o\012",
10.218 - "\221d\217d\226\202te\231: \354\202\363\332\272n\201-z\210o\012",
10.219 - "\217k\220w\336#p\241g\305\012",
10.220 - "\273\362\270 \373\221s\342\202\251\235be\370\200\327i\214\316\370c\357\221p\204s\322",
10.221 - "\366\227 sho\342\206\221tur\336\252\243u\322",
10.222 + "\220d\217d\226\202\343\233: \354\202\363\331\272z\210o\012",
10.223 + "\220d\217d\226\202te\231: \354\202\363\331\272n\201-z\210o\012",
10.224 + "\217k\221w\336#p\241g\305\012",
10.225 + "\273\362\270 \373\220s\342\202\251\235be\370\200\326i\214\316\370c\357\220p\204s\322",
10.226 + "\366\227 sho\342\206\220tur\336\252\243u\322",
10.227 "po\253\236\200\251\200\304\250 be\370\200\203i\205\211iza\214\347",
10.228 "po\253\236\223\217\203t\212\233\206a\253gn\234t\012",
10.229 "po\253\236\223\217\203t\212\233\206bit\362s\200\353a\214\012",
10.230 "\373mis\345\275\012",
10.231 - "po\253\236\223\252\042\346\331\303\311wa\207\203t\212\233d\347",
10.232 - "\363\332\340\207\220 effect\012",
10.233 + "po\253\236\223\252\042\346\330\303\312wa\207\203t\212\233d\347",
10.234 + "\363\331\340\207\221 effect\012",
10.235 "ne\231\235\343m\234t\012",
10.236 "\344os\200\203d\212\325\214\012",
10.237 - "\240\206\231y\352pro\306typ\310\251\235\362\270 \350\214\337sem\326\240umn\313",
10.238 - "\344c\337\330\216 s\340dow\207\252\330a\202\252\314c\274\357lev\341\012",
10.239 - "\363\332\362\270 \373ov\210rid\200\324appe\204 betwe\212 p\204\212\270ese\313",
10.240 + "\240\206\231y\352pro\306typ\310\251\235\362\270 \350\214\337sem\332\240umn\314",
10.241 + "\344c\337\327\216 s\340dow\207\252\327a\202\252\311c\274\357lev\341\012",
10.242 + "\363\331\362\270 \373ov\210rid\200\324appe\204 betwe\212 p\204\212\270ese\314",
10.243 "lab\341 nam\200\216 s\340dow\207\373nam\322",
10.244 - "\374\230\264\304\334git\207\271ce\274\207\241\214\337\374\230\264\314ci\222\201\012",
10.245 - "\221d\217d\226\202\042\335e\267\042: \311\335\200\272\211way\2071 \323",
10.246 - "\203\233\365m\203\224\200\303\335\200\372\042\335e\267\331\363\332\323",
10.247 - "\217\221a\275\254\200\343\233\012",
10.248 - "\252\330\272a\253gn\235\306 its\341f \323",
10.249 - "m\225\200\203i\205\211l\210\207\270\355\212um \361\341d\313",
10.250 + "\374\230\264\304\334git\207\271ce\274\207\241\214\337\374\230\264\311ci\222\201\012",
10.251 + "\220d\217d\226\202\042\335e\267\042: \312\335\200\272\211way\2071 \323",
10.252 + "\203\233\365m\203\224\200\303\335\200\372\042\335e\267\330\363\331\323",
10.253 + "\217\220a\275\254\200\343\233\012",
10.254 + "\252\327\272a\253gn\235\306 its\341f \323",
10.255 + "m\225\200\203i\205\211l\210\207\270\355\212um \361\341d\314",
10.256 "l\212g\270 \304\203i\205\211l\264\271ce\274\207\335\200\304\270\200\212um \361\341d\012",
10.257 "\203\233x \373mis\345\275 \323",
10.258 - "\220 i\364le\234\325\237f\255\315\200\216 \372\366\227\316\220 f\211l-back\012",
10.259 - "\315\200specif\326a\237\332\370w\204\206\233cl\333\237\272ig\220\221d\012",
10.260 + "\221 i\364le\234\325\237f\255\315\200\216 \372\366\227\316\221 f\211l-back\012",
10.261 + "\315\200specif\332a\237\331\370w\204\206\233cl\333\237\272ig\221\220d\012",
10.262 "outpu\202\361\352\272writt\212\316bu\202\362\270 \343\364ac\202\212\343d\357\334s\254\274\012",
10.263 - "\315\200\330\216 s\340dow\207\252g\344b\337\301\322",
10.264 - "\273\272\233pr\326\224\235\317) \213\012",
10.265 - "pu\236\326 \273lack\207\370w\204\206\233cl\333\237\323",
10.266 - "\217k\220w\336p\333met\264\372\375bs\205tu\237(\203c\225\221c\202#\327\200p\224\365n\232"
10.267 + "\315\200\327\216 s\340dow\207\252g\344b\337\301\322",
10.268 + "\273\272\233\311c\224\235\317) \213\012",
10.269 + "pu\236\332 \273lack\207\370w\204\206\233cl\333\237\323",
10.270 + "\217k\221w\336p\333met\264\372\375bs\205tu\237(\203c\225\220c\202#\326\200p\224\365n\232"
10.271 #endif
10.272 };
11.1 --- a/sourcepawn/compiler/sc6.c Sat Aug 19 20:52:42 2006 +0000
11.2 +++ b/sourcepawn/compiler/sc6.c Mon Aug 28 15:22:02 2006 +0000
11.3 @@ -18,7 +18,7 @@
11.4 * misrepresented as being the original software.
11.5 * 3. This notice may not be removed or altered from any source distribution.
11.6 *
11.7 - * Version: $Id: sc6.c 3579 2006-06-06 13:35:29Z thiadmer $
11.8 + * Version: $Id: sc6.c 3633 2006-08-11 16:20:18Z thiadmer $
11.9 */
11.10 #include <assert.h>
11.11 #include <stdio.h>
11.12 @@ -670,7 +670,7 @@
11.13 symbol *sym, **nativelist;
11.14 constvalue *constptr;
11.15 cell mainaddr;
11.16 - char nullchar = 0;
11.17 + char nullchar;
11.18
11.19 /* if compression failed, restart the assembly with compaction switched off */
11.20 if (setjmp(compact_err)!=0) {
11.21 @@ -785,8 +785,9 @@
11.22 pc_writebin(fout,&hdr,sizeof hdr);
11.23
11.24 /* dump zeros up to the rest of the header, so that we can easily "seek" */
11.25 + nullchar='\0';
11.26 for (nameofs=sizeof hdr; nameofs<hdr.cod; nameofs++)
11.27 - pc_writebin(fout, &nullchar, 1);
11.28 + pc_writebin(fout,&nullchar,1);
11.29 nameofs=hdr.nametable+sizeof(int16_t);
11.30
11.31 /* write the public functions table */
12.1 --- a/sourcepawn/compiler/sci18n.c Sat Aug 19 20:52:42 2006 +0000
12.2 +++ b/sourcepawn/compiler/sci18n.c Mon Aug 28 15:22:02 2006 +0000
12.3 @@ -30,7 +30,7 @@
12.4 * misrepresented as being the original software.
12.5 * 3. This notice may not be removed or altered from any source distribution.
12.6 *
12.7 - * Version: $Id: CODEPAGE.C,v 1.0 2004-02-18 12:13:04+01 thiadmer Exp thiadmer $
12.8 + * Version: $Id: sci18n.c 3612 2006-07-22 09:59:46Z thiadmer $
12.9 */
12.10 #include <assert.h>
12.11 #include <stdio.h>
13.1 --- a/sourcepawn/compiler/sclist.c Sat Aug 19 20:52:42 2006 +0000
13.2 +++ b/sourcepawn/compiler/sclist.c Mon Aug 28 15:22:02 2006 +0000
13.3 @@ -2,7 +2,9 @@
13.4 *
13.5 * o Name list (aliases)
13.6 * o Include path list
13.7 - * o Macro defintions (text substitutions)
13.8 + * o Macro definitions (text substitutions)
13.9 + * o Documentation tags and automatic listings
13.10 + * o Debug strings
13.11 *
13.12 * Copyright (c) ITB CompuPhase, 2001-2006
13.13 *
13.14 @@ -22,7 +24,7 @@
13.15 * misrepresented as being the original software.
13.16 * 3. This notice may not be removed or altered from any source distribution.
13.17 *
13.18 - * Version: $Id: sclist.c 3579 2006-06-06 13:35:29Z thiadmer $
13.19 + * Version: $Id: sclist.c 3633 2006-08-11 16:20:18Z thiadmer $
13.20 */
13.21 #include <assert.h>
13.22 #include <limits.h>
14.1 --- a/sourcepawn/compiler/scmemfil.c Sat Aug 19 20:52:42 2006 +0000
14.2 +++ b/sourcepawn/compiler/scmemfil.c Mon Aug 28 15:22:02 2006 +0000
14.3 @@ -31,12 +31,15 @@
14.4 #include <string.h>
14.5 #include "memfile.h"
14.6
14.7 +#if defined FORTIFY
14.8 + #include <alloc/fortify.h>
14.9 +#endif
14.10 typedef memfile_t MEMFILE;
14.11 #define tMEMFILE 1
14.12
14.13 #include "sc.h"
14.14
14.15 -MEMFILE *mfcreate(char *filename)
14.16 +MEMFILE *mfcreate(const char *filename)
14.17 {
14.18 return memfile_creat(filename, 4096);
14.19 }
14.20 @@ -64,7 +67,7 @@
14.21 return okay;
14.22 }
14.23
14.24 -long mflength(MEMFILE *mf)
14.25 +long mflength(const MEMFILE *mf)
14.26 {
14.27 return mf->usedoffs;
14.28 }
14.29 @@ -105,7 +108,7 @@
14.30 return offset;
14.31 }
14.32
14.33 -unsigned int mfwrite(MEMFILE *mf,unsigned char *buffer,unsigned int size)
14.34 +unsigned int mfwrite(MEMFILE *mf,const unsigned char *buffer,unsigned int size)
14.35 {
14.36 return (memfile_write(mf, buffer, size) ? size : 0);
14.37 }
14.38 @@ -152,7 +155,7 @@
14.39 return string;
14.40 }
14.41
14.42 -int mfputs(MEMFILE *mf,char *string)
14.43 +int mfputs(MEMFILE *mf,const char *string)
14.44 {
14.45 unsigned int written,length;
14.46
15.1 --- a/sourcepawn/compiler/scvars.c Sat Aug 19 20:52:42 2006 +0000
15.2 +++ b/sourcepawn/compiler/scvars.c Mon Aug 28 15:22:02 2006 +0000
15.3 @@ -20,7 +20,7 @@
15.4 * misrepresented as being the original software.
15.5 * 3. This notice may not be removed or altered from any source distribution.
15.6 *
15.7 - * Version: $Id: scvars.c 3577 2006-06-02 16:22:52Z thiadmer $
15.8 + * Version: $Id: scvars.c 3633 2006-08-11 16:20:18Z thiadmer $
15.9 */
15.10 #include <stdio.h>
15.11 #include <stdlib.h> /* for _MAX_PATH */
16.1 --- a/sourcepawn/compiler/svnrev.h Sat Aug 19 20:52:42 2006 +0000
16.2 +++ b/sourcepawn/compiler/svnrev.h Mon Aug 28 15:22:02 2006 +0000
16.3 @@ -1,9 +1,9 @@
16.4 #define SMC_VERSION 1
16.5 #define SMC_REVISION 0
16.6 #define SMC_BUILD 1
16.7 -#define SMC_VERSTRING "1.0.1.3599"
16.8 +#define SMC_VERSTRING "1.0.1.3636"
16.9
16.10 -#define SVN_REV 3599
16.11 -#define SVN_REVSTR "3599"
16.12 -#define SVN_REVDATE "2006-07-05"
16.13 -#define SVN_REVSTAMP 20060705L
16.14 +#define SVN_REV 3636
16.15 +#define SVN_REVSTR "3636"
16.16 +#define SVN_REVDATE "2006-08-14"
16.17 +#define SVN_REVSTAMP 20060814L