Skip to content

Commit 3a255fb

Browse files
committed
Script engine : implement eval(reader)
1 parent 38272aa commit 3a255fb

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed

compiler/src/dotty/tools/repl/ScriptEngine.scala

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package dotty.tools
22
package repl
33

4-
import java.io.Reader
4+
import java.io.{Reader, StringWriter}
55
import javax.script.{AbstractScriptEngine, Bindings, ScriptContext, ScriptEngine => JScriptEngine, ScriptEngineFactory, ScriptException, SimpleBindings}
66
import dotc.core.StdNames.str
77

@@ -44,7 +44,20 @@ class ScriptEngine extends AbstractScriptEngine {
4444
}
4545

4646
@throws[ScriptException]
47-
def eval(reader: Reader, context: ScriptContext): Object = throw new UnsupportedOperationException
47+
def eval(reader: Reader, context: ScriptContext): Object = eval(stringFromReader(reader), context)
48+
49+
private val buffer = new Array[Char](8192)
50+
51+
def stringFromReader(in: Reader) = {
52+
val out = new StringWriter
53+
var n = in.read(buffer)
54+
while (n > -1) {
55+
out.write(buffer, 0, n)
56+
n = in.read(buffer)
57+
}
58+
in.close
59+
out.toString
60+
}
4861
}
4962

5063
object ScriptEngine {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
42
22
42
3+
42

tests/run-with-compiler/scripting.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@ object Test {
44
val e = m.getEngineByName("scala")
55
println(e.eval("42"))
66
println(e.eval("Some(42)").asInstanceOf[Option[Int]].get)
7+
println(e.eval(new java.io.StringReader("42")))
78
}
89
}

0 commit comments

Comments
 (0)