mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-28 06:46:07 +00:00

Adds an emacs mode for .mir files. For the most part this just consists of keyword rules for various MIR constructs and then appending the llvm-mode keywords to that. This doesn't currently attempt to do anything to be aware of the YAML structure or differentiate between machine IR and embedded LLVM IR.
71 lines
2.3 KiB
EmacsLisp
71 lines
2.3 KiB
EmacsLisp
;;; llvm-mir-mode.el --- Major mode for LLVM Machine IR
|
|
|
|
;; Maintainer: The LLVM team, http://llvm.org/
|
|
;; Version: 1.0
|
|
|
|
;;; Commentary:
|
|
|
|
;; Major mode for editing LLVM MIR files.
|
|
|
|
;;; Code:
|
|
|
|
(require 'llvm-mode)
|
|
|
|
(defvar llvm-mir-mode-map
|
|
(let ((map (make-sparse-keymap)))
|
|
map)
|
|
"Keymap for `llvm-mir-mode'.")
|
|
|
|
(defvar llvm-mir-mode-syntax-table
|
|
(let ((st (make-syntax-table)))
|
|
(modify-syntax-entry ?% "_" st)
|
|
(modify-syntax-entry ?$ "_" st)
|
|
(modify-syntax-entry ?. "_" st)
|
|
(modify-syntax-entry ?# "< " st)
|
|
(modify-syntax-entry ?\; "< " st)
|
|
(modify-syntax-entry ?\n "> " st)
|
|
st)
|
|
"Syntax table for `llvm-mir-mode'.")
|
|
|
|
(defvar llvm-mir-font-lock-keywords
|
|
(append
|
|
(list
|
|
; YAML Attributes
|
|
'("^name: +\\([a-zA-Z._][-a-zA-Z._0-9]*\\)"
|
|
1 font-lock-function-name-face)
|
|
'("^body: +|" . font-lock-keyword-face)
|
|
'("^[a-zA-Z_.][-a-zA-Z._0-9]*:" . font-lock-keyword-face)
|
|
`(,(regexp-opt '("true" "false")) . font-lock-constant-face)
|
|
; YAML separators
|
|
'("^\\(---\\( |\\)?\\|\\.\\.\\.\\)$" . font-lock-comment-face)
|
|
; Registers
|
|
'("%[a-zA-Z_.][-a-zA-Z._0-9]*" . font-lock-variable-name-face)
|
|
'("%[0-9]+\\(\\.[a-zA-Z._0-9]+\\)?" . font-lock-variable-name-face)
|
|
'("$[a-zA-Z_.][-a-zA-Z._0-9]*" . font-lock-constant-face)
|
|
; Register classes
|
|
`(,(concat
|
|
"%\\([a-zA-Z_.][-a-zA-Z._0-9]*\\|[0-9]+\\(\\.[a-zA-Z._0-9]+\\)?\\)"
|
|
"\\(:[a-zA-Z_.][-a-zA-Z._0-9]*\\)")
|
|
3 font-lock-type-face)
|
|
'("class: \\([a-zA-Z_.][-a-zA-Z._0-9]*\\)" 1 font-lock-type-face)
|
|
; MO Register flags
|
|
`(,(regexp-opt '("dead" "debug-use" "def" "early-clobber" "implicit"
|
|
"implicit-def" "internal" "killed" "renamable" "undef")
|
|
'symbols)
|
|
. font-lock-keyword-face))
|
|
llvm-font-lock-keywords)
|
|
"Keyword highlighting specification for `llvm-mir-mode'.")
|
|
|
|
;;;###autoload
|
|
(define-derived-mode llvm-mir-mode prog-mode "LLVM MIR"
|
|
"A major mode for editing LLVM MIR files."
|
|
(setq-local comment-start "; ")
|
|
(setq-local font-lock-defaults `(llvm-mir-font-lock-keywords)))
|
|
|
|
;;;###autoload
|
|
(add-to-list 'auto-mode-alist (cons "\\.mir\\'" 'llvm-mir-mode))
|
|
|
|
(provide 'llvm-mir-mode)
|
|
|
|
;;; llvm-mir-mode.el ends here
|