Browse Source

more escape sequences

Kajetan Johannes Hammerle 3 years ago
parent
commit
d2dd6231c3
3 changed files with 18 additions and 6 deletions
  1. 4 0
      tests/strings/chars
  2. 4 0
      tests/strings/chars.out
  3. 10 6
      tokenizer/Tokenizer.c

+ 4 - 0
tests/strings/chars

@@ -3,4 +3,8 @@ void main() {
     test('¡');
     test('ࠠ');
     test('𐀠');
+    test('\n');
+    test('\r');
+    test('\\');
+    test('\t');
 }

+ 4 - 0
tests/strings/chars.out

@@ -2,3 +2,7 @@
 161
 2080
 65568
+10
+13
+92
+9

+ 10 - 6
tokenizer/Tokenizer.c

@@ -135,6 +135,16 @@ static void tParseNumber(int c) {
 }
 
 static int32 tUnicode(int32 c) {
+    if(c == '\\') {
+        switch(fRead()) {
+            case '"': c = '"'; break;
+            case '\\': c = '\\'; break;
+            case 'n': c = '\n'; break;
+            case 'r': c = '\r'; break;
+            case 't': c = '\t'; break;
+            default: tError("unknown escaped character at line %d", line);
+        }
+    }
     if((c & 0xE0) == 0xC0) {
         c = ((c & 0x1F) << 6) | (fRead() & 0x3F);
     } else if((c & 0xF0) == 0xE0) {
@@ -154,12 +164,6 @@ static void tAddString() {
         int32 c = fRead();
         if(c == '"') {
             break;
-        } else if(c == '\\') {
-            switch(fRead()) {
-                case '"': c = '"'; break;
-                case '\\': c = '\\'; break;
-                default: tError("unknown escaped character at line %d", line);
-            }
         } else if(c == EOF) {
             tError("unclosed string starting at line %d", line);
         }