aboutsummaryrefslogtreecommitdiff
path: root/scala/printer.scala
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2014-12-18 23:52:59 -0600
committerJoel Martin <github@martintribe.org>2015-01-09 16:16:51 -0600
commita816262a057ecc4bd1fd07750d21cab81490f336 (patch)
treef83bea9965ef09460d213812f738a32a2dc6803c /scala/printer.scala
parent821930dbd9febf45fad25aefa9bc64e8ace4c737 (diff)
downloadmal-a816262a057ecc4bd1fd07750d21cab81490f336.tar.gz
mal-a816262a057ecc4bd1fd07750d21cab81490f336.zip
Scala: refactor collections with metadata.
Convert numeric to Long. Add time-ms. Add Makefile for stats targets.
Diffstat (limited to 'scala/printer.scala')
-rw-r--r--scala/printer.scala16
1 files changed, 7 insertions, 9 deletions
diff --git a/scala/printer.scala b/scala/printer.scala
index 74b1433..0a0e0b7 100644
--- a/scala/printer.scala
+++ b/scala/printer.scala
@@ -1,15 +1,13 @@
-import types.Function
+import types.{MalList, MalVector, MalHashMap, MalFunction}
+
object printer {
def _pr_str(obj: Any, print_readably: Boolean = true): String = {
val _r = print_readably
return obj match {
- case l: List[Any] => "(" + l.map(_pr_str(_, _r)).mkString(" ") + ")"
- case v: Array[Any] => "[" + v.map(_pr_str(_, _r)).mkString(" ") + "]"
- case m: Map[String @unchecked,Any @unchecked] => {
- val lst = m.map{case (k,v) => List(k, v)}.flatten
- "{" + lst.map(_pr_str(_,_r)).mkString(" ") + "}"
- }
+ case v: MalVector => v.toString(_r)
+ case l: MalList => l.toString(_r)
+ case hm: MalHashMap => hm.toString(_r)
case s: String => {
if (s.length > 0 && s(0) == '\u029e') {
":" + s.substring(1,s.length)
@@ -26,8 +24,8 @@ object printer {
case a: types.Atom => "(atom " + a.value + ")"
case null => "nil"
case _ => {
- if (obj.isInstanceOf[Function]) {
- val f = obj.asInstanceOf[Function]
+ if (obj.isInstanceOf[MalFunction]) {
+ val f = obj.asInstanceOf[MalFunction]
"<function (fn* " + _pr_str(f.params) + " " + _pr_str(f.ast) + ")>"
} else {
obj.toString