VerifyParserState.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  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. // Following lines generate a baseline with flags:
  6. // -UseParserStateCache -ParserStateCache -ForceDeferParse -Trace:CreateParserState
  7. console.log('nested function capturing var decl');
  8. WScript.LoadScript(`
  9. function f_1() {
  10. var a1 = 0;
  11. function f_2() {
  12. var b1 = 0;
  13. return a1 + b1;
  14. }
  15. }
  16. `);
  17. console.log();
  18. console.log('nested function capturing a let decl');
  19. WScript.LoadScript(`
  20. function f_1() {
  21. let a2 = 0;
  22. function f_2() {
  23. let b2 = 0;
  24. return a2 + b2;
  25. }
  26. }
  27. `);
  28. console.log();
  29. console.log('nested function capturing a const decl');
  30. WScript.LoadScript(`
  31. function f_1() {
  32. const a3 = 0;
  33. function f_2() {
  34. const b3 = 0;
  35. return a3 + b3;
  36. }
  37. }
  38. `);
  39. console.log();
  40. console.log('nested function capturing non-decl names');
  41. WScript.LoadScript(`
  42. function f_1() {
  43. function f_2() {
  44. return a4 + b4;
  45. }
  46. }
  47. `);
  48. console.log();
  49. console.log('nested function referencing a local shadowing formal');
  50. WScript.LoadScript(`
  51. function f_1(a5) {
  52. function f_2(a5) {
  53. return a5;
  54. }
  55. }
  56. `);
  57. console.log();
  58. console.log('nested function capturing a named formal');
  59. WScript.LoadScript(`
  60. function f_1(a6) {
  61. function f_2(b6) {
  62. return a6 + b6;
  63. }
  64. }
  65. `);
  66. console.log();
  67. console.log('nested functions capturing global declarations');
  68. WScript.LoadScript(`
  69. var v7;
  70. let l7;
  71. const c7 = 7;
  72. function f_1(a7) {
  73. function f_2(b7) {
  74. function f_3() {
  75. return a7 + b7 + v7 + l7 + c7 + d7 + a7 + b7 + v7 + l7 + c7 + d7;
  76. }
  77. return a7 + b7 + v7 + l7 + c7 + d7;
  78. }
  79. return a7 + b7 + v7 + l7 + c7;
  80. }
  81. `);
  82. console.log();
  83. console.log('nested function capturing a class decl');
  84. WScript.LoadScript(`
  85. class class_1 { };
  86. function f_2() {
  87. function f_3() {
  88. return class_1;
  89. }
  90. return class_1;
  91. }
  92. `);
  93. console.log();
  94. console.log('object literal methods capturing names');
  95. WScript.LoadScript(`
  96. var v9;
  97. let l9;
  98. const c9 = 9;
  99. let o_9 = {
  100. f_1(a9) { return a9 + b9 + c9 + l9 + v9 + o_9; },
  101. *f_2(a9) { return a9 + b9 + c9 + l9 + v9 + o_9; },
  102. async f_3(a9) { return a9 + b9 + c9 + l9 + v9 + o_9; },
  103. ['f_4'](a9) { return a9 + b9 + c9 + l9 + v9 + o_9; },
  104. *['f_5'](a9) { return a9 + b9 + c9 + l9 + v9 + o_9; },
  105. get f_6() { return a9 + b9 + c9 + l9 + v9 + o_9; },
  106. set f_7(a9) { a9 + b9 + c9 + l9 + v9 + o_9; }
  107. }
  108. `);
  109. console.log();
  110. console.log('class members capturing names');
  111. WScript.LoadScript(`
  112. var v10;
  113. let l10;
  114. const c10 = 10;
  115. class class_10 {
  116. f_1(a10) { return a10 + b10 + c10 + l10 + v10 + class_10; }
  117. *f_2(a10) { return a10 + b10 + c10 + l10 + v10 + class_10; }
  118. async f_3(a10) { return a10 + b10 + c10 + l10 + v10 + class_10; }
  119. ['f_4'](a10) { return a10 + b10 + c10 + l10 + v10 + class_10; }
  120. *['f_5'](a10) { return a10 + b10 + c10 + l10 + v10 + class_10; }
  121. get f_6() { return a10 + b10 + c10 + l10 + v10 + class_10; }
  122. set f_7(a10) { a10 + b10 + c10 + l10 + v10 + class_10; }
  123. }
  124. `);
  125. console.log();
  126. console.log('lambda capturing special names');
  127. WScript.LoadScript(`
  128. function f_1() {
  129. () => arguments; // function 2
  130. () => this; // function 3
  131. () => new.target; // function 4
  132. class c extends null {
  133. constructor() { // function 5
  134. () => super(); // function 6
  135. }
  136. method() { // function 7
  137. () => super.foo(); // function 8
  138. }
  139. }
  140. }
  141. `);
  142. console.log();
  143. console.log('nested function with shadowing block-scoped name');
  144. WScript.LoadScript(`
  145. var v12;
  146. let l12;
  147. function f_1(a12) {
  148. {
  149. let l12;
  150. return l12;
  151. }
  152. return v12;
  153. }
  154. `);
  155. console.log();
  156. console.log('nested functions with a few nested captures');
  157. WScript.LoadScript(`
  158. let a13;
  159. function f_1() {
  160. let b13;
  161. function f_2() {
  162. let c13;
  163. {
  164. let d13;
  165. function f_3() {
  166. return d13 + c13 + b13 + a13;
  167. }
  168. }
  169. }
  170. function f_4() {
  171. function f_5() {
  172. return b13 + f13;
  173. }
  174. return e13;
  175. }
  176. }
  177. `);
  178. console.log();
  179. console.log('names referenced in param scope can be captured');
  180. WScript.LoadScript(`
  181. let a14, c14;
  182. function f_1(b14 = a14, d14 = () => c14) {
  183. return b14 + d14;
  184. }
  185. `);
  186. console.log();
  187. console.log('eval referencing and declaring names');
  188. WScript.LoadScript(`
  189. let a15, b15;
  190. function f_1() {
  191. eval('var c15 = a15;');
  192. return c15 + b15;
  193. }
  194. `);
  195. console.log();
  196. console.log('named function expression referencing itself by name');
  197. WScript.LoadScript(`
  198. (function f_1() {
  199. return f_1;
  200. })()
  201. `);
  202. console.log();
  203. console.log('nested function containing a with statement which has a property shadowing a local');
  204. WScript.LoadScript(`
  205. var a17 = 'a', b17 = 'b';
  206. var o17 = { c17: 'c', d17: 'd' }
  207. function f_1() {
  208. let d17 = 'not d';
  209. with(o17) {
  210. return a17 + d17;
  211. }
  212. }
  213. `);
  214. console.log();
  215. console.log('nested function containing a with statement which captures a name');
  216. WScript.LoadScript(`
  217. var a18 = 'a', b18 = 'b';
  218. var o18 = { c18: 'c', d18: 'd' }
  219. function f_1() {
  220. with(o18) {
  221. return a18 + d18;
  222. }
  223. }
  224. `);
  225. console.log();