;;; 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 |