mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-06 07:48:38 +09:00
1317375 - Implement "Template Literals Revision / Lifting Template Literal Restriction" ECMAScript proposal
This commit is contained in:
parent
8350dfc515
commit
ee1e2aba19
14 changed files with 386 additions and 69 deletions
|
|
@ -287,5 +287,176 @@ assertEq(String.raw`h\r\ney${4}there\n`, "h\\r\\ney4there\\n");
|
|||
assertEq(String.raw`hey`, "hey");
|
||||
assertEq(String.raw``, "");
|
||||
|
||||
// Invalid escape sequences
|
||||
check(raw`\01`, ["\\01"]);
|
||||
check(raw`\01${0}right`, ["\\01","right"]);
|
||||
check(raw`left${0}\01`, ["left","\\01"]);
|
||||
check(raw`left${0}\01${1}right`, ["left","\\01","right"]);
|
||||
check(raw`\1`, ["\\1"]);
|
||||
check(raw`\1${0}right`, ["\\1","right"]);
|
||||
check(raw`left${0}\1`, ["left","\\1"]);
|
||||
check(raw`left${0}\1${1}right`, ["left","\\1","right"]);
|
||||
check(raw`\xg`, ["\\xg"]);
|
||||
check(raw`\xg${0}right`, ["\\xg","right"]);
|
||||
check(raw`left${0}\xg`, ["left","\\xg"]);
|
||||
check(raw`left${0}\xg${1}right`, ["left","\\xg","right"]);
|
||||
check(raw`\xAg`, ["\\xAg"]);
|
||||
check(raw`\xAg${0}right`, ["\\xAg","right"]);
|
||||
check(raw`left${0}\xAg`, ["left","\\xAg"]);
|
||||
check(raw`left${0}\xAg${1}right`, ["left","\\xAg","right"]);
|
||||
check(raw`\u0`, ["\\u0"]);
|
||||
check(raw`\u0${0}right`, ["\\u0","right"]);
|
||||
check(raw`left${0}\u0`, ["left","\\u0"]);
|
||||
check(raw`left${0}\u0${1}right`, ["left","\\u0","right"]);
|
||||
check(raw`\u0g`, ["\\u0g"]);
|
||||
check(raw`\u0g${0}right`, ["\\u0g","right"]);
|
||||
check(raw`left${0}\u0g`, ["left","\\u0g"]);
|
||||
check(raw`left${0}\u0g${1}right`, ["left","\\u0g","right"]);
|
||||
check(raw`\u00g`, ["\\u00g"]);
|
||||
check(raw`\u00g${0}right`, ["\\u00g","right"]);
|
||||
check(raw`left${0}\u00g`, ["left","\\u00g"]);
|
||||
check(raw`left${0}\u00g${1}right`, ["left","\\u00g","right"]);
|
||||
check(raw`\u000g`, ["\\u000g"]);
|
||||
check(raw`\u000g${0}right`, ["\\u000g","right"]);
|
||||
check(raw`left${0}\u000g`, ["left","\\u000g"]);
|
||||
check(raw`left${0}\u000g${1}right`, ["left","\\u000g","right"]);
|
||||
check(raw`\u{}`, ["\\u{}"]);
|
||||
check(raw`\u{}${0}right`, ["\\u{}","right"]);
|
||||
check(raw`left${0}\u{}`, ["left","\\u{}"]);
|
||||
check(raw`left${0}\u{}${1}right`, ["left","\\u{}","right"]);
|
||||
check(raw`\u{-0}`, ["\\u{-0}"]);
|
||||
check(raw`\u{-0}${0}right`, ["\\u{-0}","right"]);
|
||||
check(raw`left${0}\u{-0}`, ["left","\\u{-0}"]);
|
||||
check(raw`left${0}\u{-0}${1}right`, ["left","\\u{-0}","right"]);
|
||||
check(raw`\u{g}`, ["\\u{g}"]);
|
||||
check(raw`\u{g}${0}right`, ["\\u{g}","right"]);
|
||||
check(raw`left${0}\u{g}`, ["left","\\u{g}"]);
|
||||
check(raw`left${0}\u{g}${1}right`, ["left","\\u{g}","right"]);
|
||||
check(raw`\u{0`, ["\\u{0"]);
|
||||
check(raw`\u{0${0}right`, ["\\u{0","right"]);
|
||||
check(raw`left${0}\u{0`, ["left","\\u{0"]);
|
||||
check(raw`left${0}\u{0${1}right`, ["left","\\u{0","right"]);
|
||||
check(raw`\u{\u{0}`, ["\\u{\\u{0}"]);
|
||||
check(raw`\u{\u{0}${0}right`, ["\\u{\\u{0}","right"]);
|
||||
check(raw`left${0}\u{\u{0}`, ["left","\\u{\\u{0}"]);
|
||||
check(raw`left${0}\u{\u{0}${1}right`, ["left","\\u{\\u{0}","right"]);
|
||||
check(raw`\u{110000}`, ["\\u{110000}"]);
|
||||
check(raw`\u{110000}${0}right`, ["\\u{110000}","right"]);
|
||||
check(raw`left${0}\u{110000}`, ["left","\\u{110000}"]);
|
||||
check(raw`left${0}\u{110000}${1}right`, ["left","\\u{110000}","right"]);
|
||||
|
||||
check(cooked`\01`, [void 0]);
|
||||
check(cooked`\01${0}right`, [void 0,"right"]);
|
||||
check(cooked`left${0}\01`, ["left",void 0]);
|
||||
check(cooked`left${0}\01${1}right`, ["left",void 0,"right"]);
|
||||
check(cooked`\1`, [void 0]);
|
||||
check(cooked`\1${0}right`, [void 0,"right"]);
|
||||
check(cooked`left${0}\1`, ["left",void 0]);
|
||||
check(cooked`left${0}\1${1}right`, ["left",void 0,"right"]);
|
||||
check(cooked`\xg`, [void 0]);
|
||||
check(cooked`\xg${0}right`, [void 0,"right"]);
|
||||
check(cooked`left${0}\xg`, ["left",void 0]);
|
||||
check(cooked`left${0}\xg${1}right`, ["left",void 0,"right"]);
|
||||
check(cooked`\xAg`, [void 0]);
|
||||
check(cooked`\xAg${0}right`, [void 0,"right"]);
|
||||
check(cooked`left${0}\xAg`, ["left",void 0]);
|
||||
check(cooked`left${0}\xAg${1}right`, ["left",void 0,"right"]);
|
||||
check(cooked`\u0`, [void 0]);
|
||||
check(cooked`\u0${0}right`, [void 0,"right"]);
|
||||
check(cooked`left${0}\u0`, ["left",void 0]);
|
||||
check(cooked`left${0}\u0${1}right`, ["left",void 0,"right"]);
|
||||
check(cooked`\u0g`, [void 0]);
|
||||
check(cooked`\u0g${0}right`, [void 0,"right"]);
|
||||
check(cooked`left${0}\u0g`, ["left",void 0]);
|
||||
check(cooked`left${0}\u0g${1}right`, ["left",void 0,"right"]);
|
||||
check(cooked`\u00g`, [void 0]);
|
||||
check(cooked`\u00g${0}right`, [void 0,"right"]);
|
||||
check(cooked`left${0}\u00g`, ["left",void 0]);
|
||||
check(cooked`left${0}\u00g${1}right`, ["left",void 0,"right"]);
|
||||
check(cooked`\u000g`, [void 0]);
|
||||
check(cooked`\u000g${0}right`, [void 0,"right"]);
|
||||
check(cooked`left${0}\u000g`, ["left",void 0]);
|
||||
check(cooked`left${0}\u000g${1}right`, ["left",void 0,"right"]);
|
||||
check(cooked`\u{}`, [void 0]);
|
||||
check(cooked`\u{}${0}right`, [void 0,"right"]);
|
||||
check(cooked`left${0}\u{}`, ["left",void 0]);
|
||||
check(cooked`left${0}\u{}${1}right`, ["left",void 0,"right"]);
|
||||
check(cooked`\u{-0}`, [void 0]);
|
||||
check(cooked`\u{-0}${0}right`, [void 0,"right"]);
|
||||
check(cooked`left${0}\u{-0}`, ["left",void 0]);
|
||||
check(cooked`left${0}\u{-0}${1}right`, ["left",void 0,"right"]);
|
||||
check(cooked`\u{g}`, [void 0]);
|
||||
check(cooked`\u{g}${0}right`, [void 0,"right"]);
|
||||
check(cooked`left${0}\u{g}`, ["left",void 0]);
|
||||
check(cooked`left${0}\u{g}${1}right`, ["left",void 0,"right"]);
|
||||
check(cooked`\u{0`, [void 0]);
|
||||
check(cooked`\u{0${0}right`, [void 0,"right"]);
|
||||
check(cooked`left${0}\u{0`, ["left",void 0]);
|
||||
check(cooked`left${0}\u{0${1}right`, ["left",void 0,"right"]);
|
||||
check(cooked`\u{\u{0}`, [void 0]);
|
||||
check(cooked`\u{\u{0}${0}right`, [void 0,"right"]);
|
||||
check(cooked`left${0}\u{\u{0}`, ["left",void 0]);
|
||||
check(cooked`left${0}\u{\u{0}${1}right`, ["left",void 0,"right"]);
|
||||
check(cooked`\u{110000}`, [void 0]);
|
||||
check(cooked`\u{110000}${0}right`, [void 0,"right"]);
|
||||
check(cooked`left${0}\u{110000}`, ["left",void 0]);
|
||||
check(cooked`left${0}\u{110000}${1}right`, ["left",void 0,"right"]);
|
||||
|
||||
syntaxError("`\\01`");
|
||||
syntaxError("`\\01${0}right`");
|
||||
syntaxError("`left${0}\\01`");
|
||||
syntaxError("`left${0}\\01${1}right`");
|
||||
syntaxError("`\\1`");
|
||||
syntaxError("`\\1${0}right`");
|
||||
syntaxError("`left${0}\\1`");
|
||||
syntaxError("`left${0}\\1${1}right`");
|
||||
syntaxError("`\\xg`");
|
||||
syntaxError("`\\xg${0}right`");
|
||||
syntaxError("`left${0}\\xg`");
|
||||
syntaxError("`left${0}\\xg${1}right`");
|
||||
syntaxError("`\\xAg`");
|
||||
syntaxError("`\\xAg${0}right`");
|
||||
syntaxError("`left${0}\\xAg`");
|
||||
syntaxError("`left${0}\\xAg${1}right`");
|
||||
syntaxError("`\\u0`");
|
||||
syntaxError("`\\u0${0}right`");
|
||||
syntaxError("`left${0}\\u0`");
|
||||
syntaxError("`left${0}\\u0${1}right`");
|
||||
syntaxError("`\\u0g`");
|
||||
syntaxError("`\\u0g${0}right`");
|
||||
syntaxError("`left${0}\\u0g`");
|
||||
syntaxError("`left${0}\\u0g${1}right`");
|
||||
syntaxError("`\\u00g`");
|
||||
syntaxError("`\\u00g${0}right`");
|
||||
syntaxError("`left${0}\\u00g`");
|
||||
syntaxError("`left${0}\\u00g${1}right`");
|
||||
syntaxError("`\\u000g`");
|
||||
syntaxError("`\\u000g${0}right`");
|
||||
syntaxError("`left${0}\\u000g`");
|
||||
syntaxError("`left${0}\\u000g${1}right`");
|
||||
syntaxError("`\\u{}`");
|
||||
syntaxError("`\\u{}${0}right`");
|
||||
syntaxError("`left${0}\\u{}`");
|
||||
syntaxError("`left${0}\\u{}${1}right`");
|
||||
syntaxError("`\\u{-0}`");
|
||||
syntaxError("`\\u{-0}${0}right`");
|
||||
syntaxError("`left${0}\\u{-0}`");
|
||||
syntaxError("`left${0}\\u{-0}${1}right`");
|
||||
syntaxError("`\\u{g}`");
|
||||
syntaxError("`\\u{g}${0}right`");
|
||||
syntaxError("`left${0}\\u{g}`");
|
||||
syntaxError("`left${0}\\u{g}${1}right`");
|
||||
syntaxError("`\\u{0`");
|
||||
syntaxError("`\\u{0${0}right`");
|
||||
syntaxError("`left${0}\\u{0`");
|
||||
syntaxError("`left${0}\\u{0${1}right`");
|
||||
syntaxError("`\\u{\\u{0}`");
|
||||
syntaxError("`\\u{\\u{0}${0}right`");
|
||||
syntaxError("`left${0}\\u{\\u{0}`");
|
||||
syntaxError("`left${0}\\u{\\u{0}${1}right`");
|
||||
syntaxError("`\\u{110000}`");
|
||||
syntaxError("`\\u{110000}${0}right`");
|
||||
syntaxError("`left${0}\\u{110000}`");
|
||||
syntaxError("`left${0}\\u{110000}${1}right`");
|
||||
|
||||
reportCompare(0, 0, "ok");
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ assertStringExpr("`hey\nthere`", literal("hey\nthere"));
|
|||
assertExpr("`hey${\"there\"}`", templateLit([lit("hey"), lit("there"), lit("")]));
|
||||
assertExpr("`hey${\"there\"}mine`", templateLit([lit("hey"), lit("there"), lit("mine")]));
|
||||
assertExpr("`hey${a == 5}mine`", templateLit([lit("hey"), binExpr("==", ident("a"), lit(5)), lit("mine")]));
|
||||
assertExpr("func`hey\\x`", taggedTemplate(ident("func"), template(["hey\\x"], [void 0])));
|
||||
assertExpr("func`hey${4}\\x`", taggedTemplate(ident("func"), template(["hey","\\x"], ["hey",void 0], lit(4))));
|
||||
assertExpr("`hey${`there${\"how\"}`}mine`", templateLit([lit("hey"),
|
||||
templateLit([lit("there"), lit("how"), lit("")]), lit("mine")]));
|
||||
assertExpr("func`hey`", taggedTemplate(ident("func"), template(["hey"], ["hey"])));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue