package Ġcom . elements . jvm by kotlin . instructions . control Ċ Ċ import Ġcom . elements . jvm by kotlin . instructions . base . Branch Logic Ċ import Ġcom . elements . jvm by kotlin . instructions . base . Byte code Reader Ċ import Ġcom . elements . jvm by kotlin . instructions . base . Instruction Ċ import Ġcom . elements . jvm by kotlin . runtime data . Frame Ċ Ċ /** Ċ Ġ* ĠGo Ġto Ġtarget Ġpc Ġby Ġkey Ċ Ġ* ĠRefer Ġto Ġ< a Ġhref =" https :// docs . oracle . com / javase / specs / jv ms / se 8 / html / jv ms - 4 . html # jv ms - 4 . 1 0 . 1 . 9 . lookup switch "> lookup switch </ a > Ċ Ġ* Ċ Ġ* Ġ@ author Ġhan zhang Ċ Ġ*/ Ċ class ĠLookup Switch Ġ: ĠInstruction Ġ{ ĊĠĠĠ Ġvar Ġdefault Offset : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġn Pairs : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġlateinit Ġvar Ġmatch Offsets : ĠArrayList < Int > ĊĊĠĠĠ Ġoverride Ġfun Ġfetch Oper ands ( byte code Reader : ĠByte code Reader ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbytecode Reader . skip Padding () ĊĠĠĠĠĠĠĠ Ġdefault Offset Ġ= Ġbytecode Reader . readInt 3 2 () ĊĠĠĠĠĠĠĠ Ġn Pairs Ġ= Ġbytecode Reader . readInt 3 2 () ĊĠĠĠĠĠĠĠ Ġmatch Offsets Ġ= Ġbytecode Reader . readInt 3 2 Array ( n Pairs Ġ* Ġ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexecute ( frame : ĠFrame ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġframe . operand Stack . pop Int () ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ( n Pairs Ġ* Ġ 2 ) Ġstep Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match Offsets [ i ] Ġ== Ġkey ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġmatch Offsets [ i Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBranch Logic . branch ( frame , Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠBranch Logic . branch ( frame , Ġdefault Offset ) ĊĠĠĠ Ġ} Ċ }