blueloveTH 2 tahun lalu
induk
melakukan
9ea76aee85
2 mengubah file dengan 15 tambahan dan 1 penghapusan
  1. 12 0
      src/lexer.h
  2. 3 1
      tests/04_str.py

+ 12 - 0
src/lexer.h

@@ -323,6 +323,18 @@ struct Lexer {
                     case 'n':  buff.push_back('\n'); break;
                     case 'n':  buff.push_back('\n'); break;
                     case 'r':  buff.push_back('\r'); break;
                     case 'r':  buff.push_back('\r'); break;
                     case 't':  buff.push_back('\t'); break;
                     case 't':  buff.push_back('\t'); break;
+                    case 'x': {
+                        char hex[3] = {eatchar(), eatchar(), '\0'};
+                        size_t parsed;
+                        char code;
+                        try{
+                            code = (char)Number::stoi(hex, &parsed, 16);
+                        }catch(std::invalid_argument&){
+                            SyntaxError("invalid hex char");
+                        }
+                        if (parsed != 2) SyntaxError("invalid hex char");
+                        buff.push_back(code);
+                    } break;
                     default: SyntaxError("invalid escape char");
                     default: SyntaxError("invalid escape char");
                 }
                 }
             } else {
             } else {

+ 3 - 1
tests/04_str.py

@@ -106,4 +106,6 @@ a = '123'
 assert a.rjust(5) == '  123'
 assert a.rjust(5) == '  123'
 assert a.rjust(5, '0') == '00123'
 assert a.rjust(5, '0') == '00123'
 assert a.ljust(5) == '123  '
 assert a.ljust(5) == '123  '
-assert a.ljust(5, '0') == '12300'
+assert a.ljust(5, '0') == '12300'
+
+assert '\x30\x31\x32' == '012'