Repository navigation
Conversation
ECMAScript LineTerminatorSequence includes U+2028 and U+2029, so a backslash followed by either is a LineContinuation with an empty string value. The scanner and normalizeString only handled LF and CR, so the separator was kept in string literals and in template cooked values.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A backslash followed by U+2028 or U+2029 is a line continuation in ECMAScript, the same as one before a newline, but the scanner and IRFactory.normalizeString only recognised LF and CR, so the separator was silently kept in the compiled string. For example "one<LS>two" came out as "one\u2028two" (length 7, where node gives "onetwo", length 6) with a misleading unnecessary escape warning, and a template literal had the same wrong cooked value, which then leaked into the output when transpiling to ES5. This treats LS and PS like LF in both places, which I believe matches the spec and V8, and adds cases to the existing line continuation tests in ParserTest.