summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorVincent Burns <discoloda@gmail.com>2014-01-12 12:53:25 -0500
committerVincent Burns <discoloda@gmail.com>2014-01-12 12:53:25 -0500
commit2dc91cb4d51a628aff300116c1f7a377b310a198 (patch)
treeacffc9e2dd65da4a18a61ce8958979e2dc713548 /compiler
parent0a0fec4a5c6dcd3c6ac007877ef297914657b7f2 (diff)
downloadNim-2dc91cb4d51a628aff300116c1f7a377b310a198.tar.gz
Lex '\xHH' character constants
Diffstat (limited to 'compiler')
-rw-r--r--compiler/c2nim/clex.nim17
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)