fieldhoist_stripbailouts.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. // Test field hoisting cases that should strip bailouts in the loop header.
  6. // Field load hoisted from within the inner do-while should have bailout removed.
  7. function test1() {
  8. var obj4 = 1;
  9. var __loopvar2 = 0;
  10. while ((1) && __loopvar2 < 3) {
  11. __loopvar2++;
  12. var obj6 = 1;
  13. for (var __loopvar3 = 0; obj4.length < (1.1) && __loopvar3 < 3; obj4.length++ + __loopvar3++) {
  14. }
  15. var __loopvar3 = 0;
  16. do {
  17. __loopvar3++;
  18. p0 = ui8_1[(1) % 256];
  19. } while (((obj6.length++)) && __loopvar3 < 3)
  20. }
  21. }
  22. // Field load hoisted from within the inner do-while should have BailOutExpectingObject,
  23. // which should not clobber implicit call bit set by the load of (undefined) ui8.
  24. function test2() {
  25. var obj4 = 1;
  26. var __loopvar2 = 0;
  27. while ((1) && __loopvar2 < 3) {
  28. __loopvar2++;
  29. var obj6 = {};
  30. for (var __loopvar3 = 0; obj4.length < (1.1) && __loopvar3 < 3; obj4.length++ + __loopvar3++) {
  31. }
  32. var __loopvar3 = 0;
  33. do {
  34. __loopvar3++;
  35. p0 = ui8_2[(1) % 256];
  36. obj6.spam;
  37. } while (((obj6.length++)) && __loopvar3 < 3)
  38. }
  39. }
  40. try {
  41. test1();
  42. }
  43. catch(e1) {
  44. WScript.Echo(e1.message);
  45. }
  46. try {
  47. test2();
  48. }
  49. catch(e2) {
  50. WScript.Echo(e2.message);
  51. }
  52. (function(){
  53. var obj1 = new Object();
  54. var obj4 = new Object();
  55. (function(){
  56. var __loopvar2 = 0;
  57. do {
  58. __loopvar2++;
  59. e = ((obj4.prop0 * (obj4.prop1 -= -2147483648)) - (obj1.prop0++ ));
  60. } while((1.1) && __loopvar2 < 3)
  61. })();
  62. })();