diff --git a/.gitignore b/.gitignore
index 0871ec3..15dc51f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -50,4 +50,4 @@ Thumbs.db
# Folder config file
Desktop.ini
-
+*.versionsBackup
\ No newline at end of file
diff --git a/frege-interpreter/pom.xml b/frege-interpreter/pom.xml
index fa801ca..362ed7b 100644
--- a/frege-interpreter/pom.xml
+++ b/frege-interpreter/pom.xml
@@ -1,13 +1,12 @@
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4.0.0
frege
frege-scripting
- 1.0-SNAPSHOT
- ../pom.xml
+ 1.0.0
frege-interpreter
jar
@@ -20,7 +19,6 @@
com.theoryinpractise.frege
frege-maven-plugin
- ${frege.plugin.version}
compile
@@ -33,7 +31,7 @@
true
true
- false
+ false
@@ -61,14 +59,13 @@
test
- org.eclipse.jdt.core.compiler
- ecj
- 4.2.2
+ org.eclipse.jdt.core.compiler
+ ecj
${project.groupId}
memory-javac
- 1.0-SNAPSHOT
+ ${project.version}
diff --git a/frege-interpreter/src/main/frege/frege/interpreter/FregeScriptCompiler.fr b/frege-interpreter/src/main/frege/frege/interpreter/FregeScriptCompiler.fr
index a7669e1..e018657 100644
--- a/frege-interpreter/src/main/frege/frege/interpreter/FregeScriptCompiler.fr
+++ b/frege-interpreter/src/main/frege/frege/interpreter/FregeScriptCompiler.fr
@@ -223,7 +223,7 @@ data MemoryJavaCompiler = native frege.memoryjavac.MemoryJavaCompiler where
native new :: ClassLoader -> MutableIO (JMap String ByteArr) -> IOMutable MemoryJavaCompiler
native compile :: MutableIO MemoryJavaCompiler -> String -> String -> IOMutable JavaCompilationInfo
native lastCompilation :: MutableIO MemoryJavaCompiler -> IOMutable JavaCompilationInfo
- native classLoader :: MutableIO MemoryJavaCompiler -> IO ClassLoader
+ native classLoader :: MutableIO MemoryJavaCompiler -> IO URLClassLoader
data JavaCompilationInfo = native frege.memoryjavac.CompilationInfo where
native isSuccess :: MutableIO JavaCompilationInfo -> IO Bool
@@ -266,9 +266,7 @@ compile src paths libpaths !ow !jw !compiler !predefs !moduleName !modulePrelude
let flags = Flags.fromList [IDE]
let steps = passes jw moduleName compiler
loader <- compiler.classLoader
- urlArr <- URLArray.new 0
- urlClassLoader <- URLClassLoader.new urlArr loader
- runcompiler src predefs paths flags "." libpaths "" ow urlClassLoader steps moduleName modulePrelude
+ runcompiler src predefs paths flags "." libpaths "" ow loader steps moduleName modulePrelude
isDefined :: [DefinitionT] -> Definition -> Bool
isDefined defs (_@TypDcl{name=x}) = isJust . find (matching x) $ defs
@@ -323,9 +321,6 @@ getSymbolType _ _ = ""
showSymbols :: Global -> [String]
showSymbols g = map (EU.label g) $ getSymbols g.thisTab
---existsVarSymbol name (s@(SymV {name=x})) | traceLn $ "SymV: " ++ name ++ x.base = x.base == name
---existsVarSymbol name (s@(SymL{name=x})) | traceLn $ "SymL: " ++ name ++ x.base = x.base == name
---existsVarSymbol _ _ | traceLn "Other type of symbol!" = false
existsVarSymbol name SymV{name=x} = x.base == name
existsVarSymbol name SymL{name=x} = x.base == name
existsVarSymbol _ _ = false
@@ -404,12 +399,12 @@ isVariable !g SymL{alias} = maybe false (isVariable g) $ alias.findit g
isVariable _ _ = false
isIO :: Global -> Symbol -> Bool
-isIO !g SymV{typ} = case (U.unAlias g $ RhoT.tau typ.rho) of
- TApp (TCon {name}) _ = name.nicer g == "IO"
- _ = false
+isIO g SymV{typ} = "ST RealWorld" `isPrefix` nice typ g where
+ isPrefix = isPrefixOf `on` toList
+ f `on` g = \x \y -> f (g x) (g y)
+isIO g SymL{alias} = maybe false (isIO g) $ alias.findit g
isIO _ _ = false
-
-isString !g SymV{typ} = case (U.unAlias g $ RhoT.tau typ.rho) of
- TCon {name} = name.nicer g == "String"
- _ = false
-isString _ _ = false
+
+isString g SymV{typ} = nice typ g == "StringJ Char"
+isString g SymL{alias} = maybe false (isString g) $ alias.findit g
+isString g _ = false
\ No newline at end of file
diff --git a/frege-script-engine/pom.xml b/frege-script-engine/pom.xml
index c18ec2e..6f0f015 100644
--- a/frege-script-engine/pom.xml
+++ b/frege-script-engine/pom.xml
@@ -1,12 +1,12 @@
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
4.0.0
frege
frege-scripting
- 1.0-SNAPSHOT
+ 1.0.0
frege-script-engine
frege-script-engine
@@ -32,7 +32,7 @@
true
true
- false
+ false
@@ -53,12 +53,11 @@
org.eclipse.jdt.core.compiler
ecj
- 3.7.2
${project.groupId}
frege-interpreter
- 1.0-SNAPSHOT
+ ${project.version}
diff --git a/frege-script-engine/src/main/frege/frege/scriptengine/FregeScriptEngine.fr b/frege-script-engine/src/main/frege/frege/scriptengine/FregeScriptEngine.fr
index a61854b..0c64a3c 100644
--- a/frege-script-engine/src/main/frege/frege/scriptengine/FregeScriptEngine.fr
+++ b/frege-script-engine/src/main/frege/frege/scriptengine/FregeScriptEngine.fr
@@ -1,5 +1,6 @@
module frege.scriptengine.FregeScriptEngine where
+import frege.compiler.Data (Symbol)
import frege.interpreter.FregeScriptCompiler
import frege.interpreter.FregeInterpreter
import frege.java.Net
@@ -19,13 +20,10 @@ data Bindings = mutable native javax.script.Bindings where
initScript = "import scripting.Setting"
-native curThread Thread.currentThread :: () -> IO Thread
-native curClassLoader getContextClassLoader :: Thread -> IO ClassLoader
-
initInterpreterState :: ScriptContext -> IO InterpreterState
initInterpreterState session = do
urlarr <- URLArray.new 0
- loader <- curThread () >>= curClassLoader >>= URLClassLoader.new urlarr
+ loader <- ClassLoader.current >>= URLClassLoader.new urlarr
classesMaybe <- session.getAttribute "classes" ScriptContext.engineScope
classes <- maybe (HashMap.new () :: IOMutable (JMap String ByteArr)) asClassesMap classesMaybe
strMaybe <- session.getAttribute "script" ScriptContext.engineScope
@@ -108,6 +106,9 @@ fetchVariableValue var g context = do
Nothing -> return $ Right Nothing
Just symbol -> fetchSymbolValue var symbol g context
+fetchSymbolValue var SymL{alias} g context =
+ maybe (return $ Right Nothing) f $ alias.findit g where
+ f s = fetchSymbolValue s.name.base s g context
fetchSymbolValue var symbol g context | isVariable g symbol = do
state <- Interpreter.get
bindingseither <- liftIO $ getBindings g.sub.loader
@@ -171,10 +172,4 @@ native asString "(java.lang.String)" :: Object -> IO String
native asURLClassLoader "(java.net.URLClassLoader)" :: Object -> IO URLClassLoader
native asBindingsMap "(java.util.Map)" :: Object -> IOMutable (JMap String Object)
-main _ = do
- context <- SimpleScriptContext.new ()
- res <- load "module t.Hello where {x = 4;}" context
- case res of
- Left errs -> println errs
- _ -> println "successful"
\ No newline at end of file
diff --git a/jfrege-script-engine/pom.xml b/jfrege-script-engine/pom.xml
index d9ae261..3197980 100644
--- a/jfrege-script-engine/pom.xml
+++ b/jfrege-script-engine/pom.xml
@@ -6,11 +6,10 @@
frege
frege-scripting
- 1.0-SNAPSHOT
+ 1.0.0
frege
jfrege-script-engine
- 1.0-SNAPSHOT
jfrege-script-engine
UTF-8
@@ -20,11 +19,20 @@
maven-assembly-plugin
2.2.1
-
-
- src/main/assembly/assembly.xml
-
-
+
+
+ distro-assembly
+ package
+
+ single
+
+
+
+ src/main/assembly/assembly.xml
+
+
+
+
diff --git a/jfrege-script-engine/src/main/java/frege/jscriptengine/JFregeScriptEngine.java b/jfrege-script-engine/src/main/java/frege/jscriptengine/JFregeScriptEngine.java
index 4fadca1..d557c8f 100644
--- a/jfrege-script-engine/src/main/java/frege/jscriptengine/JFregeScriptEngine.java
+++ b/jfrege-script-engine/src/main/java/frege/jscriptengine/JFregeScriptEngine.java
@@ -13,6 +13,7 @@
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
+import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.script.SimpleBindings;
@@ -21,6 +22,7 @@
import frege.prelude.PreludeBase.TList;
import frege.prelude.PreludeBase.TList.DCons;
import frege.prelude.PreludeBase.TMaybe;
+import frege.runtime.Delayed;
import frege.runtime.Lambda;
import frege.runtime.Lazy;
import frege.scriptengine.FregeScriptEngine;
@@ -63,7 +65,14 @@ public Object eval(final String script, final ScriptContext context)
final List errMsgs = toJavaList(errs);
throw new ScriptException(errMsgs.toString());
} else {
- return getRightMaybe(intpRes);
+ final Object evalRes = getRightMaybe(intpRes);
+ final Object result;
+ if (evalRes instanceof Delayed) {
+ result = ((Delayed) evalRes).result().forced();
+ } else {
+ result = evalRes;
+ }
+ return result;
}
}
@@ -206,11 +215,12 @@ public CompiledScript compile(final Reader reader) throws ScriptException {
@Override
public void put(final String key, final Object value) {
final String[] nameAndType = key.split("::");
- if (nameAndType.length == 0)
+ if (nameAndType.length < 2) {
+ super.put(key, value);
return;
+ }
final String name = nameAndType[0].trim();
- final String type = nameAndType.length > 1 ? nameAndType[1].trim()
- : "Object";
+ final String type = nameAndType[1].trim();
final String script = (String) context.getAttribute("script",
ScriptContext.ENGINE_SCOPE);
final String newScript = String.format(
@@ -221,5 +231,4 @@ public void put(final String key, final Object value) {
super.put(name, value);
}
-
}
\ No newline at end of file
diff --git a/memory-javac/pom.xml b/memory-javac/pom.xml
index b2e204f..8b17ee6 100644
--- a/memory-javac/pom.xml
+++ b/memory-javac/pom.xml
@@ -2,16 +2,14 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
4.0.0
- frege
- frege-scripting
- 1.0-SNAPSHOT
- ../pom.xml
+ frege
+ frege-scripting
+ 1.0.0
memory-javac
jar
-
-
+
@@ -66,9 +64,8 @@
${frege.plugin.version}
- org.eclipse.jdt.core.compiler
- ecj
- 4.2.2
+ org.eclipse.jdt.core.compiler
+ ecj
diff --git a/memory-javac/src/main/java/frege/memoryjavac/MemoryJavaCompiler.java b/memory-javac/src/main/java/frege/memoryjavac/MemoryJavaCompiler.java
index de738c9..d6860df 100644
--- a/memory-javac/src/main/java/frege/memoryjavac/MemoryJavaCompiler.java
+++ b/memory-javac/src/main/java/frege/memoryjavac/MemoryJavaCompiler.java
@@ -111,7 +111,7 @@ public CompilationInfo lastCompilation() {
return lastCompilation;
}
- public ClassLoader classLoader() {
+ public URLClassLoader classLoader() {
return classLoader;
}
diff --git a/pom.xml b/pom.xml
index e75c01f..efe9bcb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,10 +1,11 @@
-
+
4.0.0
frege
frege-scripting
pom
- 1.0-SNAPSHOT
+ 1.0.0
frege-scripting
https://github.com/Frege/frege-scripting
@@ -17,6 +18,7 @@
UTF-8
frege-3.21.232-g7b05453
1.0.5
+ 4.2.2
@@ -73,6 +75,11 @@
+
+ org.eclipse.jdt.core.compiler
+ ecj
+ ${ecj.version}
+