Keep basic block offsets as construction-only metadata rather than storing them on every Executable. The validator now receives the offsets through a transient Rust FFI span, and the bytecode dump rebuilds block starts by scanning labels, terminators, and exception handler metadata. Drop the table from the bytecode cache format and bump the format version so old caches are rebuilt. This removes a field that was only used by validation and bytecode dump paths.
112 lines
2.8 KiB
Text
112 lines
2.8 KiB
Text
$3bff7057 try-catch-scoping.js:11:1
|
|
Registers: 8
|
|
Blocks: 1
|
|
Constants:
|
|
[0] = Undefined
|
|
|
|
block0:
|
|
[ 0] GetGlobal dst:reg6, `tryCatchWithBlocks`
|
|
[ 18] Call dst:reg5, callee:reg6, this_value:Undefined, tryCatchWithBlocks
|
|
[ 38] GetGlobal dst:reg7, `tryCatchFinallyWithBlocks`
|
|
[ 50] Call dst:reg6, callee:reg7, this_value:Undefined, tryCatchFinallyWithBlocks
|
|
[ 70] End value:reg6
|
|
|
|
|
|
tryCatchWithBlocks$fc7f9ac0 try-catch-scoping.js:2:5
|
|
Registers: 11
|
|
Blocks: 3
|
|
Locals: y~0, z~1, e~2, x~3
|
|
Constants:
|
|
[0] = Int32(1)
|
|
[1] = Int32(3)
|
|
[2] = Int32(2)
|
|
[3] = Undefined
|
|
|
|
block0:
|
|
[ 0] GetLexicalEnvironment dst:reg4
|
|
[ 8] Mov dst:x~3, src:Int32(1)
|
|
[ 18] Jump target:block2
|
|
|
|
block1:
|
|
[ 20] Catch dst:reg5
|
|
[ 28] SetLexicalEnvironment environment:reg4
|
|
[ 30] Mov2 dst1:e~2, src1:reg5, dst2:z~1, src2:Int32(3)
|
|
[ 48] GetGlobal dst:reg7, `console`
|
|
[ 60] GetById dst:reg8, base:reg7, `log` (console.log)
|
|
[ 80] Add dst:reg9, lhs:x~3, rhs:e~2
|
|
[ 90] Add dst:reg10, lhs:reg9, rhs:z~1
|
|
[ a0] Call dst:reg6, callee:reg8, this_value:reg7, console.log, arguments:[reg10]
|
|
[ c8] End value:Undefined
|
|
|
|
block2:
|
|
[ d0] Mov dst:y~0, src:Int32(2)
|
|
[ e0] Throw src:y~0
|
|
|
|
Exception handlers:
|
|
[ d0 .. e8] => handler block1
|
|
|
|
|
|
tryCatchFinallyWithBlocks$b3c419da try-catch-scoping.js:14:5
|
|
Registers: 12
|
|
Blocks: 9
|
|
Locals: y~0, e~1, z~2, x~3
|
|
Constants:
|
|
[0] = Int32(1)
|
|
[1] = Int32(0)
|
|
[2] = Int32(2)
|
|
[3] = Int32(3)
|
|
[4] = Undefined
|
|
|
|
block0:
|
|
[ 0] GetLexicalEnvironment dst:reg4
|
|
[ 8] Mov dst:x~3, src:Int32(1)
|
|
[ 18] Jump target:block4
|
|
|
|
block1:
|
|
[ 20] Catch dst:reg6
|
|
[ 28] SetLexicalEnvironment environment:reg4
|
|
[ 30] Mov dst:reg5, src:Int32(1)
|
|
|
|
block2:
|
|
[ 40] Mov dst:z~2, src:Int32(3)
|
|
[ 50] GetGlobal dst:reg8, `console`
|
|
[ 68] GetById dst:reg10, base:reg8, `log` (console.log)
|
|
[ 88] Mov dst:reg9, src:z~2
|
|
[ 98] Call dst:reg7, callee:reg10, this_value:reg8, console.log, arguments:[reg9]
|
|
[ c0] JumpStrictlyEquals lhs:reg5, rhs:Int32(0), true_target:block5, false_target:block6
|
|
|
|
block3:
|
|
[ d8] Catch dst:reg7
|
|
[ e0] SetLexicalEnvironment environment:reg4
|
|
[ e8] Mov dst:e~1, src:reg7
|
|
[ f8] GetGlobal dst:reg9, `console`
|
|
[ 110] GetById dst:reg10, base:reg9, `log` (console.log)
|
|
[ 130] Mov dst:reg11, src:e~1
|
|
[ 140] Call dst:reg8, callee:reg10, this_value:reg9, console.log, arguments:[reg11]
|
|
[ 168] Mov dst:reg5, src:Int32(0)
|
|
[ 178] Jump target:block2
|
|
|
|
block4:
|
|
[ 180] Mov dst:y~0, src:Int32(2)
|
|
[ 190] Throw src:y~0
|
|
|
|
block5:
|
|
[ 198] End value:Undefined
|
|
|
|
block6:
|
|
[ 1a0] JumpStrictlyEquals lhs:reg5, rhs:Int32(2), true_target:block7, false_target:block8
|
|
|
|
block7:
|
|
[ 1b8] Return value:reg6
|
|
|
|
block8:
|
|
[ 1c0] Throw src:reg6
|
|
|
|
Exception handlers:
|
|
[ d8 .. 180] => handler block1
|
|
[ 180 .. 198] => handler block3
|
|
|
|
|
|
6
|
|
2
|
|
3
|