txlyre 20 hours ago
parent
commit
485ca64dce
1 changed files with 13 additions and 9 deletions
  1. 13 9
      qic.c

+ 13 - 9
qic.c

@@ -509,19 +509,15 @@ token_t *tokenize_string(char *source, size_t *pos) {
             if (!source[*pos] || !strchr("0123456789abcdefABCDEF", source[*pos]))
               break;
 
-            buffer[k++] = source[(*pos)++];
+            buf[k++] = source[(*pos)++];
           }
 
           if (k != 2)
             LEX_ERROR("malformed \\x escape sequence");
       
-          buffer[k] = 0;
+          buf[k] = 0;
  
-          unsigned char c = strtol(buf, NULL, 16)
-          if (!c)
-            LEX_ERROR("malformed \\x escape sequence");
-
-          buffer_append(text, c);
+          buffer_fmt(text, "\\x%s", buf);
           } break;
 
         case 'n':
@@ -536,12 +532,16 @@ token_t *tokenize_string(char *source, size_t *pos) {
           buffer_appends(text, "\\r");
           break;
 
+        case 'a':
+          buffer_appends(text, "\\a");
+          break;
+
         case 'b':
           buffer_appends(text, "\\b");
           break;
 
         case 'e':
-          buffer_appends(text, "\\e");
+          buffer_appends(text, "\\x1b");
           break;
 
         case 's':
@@ -552,6 +552,10 @@ token_t *tokenize_string(char *source, size_t *pos) {
           buffer_appends(text, "\\\"");
           break;
 
+        case '?':
+          buffer_appends(text, "\\\?");
+          break;
+
         case '\\':
           buffer_appends(text, "\\\\");
           break;
@@ -568,7 +572,7 @@ token_t *tokenize_string(char *source, size_t *pos) {
       continue;
     }
 
-    if (c == '"' || c == '\\')
+    if (c == '"' || c == '\\' || c == '?')
       buffer_append(text, '\\');
     else if (c == '\n')
       buffer_appends(text, "\\n");