[debug] Treat Comma-separated Expressions like Statements when Stepping.

This CL introduces statement positions before the right-hand side of
comma expressions, in order to align the stepping behavior (and also
generally the breakpoint behavior) around semicolon (;) and comma (,)
separated expressions.

The motivation here is that left-hand sides of comma expressions are
evaluated purely for their side-effects and as such, they aren't
really any different from statements from a developers perspective.
And more importantly, minifiers (like UglifyJS, terser, or esbuild)
by default turn statement expression lists into comma-separated
expressions, thus implicitly changing the stepping behavior in ways
that are difficult to understand for developers.

Doc: http://go/chrome-devtools:comma-stepping-proposal
Demo: https://devtools-dbg-stories.netlify.app/crbug-1370200.html
Video: https://i.imgur.com/5WC03wF.gif
Fixed: chromium:1370200
Change-Id: I38f288d964bc992d1de0dce2ed2becd4220793df
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3934288
Reviewed-by: Leszek Swirski <leszeks@chromium.org>
Reviewed-by: Jaroslav Sevcik <jarin@chromium.org>
Commit-Queue: Benedikt Meurer <bmeurer@chromium.org>
Cr-Commit-Position: refs/heads/main@{#83599}
This commit is contained in:
Benedikt Meurer 2022-10-10 07:57:54 +02:00 committed by V8 LUCI CQ
parent 033c2e49a6
commit ade6d191c8
6 changed files with 589 additions and 264 deletions

View File

@ -6597,6 +6597,7 @@ void BytecodeGenerator::VisitSuperPropertyReference(
void BytecodeGenerator::VisitCommaExpression(BinaryOperation* binop) {
VisitForEffect(binop->left());
builder()->SetExpressionAsStatementPosition(binop->right());
Visit(binop->right());
}
@ -6605,8 +6606,11 @@ void BytecodeGenerator::VisitNaryCommaExpression(NaryOperation* expr) {
VisitForEffect(expr->first());
for (size_t i = 0; i < expr->subsequent_length() - 1; ++i) {
builder()->SetExpressionAsStatementPosition(expr->subsequent(i));
VisitForEffect(expr->subsequent(i));
}
builder()->SetExpressionAsStatementPosition(
expr->subsequent(expr->subsequent_length() - 1));
Visit(expr->subsequent(expr->subsequent_length() - 1));
}

View File

@ -0,0 +1,225 @@
Tests breakable locations in comma expressions.
Running test: testBreakLocations
function testFunction() {
|C|foo(), |C|foo(), |C|foo();
|_|return |C|bar(), |C|bar();|R|
}
function foo() {
|_|return |C|baz(), |C|baz();|R|
}
function bar() {
|_|return |C|foo(),
1 |_|+ |C|foo(),
2 |_|+ |C|foo();|R|
}
const baz = |_|() => |_|0|R|;
|R|
Running test: testStepping
Execution paused in testFunction:
function testFunction() {
#foo(), foo(), foo();
return bar(), bar();
Execution paused in foo:
function foo() {
#return baz(), baz();
}
Called from testFunction:
function testFunction() {
#foo(), foo(), foo();
return bar(), bar();
Execution paused in foo:
function foo() {
return baz(), #baz();
}
Called from testFunction:
function testFunction() {
#foo(), foo(), foo();
return bar(), bar();
Execution paused in foo:
function foo() {
return baz(), baz();#
}
Called from testFunction:
function testFunction() {
#foo(), foo(), foo();
return bar(), bar();
Execution paused in testFunction:
function testFunction() {
foo(), #foo(), foo();
return bar(), bar();
Execution paused in foo:
function foo() {
#return baz(), baz();
}
Called from testFunction:
function testFunction() {
foo(), #foo(), foo();
return bar(), bar();
Execution paused in foo:
function foo() {
return baz(), #baz();
}
Called from testFunction:
function testFunction() {
foo(), #foo(), foo();
return bar(), bar();
Execution paused in foo:
function foo() {
return baz(), baz();#
}
Called from testFunction:
function testFunction() {
foo(), #foo(), foo();
return bar(), bar();
Execution paused in testFunction:
function testFunction() {
foo(), foo(), #foo();
return bar(), bar();
Execution paused in foo:
function foo() {
#return baz(), baz();
}
Called from testFunction:
function testFunction() {
foo(), foo(), #foo();
return bar(), bar();
Execution paused in foo:
function foo() {
return baz(), #baz();
}
Called from testFunction:
function testFunction() {
foo(), foo(), #foo();
return bar(), bar();
Execution paused in foo:
function foo() {
return baz(), baz();#
}
Called from testFunction:
function testFunction() {
foo(), foo(), #foo();
return bar(), bar();
Execution paused in testFunction:
foo(), foo(), foo();
#return bar(), bar();
}
Execution paused in bar:
function bar() {
#return foo(),
1 + foo(),
Called from testFunction:
foo(), foo(), foo();
return #bar(), bar();
}
Execution paused in bar:
return foo(),
1 #+ foo(),
2 + foo();
Called from testFunction:
foo(), foo(), foo();
return #bar(), bar();
}
Execution paused in bar:
1 + foo(),
2 #+ foo();
}
Called from testFunction:
foo(), foo(), foo();
return #bar(), bar();
}
Execution paused in bar:
1 + foo(),
2 + foo();#
}
Called from testFunction:
foo(), foo(), foo();
return #bar(), bar();
}
Execution paused in testFunction:
foo(), foo(), foo();
return bar(), #bar();
}
Execution paused in bar:
function bar() {
#return foo(),
1 + foo(),
Called from testFunction:
foo(), foo(), foo();
return bar(), #bar();
}
Execution paused in bar:
return foo(),
1 #+ foo(),
2 + foo();
Called from testFunction:
foo(), foo(), foo();
return bar(), #bar();
}
Execution paused in bar:
1 + foo(),
2 #+ foo();
}
Called from testFunction:
foo(), foo(), foo();
return bar(), #bar();
}
Execution paused in bar:
1 + foo(),
2 + foo();#
}
Called from testFunction:
foo(), foo(), foo();
return bar(), #bar();
}
Execution paused in testFunction:
foo(), foo(), foo();
return bar(), bar();#
}
Resuming and finishing...

View File

@ -0,0 +1,96 @@
// Copyright 2022 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.
let {session, contextGroup, Protocol} =
InspectorTest.start('Tests breakable locations in comma expressions.');
const source = `
function testFunction() {
foo(), foo(), foo();
return bar(), bar();
}
function foo() {
return baz(), baz();
}
function bar() {
return foo(),
1 + foo(),
2 + foo();
}
const baz = () => 0;
`;
const url = 'test.js';
contextGroup.addScript(source, 0, 0, url);
session.setupScriptMap();
InspectorTest.runAsyncTestSuite([
async function testBreakLocations() {
const [, , {params: {scriptId}}] = await Promise.all([
Protocol.Runtime.enable(),
Protocol.Debugger.enable(),
Protocol.Debugger.onceScriptParsed(),
]);
const {result: {locations}} =
await Protocol.Debugger.getPossibleBreakpoints(
{start: {lineNumber: 0, columnNumber: 0, scriptId}});
await session.logBreakLocations(locations);
await Promise.all([
Protocol.Debugger.disable(),
Protocol.Runtime.disable(),
]);
},
async function testStepping() {
const [, , {params: {scriptId}}] = await Promise.all([
Protocol.Runtime.enable(),
Protocol.Debugger.enable(),
Protocol.Debugger.onceScriptParsed(),
]);
const {breakpointId} = await Protocol.Debugger.setBreakpoint({
location: {
scriptId,
lineNumber: 2,
}
});
const evalPromise =
Protocol.Runtime.evaluate({expression: 'testFunction()'});
for (;;) {
const {method, params} = await Promise.race([
evalPromise,
Protocol.Debugger.oncePaused(),
]);
if (method !== 'Debugger.paused') {
break;
}
const callFrames = params.callFrames.filter(
callFrame => callFrame.location.scriptId === scriptId);
if (callFrames.length === 0) {
InspectorTest.log('Resuming and finishing...');
await Protocol.Debugger.resume();
} else {
const [{functionName, location}, ...callerFrames] = callFrames;
InspectorTest.log(`Execution paused in ${functionName}:`);
await session.logSourceLocation(location);
for (const {location, functionName} of callerFrames) {
InspectorTest.log(`Called from ${functionName}:`);
await session.logSourceLocation(location);
}
if (functionName === 'testFunction') {
await Protocol.Debugger.stepInto();
} else {
await Protocol.Debugger.stepOver();
}
}
}
await Promise.all([
Protocol.Debugger.removeBreakpoint({breakpointId}),
Protocol.Debugger.disable(),
Protocol.Runtime.disable(),
]);
}
]);

View File

@ -20,11 +20,11 @@ bytecodes: [
B(Star1),
/* 52 S> */ B(LdaSmi), I8(2),
B(Star0),
B(LdaSmi), I8(3),
/* 69 S> */ B(LdaSmi), I8(3),
B(Star1),
B(LdaSmi), I8(4),
/* 76 S> */ B(LdaSmi), I8(4),
B(Star0),
B(LdaSmi), I8(5),
/* 83 S> */ B(LdaSmi), I8(5),
B(Star1),
/* 88 S> */ B(Return),
]

View File

@ -96,7 +96,7 @@ bytecodes: [
/* 42 S> */ B(LdaZero),
B(Star0),
/* 45 S> */ B(JumpIfToBooleanTrue), U8(4),
B(LdaSmi), I8(3),
/* 64 S> */ B(LdaSmi), I8(3),
/* 67 S> */ B(Return),
]
constant pool: [
@ -120,9 +120,9 @@ bytecodes: [
B(Star2),
/* 59 S> */ B(Ldar), R(0),
B(JumpIfToBooleanTrue), U8(7),
B(LdaSmi), I8(5),
/* 86 S> */ B(LdaSmi), I8(5),
B(Star2),
B(LdaSmi), I8(3),
/* 91 S> */ B(LdaSmi), I8(3),
/* 94 S> */ B(Return),
]
constant pool: [
@ -180,133 +180,133 @@ bytecodes: [
B(JumpIfToBooleanTrue), U8(196),
B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 88 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 98 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 105 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 115 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 122 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 132 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 139 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 149 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 156 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 166 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 173 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 183 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 190 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 200 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 207 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 217 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 224 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 234 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 241 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 251 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 258 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 268 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 275 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 285 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 292 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 302 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 309 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 319 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 326 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 336 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 343 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 353 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 360 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 370 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 377 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 387 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 394 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 404 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 411 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 421 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 428 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 438 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 445 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 455 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 462 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 472 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 479 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 489 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 496 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 506 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 513 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 523 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 530 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 540 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 547 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 557 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 564 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 574 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 581 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 591 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 598 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 608 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 615 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(3),
/* 620 S> */ B(LdaSmi), I8(3),
/* 623 S> */ B(Return),
]
constant pool: [
@ -364,133 +364,133 @@ bytecodes: [
B(JumpIfToBooleanFalse), U8(196),
B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 88 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 98 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 105 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 115 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 122 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 132 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 139 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 149 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 156 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 166 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 173 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 183 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 190 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 200 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 207 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 217 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 224 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 234 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 241 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 251 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 258 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 268 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 275 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 285 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 292 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 302 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 309 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 319 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 326 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 336 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 343 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 353 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 360 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 370 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 377 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 387 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 394 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 404 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 411 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 421 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 428 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 438 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 445 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 455 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 462 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 472 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 479 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 489 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 496 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 506 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 513 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 523 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 530 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 540 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 547 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 557 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 564 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 574 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 581 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 591 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 598 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 608 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 615 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(3),
/* 620 S> */ B(LdaSmi), I8(3),
/* 623 S> */ B(Return),
]
constant pool: [
@ -549,133 +549,133 @@ bytecodes: [
B(JumpIfTrue), U8(196),
B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 94 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 104 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 111 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 121 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 128 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 138 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 145 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 155 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 162 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 172 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 179 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 189 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 196 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 206 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 213 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 223 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 230 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 240 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 247 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 257 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 264 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 274 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 281 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 291 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 298 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 308 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 315 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 325 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 332 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 342 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 349 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 359 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 366 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 376 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 383 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 393 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 400 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 410 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 417 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 427 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 434 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 444 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 451 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 461 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 468 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 478 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 485 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 495 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 502 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 512 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 519 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 529 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 536 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 546 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 553 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 563 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 570 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 580 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 587 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 597 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 604 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 614 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 621 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(3),
/* 626 S> */ B(LdaSmi), I8(3),
/* 629 S> */ B(Return),
]
constant pool: [
@ -734,133 +734,133 @@ bytecodes: [
B(JumpIfFalse), U8(196),
B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 94 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 104 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 111 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 121 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 128 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 138 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 145 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 155 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 162 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 172 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 179 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 189 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 196 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 206 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 213 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 223 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 230 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 240 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 247 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 257 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 264 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 274 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 281 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 291 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 298 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 308 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 315 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 325 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 332 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 342 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 349 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 359 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 366 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 376 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 383 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 393 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 400 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 410 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 417 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 427 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 434 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 444 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 451 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 461 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 468 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 478 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 485 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 495 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 502 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 512 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 519 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 529 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 536 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 546 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 553 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 563 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 570 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 580 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 587 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 597 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 604 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(1),
/* 614 S> */ B(LdaSmi), I8(1),
B(Star1),
B(LdaSmi), I8(2),
/* 621 S> */ B(LdaSmi), I8(2),
B(Star2),
B(LdaSmi), I8(3),
/* 626 S> */ B(LdaSmi), I8(3),
/* 629 S> */ B(Return),
]
constant pool: [
@ -914,7 +914,7 @@ bytecodes: [
B(LdaSmi), I8(3),
B(JumpIfToBooleanTrue), U8(3),
B(LdaZero),
B(LdaSmi), I8(1),
/* 65 S> */ B(LdaSmi), I8(1),
/* 67 S> */ B(Return),
]
constant pool: [

View File

@ -449,7 +449,7 @@ bytecode array length: 5
bytecodes: [
/* 42 S> */ B(LdaZero),
B(Star0),
/* 45 S> */ B(LdaSmi), I8(3),
/* 56 S> */ B(LdaSmi), I8(3),
/* 59 S> */ B(Return),
]
constant pool: [