summaryrefslogtreecommitdiff
path: root/.emacs
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-08-20 12:28:35 -0700
committerCliff Click <cliffc@acm.org>2026-08-20 12:28:35 -0700
commitede907775db2df00c0c99a7bc3f2994782125d67 (patch)
tree5b676781e64dbfb2f0a660b1e2d506da7d4d9754 /.emacs
parent3568f3deed586327f885ac98b73d07ae3ade6e57 (diff)
downloadSimple-ede907775db2df00c0c99a7bc3f2994782125d67.tar.gz
Simple-ede907775db2df00c0c99a7bc3f2994782125d67.zip
Squashed commit of the following:
commit a00bfc643e834498b020eb47ee37da4a17cf6e39 Author: Cliff Click <cliffc@acm.org> Date: Thu Aug 20 12:27:52 2026 -0700 Add a emacs Simple.el mode commit b5b399e16038d20ba6928aa329268b229b90e2f7 Author: Cliff Click <cliffc@acm.org> Date: Thu Aug 20 11:37:17 2026 -0700 Tone down expensive asserts Put the expensive asserts on a log-scale flag, run them only once every 2^N attempts
Diffstat (limited to '.emacs')
-rw-r--r--.emacs/simple-mode.el38
1 files changed, 38 insertions, 0 deletions
diff --git a/.emacs/simple-mode.el b/.emacs/simple-mode.el
new file mode 100644
index 00000000..47800806
--- /dev/null
+++ b/.emacs/simple-mode.el
@@ -0,0 +1,38 @@
+;;; simple-mode.el --- Major mode for Simple source files -*- lexical-binding: t; -*-
+
+(require 'cc-mode)
+
+(defconst simple-mode-primitive-types
+ '("int" "i8" "i16" "i32" "i64" "u8" "u16" "u32" "u64"
+ "byte" "bool" "flt" "f32" "f64" "val" "var")
+ "Primitive and built-in type names in Simple.")
+
+(defconst simple-mode-font-lock-keywords
+ `((,(regexp-opt simple-mode-primitive-types 'symbols) . font-lock-type-face)
+ (,(regexp-opt '("boolean" "long" "short" "char" "float" "double" "void") 'symbols) (0 nil t))
+ ("\\_<new\\_>\\s-+\\(?:[[:alpha:]_][[:alnum:]_$]*\\.\\)*\\([[:alpha:]_][[:alnum:]_$]*\\)" (1 nil t)))
+ "Additional Simple keywords using Java's type face.")
+
+(defun simple-mode-set-indentation ()
+ (setq-local c-basic-offset 4)
+ (setq-local indent-tabs-mode nil))
+
+(define-derived-mode simple-mode java-mode "Simple"
+ "Major mode for Simple .smp source files."
+ (simple-mode-set-indentation)
+ (setq-local c-primitive-type-key
+ (concat "\\(" (regexp-opt simple-mode-primitive-types) "\\)"
+ "\\([^[:alnum:]_$]\\|$\\)"))
+ (setq-local font-lock-defaults
+ `((,@java-font-lock-keywords ,@simple-mode-font-lock-keywords)
+ nil nil ((?_ . "w") (?$ . "w"))
+ c-beginning-of-syntax
+ (font-lock-mark-block-function . c-mark-function)))
+ (setq-local font-lock-keywords nil)
+ (font-lock-set-defaults)
+ (font-lock-mode 1))
+
+(add-hook 'simple-mode-hook #'simple-mode-set-indentation)
+
+(provide 'simple-mode)
+;;; simple-mode.el ends here