Compiler: Add #warning directive.

Basically same as error but as warning.
Imported from SA-MP: 1bd6be93e0

Example:

  #warning don't eat egg.

Result:

  warning.sma(1) : warning 234: user warning: don't eat egg.
This commit is contained in:
Arkshine 2014-08-14 20:58:13 +02:00
parent 92255bcdc3
commit fcdeea683b
3 changed files with 22 additions and 12 deletions

View File

@ -286,7 +286,7 @@ typedef struct s_stringpair {
*/
#define tFIRST 256 /* value of first multi-character operator */
#define tMIDDLE 280 /* value of last multi-character operator */
#define tLAST 325 /* value of last multi-character match-able token */
#define tLAST 326 /* value of last multi-character match-able token */
/* multi-character operators */
#define taMULT 256 /* *= */
#define taDIV 257 /* /= */
@ -360,17 +360,18 @@ typedef struct s_stringpair {
#define tpPRAGMA 323
#define tpTRYINCLUDE 324
#define tpUNDEF 325
#define tpWARNING 326
/* semicolon is a special case, because it can be optional */
#define tTERM 326 /* semicolon or newline */
#define tENDEXPR 327 /* forced end of expression */
#define tTERM 327 /* semicolon or newline */
#define tENDEXPR 328 /* forced end of expression */
/* other recognized tokens */
#define tNUMBER 328 /* integer number */
#define tRATIONAL 329 /* rational number */
#define tSYMBOL 330
#define tLABEL 331
#define tSTRING 332
#define tEXPR 333 /* for assigment to "lastst" only */
#define tEMPTYBLOCK 334 /* empty blocks for AM bug 4825 */
#define tNUMBER 329 /* integer number */
#define tRATIONAL 330 /* rational number */
#define tSYMBOL 331
#define tLABEL 332
#define tSTRING 333
#define tEXPR 334 /* for assigment to "lastst" only */
#define tEMPTYBLOCK 335 /* empty blocks for AM bug 4825 */
/* (reversed) evaluation of staging buffer */
#define sSTARTREORDER 0x01

View File

@ -1351,6 +1351,14 @@ static int command(void)
if (!SKIPPING)
error(111,lptr); /* user error */
break;
case tpWARNING:
while (*lptr<=' ' && *lptr!='\0')
lptr++;
if (!SKIPPING) {
str=strtok((char*)lptr, "\n");
error(234, str != NULL ? str : lptr); /* user warning, and remove unnecessary newline */
}
break;
default:
error(31); /* unknown compiler directive */
ret=SKIPPING ? CMD_CONDFALSE : CMD_NONE; /* process as normal line */
@ -1831,7 +1839,7 @@ char *sc_tokens[] = {
"sleep", "state", "static", "stock", "switch", "tagof", "while",
"#assert", "#define", "#else", "#elseif", "#emit", "#endif", "#endinput",
"#endscript", "#error", "#file", "#if", "#include", "#line", "#pragma",
"#tryinclude", "#undef",
"#tryinclude", "#undef", "#warning",
";", ";", "-integer value-", "-rational value-", "-identifier-",
"-label-", "-string-"
};

View File

@ -238,7 +238,7 @@ static char *fatalmsg[] = {
/*108*/ "codepage mapping file not found\n",
/*109*/ "invalid path: \"%s\"\n",
/*110*/ "assertion failed: %s\n",
/*111*/ "user error: %s\n",
/*111*/ "user error: %s\n"
#else
"c\224\241\222a\206from \327le\335",
"c\224\241writ\200\277 \327le\335",
@ -291,6 +291,7 @@ static char *warnmsg[] = {
/*231*/ "state specification on forward declaration is ignored\n",
/*232*/ "output file is written, but with compact encoding disabled\n"
/*233*/ "symbol \"%s\" is marked as deprecated: %s\n",
/*234*/ "user warning: %s\n"
#else
"\345 \274tr\240\226\233\277 %\206\273\337c\367\305",
"\222\323i\231\300\344\224t/\314cr\375\364",