From 2d97934cddb8c4583c7ba2d23d93fdb00f60cb61 Mon Sep 17 00:00:00 2001 From: mmhelloworld Date: Sun, 6 Oct 2013 01:40:46 -0400 Subject: [PATCH] Upgrade, Fix Frege/frege-repl#2 --- .gitignore | 2 +- frege-interpreter/pom.xml | 17 ++++++------- .../frege/interpreter/FregeScriptCompiler.fr | 25 ++++++++----------- frege-script-engine/pom.xml | 11 ++++---- .../frege/scriptengine/FregeScriptEngine.fr | 15 ++++------- jfrege-script-engine/pom.xml | 22 ++++++++++------ .../jscriptengine/JFregeScriptEngine.java | 19 ++++++++++---- memory-javac/pom.xml | 15 +++++------ .../frege/memoryjavac/MemoryJavaCompiler.java | 2 +- pom.xml | 11 ++++++-- 10 files changed, 73 insertions(+), 66 deletions(-) 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} +