diff options
| -rw-r--r-- | cl-forth.lisp | 24 | ||||
| -rw-r--r-- | test/tests.lisp | 6 | 
2 files changed, 20 insertions, 10 deletions
| diff --git a/cl-forth.lisp b/cl-forth.lisp index d935956..1026253 100644 --- a/cl-forth.lisp +++ b/cl-forth.lisp @@ -1,9 +1,16 @@  (in-package :cl-forth) -(defun make-token (sym? line col) -  (if (or (numberp sym?) (stringp sym?) (is-identifier sym?)) -      (values (list sym? :line line :col col) nil) -      (values (list sym? :line line :col col :error t) t))) +(defun make-token (sym? line col &optional (type nil)) +  (when (null type) +    (setf type +          (cond ((numberp sym?) :number) +                ((stringp sym?) :string) +                ((is-identifier sym?) :identifier) +                (t +                 ;; temporary hack... +                 (return-from make-token +                   (values (list sym? :line line :col col :error t) t)))))) +  (values (list sym? :line line :col col :type type) nil))  (defun token-op (token)    (car token)) @@ -32,7 +39,7 @@              ;;  (read-char line-stream))              ((char= #\|  next-char)               (read-char line-stream) -             (collect (make-token "|" line-num col) into tokens)) +             (collect (make-token "|" line-num col :identifier) into tokens))              ((char= #\Space next-char) (read-char line-stream))              ((char= #\; next-char) ;; and not in string               (finish)) @@ -109,10 +116,11 @@          (with stack = ())          (for i from 0)          (for token in tokens) -        (let ((op (token-op token))) -          (cond ((numberp op) +        (let ((op (token-op token)) +              (op-type (getf (cdr token) :type))) +          (cond ((eq :number op-type)                   (vector-push-extend `(push-int ,op) ops)) -                ((stringp op) +                ((eq :string op-type)                   (vector-push-extend `(push-str ,(length op) ,i ,op)                                       ops))                  ((string= 'ise op) diff --git a/test/tests.lisp b/test/tests.lisp index c36a5f2..2dfb4cb 100644 --- a/test/tests.lisp +++ b/test/tests.lisp @@ -68,9 +68,11 @@          (delete-file (probe-file (drop-file-type abs-path)))))      successful)) -(defun run-tests () +(defun run-tests (&optional (ignore-err nil))    (loop for success? -          in (mapcar #'run-test +          in (mapcar (lambda (file) (if (not ignore-err) +                                   (run-test file) +                                   (ignore-errors (run-test file))))                       (remove-if-not (lambda (file)                                        (string= "lorth" (pathname-type file)))                                       (cl-fad:list-directory | 
