/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠGoogle ĠLLC Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ċ Ġ* Ġin Ġcompliance Ġwith Ġthe ĠLicense . ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ġdistributed Ġunder Ġthe ĠLicense Ċ Ġ* Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ċ Ġ* Ġeither Ġexpress Ġor Ġimplied . ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġkw asm . format . binary . instruction Ċ Ċ import Ġkw asm . ast . instruction . Variable Instruction Ċ import Ġkw asm . format . binary . Binary Parser Ċ import Ġkw asm . format . binary . module . read Index Ċ Ċ internal Ġval ĠVARIABLE _ OPCODE _ RANGE Ġ= Ġ 0 x 2 0 .. 0 x 2 4 Ċ Ċ /** Ċ Ġ* ĠFrom Ġ[ the Ġdocs ]( https :// web assembly . github . io / spec / core / binary / instructions . html # variable - instructions ): Ċ Ġ* Ċ Ġ* ĠVariable Ġinstructions Ġare Ġrepresented Ġby Ġbyte Ġcodes Ġfollowed Ġby Ġthe Ġencoding Ġof Ġthe Ġrespective Ġindex . Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* ĠĠĠĠĠ Ġinstr Ġ::= ĠĠĠ 0 x 2 0 Ġx : local idx ĠĠĠĠ Ġ=> Ġlocal . get Ġx Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 1 Ġx : local idx ĠĠĠĠ Ġ=> Ġlocal . set Ġx Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 2 Ġx : local idx ĠĠĠĠ Ġ=> Ġlocal . tee Ġx Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 3 Ġx : global idx ĠĠĠ Ġ=> Ġglobal . get Ġx Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 x 2 4 Ġx : global idx ĠĠĠ Ġ=> Ġglobal . set Ġx Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ fun ĠBinary Parser . read Variable Instruction ( opcode : ĠInt ): ĠVariable Instruction Ġ= Ġwhen Ġ( opcode ) Ġ{ ĊĠĠĠĠ 0 x 2 0 Ġ-> ĠVariable Instruction . Local Get ( read Index ()) ĊĠĠĠĠ 0 x 2 1 Ġ-> ĠVariable Instruction . Local Set ( read Index ()) ĊĠĠĠĠ 0 x 2 2 Ġ-> ĠVariable Instruction . Local T ee ( read Index ()) ĊĠĠĠĠ 0 x 2 3 Ġ-> ĠVariable Instruction . Global Get ( read Index ()) ĊĠĠĠĠ 0 x 2 4 Ġ-> ĠVariable Instruction . Global Set ( read Index ()) ĊĠĠĠ Ġelse Ġ-> Ġthrow Exception (" Bad Ġopcode Ġfor ĠVariable Instruction : Ġ 0 x ${ opcode . toString ( 1 6 )} ", Ġ- 1 ) Ċ } Ċ