package Ġme . mat t co . ree va Ċ Ċ import Ġme . mat t co . ree va . core . Agent Ċ import Ġme . mat t co . ree va . core . ExecutionContext Ċ import Ġme . mat t co . ree va . core . Realm Ċ import Ġme . mat t co . ree va . core . modules . resolver . Default Module Resolver Ċ import Ġme . mat t co . ree va . core . modules . resolver . Module Resolver Ċ import Ġme . mat t co . ree va . core . tasks . Evaluation Task Ċ import Ġme . mat t co . ree va . runtime . JS Value Ċ import Ġjava . io . File Ċ Ċ object ĠRe ev a Ġ{ ĊĠĠĠ Ġval ĠPRINT _ PARSE _ NODES Ġ= ĠSystem . getProperty (" ree va . debug Parse Nodes ") ?. to Boolean () Ġ?: Ġfalse ĊĠĠĠ Ġvar ĠE MIT _ CLASS _ FILES Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġinternal Ġset ĊĠĠĠ Ġval ĠCLASS _ FILE _ DIRECTORY Ġ= ĠFile ("./ demo / out /") ĊĠĠĠ Ġconst Ġval ĠUSE _ COMPILER Ġ= Ġfalse ĊĊĠĠĠ Ġ// ĠUsed Ġto Ġensure Ġnames Ġof Ġvarious Ġthings Ġare Ġunique ĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġprivate Ġvar Ġunique Id Ġ= Ġ 0 ĊĊĠĠĠ Ġinternal Ġfun Ġnext Id () Ġ= Ġunique Id ++ ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ ĠRealm . setup Symbols () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġget Agent () Ġ= ĠAgent . active Agent ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġmake Realm ( module Resolver : ĠModule Resolver ? Ġ= Ġnull ) Ġ= ĠRealm ( module Resolver ) ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġevaluate Script ( script : ĠFile , Ġrealm : ĠRealm Ġ= Ġmake Realm ()): ĠResult Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Agent (). run Task ( Evaluation Task ( script . read Text (), Ġrealm , Ġfalse )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġevaluate Script ( script : ĠString , Ġrealm : ĠRealm Ġ= Ġmake Realm ()): ĠResult Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Agent (). run Task ( Evaluation Task ( script , Ġrealm , Ġfalse )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġevaluate Module ( module : ĠFile , Ġrealm : ĠRealm Ġ= Ġmake Realm ()): ĠResult Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( realm . module Resolver Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm . module Resolver Ġ= ĠDefault Module Resolver ( realm , Ġmodule . parent File ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġget Agent (). run Task ( Evaluation Task ( module . read Text (), Ġrealm , Ġtrue )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġevaluate Module ( module : ĠString , Ġrealm : ĠRealm Ġ= Ġmake Realm ()): ĠResult Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( realm . module Resolver Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Re ev a Ġcannot Ġevaluate Ġtext Ġas Ġa Ġmodule Ġwith Ġa Ġrealm Ġthat Ġdoes Ġnot Ġhave Ġa ĠModule Resolver .") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġget Agent (). run Task ( Evaluation Task ( module , Ġrealm , Ġtrue )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġevaluate Module ( module : ĠString , Ġmodule Resolver : ĠModule Resolver ): ĠResult Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrealm Ġ= Ġmake Realm ( module Resolver ) ĊĠĠĠĠĠĠĠ Ġreturn Ġget Agent (). run Task ( Evaluation Task ( module , Ġrealm , Ġtrue )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġfun Ġteardown () Ġ{ ĊĠĠĠĠĠĠĠ ĠAgent . active Agent List . forEach ( Agent :: teardown ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġwith ( realm : ĠRealm Ġ= Ġmake Realm (), Ġblock : Ġ() Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠExecutionContext ( realm , Ġnull ) ĊĠĠĠĠĠĠĠ ĠAgent . push Context ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġblock () ĊĠĠĠĠĠĠĠ ĠAgent . pop Context () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠResult ( val Ġvalue : ĠJS Value , Ġval Ġis Error : ĠBoolean ) Ċ } Ċ