ladybird/Tests/LibJS/Bytecode/expected/indexed-append-guards.txt
Andreas Kling a5ba300186 LibJS: Split dynamic environment lookups from coordinates
Add separate bytecode instructions for environment lookups that must
stay dynamic, such as eval- and with-sensitive scopes. Keep the
coordinate variants for eagerly resolved declarative environments so
their operands can be treated as immutable at runtime.

This removes cached-coordinate mutation from the interpreter paths and
updates the bytecode expectations for the new dynamic lookup opcodes.
2026-05-18 20:35:14 +02:00

154 lines
4.9 KiB
Text

$8565e4c5 indexed-append-guards.js:16:1
Registers: 11
Blocks: 7
Constants:
[0] = String("use strict")
[1] = Int32(0)
[2] = Int32(1)
[3] = Undefined
[4] = String("Indexed object append mutated")
[5] = String("length")
[6] = Bool(false)
[7] = Int32(2)
[8] = String("Array length changed")
[9] = String("Array append mutated")
block0:
[ 0] GetGlobal dst:reg6, `Object`
[ 10] GetById dst:reg7, base:reg6, `preventExtensions` (Object.preventExtensions)
[ 28] NewObject dst:reg8
[ 38] ToPrimitiveWithStringHint dst:Int32(0), value:Int32(0)
[ 48] PutByValue base:reg8, property:Int32(0), src:Int32(1), kind:Own
[ 60] Call dst:reg5, callee:reg7, this_value:reg6, Object.preventExtensions, arguments:[reg8]
[ 88] DynamicInitializeLexicalBinding `object`, src:reg5
[ 98] GetGlobal dst:reg7, `expect_type_error`
[ a8] NewFunction dst:reg6, shared_function_data_index:0
[ c0] Call dst:reg5, callee:reg7, this_value:Undefined, expect_type_error, arguments:[reg6]
[ e8] GetGlobal dst:reg7, `object`
[ f8] GetByValue dst:reg6, base:reg7, property:Int32(1) (object[Int32(1)])
[ 110] StrictlyInequals dst:reg7, lhs:reg6, rhs:Undefined
[ 120] Mov dst:reg6, src:Undefined
[ 130] JumpFalse condition:reg7, target:block2
block1:
[ 140] GetGlobal dst:reg9, `Error`
[ 150] CallConstruct dst:reg8, callee:reg9, Error, arguments:[String("Indexed object append mutated")]
[ 170] Throw src:reg8
block2:
[ 178] NewPrimitiveArray dst:reg5, elements:[1, 2]
[ 198] DynamicInitializeLexicalBinding `array`, src:reg5
[ 1a8] GetGlobal dst:reg7, `Object`
[ 1b8] GetById dst:reg8, base:reg7, `defineProperty` (Object.defineProperty)
[ 1d0] GetGlobal dst:reg9, `array`
[ 1e0] NewObject dst:reg10
[ 1f0] InitObjectLiteralProperty object:reg10, `writable`, src:Bool(false), shape_cache_index:0, property_slot:0
[ 208] CacheObjectShape object:reg10
[ 218] Call dst:reg5, callee:reg8, this_value:reg7, Object.defineProperty, arguments:[reg9, String("length"), reg10]
[ 248] GetGlobal dst:reg8, `expect_type_error`
[ 258] NewFunction dst:reg7, shared_function_data_index:1
[ 270] Call dst:reg6, callee:reg8, this_value:Undefined, expect_type_error, arguments:[reg7]
[ 298] GetGlobal dst:reg5, `array`
[ 2a8] GetLength dst:reg8, base:reg5 (array.length)
[ 2c0] StrictlyInequals dst:reg5, lhs:reg8, rhs:Int32(2)
[ 2d0] Mov dst:reg8, src:Undefined
[ 2e0] JumpFalse condition:reg5, target:block4
block3:
[ 2f0] GetGlobal dst:reg10, `Error`
[ 300] CallConstruct dst:reg7, callee:reg10, Error, arguments:[String("Array length changed")]
[ 320] Throw src:reg7
block4:
[ 328] GetGlobal dst:reg6, `array`
[ 338] GetByValue dst:reg5, base:reg6, property:Int32(2) (array[Int32(2)])
[ 350] StrictlyInequals dst:reg6, lhs:reg5, rhs:Undefined
[ 360] Mov dst:reg5, src:Undefined
[ 370] JumpFalse condition:reg6, target:block6
block5:
[ 380] GetGlobal dst:reg10, `Error`
[ 390] CallConstruct dst:reg7, callee:reg10, Error, arguments:[String("Array append mutated")]
[ 3b0] Throw src:reg7
block6:
[ 3b8] End value:reg5
expect_type_error$fc915998 indexed-append-guards.js:4:5
Registers: 9
Blocks: 8
Locals: error~0, did_throw~1
Constants:
[0] = Bool(false)
[1] = Bool(true)
[2] = Undefined
[3] = String("Expected TypeError")
block0:
[ 0] GetLexicalEnvironment dst:reg4
[ 8] Mov dst:did_throw~1, src:Bool(false)
[ 18] Jump target:block5
block1:
[ 20] Catch dst:reg5
[ 28] SetLexicalEnvironment environment:reg4
[ 30] Mov dst:error~0, src:reg5
[ 40] GetGlobal dst:reg7, `TypeError`
[ 50] InstanceOf dst:reg8, lhs:error~0, rhs:reg7
[ 60] Not dst:reg6, src:reg8
[ 70] JumpFalse condition:reg6, target:block3
block2:
[ 80] Throw src:error~0
block3:
[ 88] Mov dst:did_throw~1, src:Bool(true)
block4:
[ 98] Not dst:reg5, src:did_throw~1
[ a8] JumpIf condition:reg5, true_target:block6, false_target:block7
block5:
[ b8] Call dst:reg5, callee:arg0, this_value:Undefined, callback
[ d8] Jump target:block4
block6:
[ e0] GetGlobal dst:reg8, `Error`
[ f0] CallConstruct dst:reg6, callee:reg8, Error, arguments:[String("Expected TypeError")]
[ 110] Throw src:reg6
block7:
[ 118] End value:Undefined
Exception handlers:
[ b8 .. e0] => handler block1
$ec717972 indexed-append-guards.js:18:5
Registers: 6
Blocks: 1
Constants:
[0] = Int32(1)
[1] = Int32(2)
[2] = Undefined
block0:
[ 0] GetGlobal dst:reg5, `object`
[ 10] PutByValue base:reg5, property:Int32(1), src:Int32(2), kind:Normal (object[Int32(1)])
[ 28] End value:Undefined
$01eb2052 indexed-append-guards.js:26:5
Registers: 8
Blocks: 1
Constants:
[0] = Int32(3)
[1] = Undefined
block0:
[ 0] GetGlobal dst:reg5, `array`
[ 10] GetGlobal dst:reg6, `array`
[ 20] GetLength dst:reg7, base:reg6 (array.length)
[ 38] PutByValue base:reg5, property:reg7, src:Int32(3), kind:Normal (array[reg7])
[ 50] End value:Undefined