diff options
-rw-r--r-- | cl-forth.lisp | 18 | ||||
-rw-r--r-- | kurt.asd | 2 | ||||
-rw-r--r-- | test/tests.lisp | 9 |
3 files changed, 21 insertions, 8 deletions
diff --git a/cl-forth.lisp b/cl-forth.lisp index ec2a0f3..b0bcdbd 100644 --- a/cl-forth.lisp +++ b/cl-forth.lisp @@ -20,9 +20,13 @@ (iter (for ch = (read-char stream)) (cond ((char= ch #\") (finish)) - ((and (char= ch #\\) (char= (peek-char nil stream) #\n)) - (read-char stream) - (write-char #\Newline str)) + ((char= ch #\\) + (case (peek-char nil stream) + (#\n (write-char #\Newline str)) + (#\0 (write-char (code-char 0) str)) + (#\\ (write-char #\\ str)) + (#\" (write-char #\" str))) + (read-char stream)) (t (write-char ch str)))))) (defun read-character (stream line-num line col) @@ -214,11 +218,17 @@ ((eq :son (car tok)) (reverse makrodef)) (push tok makrodef))))) +(defun find-library (name) + (or (probe-file (merge-pathnames name sb-ext:*core-pathname*)) + (probe-file (merge-pathnames name (from-root "test/"))) + (probe-file (merge-pathnames name (from-root "lib/"))) + (error "library ~a could not be found." name))) + (defmethod parse-op ((parser parser) token (id (eql :kütüphane))) "Library and the executable must be in the same location, no other search is made currently." (let ((file (car (read-token parser)))) (setf (tokens parser) - (append (lex-file (merge-pathnames file sb-ext:*core-pathname*)) + (append (lex-file (find-library file)) (tokens parser))))) (defun parse-tokens (tokens) @@ -14,5 +14,5 @@ (:file "main") (:file "test/tests")) :build-operation "program-op" - :build-pathname "test/kurt" + :build-pathname "kurt" :entry-point "kurt:main") diff --git a/test/tests.lisp b/test/tests.lisp index 0907a58..4c3ff18 100644 --- a/test/tests.lisp +++ b/test/tests.lisp @@ -35,7 +35,7 @@ path (from-root path))) (successful nil)) - (with-open-file (str abs-path) + (with-open-file (str abs-path :external-format :utf-8) (unless (string-equal "test" (second (uiop:split-string (read-line str) :separator '(#\Space)))) @@ -74,8 +74,11 @@ (run-test file :target target)))) (remove-if-not (lambda (file) (string= "kurt" (pathname-type file))) - (cl-fad:list-directory - (from-root "test")))) + (append + (cl-fad:list-directory + (from-root "test")) + (cl-fad:list-directory + (from-root "examples/euler"))))) counting (eq t success?) into succs counting (null success?) into fails finally (format t "~a success, ~a fail~%" succs fails))) |