aboutsummaryrefslogtreecommitdiffstats
path: root/utils/emacs/tablegen-mode.el
diff options
context:
space:
mode:
authorDan Gohman <djg@cray.com>2007-07-18 16:29:46 +0000
committerDan Gohman <djg@cray.com>2007-07-18 16:29:46 +0000
commitf17a25c88b892d30c2b41ba7ecdfbdfb2b4be9cc (patch)
treeebb79ea1ee5e3bc1fdf38541a811a8b804f0679a /utils/emacs/tablegen-mode.el
downloadexternal_llvm-f17a25c88b892d30c2b41ba7ecdfbdfb2b4be9cc.tar.gz
external_llvm-f17a25c88b892d30c2b41ba7ecdfbdfb2b4be9cc.tar.bz2
external_llvm-f17a25c88b892d30c2b41ba7ecdfbdfb2b4be9cc.zip
It's not necessary to do rounding for alloca operations when the requested
alignment is equal to the stack alignment. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40004 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/emacs/tablegen-mode.el')
-rw-r--r--utils/emacs/tablegen-mode.el133
1 files changed, 133 insertions, 0 deletions
diff --git a/utils/emacs/tablegen-mode.el b/utils/emacs/tablegen-mode.el
new file mode 100644
index 0000000000..af33cbd37f
--- /dev/null
+++ b/utils/emacs/tablegen-mode.el
@@ -0,0 +1,133 @@
+;; Maintainer: The LLVM team, http://llvm.org/
+;; Description: Major mode for TableGen description files (part of LLVM project)
+;; Updated: 2007-03-26
+
+(require 'comint)
+(require 'custom)
+(require 'ansi-color)
+
+;; Create mode-specific tables.
+(defvar tablegen-mode-syntax-table nil
+ "Syntax table used while in TableGen mode.")
+
+(defvar td-decorators-face 'td-decorators-face
+ "Face method decorators.")
+(make-face 'td-decorators-face)
+
+(defvar tablegen-font-lock-keywords
+ (let ((kw (mapconcat 'identity
+ '("class" "def" "defm" "field" "in" "include"
+ "let" "multiclass")
+ "\\|"))
+ (type-kw (mapconcat 'identity
+ '("bit" "bits" "code" "dag" "int" "list" "string")
+ "\\|"))
+ )
+ (list
+ ;; Comments
+ '("\/\/" . font-lock-comment-face)
+ ;; Strings
+ '("\"[^\"]+\"" . font-lock-string-face)
+ ;; Hex constants
+ '("0x[0-9A-Fa-f]+" . font-lock-preprocessor-face)
+ ;; Binary constants
+ '("0b[01]+" . font-lock-preprocessor-face)
+ ;; Integer literals
+ '("[-]?[0-9]+" . font-lock-preprocessor-face)
+ ;; Floating point constants
+ '("[-+]?[0-9]+\.[0-9]*\([eE][-+]?[0-9]+\)?" . font-lock-preprocessor-face)
+
+ '("^[ \t]*\\(@.+\\)" 1 'td-decorators-face)
+ ;; Keywords
+ (cons (concat "\\<\\(" kw "\\)\\>[ \n\t(]") 1)
+
+ ;; Type keywords
+ (cons (concat "\\<\\(" type-kw "\\)[ \n\t(]") 1)
+ ))
+ "Additional expressions to highlight in TableGen mode.")
+(put 'tablegen-mode 'font-lock-defaults '(tablegen-font-lock-keywords))
+
+;; ---------------------- Syntax table ---------------------------
+;; Shamelessly ripped from jasmin.el
+;; URL: http://www.neilvandyke.org/jasmin-emacs/jasmin.el.html
+
+(if (not tablegen-mode-syntax-table)
+ (progn
+ (setq tablegen-mode-syntax-table (make-syntax-table))
+ (mapcar (function (lambda (n)
+ (modify-syntax-entry (aref n 0)
+ (aref n 1)
+ tablegen-mode-syntax-table)))
+ '(
+ ;; whitespace (` ')
+ [?\^m " "]
+ [?\f " "]
+ [?\n " "]
+ [?\t " "]
+ [?\ " "]
+ ;; word constituents (`w')
+ ;;[?< "w"]
+ ;;[?> "w"]
+ [?\% "w"]
+ ;;[?_ "w "]
+ ;; comments
+ [?\; "< "]
+ [?\n "> "]
+ ;;[?\r "> "]
+ ;;[?\^m "> "]
+ ;; symbol constituents (`_')
+ ;; punctuation (`.')
+ ;; open paren (`(')
+ [?\( "("]
+ [?\[ "("]
+ [?\{ "("]
+ ;; close paren (`)')
+ [?\) ")"]
+ [?\] ")"]
+ [?\} ")"]
+ ;; string quote ('"')
+ [?\" "\""]
+ ))))
+
+;; --------------------- Abbrev table -----------------------------
+
+(defvar tablegen-mode-abbrev-table nil
+ "Abbrev table used while in TableGen mode.")
+(define-abbrev-table 'tablegen-mode-abbrev-table ())
+
+(defvar tablegen-mode-hook nil)
+(defvar tablegen-mode-map nil) ; Create a mode-specific keymap.
+
+(if (not tablegen-mode-map)
+ () ; Do not change the keymap if it is already set up.
+ (setq tablegen-mode-map (make-sparse-keymap))
+ (define-key tablegen-mode-map "\t" 'tab-to-tab-stop)
+ (define-key tablegen-mode-map "\es" 'center-line)
+ (define-key tablegen-mode-map "\eS" 'center-paragraph))
+
+
+(defun tablegen-mode ()
+ "Major mode for editing TableGen description files.
+ \\{tablegen-mode-map}
+ Runs tablegen-mode-hook on startup."
+ (interactive)
+ (kill-all-local-variables)
+ (use-local-map tablegen-mode-map) ; Provides the local keymap.
+ (setq major-mode 'tablegen-mode)
+
+ (make-local-variable 'font-lock-defaults)
+ (setq major-mode 'tablegen-mode ; This is how describe-mode
+ ; finds the doc string to print.
+ mode-name "TableGen" ; This name goes into the modeline.
+ font-lock-defaults `(tablegen-font-lock-keywords))
+
+ (setq local-abbrev-table tablegen-mode-abbrev-table)
+ (set-syntax-table tablegen-mode-syntax-table)
+ (run-hooks 'tablegen-mode-hook)) ; Finally, this permits the user to
+ ; customize the mode with a hook.
+
+;; Associate .td files with tablegen-mode
+(setq auto-mode-alist (append '(("\\.td$" . tablegen-mode)) auto-mode-alist))
+
+(provide 'tablegen-mode)
+;; end of tablegen-mode.el