emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/beardbolt a0527f16af 045/323: Add very basic support fo


From: ELPA Syncer
Subject: [elpa] externals/beardbolt a0527f16af 045/323: Add very basic support for common lisp
Date: Thu, 9 Mar 2023 10:58:01 -0500 (EST)

branch: externals/beardbolt
commit a0527f16afbfbb59b28e32d4efdc8ef709f927fe
Author: Jay Kamat <jaygkamat@gmail.com>
Commit: Jay Kamat <jaygkamat@gmail.com>

    Add very basic support for common lisp
---
 rmsbolt.el            | 49 ++++++++++++++++++++++++++++++++++++++++++++++++-
 starters/rmsbolt.lisp | 16 ++++++++++++++++
 2 files changed, 64 insertions(+), 1 deletion(-)

diff --git a/rmsbolt.el b/rmsbolt.el
index 6ed6cd4b39..0de2ad2637 100644
--- a/rmsbolt.el
+++ b/rmsbolt.el
@@ -273,6 +273,34 @@ Needed as ocaml cannot output asm to a non-hardcoded file"
                                           " "))
                          " ")))
     cmd))
+(cl-defun rmsbolt--lisp-compile-cmd (&key src-buffer)
+  "Process a compile command for common lisp.
+
+Assumes function name to dissasemble is 'main'."
+  (let* ((cmd (buffer-local-value 'rmsbolt-command src-buffer))
+         (interpreter (cl-first (split-string cmd nil t)))
+         (disass-eval "\"(disassemble 'main)\"")
+         (disass-eval-unquoted "(disassemble 'main)"))
+    (pcase interpreter
+      ("sbcl"
+       (mapconcat 'identity
+                  (list cmd "--noinform" "--load"
+                        (buffer-file-name)
+                        "--eval" disass-eval "--non-interactive"
+                        ;; Remove leading comments
+                        "|" "sed" "'s/^;\s//'" ">"
+                        (rmsbolt-output-filename src-buffer))
+                  " "))
+      ("clisp"
+       (mapconcat 'identity
+                  (list cmd "-q" "-x"
+                        (concat
+                         "\"(load \\\"" (buffer-file-name) "\\\") " 
disass-eval-unquoted "\"")
+                        ">" (rmsbolt-output-filename src-buffer))
+                  " "))
+      (_
+       (error "This Common Lisp interpreter is not supported")))))
+
 (defvar rmsbolt--hidden-func-c
   (rx bol (or (and "__" (0+ any))
               (and "_" (or "init" "start" "fini"))
@@ -326,7 +354,17 @@ Needed as ocaml cannot output asm to a non-hardcoded file"
                           :supports-disass t
                           :starter-file-name "rmsbolt.ml"
                           :compile-cmd-function #'rmsbolt--ocaml-compile-cmd
-                          :disass-hidden-funcs rmsbolt--hidden-func-ocaml))))
+                          :disass-hidden-funcs rmsbolt--hidden-func-ocaml))
+   (lisp-mode
+    . ,(make-rmsbolt-lang :mode 'lisp-mode ;; Assume common lisp..
+                          :compile-cmd "sbcl"
+                          :supports-asm t
+                          :supports-disass nil
+                          :objdumper 'cat
+                          :starter-file-name "rmsbolt.lisp"
+                          :compile-cmd-function #'rmsbolt--lisp-compile-cmd
+                          :disass-hidden-funcs nil))
+   ))
 
 ;;;; Macros
 
@@ -648,6 +686,14 @@ Needed as ocaml cannot output asm to a non-hardcoded file"
                                          "att")
                                   ">" (rmsbolt-output-filename src-buffer t))
                             " ")))
+          ('cat
+           (setq cmd
+                 (mapconcat 'identity
+                            (list cmd
+                                  "&&" "mv"
+                                  (rmsbolt-output-filename src-buffer)
+                                  (rmsbolt-output-filename src-buffer t))
+                            " ")))
           (_
            (error "Objdumper not recognized"))))
       (setq-local rmsbolt-src-buffer src-buffer)
@@ -709,6 +755,7 @@ Needed as ocaml cannot output asm to a non-hardcoded file"
 (rmsbolt-defstarter "c" 'c-mode)
 (rmsbolt-defstarter "c++" 'c++-mode)
 (rmsbolt-defstarter "ocaml" 'tuareg-mode)
+(rmsbolt-defstarter "cl" 'lisp-mode)
 
 ;;;; Font lock matcher
 (defun rmsbolt--goto-line (line)
diff --git a/starters/rmsbolt.lisp b/starters/rmsbolt.lisp
new file mode 100644
index 0000000000..af964082e0
--- /dev/null
+++ b/starters/rmsbolt.lisp
@@ -0,0 +1,16 @@
+;; Common Lisp rmsbolt starter file
+
+;; rmsbolt ONLY DISASSEMBLES THE MAIN FUNCTION.
+;; Please ensure you have a main function defined,
+;; and place all your code inside of it!
+
+;; Local Variables:
+;; rmsbolt-command: "sbcl"
+;; End:
+
+(defun main ()
+  (defun add (a b)
+    ;; (declare (optimize (speed 3) (safety 0) (debug 0)))
+    ;; (declare (type fixnum a b))
+    (+ a b))
+  (add 2 3))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]