// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Test that stepping works correctly with bytecode scaling prefix.
class MyClass { f(p) { this.x += p; } };

let obj = new MyClass();

function foo() {
  obj.f(0);
  obj.f(1);
  obj.f(2);
  obj.f(3);
  obj.f(4);
  obj.f(5);
  obj.f(6);
  obj.f(7);
  obj.f(8);
  obj.f(9);
  obj.f(10);
  obj.f(11);
  obj.f(12);
  obj.f(13);
  obj.f(14);
  obj.f(15);
  obj.f(16);
  obj.f(17);
  obj.f(18);
  obj.f(19);
  obj.f(20);
  obj.f(21);
  obj.f(22);
  obj.f(23);
  obj.f(24);
  obj.f(25);
  obj.f(26);
  obj.f(27);
  obj.f(28);
  obj.f(29);
  obj.f(30);
  obj.f(31);
  obj.f(32);
  obj.f(33);
  obj.f(34);
  obj.f(35);
  obj.f(36);
  obj.f(37);
  obj.f(38);
  obj.f(39);
  obj.f(40);
  obj.f(41);
  obj.f(42);
  obj.f(43);
  obj.f(44);
  obj.f(45);
  obj.f(46);
  obj.f(47);
  obj.f(48);
  obj.f(49);
  obj.f(50);
  obj.f(51);
  obj.f(52);
  obj.f(53);
  obj.f(54);
  obj.f(55);
  obj.f(56);
  obj.f(57);
  obj.f(58);
  obj.f(59);
  obj.f(60);
  obj.f(61);
  obj.f(62);
  obj.f(63);
  obj.f(64);
  obj.f(65);
  obj.f(66);
  obj.f(67);
  obj.f(68);
  obj.f(69);
  obj.f(70);
  obj.f(71);
  obj.f(72);
  obj.f(73);
  obj.f(74);
  obj.f(75);
  obj.f(76);
  obj.f(77);
  obj.f(78);
  obj.f(79);
  obj.f(80);
  obj.f(81);
  obj.f(82);
  obj.f(83);
  obj.f(84);
  obj.f(85);
  obj.f(86);
  obj.f(87);
  obj.f(88);
  obj.f(89);
  obj.f(90);
  obj.f(91);
  obj.f(92);
  obj.f(93);
  obj.f(94);
  obj.f(95);
  obj.f(96);
  obj.f(97);
  obj.f(98);
  obj.f(99);
  obj.f(100);
  obj.f(101);
  obj.f(102);
  obj.f(103);
  obj.f(104);
  obj.f(105);
  obj.f(106);
  obj.f(107);
  obj.f(108);
  obj.f(109);
  obj.f(110);
  obj.f(111);
  obj.f(112);
  obj.f(113);
  obj.f(114);
  obj.f(115);
  obj.f(116);
  obj.f(117);
  obj.f(118);
  obj.f(119);
  obj.f(120);
  obj.f(121);
  obj.f(122);
  obj.f(123);
  obj.f(124);
  obj.f(125);
  obj.f(126);
  obj.f(127);
  obj.f(128);
  obj.f(129);
  obj.f(130);
  obj.f(131);
  obj.f(132);
  obj.f(133);
  obj.f(134);
  obj.f(135);
  obj.f(136);
  obj.f(137);
  obj.f(138);
  obj.f(139);
  obj.f(140);
  obj.f(141);
  obj.f(142);
  obj.f(143);
  obj.f(144);
  obj.f(145);
  obj.f(146);
  obj.f(147);
  obj.f(148);
  obj.f(149);
  obj.f(150);
  obj.f(151);
  obj.f(152);
  obj.f(153);
  obj.f(154);
  obj.f(155);
  obj.f(156);
  obj.f(157);
  obj.f(158);
  obj.f(159);
  obj.f(160);
  obj.f(161);
  obj.f(162);
  obj.f(163);
  obj.f(164);
  obj.f(165);
  obj.f(166);
  obj.f(167);
  obj.f(168);
  obj.f(169);
  obj.f(170);
  obj.f(171);
  obj.f(172);
  obj.f(173);
  obj.f(174);
  obj.f(175);
  obj.f(176);
  obj.f(177);
  obj.f(178);
  obj.f(179);
  obj.f(180);
  obj.f(181);
  obj.f(182);
  obj.f(183);
  obj.f(184);
  obj.f(185);
  obj.f(186);
  obj.f(187);
  obj.f(188);
  obj.f(189);
  obj.f(190);
  obj.f(191);
  obj.f(192);
  obj.f(193);
  obj.f(194);
  obj.f(195);
  obj.f(196);
  obj.f(197);
  obj.f(198);
  obj.f(199);
  obj.f(200);
  obj.f(201);
  obj.f(202);
  obj.f(203);
  obj.f(204);
  obj.f(205);
  obj.f(206);
  obj.f(207);
  obj.f(208);
  obj.f(209);
  obj.f(210);
  obj.f(211);
  obj.f(212);
  obj.f(213);
  obj.f(214);
  obj.f(215);
  obj.f(216);
  obj.f(217);
  obj.f(218);
  obj.f(219);
  obj.f(220);
  obj.f(221);
  obj.f(222);
  obj.f(223);
  obj.f(224);
  obj.f(225);
  obj.f(226);
  obj.f(227);
  obj.f(228);
  obj.f(229);
  obj.f(230);
  obj.f(231);
  obj.f(232);
  obj.f(233);
  obj.f(234);
  obj.f(235);
  obj.f(236);
  obj.f(237);
  obj.f(238);
  obj.f(239);
  obj.f(240);
  obj.f(241);
  obj.f(242);
  obj.f(243);
  obj.f(244);
  obj.f(245);
  obj.f(246);
  obj.f(247);
  obj.f(248);
  obj.f(249);
  obj.f(250);
  obj.f(251);
  obj.f(252);
  obj.f(253);
  obj.f(254);
  obj.f(255);
  debugger;
  obj.f(256);
  obj.f(257);
  obj.f(258);
  obj.f(259);
}

let break_count = 0;

function listener(event, exec_state, event_data, data) {
  if (event != debug.Debug.DebugEvent.Break) return;
  try {
    exec_state.prepareStep(debug.Debug.StepAction.StepNext);
    break_count++;
  } catch {
    %AbortJS("unexpected exception");
  }
}

debug.Debug.setListener(listener);
foo();
debug.Debug.setListener(null);
assertEquals(7, break_count);
