/******************************************************************************* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 3 ĠLua J . Ġ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 . script Ċ Ċ import Ġorg . lu aj . vm 2 . Globals Ċ import Ġorg . lu aj . vm 2 . lib . j se . J se Platform Ċ import Ġjava . io .* Ċ import Ġjavax . script . Script Context Ċ import Ġjavax . script . Simple Script Context Ċ Ċ /** Ċ Ġ* ĠContext Ġfor ĠLua Script Engine Ġexecution Ġwhich Ġmaintains Ġits Ġown ĠGlobals , Ċ Ġ* Ġand Ġmanages Ġthe Ġinput Ġand Ġoutput Ġred irection . Ċ Ġ*/ Ċ class ĠLu aj Context Ċ /** ĠConstruct Ġa ĠLu aj Context Ġwith Ġits Ġown Ġglobals , Ġwhich Ċ Ġ* Ġwhich Ġoptionally Ġare Ġdebug Ġglobals , Ġand Ġoptionally Ġuse Ġthe Ċ Ġ* Ġlu aj c Ġdirect Ġlua Ġto Ġjava Ġbytecode Ġcompiler . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠIf Ġcreate Debug Globals Ġis Ġset , Ġthe Ġglobals Ċ Ġ* Ġcreated Ġwill Ġbe Ġa Ġdebug Ġglobals Ġthat Ġincludes Ġthe Ġdebug Ċ Ġ* Ġlibrary . Ġ ĠThis Ġmay Ġprovide Ġbetter Ġstack Ġtraces , Ġbut Ġmay Ċ Ġ* Ġhave Ġnegative Ġimpact Ġon Ġperformance . Ċ Ġ* Ġ@ param Ġcreate Debug Globals Ġtrue Ġto Ġcreate Ġdebug Ġglobals , Ċ Ġ* Ġfalse Ġfor Ġstandard Ġglobals . Ċ Ġ* Ġ@ param Ġuse Lua JC Compiler Ġtrue Ġto Ġuse Ġthe Ġlu aj c Ġcompiler , Ċ Ġ* Ġreq wu ires Ġb cel Ġto Ġbe Ġon Ġthe Ġclass Ġpath . Ċ Ġ*/ Ċ @ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġcreate Debug Globals : ĠBoolean Ġ= Ġ" true " Ġ== ĠSystem . getProperty (" org . lu aj . debug "), ĊĠĠĠ Ġuse Lua JC Compiler : ĠBoolean Ġ= Ġ" true " Ġ== ĠSystem . getProperty (" org . lu aj . lu aj c ") Ċ ) Ġ: ĠSimple Script Context (), ĠScript Context Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( use Lua JC Compiler ) Ġthrow ĠRuntimeException (" Can 't Ġuse Ġuse Lua JC Compiler ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠGlobals Ġfor Ġthis Ġcontext Ġinstance . Ġ Ġ*/ ĊĠĠĠ Ġ@ kotlin . jvm . Jvm Field ĊĠĠĠ Ġval Ġglobals : ĠGlobals Ġ= Ġif Ġ( create Debug Globals ) ĠJ se Platform . debug Globals () Ġelse ĠJ se Platform . standard Globals () ĊĊĠĠĠ Ġ/** ĠThe Ġinitial Ġvalue Ġof Ġglobals . STD IN Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġstdin : ĠInputStream Ġ= Ġglobals . STD IN ĊĠĠĠ Ġ/** ĠThe Ġinitial Ġvalue Ġof Ġglobals . STDOUT Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġstdout : ĠPrint Stream Ġ= Ġglobals . STDOUT ĊĠĠĠ Ġ/** ĠThe Ġinitial Ġvalue Ġof Ġglobals . STD ERR Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġstderr : ĠPrint Stream Ġ= Ġglobals . STD ERR ĊĊĠĠĠ Ġoverride Ġfun ĠsetError Writer ( writer : ĠWriter ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġglobals . STD ERR Ġ= Ġif Ġ( writer Ġ!= Ġnull ) ĠPrint Stream ( Writer OutputStream ( writer )) Ġelse Ġstderr ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Reader ( reader : ĠReader ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġglobals . STD IN Ġ= Ġ( reader ?. let Ġ{ ĠReader InputStream ( it ) Ġ} Ġ?: Ġstdin ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Writer ( writer : ĠWriter ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġglobals . STDOUT Ġ= Ġif Ġ( writer Ġ!= Ġnull ) ĠPrint Stream ( Writer OutputStream ( writer ), Ġtrue ) Ġelse Ġstdout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠWriter OutputStream ( val Ġw : ĠWriter ) Ġ: ĠOutputStream () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwrite ( b : ĠInt ) Ġ= Ġw . write ( String ( byte ArrayOf ( b . to Byte ()))) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwrite ( b : ĠByteArray , Ġo : ĠInt , Ġl : ĠInt ) Ġ= Ġw . write ( String ( b , Ġo , Ġl )) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġwrite ( b : ĠByteArray ) Ġ= Ġw . write ( String ( b )) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclose () Ġ= Ġw . close () ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġflush () Ġ= Ġw . flush () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠReader InputStream ( val Ġr : ĠReader ) Ġ: ĠInputStream () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġread (): ĠInt Ġ= Ġr . read () ĊĠĠĠ Ġ} Ċ } Ċ /** ĠConstruct Ġa ĠLu aj Context Ġwith Ġits Ġown Ġglobals Ġwhich Ġmay Ċ Ġ* Ġbe Ġdebug Ġglobals Ġdepending Ġon Ġthe Ġvalue Ġof Ġthe Ġsystem Ċ Ġ* Ġproperty Ġ' org . lu aj . debug ' Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠIf Ġthe Ġsystem Ġproperty Ġ' org . lu aj . debug ' Ġis Ġset , Ġthe Ġglobals Ċ Ġ* Ġcreated Ġwill Ġbe Ġa Ġdebug Ġglobals Ġthat Ġincludes Ġthe Ġdebug Ċ Ġ* Ġlibrary . Ġ ĠThis Ġmay Ġprovide Ġbetter Ġstack Ġtraces , Ġbut Ġmay Ċ Ġ* Ġhave Ġnegative Ġimpact Ġon Ġperformance . Ċ Ġ*/ Ċ