Function: symtable:operate
symtable:operate is a byte-compiled function defined in hact.el.
Signature
(symtable:operate OPERATION SYMBOL-OR-NAME SYMTABLE)
Documentation
Call hash-table OPERATION with Hyperbole SYMBOL-OR-NAME key for SYMTABLE.
Trigger an error if SYMBOL-OR-NAME cannot be mapped to an existing Elisp symbol or if SYMTABLE is invalid.
Source Code
;; Defined in ~/.emacs.d/elpa/hyperbole-20260414.325/hact.el
(defun symtable:operate (operation symbol-or-name symtable)
"Call hash-table OPERATION with Hyperbole SYMBOL-OR-NAME key for SYMTABLE.
Trigger an error if SYMBOL-OR-NAME cannot be mapped to an existing Elisp
symbol or if SYMTABLE is invalid."
(let ((name (cond ((stringp symbol-or-name)
symbol-or-name)
((symbolp symbol-or-name)
(symbol-name symbol-or-name))
(t (error "(symtable:operate): Invalid type for symbol-or-name: %s" symbol-or-name))))
(hash-table (plist-get symtable 'hash-table))
(intern-op (if (eq operation #'puthash) #'intern #'intern-soft))
def-name elisp-name elisp-symbol)
(unless hash-table
(error "(symtable:operate): symtable lacks required hash-table property: %s" symtable))
(if (string-match "\\`\\(actypes\\|ibtypes\\)::" name)
(setq def-name (substring name (match-end 0))
elisp-name name
elisp-symbol (funcall intern-op elisp-name))
(setq def-name name
elisp-name (concat (symtable:name symtable) "::" name)
elisp-symbol (funcall intern-op elisp-name)))
;; Comment this out so can look for and try to remove symbols not yet defined.
;; (unless elisp-symbol
;; (error "(symtable:operate): Use `%s' to create a new type named `%s' before using `%s' on it"
;; (if (equal (plist-get symtable 'name) "actypes") "defact" "defib")
;; def-name
;; operation))
(pcase operation
('gethash
(funcall operation def-name hash-table))
('remhash
(funcall operation elisp-name hash-table)
(funcall operation def-name hash-table))
('puthash
(funcall operation elisp-name elisp-symbol hash-table)
(funcall operation def-name elisp-symbol hash-table)
(gethash def-name hash-table))
(_ (error "(symtable:operate): Invalid operation request: %s" operation)))))