diff options
-rw-r--r-- | src/lexer.lisp | 8 | ||||
-rw-r--r-- | src/util.lisp | 5 |
2 files changed, 7 insertions, 6 deletions
diff --git a/src/lexer.lisp b/src/lexer.lisp index cd47881..3865cd6 100644 --- a/src/lexer.lisp +++ b/src/lexer.lisp @@ -103,18 +103,14 @@ (lexer-read l) (loop :while (digit? (ch l)) :do (lexer-read l)) - (make-array (- (pos l) start) :element-type 'character - :displaced-to (input l) - :displaced-index-offset start))) + (make-string-view (input l) start (pos l)))) (defmethod read-identifier ((l lexer)) (let ((start (pos l))) (lexer-read l) (loop :while (letter? (ch l)) :do (lexer-read l)) - (make-array (- (pos l) start) :element-type 'character - :displaced-to (input l) - :displaced-index-offset start))) + (make-string-view (input l) start (pos l)))) (defmethod lexer-tokens ((l lexer)) diff --git a/src/util.lisp b/src/util.lisp index d58cde8..cf3bc76 100644 --- a/src/util.lisp +++ b/src/util.lisp @@ -8,6 +8,11 @@ `(eval-when (:compile-toplevel :load-toplevel :execute) ,@body))) +(defun make-string-view (source start end) + (make-array (- end start) :element-type 'character + :displaced-to source + :displaced-index-offset start)) + (defun read-file-contents (file-name) (let* ((len 0) (contents |