diff options
Diffstat (limited to 'editors')
| -rw-r--r-- | editors/sail2-mode.el | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/editors/sail2-mode.el b/editors/sail2-mode.el new file mode 100644 index 00000000..4e536ef0 --- /dev/null +++ b/editors/sail2-mode.el @@ -0,0 +1,54 @@ + +(defvar sail2-mode-hook nil) + +(add-to-list 'auto-mode-alist '("\\.sail\\'" . sail-mode)) + +(defconst sail2-keywords + '("val" "function" "type" "struct" "union" "enum" "let" "if" "then" + "else" "match" "in" "return" "register" "forall" "op" "effect" + "overload" "cast" "sizeof" "constraint" "default" "assert" + "pure" "infixl" "infixr" "infix" "scattered" "end" "try" "catch" + "throw" "clause")) + +(defconst sail2-kinds + '("Int" "Type" "Order" "inc" "dec" + "barr" "depend" "rreg" "wreg" "rmem" "rmemt" "wmv" "wmvt" "eamem" + "exmem" "undef" "unspec" "nondet" "escape")) + +(defconst sail2-types + '("vector" "int" "atom" "range" "unit" "bit" "real" "list" "bool" "string")) + +(defconst sail2-font-lock-keywords + `((,(regexp-opt sail2-keywords 'symbols) . font-lock-keyword-face) + (,(regexp-opt sail2-kinds 'symbols) . font-lock-builtin-face) + (,(regexp-opt sail2-types 'symbols) . font-lock-type-face) + ("\'[a-zA-z_]+" . font-lock-variable-name-face) + ("\\_<\\([0-9]+\\|0b[0-9]+\\|0x[0-9a-fA-F]+\\|true\\|false\\|bitone\\|bitzero\\)\\_>\\|()" . font-lock-constant-face))) + +(defconst sail2-mode-syntax-table + (let ((st (make-syntax-table))) + (modify-syntax-entry ?_ "w" st) + (modify-syntax-entry ?' "w" st) + (modify-syntax-entry ?* ". 23" st) + (condition-case nil + (progn + (modify-syntax-entry ?\( "()1n" st) + (modify-syntax-entry ?\) ")(4n" st)) + (error ; XEmacs signals an error instead of ignoring `n'. + (modify-syntax-entry ?\( "()1" st) + (modify-syntax-entry ?\) ")(4" st))) + st) + "Syntax table for Sail2 mode") + +(defun sail2-mode () + "Major mode for editing Sail Language files" + (interactive) + (kill-all-local-variables) + (set-syntax-table sail2-mode-syntax-table) + (setq font-lock-defaults '(sail2-font-lock-keywords)) + (setq major-mode 'sail2-mode) + (setq mode-name "Sail2") + (run-hooks 'sail2-mode-hook)) + +(provide 'sail2-mode) + |
