From e7320359c12b97ccb85ebfb06b2540124630df7b Mon Sep 17 00:00:00 2001 From: _ov4 Date: Sun, 18 Oct 2026 08:00:31 +0000 Subject: feat(lexer): support C++ escape sequences in literals Co-Authored-By: Claude Opus 5.5 --- tests/iii/escape-hex/case.json | 8 ++++++++ tests/iii/escape-hex/program.cps | 1 + tests/iii/escape-octal/case.json | 8 ++++++++ tests/iii/escape-octal/program.cps | 1 + tests/iii/escape-surrogate/case.json | 8 ++++++++ tests/iii/escape-surrogate/program.cps | 1 + tests/iii/escape-unicode-char/case.json | 8 ++++++++ tests/iii/escape-unicode-char/program.cps | 1 + tests/iii/escape-unknown/case.json | 8 ++++++++ tests/iii/escape-unknown/program.cps | 1 + 10 files changed, 45 insertions(+) create mode 100644 tests/iii/escape-hex/case.json create mode 100644 tests/iii/escape-hex/program.cps create mode 100644 tests/iii/escape-octal/case.json create mode 100644 tests/iii/escape-octal/program.cps create mode 100644 tests/iii/escape-surrogate/case.json create mode 100644 tests/iii/escape-surrogate/program.cps create mode 100644 tests/iii/escape-unicode-char/case.json create mode 100644 tests/iii/escape-unicode-char/program.cps create mode 100644 tests/iii/escape-unknown/case.json create mode 100644 tests/iii/escape-unknown/program.cps (limited to 'tests/iii') diff --git a/tests/iii/escape-hex/case.json b/tests/iii/escape-hex/case.json new file mode 100644 index 0000000..a40e503 --- /dev/null +++ b/tests/iii/escape-hex/case.json @@ -0,0 +1,8 @@ +{ + "errors": [ + { + "reason": "exceeds one byte", + "line": 1 + } + ] +} diff --git a/tests/iii/escape-hex/program.cps b/tests/iii/escape-hex/program.cps new file mode 100644 index 0000000..3769c04 --- /dev/null +++ b/tests/iii/escape-hex/program.cps @@ -0,0 +1 @@ +OUTPUT "\x100" diff --git a/tests/iii/escape-octal/case.json b/tests/iii/escape-octal/case.json new file mode 100644 index 0000000..a40e503 --- /dev/null +++ b/tests/iii/escape-octal/case.json @@ -0,0 +1,8 @@ +{ + "errors": [ + { + "reason": "exceeds one byte", + "line": 1 + } + ] +} diff --git a/tests/iii/escape-octal/program.cps b/tests/iii/escape-octal/program.cps new file mode 100644 index 0000000..7e56ef1 --- /dev/null +++ b/tests/iii/escape-octal/program.cps @@ -0,0 +1 @@ +OUTPUT "\400" diff --git a/tests/iii/escape-surrogate/case.json b/tests/iii/escape-surrogate/case.json new file mode 100644 index 0000000..eb1882d --- /dev/null +++ b/tests/iii/escape-surrogate/case.json @@ -0,0 +1,8 @@ +{ + "errors": [ + { + "reason": "Invalid Unicode", + "line": 1 + } + ] +} diff --git a/tests/iii/escape-surrogate/program.cps b/tests/iii/escape-surrogate/program.cps new file mode 100644 index 0000000..bee5004 --- /dev/null +++ b/tests/iii/escape-surrogate/program.cps @@ -0,0 +1 @@ +OUTPUT "\ud800" diff --git a/tests/iii/escape-unicode-char/case.json b/tests/iii/escape-unicode-char/case.json new file mode 100644 index 0000000..7bc1560 --- /dev/null +++ b/tests/iii/escape-unicode-char/case.json @@ -0,0 +1,8 @@ +{ + "errors": [ + { + "reason": "must be ASCII", + "line": 1 + } + ] +} diff --git a/tests/iii/escape-unicode-char/program.cps b/tests/iii/escape-unicode-char/program.cps new file mode 100644 index 0000000..258852a --- /dev/null +++ b/tests/iii/escape-unicode-char/program.cps @@ -0,0 +1 @@ +OUTPUT '\u00e9' diff --git a/tests/iii/escape-unknown/case.json b/tests/iii/escape-unknown/case.json new file mode 100644 index 0000000..2ba3033 --- /dev/null +++ b/tests/iii/escape-unknown/case.json @@ -0,0 +1,8 @@ +{ + "errors": [ + { + "reason": "Unknown escape", + "line": 1 + } + ] +} diff --git a/tests/iii/escape-unknown/program.cps b/tests/iii/escape-unknown/program.cps new file mode 100644 index 0000000..25a4b1d --- /dev/null +++ b/tests/iii/escape-unknown/program.cps @@ -0,0 +1 @@ +OUTPUT "\q" -- cgit v1.3.1-4-g156e