package Ġas mb le . cli Ċ Ċ import Ġas mb le . compile . jvm . java Ident Ċ import Ġas mb le . run . jvm . Module Ċ Ċ open Ġclass ĠInvoke Ġ: ĠScript Command < Invoke . Args >() Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġname Ġ= Ġ" invoke " ĊĠĠĠ Ġoverride Ġval Ġdesc Ġ= Ġ" Invoke ĠWeb Assembly Ġfunction " ĊĊĠĠĠ Ġoverride Ġfun Ġargs ( b ld : ĠCommand . Args Builder ) Ġ= ĠArgs ( ĊĠĠĠĠĠĠĠ Ġscript Args Ġ= Ġscript Args ( b ld ), ĊĠĠĠĠĠĠĠ Ġmodule Ġ= Ġb ld . arg ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" module ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopt Ġ= Ġ" mod ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdesc Ġ= Ġ" The Ġmodule Ġname Ġto Ġrun . ĠIf Ġit 's Ġa ĠJVM Ġclass , Ġit Ġmust Ġhave Ġa Ġno - arg Ġconstructor .", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Ġ= Ġ"< last - in - entry >" ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġexport Ġ= Ġb ld . arg ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" export ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdesc Ġ= Ġ" The Ġspecific Ġexport Ġfunction Ġto Ġinvoke .", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Ġ= Ġ"< start - func >" ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġargs Ġ= Ġb ld . args ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" arg ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdesc Ġ= Ġ" Parameter Ġfor Ġthe Ġexport Ġif Ġexport Ġis Ġpresent .", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġresult To Stdout Ġ= Ġb ld . flag ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopt Ġ= Ġ" res ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdesc Ġ= Ġ" If Ġthere Ġis Ġa Ġresult , Ġprint Ġit .", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlow Priority Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ). also Ġ{ Ġb ld . done () Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrun ( args : ĠArgs ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġctx Ġ= Ġprepare Context ( args . script Args ) ĊĠĠĠĠĠĠĠ Ġ// ĠInstantiate Ġthe Ġmodule ĊĠĠĠĠĠĠĠ Ġval Ġmodule Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args . module Ġ== Ġ"< last - in - entry >") Ġctx . modules . last OrNull () Ġ?: Ġerror (" No Ġmodules Ġavailable ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġctx . regist rations [ args . module ] Ġas ? ĠModule . Instance Ġ?: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Unable Ġto Ġfind Ġmodule Ġregistered Ġas Ġ${ args . module }") ĊĠĠĠĠĠĠĠ Ġmodule Ġas ĠModule . Compiled ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġan Ġexport Ġis Ġprovided , Ġcall Ġit ĊĠĠĠĠĠĠĠ Ġif Ġ( args . export Ġ!= Ġ"< start - func >") Ġargs . export . java Ident . let Ġ{ Ġjava Name Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġmodule . cls . declared Methods . find Ġ{ Ġit . name Ġ== Ġjava Name Ġ} Ġ?: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Unable Ġto Ġfind Ġexport Ġ'${ args . export }' ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMap Ġargs Ġto Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( method . parameter Types . size Ġ== Ġargs . args . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Given Ġarg Ġcount Ġof Ġ${ args . args . size } Ġis Ġinvalid Ġfor Ġ$ method " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmethod . parameter Types . with Index (). zip ( args . args ) Ġ{ Ġ( index , Ġparam Type ), Ġarg Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( param Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt :: class . java Ġ-> Ġarg . toInt OrNull () Ġ?: Ġerror (" Arg Ġ${ index Ġ+ Ġ 1 } Ġof Ġ'$ arg ' Ġnot Ġint ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLong :: class . java Ġ-> Ġarg . to Long OrNull () Ġ?: Ġerror (" Arg Ġ${ index Ġ+ Ġ 1 } Ġof Ġ'$ arg ' Ġnot Ġlong ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFloat :: class . java Ġ-> Ġarg . toFloat OrNull () Ġ?: Ġerror (" Arg Ġ${ index Ġ+ Ġ 1 } Ġof Ġ'$ arg ' Ġnot Ġfloat ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDouble :: class . java Ġ-> Ġarg . toDouble OrNull () Ġ?: Ġerror (" Arg Ġ${ index Ġ+ Ġ 1 } Ġof Ġ'$ arg ' Ġnot Ġdouble ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unrecognized Ġtype Ġfor Ġparam Ġ${ index Ġ+ Ġ 1 }: Ġ$ param Type ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmethod . invoke ( module . inst , Ġ* params . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args . result To Stdout Ġ&& Ġmethod . returnType Ġ!= ĠVoid . TYPE ) Ġprintln ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠArgs ( ĊĠĠĠĠĠĠĠ Ġval Ġscript Args : ĠScript Command . Script Args , ĊĠĠĠĠĠĠĠ Ġval Ġmodule : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġexport : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġargs : ĠList < String >, ĊĠĠĠĠĠĠĠ Ġval Ġresult To Stdout : ĠBoolean ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠInvoke () Ċ }