mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-05-03 21:12:08 +02:00
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.
51 lines
2.4 KiB
Plaintext
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"
|