tests: make throw of non-strings optional/soft.
[jackhill/mal.git] / guile / step4_if_fn_do.scm
index 3012da7..ac330e8 100644 (file)
@@ -21,7 +21,7 @@
     (make-Env #:binds b #:exprs e)))
 
 (define (READ)
-  (read_str (readline "user> ")))
+  (read_str (_readline "user> ")))
 
 (define (eval_ast ast env)
   (define (_eval x) (EVAL x env))
@@ -40,7 +40,7 @@
   (match expr
     (((? procedure? proc) args ...)
      (apply proc args))
-    (else 'mal-error (format #f "'~a' is not a valid form to apply!" expr))))
+    (else (throw 'mal-error (format #f "'~a' not found" (car expr))))))
 
 (define (eval_seq ast env)
   (cond
@@ -60,6 +60,7 @@
        ((null? (cdr next)) (throw 'mal-error "let*: Invalid binding form" kvs)) 
        (else (lp (cddr next) (cons (car next) k) (cons (cadr next) v))))))
   (match ast
+    (() ast)
     (('def! k v) ((env 'set) k (EVAL v env)))
     (('let* kvs body)
      (let* ((new-env (make-Env #:outer env))
@@ -83,7 +84,6 @@
 
 (define (PRINT exp)
   (and (not (eof-object? exp))
-       ;;(add-history str)
        (format #t "~a~%" (pr_str exp #t))))
 
 (define (LOOP continue?)
@@ -94,6 +94,8 @@
    (catch 'mal-error
           (lambda () (PRINT (EVAL (READ) *toplevel*)))
           (lambda (k . e)
-            (format #t "Error: ~a~%" (car e))))))
+            (if (string=? (car e) "blank line")
+                (display "")
+                (format #t "Error: ~a~%" (car e)))))))
 
 (REPL)