minor change to run to make it more generic

This commit is contained in:
2024-07-29 00:36:06 +03:00
parent d1481f2770
commit 49b58b2d57
3 changed files with 20 additions and 16 deletions

View File

@@ -197,10 +197,7 @@
;;; COMPILER
(defun generate-program (program &key (path "output.asm") (compile nil)
(mem-cap 640000))
(with-open-file (out path :direction :output
:if-exists :supersede)
(defun write-program (program out &key mem-cap)
(format out "~a~%" "segment .text")
(gen-dump out)
(format out "~{~a~%~}" '("global _start"
@@ -212,10 +209,17 @@
(gen-code '(exit 0) out)
(format out "~a~%" "segment .bss")
(format out "~a ~a~%" "bel: resb" mem-cap))
(defun generate-program (program &key (path "output.asm") (compile nil)
(mem-cap 640000))
(with-open-file (out path :direction :output
:if-exists :supersede)
(write-program program out :mem-cap mem-cap))
(when compile
(run `("nasm" "-felf64" ,path))
(run `("nasm" "-felf64" ,path) :output t)
(let ((name (first (uiop:split-string path :separator '(#\.)))))
(run `("ld" "-o" ,name ,(concatenate 'string name ".o"))))))
(run `("ld" "-o" ,name ,(concatenate 'string name ".o"))
:output t))))
(defun compile-program (path)
(generate-program (make-program path) :compile t))

View File

@@ -39,7 +39,7 @@
(defun example-run ()
(example-compile)
(run '("test/output")))
(run '("test/output") :output t))
(defun start-forth-repl ()
(iter (for line = (progn (format t "~&> ") (read-line)))

View File

@@ -20,9 +20,9 @@
(defun mklist (form)
(if (listp form) form (list form)))
(defun run (args)
(defun run (args &rest options)
(format t "~{~a~^ ~}~%" args)
(uiop:run-program args :output *standard-output*))
(apply #'uiop:run-program args options))
(defun from-root (path)
(merge-pathnames path (asdf:system-source-directory :cl-forth)))