From d98974584558ca32db04fc6a47a692dc4ba0143d Mon Sep 17 00:00:00 2001 From: mRnea Date: Sat, 3 Aug 2024 20:18:21 +0300 Subject: fixed "|" :string and | :identifier confusion --- cl-forth.lisp | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'cl-forth.lisp') 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) -- cgit v1.2.3