Skip to content

Commit

Permalink
hashes too
Browse files Browse the repository at this point in the history
  • Loading branch information
Stevan Little committed Feb 13, 2013
1 parent af38e09 commit 94dee14
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 3 deletions.
12 changes: 9 additions & 3 deletions src/main/scala/org/moe/interpreter/Interpreter.scala
Expand Up @@ -100,12 +100,18 @@ class Interpreter {
case HashElementAccessNode(hashName: String, key: AST) => {
val key_result = eval(runtime, env, key)
val hash_map = env.get(hashName) match {
case Some(h: MoeHashObject) => h.getNativeValue
case Some(h: MoeHashObject) => h
case _ => throw new MoeErrors.UnexpectedType("MoeHashObject expected")
}

hash_map.get(objToString(key_result))
.getOrElse(runtime.NativeObjects.getUndef)
hash_map.callMethod(
hash_map.getAssociatedClass.getOrElse(
throw new MoeErrors.ClassNotFound("Hash")
).getMethod("postcircumfix:<{}>").getOrElse(
throw new MoeErrors.MethodNotFound("postcircumfix:<{}>")
),
List(key_result)
)
}

case RangeLiteralNode(start, end) => {
Expand Down
18 changes: 18 additions & 0 deletions src/main/scala/org/moe/runtime/builtins/HashClass.scala
@@ -1,6 +1,7 @@
package org.moe.runtime.builtins

import org.moe.runtime._
import org.moe.interpreter.InterpreterUtils._

/**
* setup class Hash
Expand All @@ -12,6 +13,23 @@ object HashClass {
throw new MoeErrors.MoeStartupError("Could not find class Hash")
)


// basic access
hashClass.addMethod(
new MoeMethod(
"postcircumfix:<{}>",
{ (invocant, args) =>

var key = objToString(args(0))
val hash = invocant match {
case h: MoeHashObject => h.getNativeValue
case _ => throw new MoeErrors.UnexpectedType("MoeHashObject expected")
}

hash.get(key).getOrElse(r.NativeObjects.getUndef)
}
)
)
}

}

0 comments on commit 94dee14

Please sign in to comment.