[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}
diff --git a/src/interpreter/bytecode-generator.cc b/src/interpreter/bytecode-generator.cc
index 6ac64dc..6e67f0f 100644
--- a/src/interpreter/bytecode-generator.cc
+++ b/src/interpreter/bytecode-generator.cc
@@ -6597,6 +6597,7 @@
void BytecodeGenerator::VisitCommaExpression(BinaryOperation* binop) {
VisitForEffect(binop->left());
+ builder()->SetExpressionAsStatementPosition(binop->right());
Visit(binop->right());
}
@@ -6605,8 +6606,11 @@
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));
}
diff --git a/test/inspector/debugger/comma-expression-expected.txt b/test/inspector/debugger/comma-expression-expected.txt
new file mode 100644
index 0000000..eabf6f6
--- /dev/null
+++ b/test/inspector/debugger/comma-expression-expected.txt
@@ -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...
diff --git a/test/inspector/debugger/comma-expression.js b/test/inspector/debugger/comma-expression.js
new file mode 100644
index 0000000..4e3b26f
--- /dev/null
+++ b/test/inspector/debugger/comma-expression.js
@@ -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(),
+ ]);
+ }
+]);
diff --git a/test/unittests/interpreter/bytecode_expectations/AssignmentsInBinaryExpression.golden b/test/unittests/interpreter/bytecode_expectations/AssignmentsInBinaryExpression.golden
index 6f2b1bf..77edb47 100644
--- a/test/unittests/interpreter/bytecode_expectations/AssignmentsInBinaryExpression.golden
+++ b/test/unittests/interpreter/bytecode_expectations/AssignmentsInBinaryExpression.golden
@@ -20,11 +20,11 @@
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),
]
diff --git a/test/unittests/interpreter/bytecode_expectations/LogicalExpressions.golden b/test/unittests/interpreter/bytecode_expectations/LogicalExpressions.golden
index 13bed9d..d53ffdc 100644
--- a/test/unittests/interpreter/bytecode_expectations/LogicalExpressions.golden
+++ b/test/unittests/interpreter/bytecode_expectations/LogicalExpressions.golden
@@ -96,7 +96,7 @@
/* 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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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: [
diff --git a/test/unittests/interpreter/bytecode_expectations/PrimitiveExpressions.golden b/test/unittests/interpreter/bytecode_expectations/PrimitiveExpressions.golden
index e2d02ee..b8490f7 100644
--- a/test/unittests/interpreter/bytecode_expectations/PrimitiveExpressions.golden
+++ b/test/unittests/interpreter/bytecode_expectations/PrimitiveExpressions.golden
@@ -449,7 +449,7 @@
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: [