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

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

[elpa] externals/beardbolt c9f3b839e9 156/323: Add support for D


From: ELPA Syncer
Subject: [elpa] externals/beardbolt c9f3b839e9 156/323: Add support for D
Date: Thu, 9 Mar 2023 10:58:27 -0500 (EST)

branch: externals/beardbolt
commit c9f3b839e92b1564784337526787639e8ad395ca
Author: Duncan Paterson <dunkyp@gmail.com>
Commit: Duncan Paterson <dunkyp@gmail.com>

    Add support for D
---
 doc/rmsbolt.texi           |  7 +++++++
 rmsbolt.el                 | 22 ++++++++++++++++++++++
 starters/rmsbolt-starter.d | 27 +++++++++++++++++++++++++++
 3 files changed, 56 insertions(+)

diff --git a/doc/rmsbolt.texi b/doc/rmsbolt.texi
index bfba0134c2..291c66c7a1 100644
--- a/doc/rmsbolt.texi
+++ b/doc/rmsbolt.texi
@@ -55,6 +55,7 @@ Languages
 * Pony::
 * Emacs Lisp::
 * Common Lisp::
+* D::
 
 Integrations
 
@@ -202,6 +203,7 @@ This section covers languages-specific quirks and features.
 * Pony::
 * Emacs Lisp::
 * Common Lisp::
+* D::
 @end menu
 
 @node C/C++
@@ -271,6 +273,11 @@ Emacs 26 or the @code{cl-print} package are required.
 No support for source->asm matching or filtering. Only @code{sbcl} and 
@code{clisp}
 supported at the moment, with @code{sbcl} giving much better results.
 
+@node D
+@section D
+
+Assembly listing is supported through @code{ldc}
+
 @node Integrations
 @chapter Integrations
 
diff --git a/rmsbolt.el b/rmsbolt.el
index b903ff599a..be221a86b9 100644
--- a/rmsbolt.el
+++ b/rmsbolt.el
@@ -489,6 +489,21 @@ Return value is quoted for passing to the shell."
                                   (concat "-Cllvm-args=--x86-asm-syntax=" 
asm-format)))
                           " ")))
      cmd)))
+(cl-defun rmsbolt--d-compile-cmd (&key src-buffer)
+  "Process a compile command for d"
+  (rmsbolt--with-files
+   src-buffer
+   (let* ((language (rmsbolt--get-lang))
+          (compiler (or (buffer-local-value 'rmsbolt-command src-buffer)
+                        (rmsbolt-l-cmd-function language)))
+          (demangle-off (not (buffer-local-value 'rmsbolt-demangle 
src-buffer)))
+          (demangle-tmp-file (string-join (list rmsbolt--temp-dir 
"/demangled")))
+          (demangler (rmsbolt-l-demangler language))
+          (cmd (string-join (list compiler "-g" "-output-s" src-filename "-of" 
output-filename) " "))
+          (cmd (if demangle-off
+                   cmd
+                 (string-join (list cmd "&&" demangler output-filename ">" 
demangle-tmp-file "&&" "mv" demangle-tmp-file output-filename) " "))))
+     cmd)))
 (cl-defun rmsbolt--pony-compile-cmd (&key src-buffer)
   "Process a compile command for ponyc."
   (let* ((cmd (buffer-local-value 'rmsbolt-command src-buffer))
@@ -693,6 +708,12 @@ return t if successful."
                           :demangler "c++filt"
                           :compile-cmd-function #'rmsbolt--c-compile-cmd
                           :disass-hidden-funcs rmsbolt--hidden-func-c))
+   (d-mode
+    . ,(make-rmsbolt-lang :compile-cmd "ldc2"
+                          :supports-asm t
+                          :supports-disass t
+                          :demangler "ddemangle"
+                          :compile-cmd-function #'rmsbolt--d-compile-cmd))
    ;; In order to parse ocaml files, you need the emacs ocaml mode, tuareg
    (tuareg-mode
     . ,(make-rmsbolt-lang :compile-cmd "ocamlopt"
@@ -1345,6 +1366,7 @@ Are you running two compilations at the same time?"))
     ("php" . "rmsbolt.php")
     ("pony" . "rmsbolt.pony")
     ("emacs-lisp" . "rmsbolt-starter.el")
+    ("d" . "rmsbolt-starter.d")
     ;; Rmsbolt is capitalized here because of Java convention of Capitalized
     ;; class names.
     ("java" . "Rmsbolt.java")))
diff --git a/starters/rmsbolt-starter.d b/starters/rmsbolt-starter.d
new file mode 100644
index 0000000000..637f63bda1
--- /dev/null
+++ b/starters/rmsbolt-starter.d
@@ -0,0 +1,27 @@
+// Local Variables:
+// rmsbolt-command: "ldc2"
+// End:
+
+import std.stdio : writeln;
+
+int isRMS(char a) {
+    switch(a) {
+    case 'R':
+        return 1;
+    case 'M':
+        return 2;
+    case 'S':
+        return 3;
+    default:
+        return 0;
+    }
+}
+
+int main() {
+    int a = 1 + 1;
+    if(isRMS(cast(char) a)) {
+        writeln(a);
+    }
+    return 0;
+}
+



reply via email to

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