diff --git a/frege-interpreter-core/pom.xml b/frege-interpreter-core/pom.xml index fdae57f..8aeaaf2 100644 --- a/frege-interpreter-core/pom.xml +++ b/frege-interpreter-core/pom.xml @@ -6,7 +6,7 @@ frege frege-interpreter - 1.0.2-SNAPSHOT + 1.0.2 frege-interpreter-core jar diff --git a/frege-interpreter-core/src/main/frege/frege/interpreter/FregeInterpreter.fr b/frege-interpreter-core/src/main/frege/frege/interpreter/FregeInterpreter.fr index 5723c87..00f326d 100644 --- a/frege-interpreter-core/src/main/frege/frege/interpreter/FregeInterpreter.fr +++ b/frege-interpreter-core/src/main/frege/frege/interpreter/FregeInterpreter.fr @@ -8,6 +8,7 @@ import Compiler.Scanner hiding (main, is, interpret) import Compiler.Main(stdOptions, format, make, parsePass, postTrue, getOperators) import Compiler.GUtil as GUtil() +import frege.compiler.types.Flags as Compilerflags(Flag, Flags) import Lib.PP(TEXT) import Data.List import Data.Maybe @@ -102,7 +103,8 @@ standardOptions classLoader = do thisPos = Position.null, nsPos = Tree.empty, thisPack = Pack.new "", - errors = 0, + numErrors = 0, + resErrors = 0, messages = [], cancelled = return false, nextPass = 1, @@ -314,7 +316,7 @@ runpass (pass,description,post) = do postconditionHolds <- if state.errors == 0 then post else stio true unless (postconditionHolds) do doio (state.stderr.println "FATAL: post condition violated") - changeST Global.{sub <- SubSt.{errors <- (1+)}} + changeST Global.{sub <- SubSt.{numErrors <- (1+)}} stio () derive Show Severity @@ -628,7 +630,7 @@ showThrowableCause' depth t = maybe (showNative t) (showThrowableCause' (pred de -- Native Definitions data MemoryJavaCompiler = native frege.interpreter.javasupport.MemoryJavaCompiler where - native new :: Mutable s (JMap String ByteArr) -> STMutable s MemoryJavaCompiler + native new :: Mutable s (JMap String ByteArray) -> STMutable s MemoryJavaCompiler | Mutable s InterpreterClassLoader -> STMutable s MemoryJavaCompiler native compile :: Mutable s MemoryJavaCompiler -> String -> String -> STMutable s JavaCompilationInfo native classLoader :: Mutable s MemoryJavaCompiler -> STMutable s InterpreterClassLoader @@ -636,8 +638,8 @@ data MemoryJavaCompiler = native frege.interpreter.javasupport.MemoryJavaCompile data InterpreterClassLoader = native frege.interpreter.javasupport.InterpreterClassLoader where native new :: () -> STMutable s InterpreterClassLoader | ClassLoader -> IOMutable InterpreterClassLoader - | Mutable s (JMap String ByteArr) -> STMutable s InterpreterClassLoader - pure native classes :: InterpreterClassLoader -> JMap String ByteArr + | Mutable s (JMap String ByteArray) -> STMutable s InterpreterClassLoader + pure native classes :: InterpreterClassLoader -> JMap String ByteArray private defaultClassLoaderST = do loader <- InterpreterClassLoader.new () @@ -652,9 +654,13 @@ data JavaCompilationInfo = native frege.interpreter.javasupport.CompilationInfo native isSuccess :: Mutable s JavaCompilationInfo -> ST s Bool native errorsAsString :: Mutable s JavaCompilationInfo -> ST s String native classLoader :: MutableIO JavaCompilationInfo -> IO ClassLoader - native classes :: Mutable s JavaCompilationInfo -> STMutable s (JMap String ByteArr) + native classes :: Mutable s JavaCompilationInfo -> STMutable s (JMap String ByteArray) -data ByteArr = mutable native "byte[]" + +data Byte = pure native byte +derive ArrayElement Byte + +type ByteArray = JArray Byte data JMap k v = native java.util.Map where native put :: Mutable s (JMap k v) -> k -> v -> ST s () @@ -671,43 +677,12 @@ native fieldValue frege.interpreter.javasupport.JavaUtils.fieldValue :: String -> String -> InterpreterClassLoader -> ST s (Maybe a) native sandboxFieldValue frege.interpreter.javasupport.JavaUtils.sandboxFieldValue :: - String -> String -> InterpreterClassLoader -> ST s (Maybe a) + String -> String -> String -> StringWriter -> StringWriter -> InterpreterClassLoader -> IO (Maybe a) pure native longToString Long.toString :: Long -> Int -> String pure native showNative String.valueOf :: a -> String pure native throwableCause getCause :: Throwable -> Maybe Throwable - -data ObjectArr = native "java.lang.Object[]" where - --- make a new mutable Object array - native new "java.lang.Object[]" - :: Int -> STMutable s ObjectArr - native getAt "frege.runtime.Array.arrayGet" - :: Mutable s ObjectArr -> Int -> ST s (Maybe Object) - native setAt "frege.runtime.Array.arraySet" - :: Mutable s ObjectArr -> Int -> Object -> ST s () - pure native frozenGetAt "frege.runtime.Array.arrayGet" - :: ObjectArr -> Int -> Maybe Object - --- use this only if it is absolutely sure that there are no nulls in the array - pure native elemAt "frege.runtime.Array.arrayGet" - :: ObjectArr -> Int -> Object - --- the length of the array - pure native length "frege.runtime.Array.arrayLen" - :: ObjectArr -> Int - toList (a::ObjectArr) = elems a 0 - where - elems (a::ObjectArr) i - | i < a.length = case frozenGetAt a i of - Just s -> s:elems a (i+1) - Nothing -> elems a (i+1) - | otherwise = [] - - fromListST :: [Object] -> STMutable u ObjectArr - fromListST objects = (ObjectArr.new objects.length >>= loop 0 objects) where - loop j (x:xs) arr = do ObjectArr.setAt arr j x; loop (j+1) xs arr - loop j [] arr = return arr - fromList objects = ST.run (fromListST objects >>= readonly id) - data Method = pure native java.lang.reflect.Method where pure native getName :: Method -> String diff --git a/frege-interpreter-java-support/pom.xml b/frege-interpreter-java-support/pom.xml index a4863da..a2a0aa3 100644 --- a/frege-interpreter-java-support/pom.xml +++ b/frege-interpreter-java-support/pom.xml @@ -4,7 +4,7 @@ frege frege-interpreter - 1.0.2-SNAPSHOT + 1.0.2 frege-interpreter-java-support jar diff --git a/frege-interpreter-java-support/src/main/java/frege/interpreter/javasupport/JavaUtils.java b/frege-interpreter-java-support/src/main/java/frege/interpreter/javasupport/JavaUtils.java index a40335a..a4aca01 100644 --- a/frege-interpreter-java-support/src/main/java/frege/interpreter/javasupport/JavaUtils.java +++ b/frege-interpreter-java-support/src/main/java/frege/interpreter/javasupport/JavaUtils.java @@ -1,6 +1,13 @@ package frege.interpreter.javasupport; +import frege.runtime.Runtime; + +import java.io.BufferedReader; import java.io.FilePermission; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringReader; +import java.io.StringWriter; import java.lang.reflect.Field; import java.security.Permission; import java.util.Map; @@ -24,15 +31,28 @@ public static Object fieldValue(final String className, public static Object sandboxFieldValue(final String className, final String variableName, + final String stdinStr, + final StringWriter outWriter, + final StringWriter errWriter, final InterpreterClassLoader loader) { return sandbox(new FutureTask<>(new Callable() { @Override public Object call() throws Exception { + prepareRuntime(stdinStr, outWriter, errWriter); return fieldValue(className, variableName, loader); } }), 5, TimeUnit.SECONDS); } + private static void prepareRuntime(final String stdinStr, final StringWriter outWriter, final StringWriter errWriter) { + final BufferedReader stdin = new BufferedReader(new StringReader(stdinStr + "\n")); + final PrintWriter stdout = new PrintWriter(outWriter); + final PrintWriter stderr = new PrintWriter(errWriter); + Runtime.stdin.set(stdin); + Runtime.stdout.set(stdout); + Runtime.stderr.set(stderr); + } + public static V sandbox(final FutureTask task, final long timeout, final TimeUnit unit diff --git a/frege-script-engine/pom.xml b/frege-script-engine/pom.xml index 9850b9c..f3ade00 100644 --- a/frege-script-engine/pom.xml +++ b/frege-script-engine/pom.xml @@ -6,7 +6,7 @@ frege frege-interpreter - 1.0.2-SNAPSHOT + 1.0.2 frege frege-script-engine diff --git a/pom.xml b/pom.xml index 250400a..9bf054a 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ frege frege-interpreter pom - 1.0.2-SNAPSHOT + 1.0.2 frege-interpreter https://github.com/Frege/frege-interpreter @@ -15,7 +15,7 @@ UTF-8 - 3.21.402-g0b89544 + 3.21.440-gd7ba043 1.0.5 4.2.2