CallerArgs.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. function print(x) { WScript.Echo(x+''); }
  6. function inner(func) {
  7. print(func.caller);
  8. if (func.arguments)
  9. {
  10. print(func.arguments[0]);
  11. print(func.arguments.caller);
  12. }
  13. if (func.caller) {
  14. if (func.arguments.caller) {
  15. print(func.arguments.caller[0]);
  16. } else {
  17. print("func.arguments.caller undefined");
  18. }
  19. }
  20. print("");
  21. }
  22. function f() {
  23. inner(f);
  24. try {
  25. try {
  26. throw null;
  27. }
  28. finally {
  29. inner(g);
  30. }
  31. }
  32. catch (e) {
  33. inner(f);
  34. }
  35. }
  36. function g() {
  37. f("f from g");
  38. }
  39. f("f from global");
  40. g("g from global");
  41. function callerA() {
  42. AA(null);
  43. }
  44. function AA(x) {
  45. print(AA.caller);
  46. }
  47. function callerB() {
  48. eval("AB(null)");
  49. }
  50. function AB(x) {
  51. print(AB.caller);
  52. }
  53. callerA();
  54. callerB();
  55. (function() {
  56. print(arguments.caller);
  57. print(delete arguments.caller);
  58. print(arguments.caller);
  59. arguments.caller = 0;
  60. print(arguments.caller);
  61. function f() {
  62. print(arguments.caller);
  63. print(delete arguments.caller);
  64. print(arguments.caller);
  65. arguments.caller = 0;
  66. print(arguments.caller);
  67. }
  68. f();
  69. })();
  70. function test0(){
  71. var func0 = function(){
  72. var __loopvar1 = 0;
  73. while(((b <<= (arguments.caller && arguments.caller[1]) ? 3 : 1)) && __loopvar1 < 3) {
  74. __loopvar1++;
  75. }
  76. }
  77. var func2 = function(){
  78. func0();
  79. }
  80. var b = 1;
  81. function bar0 () {
  82. func2();
  83. }
  84. bar0(1, 1, 1);
  85. WScript.Echo("b = " + (b|0));
  86. };
  87. // generate profile
  88. test0();
  89. test0();