Merge pull request #406 from chr15m/lib-alias-hacks
[jackhill/mal.git] / rpython / step3_env.py
index dc3549c..f196dfc 100644 (file)
@@ -1,8 +1,9 @@
 #import sys, traceback
 import mal_readline
 import mal_types as types
-from mal_types import (MalSym, MalInt, MalStr, _symbol, _keywordu,
-                       MalList, _list, MalFunc)
+from mal_types import (MalSym, MalInt, MalStr,
+                       _symbol, _keywordu,
+                       MalList, _list, MalVector, MalHashMap, MalFunc)
 import reader, printer
 from env import Env
 
@@ -20,14 +21,16 @@ def eval_ast(ast, env):
         for a in ast.values:
             res.append(EVAL(a, env))
         return MalList(res)
-##    elif types._vector_Q(ast):
-##        return types._vector(*map(lambda a: EVAL(a, env), ast))
-##    elif types._hash_map_Q(ast):
-##        keyvals = []
-##        for k in ast.keys():
-##            keyvals.append(EVAL(k, env))
-##            keyvals.append(EVAL(ast[k], env))
-##        return types._hash_map(*keyvals)
+    elif types._vector_Q(ast):
+        res = []
+        for a in ast.values:
+            res.append(EVAL(a, env))
+        return MalVector(res)
+    elif types._hash_map_Q(ast):
+        new_dct = {}
+        for k in ast.dct.keys():
+            new_dct[k] = EVAL(ast.dct[k], env)
+        return MalHashMap(new_dct)
     else:
         return ast  # primitive value, return unchanged
 
@@ -102,8 +105,12 @@ def entry_point(argv):
             print(REP(line, repl_env))
         except EOFError as e:
             break
+        except reader.Blank:
+            continue
+        except types.MalException as e:
+            print(u"Error: %s" % printer._pr_str(e.object, False))
         except Exception as e:
-            print(e)
+            print("Error: %s" % e)
             #print("".join(traceback.format_exception(*sys.exc_info())))
     return 0