From 4f096b9820331cdff4ef9d5e19bde7212f9cf5e6 Mon Sep 17 00:00:00 2001 From: John Lorentzson Date: Tue, 29 Jul 2025 19:52:27 +0200 Subject: [PATCH] Make editor save source before compiling --- editor/editor.lisp | 61 +++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/editor/editor.lisp b/editor/editor.lisp index 1d79cb7..4e2a203 100644 --- a/editor/editor.lisp +++ b/editor/editor.lisp @@ -766,36 +766,37 @@ Additionally ensures correct line numbers on the way, as a bonus." (defun com-compile-buffer () (when *refresh-asm-functions-p* (usc:usc-init)) - (let* ((src (buffer-string (current-buffer *editor*))) - (bytes - (handler-case - (usc:compile-string-to-bytes src :print-ir-p t) - (usc:usc-error (c) - (let ((source (cdr (usc:source c)))) - (compile-fail-prompt c (car source) (cdr source))) - nil)))) - (unless (null bytes) - (let* ((timestring (multiple-value-bind (seconds minutes hours day month year) - (get-decoded-time) - (format nil "~D-~2,'0D-~2,'0D_~2,'0D-~2,'0D-~2,'0D" - year month day - hours minutes seconds))) - (bin-name (format nil "compiled-program_~A.bin" timestring)) - (src-name (format nil "source-program_~A.c6l" timestring))) - (with-open-file (output src-name :direction :output - :if-exists :supersede) - (write-string src output)) - (with-open-file (output bin-name :direction :output - :element-type '(unsigned-byte 8) - :if-exists :supersede) - (dolist (byte bytes) - (write-byte byte output))) - (clear-screen) - (usc::send-data-to-c64 (coerce bytes 'vector) - 'draw-transfer-progress) - (clear-screen) - (redisplay-view (current-view *editor*)) - (redisplay-status-line :completely-p t))))) + (let* ((timestring (multiple-value-bind (seconds minutes hours day month year) + (get-decoded-time) + (format nil "~D-~2,'0D-~2,'0D_~2,'0D-~2,'0D-~2,'0D" + year month day + hours minutes seconds))) + (bin-name (format nil "compiled-program_~A.bin" timestring)) + (src-name (format nil "source-program_~A.c6l" timestring)) + (src (buffer-string (current-buffer *editor*)))) + (with-open-file (output src-name :direction :output + :if-exists :supersede) + (write-string src output)) + (let ((bytes + (handler-case + (usc:compile-string-to-bytes src :print-ir-p t) + (usc:usc-error (c) + (let ((source (cdr (usc:source c)))) + (compile-fail-prompt c (car source) (cdr source))) + nil)))) + (unless (null bytes) + (let* () + (with-open-file (output bin-name :direction :output + :element-type '(unsigned-byte 8) + :if-exists :supersede) + (dolist (byte bytes) + (write-byte byte output))) + (clear-screen) + (usc::send-data-to-c64 (coerce bytes 'vector) + 'draw-transfer-progress) + (clear-screen) + (redisplay-view (current-view *editor*)) + (redisplay-status-line :completely-p t))))))