bailout-strict-exception.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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 test0() {
  6. 'use strict';
  7. try {
  8. var obj0 = {};
  9. var ary = new Array(10);
  10. obj0.length = 1;
  11. var __loopvar3 = 0;
  12. while ((1) && __loopvar3 < 3) {
  13. __loopvar3++;
  14. ary.length = -804513990;
  15. }
  16. //Snippet 3: fewer arguments than formal parameters
  17. obj0.length = (function (x, y, z, w, r) {
  18. e *= obj0.prop0;
  19. var temp = x + y + z + w + r;
  20. return temp + ary[(1)];
  21. })(1, 1, 1);
  22. }
  23. catch(e) {
  24. WScript.Echo(e);
  25. }
  26. };
  27. // generate profile
  28. test0();
  29. // run JITted code
  30. test0();
  31. var shouldBailout = false;
  32. function test1() {
  33. 'use strict';
  34. try {
  35. var obj0 = {};
  36. var obj1 = {};
  37. var func2 = function (p0) {
  38. switch ((d)) {
  39. case 1:
  40. break;
  41. case (a--):
  42. break;
  43. default:
  44. obj1.prop0 -= 1;
  45. break;
  46. case 1:
  47. break;
  48. case 1:
  49. break;
  50. }
  51. (shouldBailout ? (Object.defineProperty(obj0, 'prop0', { writable: false, enumerable: true, configurable: true }), 1) : 1);
  52. }
  53. obj1.method0 = func2;
  54. var a = 1;
  55. var d = -27;
  56. obj1.method0();
  57. var __loopvar0 = 0;
  58. do {
  59. __loopvar0++;
  60. } while (((obj0.length & (shouldBailout ? (obj0.prop0 = { valueOf: function () { WScript.Echo('obj0.prop0 valueOf'); return 3; } }, 1) : 1))) && __loopvar0 < 3)
  61. }
  62. catch (e) {
  63. WScript.Echo(e);
  64. }
  65. WScript.Echo("obj1.prop0 = " + (obj1.prop0 | 0));
  66. };
  67. // generate profile
  68. test1();
  69. // run JITted code
  70. test1();
  71. // run code with bailouts enabled
  72. shouldBailout = true;
  73. test1();