58
58
0x 0009 , 0x 0020 , 0x 00A0 , 0x 1680 , 0x 2000 , 0x 2001 , 0x 2002 , 0x 2003 , 0x 2004 , 0x 2005 ,
59
59
0x 2006 , 0x 2007 , 0x 2008 , 0x 2009 , 0x 200A , 0x 202F , 0x 205F , 0x 3000 ,
60
60
]
61
- escapeTable* = {
62
- 'n' : " \u000A " , # Line Feed
63
- 'r' : " \u000D " , # Carriage Return
64
- 't' : " \u0009 " , # Character Tabulation (Tab)
65
- '\\ ' : " \u005C " , # Reverse Solidus (Backslash)
66
- '/' : " \u002F " , # Solidus (Forwardslash)
67
- '"' : " \u0022 " , # Quotation Mark (Double Quote)
68
- 'b' : " \u0008 " , # Backspace
69
- 'f' : " \u000C " , # Form Feed
70
- 'u' : " " , # Unicode
71
- }.toTable
72
-
73
61
equals = [0x 003D , 0x FE66 , 0x FF1D , 0x 1F7F0 ]
74
62
litMatches = {
75
63
" *" : tkStar,
@@ -391,7 +379,7 @@ proc tokenStringBody(lexer: var Lexer, raw = false) =
391
379
continue
392
380
393
381
let next = lexer.peek(1 )
394
- if next notin escapeTable:
382
+ if next notin escapeTable and next != 'u' :
395
383
lexer.error & " Invalid escape '{ next} ' "
396
384
397
385
lexer.inc 2
@@ -417,7 +405,8 @@ proc tokenStringBody(lexer: var Lexer, raw = false) =
417
405
elif endHashes > hashes:
418
406
lexer.error & " Expected { hashes} hashes but found { endHashes} "
419
407
else :
420
- lexer.inc r.size
408
+ lexer.disallowedRunes()
409
+ inc lexer
421
410
422
411
if not terminated:
423
412
lexer.error " Unterminated string"
@@ -474,7 +463,6 @@ proc tokenIdent*() {.lexing: tkIdent.} =
474
463
lexer.eof() or lexer.tokenWhitespace(addToStack = false ) or
475
464
lexer.tokenNewLine(addToStack = false ) or lexer.peek() in nonIdenChars
476
465
):
477
- lexer.setPos before
478
466
return
479
467
480
468
block outer:
0 commit comments