/* Ċ Ġ* Ġ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 . text . module Ċ Ċ import Ġkw asm . ast . Identifier Ċ import Ġkw asm . ast . module . Start Function Ċ import Ġkw asm . format . parse Check Ċ import Ġkw asm . format . text . Parse Result Ċ import Ġkw asm . format . text . Text Module Counts Ċ import Ġkw asm . format . text . context At Ċ import Ġkw asm . format . text . is Closed Paren Ċ import Ġkw asm . format . text . is Keyword Ċ import Ġkw asm . format . text . isOpen Paren Ċ import Ġkw asm . format . text . token . Token Ċ Ċ /** Ċ Ġ* ĠParses Ġa Ġ[ Start Function ] Ġfrom Ġthe Ġreceiving Ġ[ List ] Ġof Ġ[ Token ] s . Ċ Ġ* Ċ Ġ* ĠFrom Ġ[ the Ġdocs ]( https :// web assembly . github . io / spec / core / text / modules . html # start - function ): Ċ Ġ* Ċ Ġ* ĠA Ġstart Ġfunction Ġis Ġdefined Ġin Ġterms Ġof Ġits Ġindex . Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* ĠĠ Ġstart _ I Ġ::= ĠâĢĺ ( âĢĻ ĠâĢĺ start âĢĻ Ġx : func idx _ I ĠâĢĺ ) âĢĻ Ġ=> Ġ{ func Ġx } Ċ Ġ* Ġ``` Ċ Ġ*/ Ċ fun ĠList < Token >. parse Start Function ( ĊĠĠĠ Ġfrom Index : ĠInt , ĊĠĠĠ Ġcounts : ĠText Module Counts , Ċ ): ĠPair < Parse Result < Start Function >, ĠText Module Counts >? Ġ{ ĊĠĠĠ Ġvar ĠcurrentIndex Ġ= Ġfrom Index ĊĠĠĠ Ġif Ġ(! isOpen Paren ( from Index )) Ġreturn Ġnull ĊĠĠĠ ĠcurrentIndex ++ ĊĊĠĠĠ Ġif Ġ( get OrNull ( currentIndex )?. is Keyword (" start ") Ġ!= Ġtrue ) Ġreturn Ġnull ĊĠĠĠ ĠcurrentIndex ++ ĊĊĠĠĠ Ġval Ġfunc Index Ġ= Ġparse Index < Identifier . Function >( currentIndex ) ĊĠĠĠ ĠcurrentIndex Ġ+= Ġfunc Index . parse Length ĊĊĠĠĠ Ġparse Check ( context At ( currentIndex ), Ġis Closed Paren ( currentIndex ), Ġ" Expected Ġ')' ") ĊĠĠĠ ĠcurrentIndex ++ ĊĊĠĠĠ Ġreturn ĠParse Result ( ĊĠĠĠĠĠĠĠ ĠStart Function ( func Index . ast Node ), ĊĠĠĠĠĠĠĠ ĠcurrentIndex Ġ- Ġfrom Index ĊĠĠĠ Ġ) Ġto Ġcounts Ċ } Ċ