summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lexer.lisp8
-rw-r--r--src/util.lisp5
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