/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 Ġ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 . type Ċ Ċ import Ġkw asm . ast . Identifier Ċ import Ġkw asm . ast . type . FunctionType Ċ import Ġkw asm . ast . type . Param Ċ import Ġkw asm . ast . type . Result Ċ import Ġkw asm . format . binary . Binary Parser Ċ import Ġkw asm . format . binary . value . read Vector Ċ Ċ const Ġval ĠFUNCTION _ TYPE _ MAGIC : ĠByte Ġ= Ġ 0 x 6 0 Ċ Ċ /** Ċ Ġ* ĠFrom Ġ[ the Ġdocs ]( https :// web assembly . github . io / spec / core / binary / types . html # function - types ): Ċ Ġ* Ċ Ġ* ĠFunction Ġtypes Ġare Ġencoded Ġby Ġthe Ġbyte Ġ` 0 x 6 0 ` Ġfollowed Ġby Ġthe Ġrespective Ġvectors Ġof Ġparameter Ċ Ġ* Ġand Ġresult Ġtypes . Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* ĠĠĠĠĠ Ġfun ctype ĠĠĠ Ġ::= Ġ 0 x 6 0 Ġrt 1 : result type Ġrt 2 : result type Ġ Ġ=> Ġ Ġrt 1 ĠâĨĴ Ġrt 2 Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun ĠBinary Parser . read FunctionType (): ĠFunction Type Ġ{ ĊĠĠĠ Ġval Ġbyte Ġ= Ġread Byte () ĊĠĠĠ Ġif Ġ( byte Ġ!= ĠFUNCTION _ TYPE _ MAGIC ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow Exception (" Expected Ġ 0 x 6 0 Ġfor ĠFunction ĠType Ġ( integer Ġrepresentation Ġtoo Ġlong )", Ġ- 1 ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġparams Ġ= Ġread Vector Ġ{ Ġread ValueType () Ġ}. map Ġ{ ĠParam ( Identifier . Local ( null , Ġnull ), Ġit ) Ġ} ĊĠĠĠ Ġval Ġresults Ġ= Ġread Vector Ġ{ Ġread ValueType () Ġ}. map Ġ{ ĠResult ( it ) Ġ} ĊĠĠĠ Ġreturn ĠFunction Type ( params , Ġresults ) Ċ } Ċ