Files
ladybird/Tests/LibJS/Bytecode/expected/switch-completion-value.txt
Andreas Kling d4f222e442 LibJS: Don't reset switch case completion value for empty results
When a statement in a switch case body doesn't produce a result (e.g.
a variable declaration), we were incorrectly resetting the completion
value to undefined. This caused the completion value of preceding
expression statements to be lost.
2026-02-19 12:02:50 +01:00

51 lines
2.4 KiB
Plaintext

JS bytecode executable ""
[ 0] 0: GetLexicalEnvironment dst:reg4
[ 8] GetGlobal dst:reg6, identifier:console
[ 18] GetById dst:reg7, base:reg6, property:log, base_identifier:console
[ 30] GetGlobal dst:reg9, identifier:eval
[ 40] CallDirectEval dst:reg8, callee:reg9, this_value:Undefined, eval, arguments:[String("switch(1) { case 1: 'hello'; let x = 1; }")]
[ 68] Call dst:reg5, callee:reg7, this_value:reg6, console.log, arguments:[reg8]
[ 90] GetGlobal dst:reg6, identifier:console
[ a0] GetById dst:reg8, base:reg6, property:log, base_identifier:console
[ b8] GetGlobal dst:reg10, identifier:eval
[ c8] CallDirectEval dst:reg9, callee:reg10, this_value:Undefined, eval, arguments:[String("switch(1) { case 1: 'first'; 'second'; }")]
[ f0] Call dst:reg7, callee:reg8, this_value:reg6, console.log, arguments:[reg9]
[ 118] GetGlobal dst:reg8, identifier:console
[ 128] GetById dst:reg6, base:reg8, property:log, base_identifier:console
[ 140] GetGlobal dst:reg10, identifier:eval
[ 150] CallDirectEval dst:reg9, callee:reg10, this_value:Undefined, eval, arguments:[String("switch(1) { case 1: 'matched'; break; default: 'default'; }")]
[ 178] Call dst:reg5, callee:reg6, this_value:reg8, console.log, arguments:[reg9]
[ 1a0] End value:reg5
JS bytecode executable "eval"
[ 0] 0: GetLexicalEnvironment dst:reg4
[ 8] Mov dst:reg5, src:Undefined
[ 18] 1: JumpStrictlyEquals lhs:Int32(1), rhs:Int32(1), true_target:@38, false_target:@30
[ 30] 2: End value:reg5
[ 38] 3: Mov dst:reg5, src:String("hello")
[ 48] Mov dst:x~0, src:Int32(1)
[ 58] 4: End value:reg5
JS bytecode executable "eval"
[ 0] 0: GetLexicalEnvironment dst:reg4
[ 8] Mov dst:reg5, src:Undefined
[ 18] 1: JumpStrictlyEquals lhs:Int32(1), rhs:Int32(1), true_target:@38, false_target:@30
[ 30] 2: End value:reg5
[ 38] 3: Mov dst:reg5, src:String("first")
[ 48] Mov dst:reg5, src:String("second")
[ 58] 4: End value:reg5
JS bytecode executable "eval"
[ 0] 0: GetLexicalEnvironment dst:reg4
[ 8] Mov dst:reg5, src:Undefined
[ 18] 1: JumpStrictlyEquals lhs:Int32(1), rhs:Int32(1), true_target:@38, false_target:@30
[ 30] 2: Jump target:@50
[ 38] 3: Mov dst:reg5, src:String("matched")
[ 48] End value:reg5
[ 50] 4: Mov dst:reg5, src:String("default")
[ 60] 5: End value:reg5
"hello"
"second"
"matched"