Skip to content

Commit

Permalink
Make the interpreter a class instead of an object
Browse files Browse the repository at this point in the history
  • Loading branch information
jasonmay committed Feb 5, 2013
1 parent 4b3fd6b commit 17532f6
Show file tree
Hide file tree
Showing 18 changed files with 69 additions and 64 deletions.
15 changes: 8 additions & 7 deletions src/main/scala/org/moe/Moe.scala
Expand Up @@ -61,6 +61,7 @@ object Moe {
return
}

val interpreter = new Interpreter()
val runtime = new MoeRuntime()

if (cmd.hasOption("v")) {
Expand All @@ -72,13 +73,13 @@ object Moe {

if (cmd.hasOption("e")) {
val code: String = cmd.getOptionValue("e")
REPL.evalLine(runtime, code, dumpAST)
REPL.evalLine(interpreter, runtime, code, dumpAST)
return
}
else {
val rest: Array[String] = cmd.getArgs()
if (rest.length == 0) {
REPL.enter(runtime, dumpAST)
REPL.enter(interpreter, runtime, dumpAST)
} else {
// TODO: invocation arguments
val path = rest(0)
Expand All @@ -92,7 +93,7 @@ object Moe {
if (dumpAST) {
println(Serializer.toJSON(ast))
}
Interpreter.eval(runtime, runtime.getRootEnv, ast)
interpreter.eval(runtime, runtime.getRootEnv, ast)
}
catch {
case e: Exception => System.err.println(e)
Expand Down Expand Up @@ -125,20 +126,20 @@ object Moe {
to own the line editing capabilities
*/
object REPL {
def enter (runtime: MoeRuntime, dumpAST: Boolean = false): Unit = {
def enter (interpreter: Interpreter, runtime: MoeRuntime, dumpAST: Boolean = false): Unit = {
var ok = true
print("> ")
while (ok) {
val line = readLine()
ok = line != null
if (ok) {
evalLine(runtime, line, dumpAST)
evalLine(interpreter, runtime, line, dumpAST)
print("> ")
}
}
}

def evalLine(runtime: MoeRuntime, line: String, dumpAST: Boolean = false) = {
def evalLine(interpreter: Interpreter, runtime: MoeRuntime, line: String, dumpAST: Boolean = false) = {
try {
val nodes = MoeParsers.parseFromEntry(line)
val ast = CompilationUnitNode(
Expand All @@ -147,7 +148,7 @@ object Moe {
if (dumpAST) {
println(Serializer.toJSON(ast))
}
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
println(result.toString)
}
catch {
Expand Down
2 changes: 1 addition & 1 deletion src/main/scala/org/moe/interpreter/Interpreter.scala
Expand Up @@ -5,7 +5,7 @@ import org.moe.ast._

import scala.collection.mutable.HashMap

object Interpreter {
class Interpreter {

val stub = new MoeObject()

Expand Down
Expand Up @@ -18,7 +18,7 @@ class ArrayLiteralNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)

val array: List[MoeObject] = result.asInstanceOf[MoeArrayObject].getNativeValue

Expand All @@ -42,7 +42,7 @@ class ArrayLiteralNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)

val array: List[ MoeObject ] = result.asInstanceOf[MoeArrayObject].getNativeValue

Expand Down Expand Up @@ -70,7 +70,7 @@ class ArrayLiteralNodeTestSuite extends FunSuite with InterpreterTestUtils {
ArrayElementAccessNode("@array", IntLiteralNode(0))
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)

assert(result.asInstanceOf[ MoeIntObject ].getNativeValue === 10)
}
Expand All @@ -90,7 +90,7 @@ class ArrayLiteralNodeTestSuite extends FunSuite with InterpreterTestUtils {
ArrayElementAccessNode("@array", IntLiteralNode(1))
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)

assert(result.asInstanceOf[ MoeIntObject ].getNativeValue === 20)
}
Expand All @@ -110,7 +110,7 @@ class ArrayLiteralNodeTestSuite extends FunSuite with InterpreterTestUtils {
ArrayElementAccessNode("@array", IntLiteralNode(-1))
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)

assert(result.asInstanceOf[ MoeIntObject ].getNativeValue === 20)
}
Expand All @@ -130,7 +130,7 @@ class ArrayLiteralNodeTestSuite extends FunSuite with InterpreterTestUtils {
ArrayElementAccessNode("@array", IntLiteralNode(-2))
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)

assert(result.asInstanceOf[ MoeIntObject ].getNativeValue === 10)
}
Expand All @@ -150,7 +150,7 @@ class ArrayLiteralNodeTestSuite extends FunSuite with InterpreterTestUtils {
ArrayElementAccessNode("@array", IntLiteralNode(-3))
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)

assert(result.asInstanceOf[ MoeIntObject ].getNativeValue === 20)
}
Expand All @@ -170,7 +170,7 @@ class ArrayLiteralNodeTestSuite extends FunSuite with InterpreterTestUtils {
ArrayElementAccessNode("@array", IntLiteralNode(2))
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)

assert(result.asInstanceOf[ MoeNullObject ].getNativeValue === null)
}
Expand Down
16 changes: 8 additions & 8 deletions src/test/scala/org/moe/interpreter/ComparisonNodeTestSuite.scala
Expand Up @@ -16,7 +16,7 @@ class ComparisonNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeBooleanObject].getNativeValue === true)
}

Expand All @@ -29,7 +29,7 @@ class ComparisonNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeBooleanObject].getNativeValue === false)
}

Expand All @@ -42,7 +42,7 @@ class ComparisonNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeBooleanObject].getNativeValue === true)
}

Expand All @@ -55,7 +55,7 @@ class ComparisonNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeBooleanObject].getNativeValue === false)
}

Expand All @@ -68,7 +68,7 @@ class ComparisonNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeBooleanObject].getNativeValue === true)
}

Expand All @@ -81,7 +81,7 @@ class ComparisonNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeBooleanObject].getNativeValue === false)
}

Expand All @@ -94,7 +94,7 @@ class ComparisonNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeBooleanObject].getNativeValue === true)
}

Expand All @@ -107,7 +107,7 @@ class ComparisonNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeBooleanObject].getNativeValue === false)
}

Expand Down
Expand Up @@ -35,7 +35,7 @@ class DoWhileNodeTestSuite extends FunSuite with InterpreterTestUtils {
VariableAccessNode("$bar")
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeIntObject].getNativeValue === -1)
}

Expand Down
4 changes: 2 additions & 2 deletions src/test/scala/org/moe/interpreter/ForNodeTestSuite.scala
Expand Up @@ -41,7 +41,7 @@ class ForNodeTestSuite extends FunSuite with InterpreterTestUtils {
VariableAccessNode("$bar")
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeIntObject].getNativeValue === 4)
}

Expand Down Expand Up @@ -72,7 +72,7 @@ class ForNodeTestSuite extends FunSuite with InterpreterTestUtils {
VariableAccessNode("$bar")
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeIntObject].getNativeValue === -10)
}

Expand Down
Expand Up @@ -18,7 +18,7 @@ class HashLiteralNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)

val hash: Map[String, MoeObject] = result.asInstanceOf[MoeHashObject].getNativeValue
assert(hash("foo").asInstanceOf[MoeIntObject].getNativeValue === 10)
Expand All @@ -38,7 +38,7 @@ class HashLiteralNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)

val hash: Map[String, MoeObject] = result.asInstanceOf[MoeHashObject].getNativeValue
assert(hash("foo").asInstanceOf[MoeIntObject].getNativeValue === 10)
Expand All @@ -65,7 +65,7 @@ class HashLiteralNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeIntObject].getNativeValue === 10)
}
}
20 changes: 10 additions & 10 deletions src/test/scala/org/moe/interpreter/IfNodeTestSuite.scala
Expand Up @@ -16,7 +16,7 @@ class IfNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeIntObject].getNativeValue === 1)
}

Expand All @@ -29,7 +29,7 @@ class IfNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result === runtime.NativeObjects.getUndef)
}

Expand All @@ -43,7 +43,7 @@ class IfNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeIntObject].getNativeValue === 2)
}

Expand All @@ -57,7 +57,7 @@ class IfNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeIntObject].getNativeValue === 3)
}

Expand All @@ -72,7 +72,7 @@ class IfNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeIntObject].getNativeValue === 5)
}

Expand All @@ -87,7 +87,7 @@ class IfNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeIntObject].getNativeValue === 8)
}

Expand All @@ -102,7 +102,7 @@ class IfNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result === runtime.NativeObjects.getUndef)
}

Expand All @@ -118,7 +118,7 @@ class IfNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeIntObject].getNativeValue === 34)
}

Expand All @@ -134,7 +134,7 @@ class IfNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeIntObject].getNativeValue === 55)
}

Expand All @@ -150,7 +150,7 @@ class IfNodeTestSuite extends FunSuite with InterpreterTestUtils {
)
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeIntObject].getNativeValue === 89)
}

Expand Down
Expand Up @@ -17,7 +17,7 @@ class IncrementDecrementNodeTestSuite extends FunSuite with InterpreterTestUtils
IncrementNode(VariableAccessNode("$foo"))
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeIntObject].getNativeValue === 43)
}

Expand All @@ -31,7 +31,7 @@ class IncrementDecrementNodeTestSuite extends FunSuite with InterpreterTestUtils
IncrementNode(VariableAccessNode("$foo"))
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeFloatObject].getNativeValue === 99.6)
}

Expand All @@ -45,7 +45,7 @@ class IncrementDecrementNodeTestSuite extends FunSuite with InterpreterTestUtils
DecrementNode(VariableAccessNode("$foo"))
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeIntObject].getNativeValue === 41)
}

Expand All @@ -59,7 +59,7 @@ class IncrementDecrementNodeTestSuite extends FunSuite with InterpreterTestUtils
DecrementNode(VariableAccessNode("$foo"))
)
)
val result = Interpreter.eval(runtime, runtime.getRootEnv, ast)
val result = interpreter.eval(runtime, runtime.getRootEnv, ast)
assert(result.asInstanceOf[MoeFloatObject].getNativeValue === 97.6)
}

Expand Down

0 comments on commit 17532f6

Please sign in to comment.