diff options
author | riton <riton@riton.home> | 2025-07-10 12:43:06 +0300 |
---|---|---|
committer | riton <riton@riton.home> | 2025-07-10 12:43:06 +0300 |
commit | 844020c42876479db3b2a881a528ac9b10c7e081 (patch) | |
tree | 948ae9d9bc0a5e178469a7138446483647d595ad | |
parent | 64eee7885954e794de60530b140efb152b2a0e8b (diff) |
string-view utility
-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 |