mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2025-03-21 10:21:03 +00:00
Implement support for octal constants, this closes #97.
This commit is contained in:
parent
02a1d9f4a1
commit
9f54610fbd
3 changed files with 31 additions and 3 deletions
15
lexer.c
15
lexer.c
|
@ -766,6 +766,7 @@ static int GMQCC_WARN lex_finish_string(lex_file *lex, int quote)
|
|||
int ch = 0;
|
||||
int nextch;
|
||||
bool hex;
|
||||
bool oct;
|
||||
char u8buf[8]; /* way more than enough */
|
||||
int u8len, uc;
|
||||
|
||||
|
@ -851,17 +852,18 @@ static int GMQCC_WARN lex_finish_string(lex_file *lex, int quote)
|
|||
chr = 0;
|
||||
nextch = lex_getch(lex);
|
||||
hex = (nextch == 'x');
|
||||
if (!hex)
|
||||
oct = (nextch == '0');
|
||||
if (!hex && !oct)
|
||||
lex_ungetch(lex, nextch);
|
||||
for (nextch = lex_getch(lex); nextch != '}'; nextch = lex_getch(lex)) {
|
||||
if (!hex) {
|
||||
if (!hex && !oct) {
|
||||
if (nextch >= '0' && nextch <= '9')
|
||||
chr = chr * 10 + nextch - '0';
|
||||
else {
|
||||
lexerror(lex, "bad character code");
|
||||
return (lex->tok.ttype = TOKEN_ERROR);
|
||||
}
|
||||
} else {
|
||||
} else if (!oct) {
|
||||
if (nextch >= '0' && nextch <= '9')
|
||||
chr = chr * 0x10 + nextch - '0';
|
||||
else if (nextch >= 'a' && nextch <= 'f')
|
||||
|
@ -872,6 +874,13 @@ static int GMQCC_WARN lex_finish_string(lex_file *lex, int quote)
|
|||
lexerror(lex, "bad character code");
|
||||
return (lex->tok.ttype = TOKEN_ERROR);
|
||||
}
|
||||
} else {
|
||||
if (nextch >= '0' && nextch <= '9')
|
||||
chr = chr * 8 + chr - '0';
|
||||
else {
|
||||
lexerror(lex, "bad character code");
|
||||
return (lex->tok.ttype = TOKEN_ERROR);
|
||||
}
|
||||
}
|
||||
if (chr > 0x10FFFF || (!OPTS_FLAG(UTF8) && chr > 255))
|
||||
{
|
||||
|
|
11
tests/octal.qc
Normal file
11
tests/octal.qc
Normal file
|
@ -0,0 +1,11 @@
|
|||
void main() {
|
||||
float a = 012;
|
||||
float b = 0204;
|
||||
float c = 076663;
|
||||
float d = 0777;
|
||||
|
||||
print(ftos(a), "\n");
|
||||
print(ftos(b), "\n");
|
||||
print(ftos(c), "\n");
|
||||
print(ftos(d), "\n");
|
||||
}
|
8
tests/octal.tmpl
Normal file
8
tests/octal.tmpl
Normal file
|
@ -0,0 +1,8 @@
|
|||
I: octal.qc
|
||||
D: test octal constants
|
||||
T: -execute
|
||||
C: -std=gmqcc
|
||||
M: 10
|
||||
M: 132
|
||||
M: 32179
|
||||
M: 511
|
Loading…
Reference in a new issue