From 64eee7885954e794de60530b140efb152b2a0e8b Mon Sep 17 00:00:00 2001 From: riton Date: Thu, 10 Jul 2025 00:52:19 +0300 Subject: lexer of monkey language --- src/util.lisp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/util.lisp (limited to 'src/util.lisp') diff --git a/src/util.lisp b/src/util.lisp new file mode 100644 index 0000000..d58cde8 --- /dev/null +++ b/src/util.lisp @@ -0,0 +1,22 @@ +(in-package :monkey) + +(defun concat-symbols (sym1 sym2) + (intern (format nil "~a-~a" (symbol-name sym1) (symbol-name sym2)))) + +(eval-when (:compile-toplevel :load-toplevel :execute) + (defmacro eval-always (&body body) + `(eval-when (:compile-toplevel :load-toplevel :execute) + ,@body))) + +(defun read-file-contents (file-name) + (let* ((len 0) + (contents + (with-output-to-string (out) + (with-open-file (in file-name :external-format :utf-8) + (loop :with buffer := (make-array 8192 :element-type 'character) + :for n := (read-sequence buffer in) + :while (< 0 n) + :do (incf len n) + (write-sequence buffer out :start 0 :end n)))))) + (values contents len))) + -- cgit v1.2.3