/******************************************************************************* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 0 9 ĠLu aj . org . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġorg . lu aj . vm 2 . compiler Ċ Ċ import Ġorg . lu aj . vm 2 .* Ċ import Ġorg . lu aj . vm 2 . internal .* Ċ import Ġorg . lu aj . vm 2 . io .* Ċ Ċ /** ĠClass Ġto Ġdump Ġa Ġ[ Prototype ] Ġinto Ġan Ġoutput Ġstream , Ġas Ġpart Ġof Ġcompiling . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠGener ally , Ġthis Ġclass Ġis Ġnot Ġused Ġdirectly , Ġbut Ġrather Ġindirect ly Ġvia Ġa Ġcommand Ċ Ġ* Ġline Ġinterface Ġtool Ġsuch Ġas Ġ[ lu ac ]. Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠA Ġlua Ġbinary Ġfile Ġis Ġcreated Ġvia Ġ[ Dump State . dump ]: Ċ Ġ* Ġ< pre > Ġ` Globals Ġglobals Ġ= ĠJ se Platform . standard Globals (); Ċ Ġ* ĠProt otype Ġp Ġ= Ġglobals . compile Prototype ( new ĠString Reader (" print (' hello , Ġworld ') "), Ġ" main . lua "); Ċ Ġ* ĠByteArrayOutputStream Ġo Ġ= Ġnew ĠByteArrayOutputStream (); Ċ Ġ* ĠDump State . dump ( p , Ġo , Ġfalse ); Ċ Ġ* Ġbyte [] Ġlua _ binary _ file _ bytes Ġ= Ġo . toByteArray (); Ċ ` Ġ* Ġ Ġ</ pre > Ċ Ġ* Ċ Ġ* ĠThe Ġ[ Load State ] Ġmay Ġbe Ġused Ġdirectly Ġto Ġund ump Ġthese Ġbytes : Ċ Ġ* Ġ< pre > Ġ` Prototype p Ġ= ĠLoad State . instance . und ump ( new ĠByteArrayInputStream ( lua _ binary _ file _ bytes ), Ġ" main . lua "); Ċ Ġ* ĠLua Closure Ġc Ġ= Ġnew ĠLua Closure ( p , Ġglobals ); Ċ Ġ* Ġc . call (); Ċ ` Ġ* Ġ Ġ</ pre > Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠMore Ġcommonly , Ġthe Ġ[ Globals . und ump er ] Ġmay Ġbe Ġused Ġto Ġund ump Ġthem : Ċ Ġ* Ġ< pre > Ġ` Prototype Ġp Ġ= Ġglobals . load Prototype ( new ĠByteArrayInputStream ( lua _ binary _ file _ bytes ), Ġ" main . lua ", Ġ" b "); Ċ Ġ* ĠLua Closure Ġc Ġ= Ġnew ĠLua Closure ( p , Ġglobals ); Ċ Ġ* Ġc . call (); Ċ ` Ġ* Ġ Ġ</ pre > Ċ Ġ* Ċ Ġ* Ġ@ see Ġlu ac Ċ Ġ* Ċ Ġ* Ġ@ see ĠLoad State Ċ Ġ* Ċ Ġ* Ġ@ see ĠGlobals Ċ Ġ* Ċ Ġ* Ġ@ see ĠProt otype Ċ Ġ*/ Ċ class ĠDump State ( w : ĠLua Bin Output , Ġinternal Ġvar Ġstrip : ĠBoolean ) Ġ{ ĊĊĠĠĠ Ġ// Ġheader Ġfields ĊĠĠĠ Ġprivate Ġvar ĠIS _ LIT TLE _ ENDIAN Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar ĠNUMBER _ FORMAT Ġ= ĠNUMBER _ FORMAT _ DEFAULT ĊĠĠĠ Ġprivate Ġvar ĠSIZE OF _ LUA _ NUMBER Ġ= Ġ 8 ĊĊĠĠĠ Ġinternal Ġvar Ġwriter : ĠLua Bin Output Ġ= Ġw ĊĠĠĠ Ġinternal Ġvar Ġstatus : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġinternal Ġfun Ġdump Block ( b : ĠByteArray , Ġsize : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwriter . write ( b , Ġ 0 , Ġsize ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġdump Char ( b : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwriter . write ( b ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinternal Ġfun Ġdump Int ( x : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( IS _ LIT TLE _ ENDIAN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write Byte ( x Ġand Ġ 0 xff ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write Byte ( x Ġshr Ġ 8 Ġand Ġ 0 xff ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write Byte ( x Ġshr Ġ 1 6 Ġand Ġ 0 xff ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write Byte ( x Ġshr Ġ 2 4 Ġand Ġ 0 xff ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . writeInt ( x ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinternal Ġfun Ġdump String ( s : ĠLua String ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlen Ġ= Ġs . len (). to int () ĊĠĠĠĠĠĠĠ Ġdump Int ( len Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġs . write ( writer , Ġ 0 , Ġlen ) ĊĠĠĠĠĠĠĠ Ġwriter . write ( 0 ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinternal Ġfun Ġdump Double ( d : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġl Ġ= Ġ( d ). to Raw Bits () ĊĠĠĠĠĠĠĠ Ġif Ġ( IS _ LIT TLE _ ENDIAN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdump Int ( l . toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdump Int (( l Ġshr Ġ 3 2 ). toInt ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write Long ( l ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinternal Ġfun Ġdump Code ( f : ĠProt otype ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġf . code ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġcode . size ĊĠĠĠĠĠĠĠ Ġdump Int ( n ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdump Int ( code [ i ]) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinternal Ġfun Ġdump Constants ( f : ĠProt otype ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġk Ġ= Ġf . k ĊĠĠĠĠĠĠĠ Ġvar Ġi : ĠInt ĊĠĠĠĠĠĠĠ Ġvar Ġn Ġ= Ġk . size ĊĠĠĠĠĠĠĠ Ġdump Int ( n ) ĊĠĠĠĠĠĠĠ Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġo Ġ= Ġk [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( o . type ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLua Value . T NIL Ġ-> Ġwriter . write ( Lua Value . T NIL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLua Value . T BOOLEAN Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write ( Lua Value . T BOOLEAN ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdump Char ( if Ġ( o . to boolean ()) Ġ 1 Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLua Value . T NUMBER Ġ-> Ġwhen Ġ( NUMBER _ FORMAT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNUMBER _ FORMAT _ FLOAT S _ OR _ DOUBLE S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write ( Lua Value . T NUMBER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdump Double ( o . todo uble ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNUMBER _ FORMAT _ INT S _ ONLY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! ALLOW _ INTEGER _ CAST ING Ġ&& Ġ! o . is int ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" not Ġan Ġinteger : Ġ$ o ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write ( Lua Value . T NUMBER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdump Int ( o . to int ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNUMBER _ FORMAT _ NUM _ PATCH _ INT 3 2 Ġ-> Ġif Ġ( o . is int ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write ( Lua Value . T INT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdump Int ( o . to int ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write ( Lua Value . T NUMBER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdump Double ( o . todo uble ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" number Ġformat Ġnot Ġsupported : Ġ$ NUMBER _ FORMAT ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLua Value . T STRING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write ( Lua Value . T STRING ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdump String ( o Ġas ĠLua String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" bad Ġtype Ġfor Ġ$ o ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġn Ġ= Ġf . p . size ĊĠĠĠĠĠĠĠ Ġdump Int ( n ) ĊĠĠĠĠĠĠĠ Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdump Function ( f . p [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinternal Ġfun Ġdump Up values ( f : ĠProt otype ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġf . up values . size ĊĠĠĠĠĠĠĠ Ġdump Int ( n ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write Byte ( if Ġ( f . up values [ i ]. inst ack ) Ġ 1 Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write Byte ( f . up values [ i ]. idx . toInt ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinternal Ġfun Ġdump Debug ( f : ĠProt otype ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( strip ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdump Int ( 0 ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdump String ( f . source ) ĊĠĠĠĠĠĠĠ Ġvar Ġn Ġ= Ġif Ġ( strip ) Ġ 0 Ġelse Ġf . line info . size ĊĠĠĠĠĠĠĠ Ġdump Int ( n ) ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdump Int ( f . line info [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġn Ġ= Ġif Ġ( strip ) Ġ 0 Ġelse Ġf . loc vars . size ĊĠĠĠĠĠĠĠ Ġdump Int ( n ) ĊĠĠĠĠĠĠĠ Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl vi Ġ= Ġf . loc vars [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdump String ( l vi . varname ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdump Int ( l vi . star tp c ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdump Int ( l vi . end pc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġn Ġ= Ġif Ġ( strip ) Ġ 0 Ġelse Ġf . up values . size ĊĠĠĠĠĠĠĠ Ġdump Int ( n ) ĊĠĠĠĠĠĠĠ Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdump String ( f . up values [ i ]. name !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinternal Ġfun Ġdump Function ( f : ĠProt otype ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdump Int ( f . line defined ) ĊĠĠĠĠĠĠĠ Ġdump Int ( f . last line defined ) ĊĠĠĠĠĠĠĠ Ġdump Char ( f . nump ar ams ) ĊĠĠĠĠĠĠĠ Ġdump Char ( f . is _ var arg ) ĊĠĠĠĠĠĠĠ Ġdump Char ( f . max stack size ) ĊĠĠĠĠĠĠĠ Ġdump Code ( f ) ĊĠĠĠĠĠĠĠ Ġdump Constants ( f ) ĊĠĠĠĠĠĠĠ Ġdump Up values ( f ) ĊĠĠĠĠĠĠĠ Ġdump Debug ( f ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġinternal Ġfun Ġdump Header () Ġ{ ĊĠĠĠĠĠĠĠ Ġwriter . write ( Load State . LUA _ SIGNATURE ) ĊĠĠĠĠĠĠĠ Ġwriter . write ( Load State . LU AC _ VERSION ) ĊĠĠĠĠĠĠĠ Ġwriter . write ( Load State . LU AC _ FORMAT ) ĊĠĠĠĠĠĠĠ Ġwriter . write ( if Ġ( IS _ LIT TLE _ ENDIAN ) Ġ 1 Ġelse Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġwriter . write ( SIZE OF _ INT ) ĊĠĠĠĠĠĠĠ Ġwriter . write ( SIZE OF _ SIZ ET ) ĊĠĠĠĠĠĠĠ Ġwriter . write ( SIZE OF _ INSTR UCTION ) ĊĠĠĠĠĠĠĠ Ġwriter . write ( SIZE OF _ LUA _ NUMBER ) ĊĠĠĠĠĠĠĠ Ġwriter . write ( NUMBER _ FORMAT ) ĊĠĠĠĠĠĠĠ Ġwriter . write ( Load State . LU AC _ TAIL ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** Ġset Ġtrue Ġto Ġallow Ġinteger Ġcompilation Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ kotlin . jvm . Jvm Field ĊĠĠĠĠĠĠĠ Ġvar ĠALLOW _ INTEGER _ CAST ING Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ/** Ġformat Ġcorresponding Ġto Ġnon - number - patched Ġlua , Ġall Ġnumbers Ġare Ġfloats Ġor Ġdouble s Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ kotlin . jvm . Jvm Field ĊĠĠĠĠĠĠĠ Ġval ĠNUMBER _ FORMAT _ FLOAT S _ OR _ DOUBLE S Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ/** Ġformat Ġcorresponding Ġto Ġnon - number - patched Ġlua , Ġall Ġnumbers Ġare Ġints Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ kotlin . jvm . Jvm Field ĊĠĠĠĠĠĠĠ Ġval ĠNUMBER _ FORMAT _ INT S _ ONLY Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġ/** Ġformat Ġcorresponding Ġto Ġnumber - patched Ġlua , Ġall Ġnumbers Ġare Ġ 3 2 - bit Ġ( 4 Ġbyte ) Ġints Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ kotlin . jvm . Jvm Field ĊĠĠĠĠĠĠĠ Ġval ĠNUMBER _ FORMAT _ NUM _ PATCH _ INT 3 2 Ġ= Ġ 4 ĊĊĠĠĠĠĠĠĠ Ġ/** Ġdefault Ġnumber Ġformat Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ kotlin . jvm . Jvm Field ĊĠĠĠĠĠĠĠ Ġval ĠNUMBER _ FORMAT _ DEFAULT Ġ= ĠNUMBER _ FORMAT _ FLOAT S _ OR _ DOUBLE S ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSIZE OF _ INT Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSIZE OF _ SIZ ET Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSIZE OF _ INSTR UCTION Ġ= Ġ 4 ĊĊĠĠĠĠĠĠĠ Ġ/* Ċ ĉ ** Ġdump ĠLua Ġfunction Ġas Ġpre compiled Ġchunk Ċ ĉ */ ĊĊĊĠĠĠĠĠĠĠ Ġfun Ġdump ( f : ĠProt otype , Ġw : ĠLua Bin Output , Ġstrip : ĠBoolean ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠD Ġ= ĠDump State ( w , Ġstrip ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD . dump Header () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD . dump Function ( f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠD . status ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġf Ġthe Ġfunction Ġto Ġdump ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġw Ġthe Ġoutput Ġstream Ġto Ġdump Ġto ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġstrip Debug Ġtrue Ġto Ġstrip Ġdebugging Ġinfo , Ġfalse Ġotherwise ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġnumber Format Ġone Ġof ĠNUMBER _ FORMAT _ FLOAT S _ OR _ DOUBLE S , ĠNUMBER _ FORMAT _ INT S _ ONLY , ĠNUMBER _ FORMAT _ NUM _ PATCH _ INT 3 2 ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġlittle endian Ġtrue Ġto Ġuse Ġlittle Ġendian Ġfor Ġnumbers , Ġfalse Ġfor Ġbig Ġendian ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġ 0 Ġif Ġdump Ġsucceeds ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ com . so y wiz . lu ak . compat . java . Throws ĠIOException ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ com . so y wiz . lu ak . compat . java . Throws ĠIllegalArgumentException Ġif Ġthe Ġnumber Ġformat Ġit Ġnot Ġsupported ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĊĊĠĠĠĠĠĠĠ Ġfun Ġdump ( f : ĠProt otype , Ġw : ĠLua Bin Output , Ġstrip Debug : ĠBoolean , Ġnumber Format : ĠInt , Ġlittle endian : ĠBoolean ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( number Format ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNUMBER _ FORMAT _ FLOAT S _ OR _ DOUBLE S , ĠNUMBER _ FORMAT _ INT S _ ONLY , ĠNUMBER _ FORMAT _ NUM _ PATCH _ INT 3 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" number Ġformat Ġnot Ġsupported : Ġ$ number Format ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠD Ġ= ĠDump State ( w , Ġstrip Debug ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD . IS _ LIT TLE _ ENDIAN Ġ= Ġlittle endian ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD . NUMBER _ FORMAT Ġ= Ġnumber Format ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD . SIZE OF _ LUA _ NUMBER Ġ= Ġif Ġ( number Format Ġ== ĠNUMBER _ FORMAT _ INT S _ ONLY ) Ġ 4 Ġelse Ġ 8 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD . dump Header () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD . dump Function ( f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠD . status ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ