// 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.StepOver); break_count++; } catch { %AbortJS("unexpected exception"); } } debug.Debug.setListener(listener); foo(); debug.Debug.setListener(null); assertEquals(7, break_count);