diff options
author | Vincent Burns <discoloda@gmail.com> | 2014-01-12 12:53:25 -0500 |
---|---|---|
committer | Vincent Burns <discoloda@gmail.com> | 2014-01-12 12:53:25 -0500 |
commit | 2dc91cb4d51a628aff300116c1f7a377b310a198 (patch) | |
tree | acffc9e2dd65da4a18a61ce8958979e2dc713548 /compiler | |
parent | 0a0fec4a5c6dcd3c6ac007877ef297914657b7f2 (diff) | |
download | Nim-2dc91cb4d51a628aff300116c1f7a377b310a198.tar.gz |
Lex '\xHH' character constants
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/c2nim/clex.nim | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/compiler/c2nim/clex.nim b/compiler/c2nim/clex.nim index 7e5526a10..fe7fe92d3 100644 --- a/compiler/c2nim/clex.nim +++ b/compiler/c2nim/clex.nim @@ -382,6 +382,23 @@ proc escape(L: var TLexer, tok: var TToken, allowEmpty=false) = xi = (xi shl 3) or (ord(L.buf[L.bufpos]) - ord('0')) inc(L.bufpos) add(tok.s, chr(xi)) + of 'x': + var xi = 0 + inc(L.bufpos) + while true: + case L.buf[L.bufpos] + of '0'..'9': + xi = `shl`(xi, 4) or (ord(L.buf[L.bufpos]) - ord('0')) + inc(L.bufpos) + of 'a'..'f': + xi = `shl`(xi, 4) or (ord(L.buf[L.bufpos]) - ord('a') + 10) + inc(L.bufpos) + of 'A'..'F': + xi = `shl`(xi, 4) or (ord(L.buf[L.bufpos]) - ord('A') + 10) + inc(L.bufpos) + else: + break + add(tok.s, chr(xi)) elif not allowEmpty: lexMessage(L, errInvalidCharacterConstant) |