Skip to content

Preserve lone surrogate escapes in string literal emit - #4109

Closed
Jake Bailey (jakebailey) with Copilot wants to merge 3 commits into
mainfrom
copilot/fix-surrogate-enum-issue
Closed

Preserve lone surrogate escapes in string literal emit#4109
Jake Bailey (jakebailey) with Copilot wants to merge 3 commits into
mainfrom
copilot/fix-surrogate-enum-issue

Conversation

Copilot AI commented May 30, 2026

Copy link
Copy Markdown
Contributor

Lone surrogate escapes in string literals were decoded to U+FFFD, corrupting emitted enum member names and const enum substitutions.

  • Scanner

    • Preserve lone \uD800/\uDC00 escapes as surrogate sentinels instead of replacement characters.
    • Apply the same handling to braced Unicode escapes such as \u{D800}.
  • Printer

    • Decode surrogate sentinels when escaping string literal text.
    • Emit lone surrogates as UTF-16 escape sequences.
  • Regression coverage

    • Added compiler coverage for enum member names and const enum values:
      enum E {
        "\uD800lone" = 1,
      }
      
      const enum S {
        C = "\uD800",
      }
      
      const c = S.C;
    • Updated existing surrogate baselines to reflect preserved lone surrogate escapes.

Copilot AI and others added 2 commits May 30, 2026 16:45
Co-authored-by: jakebailey <5341706+jakebailey@users.noreply.github.com>
Co-authored-by: jakebailey <5341706+jakebailey@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix lone surrogate in enum member name and const enum value Preserve lone surrogate escapes in string literal emit May 30, 2026
@jakebailey

Copy link
Copy Markdown
Member

#4181

@jakebailey
Jake Bailey (jakebailey) deleted the copilot/fix-surrogate-enum-issue branch June 29, 2026 16:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Lone surrogate in enum member name / const enum value is corrupted to U+FFFD in emitted JS

2 participants