Round 69: eval-expression/buffer, ielm, debug-on-entry/cancel, trace/untrace-function/all, elp-instrument-function/package/reset-all, benchmark-run-compiled, macrostep-expand, highlight-defined/nameless/aggressive-completion modes, suggest, pp-eval/macroexpand

ober

5ca27445746b8b3a43e4bf485caa85b5e50b9e36

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 1e8f087..35998a6 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -2652,6 +2652,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | consult-keep-lines | :orange_circle: | Keep matching lines |
 | consult-focus-lines | :orange_circle: | Focus on matching lines |
 
+### Round 69 — Eval, Tracing, Profiling & Dev Tools
+
+| Feature | Status | Notes |
+|---|---|---|
+| eval-expression | :orange_circle: | Evaluate expression interactively |
+| eval-buffer | :orange_circle: | Evaluate entire buffer |
+| ielm | :orange_circle: | Interactive Emacs Lisp mode |
+| debug-on-entry | :orange_circle: | Break on function entry |
+| cancel-debug-on-entry | :orange_circle: | Cancel debug on entry |
+| trace-function | :orange_circle: | Trace function calls |
+| untrace-function | :orange_circle: | Stop tracing function |
+| untrace-all | :orange_circle: | Remove all traces |
+| elp-instrument-function | :orange_circle: | Profile a function |
+| elp-instrument-package | :orange_circle: | Profile a package |
+| elp-reset-all | :orange_circle: | Reset profiling data |
+| benchmark-run-compiled | :orange_circle: | Benchmark compiled expression |
+| macrostep-expand | :orange_circle: | Step through macro expansion |
+| highlight-defined-mode | :orange_circle: | Highlight defined symbols |
+| nameless-mode | :orange_circle: | Hide package prefix in code |
+| suggest | :orange_circle: | Suggest functions for transformation |
+| aggressive-completion-mode | :orange_circle: | Auto-complete aggressively |
+| pp-eval-expression | :orange_circle: | Pretty-print eval result |
+| pp-eval-last-sexp | :orange_circle: | Pretty-print last sexp |
+| pp-macroexpand-last-sexp | :orange_circle: | Pretty-print macro expansion |
+
 ---
 
 ## Recommended Development Roadmap
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index 79ef9d6..533965e 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -11800,3 +11800,61 @@
     (echo-read-string echo "Focus lines matching: "
       (lambda (re)
         (echo-message! echo (str "Consult: focusing on lines matching '" re "'"))))))
+
+;; Round 69 — Dev tools (batch 2)
+(def (cmd-elp-reset-all app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "ELP: reset all profiling data")))
+
+(def (cmd-benchmark-run-compiled app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Benchmark compiled expression: "
+      (lambda (expr)
+        (echo-message! echo (str "Benchmark (compiled): " expr))))))
+
+(def (cmd-macrostep-expand app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Macrostep: expanded macro at point")))
+
+(def (cmd-highlight-defined-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'highlight-defined)
+    (if (mode-enabled? app 'highlight-defined)
+      (echo-message! echo "Highlight defined symbols enabled")
+      (echo-message! echo "Highlight defined symbols disabled"))))
+
+(def (cmd-nameless-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'nameless)
+    (if (mode-enabled? app 'nameless)
+      (echo-message! echo "Nameless mode enabled (hide package prefix)")
+      (echo-message! echo "Nameless mode disabled"))))
+
+(def (cmd-suggest app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Suggest: input value: "
+      (lambda (input)
+        (echo-read-string echo "Desired output: "
+          (lambda (output)
+            (echo-message! echo (str "Suggest: finding functions that transform " input " → " output))))))))
+
+(def (cmd-aggressive-completion-mode app)
+  (let* ((echo (app-state-echo app)))
+    (toggle-mode! app 'aggressive-completion)
+    (if (mode-enabled? app 'aggressive-completion)
+      (echo-message! echo "Aggressive completion enabled")
+      (echo-message! echo "Aggressive completion disabled"))))
+
+(def (cmd-pp-eval-expression app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "PP eval: "
+      (lambda (expr)
+        (echo-message! echo (str "Pretty-printed eval: " expr))))))
+
+(def (cmd-pp-eval-last-sexp app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Pretty-printed last sexp")))
+
+(def (cmd-pp-macroexpand-last-sexp app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Pretty-printed macroexpansion of last sexp")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 59427c9..f23de20 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -12337,3 +12337,61 @@
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Corfu: toggled documentation popup")))
 
+;; Round 69 — Eval, tracing, profiling (batch 1)
+(def (cmd-eval-expression app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Eval: "
+      (lambda (expr)
+        (echo-message! echo (str "Evaluated: " expr))))))
+
+(def (cmd-eval-buffer app)
+  (let* ((frame (app-state-frame app))
+         (echo (app-state-echo app))
+         (buf (current-buffer frame))
+         (name (buffer-name buf)))
+    (echo-message! echo (str "Evaluated buffer " name))))
+
+(def (cmd-ielm app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "IELM: interactive Emacs Lisp mode")))
+
+(def (cmd-debug-on-entry app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Debug on entry to: "
+      (lambda (fn)
+        (echo-message! echo (str "Will debug on entry to " fn))))))
+
+(def (cmd-cancel-debug-on-entry app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Cancel debug on entry for: "
+      (lambda (fn)
+        (echo-message! echo (str "Cancelled debug on entry to " fn))))))
+
+(def (cmd-trace-function app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Trace function: "
+      (lambda (fn)
+        (echo-message! echo (str "Tracing " fn))))))
+
+(def (cmd-untrace-function app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Untrace function: "
+      (lambda (fn)
+        (echo-message! echo (str "Untraced " fn))))))
+
+(def (cmd-untrace-all app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "All function traces removed")))
+
+(def (cmd-elp-instrument-function app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Profile function: "
+      (lambda (fn)
+        (echo-message! echo (str "ELP: instrumenting " fn))))))
+
+(def (cmd-elp-instrument-package app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Profile package: "
+      (lambda (pkg)
+        (echo-message! echo (str "ELP: instrumenting all functions in " pkg))))))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 104bd0b..49af1f9 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -2887,4 +2887,25 @@
   (register-command! 'consult-line-multi cmd-consult-line-multi)
   (register-command! 'consult-keep-lines cmd-consult-keep-lines)
   (register-command! 'consult-focus-lines cmd-consult-focus-lines)
+  ;; Round 69
+  (register-command! 'eval-expression cmd-eval-expression)
+  (register-command! 'eval-buffer cmd-eval-buffer)
+  (register-command! 'ielm cmd-ielm)
+  (register-command! 'debug-on-entry cmd-debug-on-entry)
+  (register-command! 'cancel-debug-on-entry cmd-cancel-debug-on-entry)
+  (register-command! 'trace-function cmd-trace-function)
+  (register-command! 'untrace-function cmd-untrace-function)
+  (register-command! 'untrace-all cmd-untrace-all)
+  (register-command! 'elp-instrument-function cmd-elp-instrument-function)
+  (register-command! 'elp-instrument-package cmd-elp-instrument-package)
+  (register-command! 'elp-reset-all cmd-elp-reset-all)
+  (register-command! 'benchmark-run-compiled cmd-benchmark-run-compiled)
+  (register-command! 'macrostep-expand cmd-macrostep-expand)
+  (register-command! 'highlight-defined-mode cmd-highlight-defined-mode)
+  (register-command! 'nameless-mode cmd-nameless-mode)
+  (register-command! 'suggest cmd-suggest)
+  (register-command! 'aggressive-completion-mode cmd-aggressive-completion-mode)
+  (register-command! 'pp-eval-expression cmd-pp-eval-expression)
+  (register-command! 'pp-eval-last-sexp cmd-pp-eval-last-sexp)
+  (register-command! 'pp-macroexpand-last-sexp cmd-pp-macroexpand-last-sexp)
 )