--- /dev/null
+(define-module (lang elisp internals set)
+ #:use-module (lang elisp internals evaluation)
+ #:use-module (lang elisp internals signal)
+ #:export (set value))
+
+;; Set SYM's variable value to VAL, and return VAL.
+(define (set sym val)
+ (if (module-defined? the-elisp-module sym)
+ (module-set! the-elisp-module sym val)
+ (module-define! the-elisp-module sym val))
+ val)
+
+;; Return SYM's variable value. If it has none, signal an error if
+;; MUST-EXIST is true, just return #nil otherwise.
+(define (value sym must-exist)
+ (if (module-defined? the-elisp-module sym)
+ (module-ref the-elisp-module sym)
+ (if must-exist
+ (error "Symbol's value as variable is void:" sym)
+ %nil)))