unicode_6_identifiers_utf8.js 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. //Simple (<0x10000) valid character for identifier
  6. var \u0069 = 3;
  7. WScript.Echo(i);
  8. WScript.Echo(\u0069);
  9. WScript.Echo(\u{0069});
  10. WScript.Echo(\u{00069});
  11. WScript.Echo(\u{000069});
  12. WScript.Echo(this.i);
  13. WScript.Echo(this.\u0069);
  14. WScript.Echo(this.\u{0069});
  15. WScript.Echo(this.\u{00069});
  16. WScript.Echo(this.\u{000069});
  17. WScript.Echo(this["i"]);
  18. WScript.Echo(this["\u0069"]);
  19. WScript.Echo(this["\u{0069}"]);
  20. WScript.Echo(this["\u{00069}"]);
  21. WScript.Echo(this["\u{000069}"]);
  22. WScript.Echo(eval("\u0069"));
  23. WScript.Echo(eval("\u{0069}"));
  24. WScript.Echo(eval("\u{00069}"));
  25. WScript.Echo(eval("\u{000069}"));
  26. WScript.Echo(eval("\u0069 = i + \u0069;"));
  27. WScript.Echo(eval("\u{0069} = i + \u{0069};"));
  28. WScript.Echo(eval("\u{00069} = i + \u{00069};"));
  29. WScript.Echo(eval("\u{000069} = i + \u{000069};"));
  30. //More complex variations
  31. var 𠮷 = 1;
  32. WScript.Echo(\u{20BB7});
  33. WScript.Echo(\u{020BB7});
  34. WScript.Echo(this.\u{20BB7});
  35. WScript.Echo(this.\u{020BB7});
  36. WScript.Echo(this["\u{20BB7}"]);
  37. WScript.Echo(this["\u{020BB7}"]);
  38. WScript.Echo(eval('\u{20BB7}'));
  39. WScript.Echo(eval('\u{020BB7}'));
  40. WScript.Echo(eval('this.\u{20BB7}'));
  41. WScript.Echo(eval('this.\u{020BB7}'));
  42. WScript.Echo(eval('this["\u{20BB7}"]'));
  43. WScript.Echo(eval('this["\u{020BB7}"]'));
  44. WScript.Echo(eval('\u{20BB7}+ \u{20BB7}'));
  45. WScript.Echo(eval('\u{020BB7}+ \u{20BB7}'));
  46. WScript.Echo(eval('this.\u{20BB7}+ \u{20BB7}'));
  47. WScript.Echo(eval('this.\u{020BB7}+ \u{20BB7}'));
  48. WScript.Echo(eval('this["\u{20BB7}"]+ \u{20BB7}'));
  49. WScript.Echo(eval('this["\u{020BB7}"]+ \u{20BB7}'));
  50. WScript.Echo(this["\uD842\uDFB7"]);
  51. WScript.Echo(this["\u{D842}\uDFB7"]);
  52. WScript.Echo(this["\uD842\u{DFB7}"]);
  53. WScript.Echo(this["\u{D842}\u{DFB7}"]);
  54. WScript.Echo(this["\u{0D842}\uDFB7"]);
  55. WScript.Echo(this["\uD842\u{0DFB7}"]);
  56. WScript.Echo(this["\u{0D842}\u{0DFB7}"]);
  57. WScript.Echo(this["\u{00D842}\uDFB7"]);
  58. WScript.Echo(this["\uD842\u{00DFB7}"]);
  59. WScript.Echo(this["\u{00D842}\u{00DFB7}"]);
  60. WScript.Echo(eval('\uD842\uDFB7'));
  61. WScript.Echo(eval('\u{D842}\uDFB7'));
  62. WScript.Echo(eval('\uD842\u{DFB7}'));
  63. WScript.Echo(eval('\u{D842}\u{DFB7}'));
  64. WScript.Echo(eval('\u{0D842}\uDFB7'));
  65. WScript.Echo(eval('\uD842\u{0DFB7}'));
  66. WScript.Echo(eval('\u{0D842}\u{0DFB7}'));
  67. WScript.Echo(eval('\u{00D842}\uDFB7'));
  68. WScript.Echo(eval('\uD842\u{00DFB7}'));
  69. WScript.Echo(eval('\u{00D842}\u{00DFB7}'));
  70. WScript.Echo(eval('this.\uD842\uDFB7'));
  71. WScript.Echo(eval('this.\u{D842}\uDFB7'));
  72. WScript.Echo(eval('this.\uD842\u{DFB7}'));
  73. WScript.Echo(eval('this.\u{D842}\u{DFB7}'));
  74. WScript.Echo(eval('this.\u{0D842}\uDFB7'));
  75. WScript.Echo(eval('this.\uD842\u{0DFB7}'));
  76. WScript.Echo(eval('this.\u{0D842}\u{0DFB7}'));
  77. WScript.Echo(eval('this.\u{00D842}\uDFB7'));
  78. WScript.Echo(eval('this.\uD842\u{00DFB7}'));
  79. WScript.Echo(eval('this.\u{00D842}\u{00DFB7}'));
  80. WScript.Echo(eval('this["\uD842\uDFB7"]'));
  81. WScript.Echo(eval('this["\u{D842}\uDFB7"]'));
  82. WScript.Echo(eval('this["\uD842\u{DFB7}"]'));
  83. WScript.Echo(eval('this["\u{D842}\u{DFB7}"]'));
  84. WScript.Echo(eval('this["\u{0D842}\uDFB7"]'));
  85. WScript.Echo(eval('this["\uD842\u{0DFB7}"]'));
  86. WScript.Echo(eval('this["\u{0D842}\u{0DFB7}"]'));
  87. WScript.Echo(eval('this["\u{00D842}\uDFB7"]'));
  88. WScript.Echo(eval('this["\uD842\u{00DFB7}"]'));
  89. WScript.Echo(eval('this["\u{00D842}\u{00DFB7}"]'));
  90. WScript.Echo(eval('\u{20BB7} = \uD842\uDFB7+ \u{20BB7}'));
  91. WScript.Echo(eval('\u{20BB7} = \u{D842}\uDFB7+ \u{20BB7}'));
  92. WScript.Echo(eval('\u{20BB7} = \uD842\u{DFB7}+ \u{20BB7}'));
  93. WScript.Echo(eval('\u{20BB7} = \u{D842}\u{DFB7}+ \u{20BB7}'));
  94. WScript.Echo(eval('\u{20BB7} = \u{0D842}\uDFB7+ \u{20BB7}'));
  95. WScript.Echo(eval('\u{20BB7} = \uD842\u{0DFB7}+ \u{20BB7}'));
  96. WScript.Echo(eval('\u{20BB7} = \u{0D842}\u{0DFB7}+ \u{20BB7}'));
  97. WScript.Echo(eval('\u{20BB7} = \u{00D842}\uDFB7+ \u{20BB7}'));
  98. WScript.Echo(eval('\u{20BB7} = \uD842\u{00DFB7}+ \u{20BB7}'));
  99. WScript.Echo(eval('\u{20BB7} = \u{00D842}\u{00DFB7}+ \u{20BB7}'));
  100. WScript.Echo(eval('\u{20BB7} = this.\uD842\uDFB7+ \u{20BB7}'));
  101. WScript.Echo(eval('\u{20BB7} = this.\u{D842}\uDFB7+ \u{20BB7}'));
  102. WScript.Echo(eval('\u{20BB7} = this.\uD842\u{DFB7}+ \u{20BB7}'));
  103. WScript.Echo(eval('\u{20BB7} = this.\u{D842}\u{DFB7}+ \u{20BB7}'));
  104. WScript.Echo(eval('\u{20BB7} = this.\u{0D842}\uDFB7+ \u{20BB7}'));
  105. WScript.Echo(eval('\u{20BB7} = this.\uD842\u{0DFB7}+ \u{20BB7}'));
  106. WScript.Echo(eval('\u{20BB7} = this.\u{0D842}\u{0DFB7}+ \u{20BB7}'));
  107. WScript.Echo(eval('\u{20BB7} = this.\u{00D842}\uDFB7+ \u{20BB7}'));
  108. WScript.Echo(eval('\u{20BB7} = this.\uD842\u{00DFB7}+ \u{20BB7}'));
  109. WScript.Echo(eval('\u{20BB7} = this.\u{00D842}\u{00DFB7}+ \u{20BB7}'));
  110. WScript.Echo(eval('\u{20BB7} = this["\uD842\uDFB7"]+ \u{20BB7}'));
  111. WScript.Echo(eval('\u{20BB7} = this["\u{D842}\uDFB7"]+ \u{20BB7}'));
  112. WScript.Echo(eval('\u{20BB7} = this["\uD842\u{DFB7}"]+ \u{20BB7}'));
  113. WScript.Echo(eval('\u{20BB7} = this["\u{D842}\u{DFB7}"]+ \u{20BB7}'));
  114. WScript.Echo(eval('\u{20BB7} = this["\u{0D842}\uDFB7"]+ \u{20BB7}'));
  115. WScript.Echo(eval('\u{20BB7} = this["\uD842\u{0DFB7}"]+ \u{20BB7}'));
  116. WScript.Echo(eval('\u{20BB7} = this["\u{0D842}\u{0DFB7}"]+ \u{20BB7}'));
  117. WScript.Echo(eval('\u{20BB7} = this["\u{00D842}\uDFB7"]+ \u{20BB7}'));
  118. WScript.Echo(eval('\u{20BB7} = this["\uD842\u{00DFB7}"]+ \u{20BB7}'));
  119. WScript.Echo(eval('\u{20BB7} = this["\u{00D842}\u{00DFB7}"]+ \u{20BB7}'));
  120. try{
  121. eval("FOR4 : for(var i=1;i<2;i++){FOR4NESTED : for(var j=1;j<2;j++) { continue\u2029FOR4; } while(0);}");
  122. if (j!==2) {
  123. $ERROR('#4: Since LineTerminator(U-2029) between continue and Identifier not allowed continue evaluates without label');
  124. }
  125. } catch(e){
  126. $ERROR('#4.1: eval("FOR4 : for(var i=1;i<2;i++){FOR4NESTED : for(var j=1;j<2;j++) { continue\\u2029FOR4; } while(0);}"); does not lead to throwing exception');
  127. }
  128. //Some interesting cases
  129. var _\u{20BB7} = 'a';
  130. eval("WScript.Echo(_\u{20BB7})");
  131. var _\u0524 = 'a';
  132. eval("WScript.Echo(_\u0524)");
  133. var $\u{20BB7} = 'b';
  134. eval("WScript.Echo($\u{20BB7})");
  135. var $\u0524 = 'b';
  136. eval("WScript.Echo($\u0524)");
  137. var $00xxx\u0069\u0524\u{20BB7} = 'c';
  138. WScript.Echo(eval('$00xxxi\u0524\u{D842}\uDFB7'));
  139. //These 2 are valid
  140. // WScript.Echo(\u2e2f);
  141. // WScript.Echo(_\u2e2f);
  142. var ℘abc = null;
  143. // This one should throw
  144. var \u4e3d = 5;