mirror of
https://github.com/pestctrl/emacs-config.git
synced 2026-02-16 16:24:18 +00:00
81 lines
2.8 KiB
EmacsLisp
81 lines
2.8 KiB
EmacsLisp
;;; load-llvm-mode.el --- -*- lexical-binding: t -*-
|
|
|
|
;; Copyright (C) 2023 Benson Chu
|
|
|
|
;; Author: Benson Chu <bensonchu457@gmail.com>
|
|
;; Created: [2023-05-13 08:14]
|
|
|
|
;; This file is not part of GNU Emacs
|
|
|
|
;; This program is free software: you can redistribute it and/or modify
|
|
;; it under the terms of the GNU General Public License as published by
|
|
;; the Free Software Foundation, either version 3 of the License, or
|
|
;; (at your option) any later version.
|
|
|
|
;; This program is distributed in the hope that it will be useful,
|
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
;; GNU General Public License for more details.
|
|
|
|
;; You should have received a copy of the GNU General Public License
|
|
;; along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
;;; Commentary:
|
|
|
|
;;; Code:
|
|
|
|
(defun load-llvm-mode (root-dir)
|
|
(interactive (list (lls/conf-get 'root-dir)))
|
|
(when (not (require 'my-tablegen-mode nil t))
|
|
(load-file (expand-file-name "llvm/utils/emacs/tablegen-mode.el" root-dir)))
|
|
(when (not (require 'my-llvm-mode nil t))
|
|
(load-file (expand-file-name "llvm/utils/emacs/llvm-mode.el" root-dir)))
|
|
(load-file (expand-file-name "llvm/utils/emacs/emacs.el" root-dir))
|
|
|
|
(defface llvm-separator-face `((t (:background "gray25" :extend t :inherit font-lock-warning-face)))
|
|
nil)
|
|
|
|
(progn
|
|
(-->
|
|
llvm-font-lock-keywords
|
|
(remove '("\\_<\\(a\\(?:fn\\|rcp\\)\\|contract\\|fast\\|n\\(?:inf\\|nan\\|sz\\)\\|reassoc\\)\\_>" . font-lock-keyword-face) llvm-font-lock-keywords)
|
|
(setq llvm-font-lock-keywords it))
|
|
|
|
(add-to-list 'llvm-font-lock-keywords
|
|
`(,(regexp-opt '("nnan" "ninf" "nsz" "arcp" "contract" "afn" "reassoc" "fast") 'symbols) . 'shadow)))
|
|
|
|
(defvar llvm-ir-dump-regexp
|
|
(rx line-start (optional (any "#;") " ") "*** IR Dump" (+ nonl) "***" (optional ":") "\n"))
|
|
|
|
(add-to-list 'llvm-font-lock-keywords
|
|
`(,llvm-ir-dump-regexp 0 'llvm-separator-face prepend))
|
|
|
|
(defun llvm-previous-IR-dump ()
|
|
(interactive)
|
|
(re-search-backward llvm-ir-dump-regexp))
|
|
|
|
(defun llvm-next-IR-dump ()
|
|
(interactive)
|
|
(re-search-forward llvm-ir-dump-regexp))
|
|
|
|
(define-key llvm-mode-map (kbd "C-M-a") #'llvm-previous-IR-dump)
|
|
(define-key llvm-mode-map (kbd "C-M-e") #'llvm-next-IR-dump)
|
|
|
|
(-->
|
|
"\\b[-]?[0-9]+\\b"
|
|
(assoc it llvm-font-lock-keywords)
|
|
(cl-position it llvm-font-lock-keywords)
|
|
(nth it llvm-font-lock-keywords)
|
|
(setf it
|
|
`(,(rx word-boundary (optional "-") ))))
|
|
|
|
(pop c-mode-common-hook)
|
|
(add-hook 'c-mode-common-hook
|
|
(function
|
|
(lambda nil
|
|
(if (and buffer-file-name (string-match "llvm" buffer-file-name))
|
|
(progn
|
|
(c-set-style "llvm.org")))))))
|
|
|
|
(provide 'load-llvm-mode)
|
|
;;; load-llvm-mode.el ends here
|