summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormRnea <akannemre@gmail.com>2024-08-03 20:18:21 +0300
committermRnea <akannemre@gmail.com>2024-08-03 20:18:21 +0300
commitd98974584558ca32db04fc6a47a692dc4ba0143d (patch)
tree6c5bf4da730179e45dba443a216563f881db158d
parent2cbb10fc6b1daacfc331880ef39245307e976b1d (diff)
fixed "|" :string and | :identifier confusion
-rw-r--r--cl-forth.lisp24
-rw-r--r--test/tests.lisp6
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