21.functionDeclaration_sm.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  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. "use strict";
  6. function write(v) { WScript.Echo(v + ""); }
  7. function exceptToString(ee) {
  8. if(ee instanceof TypeError) return "TypeError";
  9. if(ee instanceof ReferenceError) return "ReferenceError";
  10. if(ee instanceof EvalError) return "EvalError";
  11. if(ee instanceof SyntaxError) return "SyntaxError";
  12. return "Unknown Error";
  13. }
  14. (function () {
  15. var description = "Program.SourceElement.FunctionDeclaration";
  16. try {
  17. eval("function foo() {}");
  18. } catch(e) {
  19. write("Exception: " + description + " - " + exceptToString(e));
  20. return;
  21. }
  22. write("Return: " + description);
  23. })();
  24. (function () {
  25. var description = "FunctionBody.FunctionDeclaration";
  26. try {
  27. eval("(function() { function foo() {} });");
  28. } catch(e) {
  29. write("Exception: " + description + " - " + exceptToString(e));
  30. return;
  31. }
  32. write("Return: " + description);
  33. })();
  34. (function () {
  35. var description = "Block.StatementList.Statement.FunctionDeclaration";
  36. try {
  37. eval("{ function foo() {} }");
  38. } catch(e) {
  39. write("Exception: " + description + " - " + exceptToString(e));
  40. return;
  41. }
  42. write("Return: " + description);
  43. })();
  44. (function () {
  45. var description = "IfStatement.Statement.FunctionDeclaration";
  46. try {
  47. eval("if(false) function foo() {}");
  48. } catch(e) {
  49. write("Exception: " + description + " - " + exceptToString(e));
  50. return;
  51. }
  52. write("Return: " + description);
  53. })();
  54. (function () {
  55. var description = "IterationStatement(do-while).Statement.FunctionDeclaration";
  56. try {
  57. eval("do function foo() {} while(false);");
  58. } catch(e) {
  59. write("Exception: " + description + " - " + exceptToString(e));
  60. return;
  61. }
  62. write("Return: " + description);
  63. })();
  64. (function () {
  65. var description = "IterationStatement(while).Statement.FunctionDeclaration";
  66. try {
  67. eval("while(false) function foo() {}");
  68. } catch(e) {
  69. write("Exception: " + description + " - " + exceptToString(e));
  70. return;
  71. }
  72. write("Return: " + description);
  73. })();
  74. (function () {
  75. var description = "IterationStatement(for).Statement.FunctionDeclaration";
  76. try {
  77. eval("for(var i = 0; i < 0; ++i) function foo() {}");
  78. } catch(e) {
  79. write("Exception: " + description + " - " + exceptToString(e));
  80. return;
  81. }
  82. write("Return: " + description);
  83. })();
  84. (function () {
  85. var description = "IterationStatement(for-in).Statement.FunctionDeclaration";
  86. try {
  87. eval("for(var p in {}) function foo() {}");
  88. } catch(e) {
  89. write("Exception: " + description + " - " + exceptToString(e));
  90. return;
  91. }
  92. write("Return: " + description);
  93. })();
  94. (function () {
  95. var description = "SourceElement.Statement.LabelledStatement.Statement.FunctionDeclaration";
  96. try {
  97. eval("Foo: function foo() {}");
  98. } catch(e) {
  99. write("Exception: " + description + " - " + exceptToString(e));
  100. return;
  101. }
  102. write("Return: " + description);
  103. })();
  104. (function () {
  105. var description = "Block.Statement.LabelledStatement.Statement.FunctionDeclaration";
  106. try {
  107. eval("{ Foo: function foo() {} }");
  108. } catch(e) {
  109. write("Exception: " + description + " - " + exceptToString(e));
  110. return;
  111. }
  112. write("Return: " + description);
  113. })();
  114. (function () {
  115. var description = "SwitchStatement.CaseBlock.CaseClause.StatementList.Statement.FunctionDeclaration";
  116. try {
  117. eval("switch(true) { case false: function foo() {} }");
  118. } catch(e) {
  119. write("Exception: " + description + " - " + exceptToString(e));
  120. return;
  121. }
  122. write("Return: " + description);
  123. })();
  124. (function () {
  125. var description = "SwitchStatement.CaseBlock.DefaultClause.StatementList.Statement.FunctionDeclaration";
  126. try {
  127. eval("switch(true) { case true: break; default: function foo() {} }");
  128. } catch(e) {
  129. write("Exception: " + description + " - " + exceptToString(e));
  130. return;
  131. }
  132. write("Return: " + description);
  133. })();
  134. (function () {
  135. var description = "SwitchStatement.CaseBlock.DefaultClause.StatementList.Statement.FunctionDeclaration";
  136. try {
  137. eval("switch(true) { case true: break; default: function foo() {} }");
  138. } catch(e) {
  139. write("Exception: " + description + " - " + exceptToString(e));
  140. return;
  141. }
  142. write("Return: " + description);
  143. })();
  144. (function () {
  145. var description = "TryStatement.Block.StatementList.Statement.FunctionDeclaration";
  146. try {
  147. eval("try { function foo() {} } finally {}");
  148. } catch(e) {
  149. write("Exception: " + description + " - " + exceptToString(e));
  150. return;
  151. }
  152. write("Return: " + description);
  153. })();
  154. (function () {
  155. var description = "TryStatement.Catch.Block.StatementList.Statement.FunctionDeclaration";
  156. try {
  157. eval("try {} catch(ex) { function foo() {} }");
  158. } catch(e) {
  159. write("Exception: " + description + " - " + exceptToString(e));
  160. return;
  161. }
  162. write("Return: " + description);
  163. })();
  164. (function () {
  165. var description = "TryStatement.Finally.Block.StatementList.Statement.FunctionDeclaration";
  166. try {
  167. eval("try {} finally { function foo() {} }");
  168. } catch(e) {
  169. write("Exception: " + description + " - " + exceptToString(e));
  170. return;
  171. }
  172. write("Return: " + description);
  173. })();