all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* bug#2951: Suggestion: self-evaluating-p function
@ 2009-04-10 21:31 Ralph Schleicher
  2009-04-11 12:53 ` Stefan Monnier
  0 siblings, 1 reply; 7+ messages in thread
From: Ralph Schleicher @ 2009-04-10 21:31 UTC (permalink / raw)
  To: bug-gnu-emacs

I would like to have a 'self-evaluating-p' function in Emacs to check
whether or not a value has to be quoted.

Please find attached a patch with an example implementation together
with ChangeLog entries and documentation.


diff -u emacs-22.3/lisp/ChangeLog.orig emacs-22.3/lisp/ChangeLogyes
--- emacs-22.3/lisp/ChangeLog.orig	2008-09-05 18:12:23.000000000 +0200
+++ emacs-22.3/lisp/ChangeLog	2009-04-10 22:52:48.000000000 +0200
@@ -1,3 +1,7 @@
+2009-04-10  Ralph Schleicher  <rs@ralph-schleicher.de>
+
+	* subr.el (self-evaluating-p): New function.
+
 2008-09-05  Chong Yidong  <cyd@stupidchicken.com>
 
 	* Version 22.3 released.
diff -u emacs-22.3/lisp/subr.el.orig emacs-22.3/lisp/subr.el
--- emacs-22.3/lisp/subr.el.orig	2008-09-02 17:15:26.000000000 +0200
+++ emacs-22.3/lisp/subr.el	2009-04-10 22:51:26.000000000 +0200
@@ -185,6 +185,19 @@
   (while t
     (signal 'error (list (apply 'format args)))))
 
+(defun self-evaluating-p (object)
+  "Return t if OBJECT is a self-evaluating form.
+That means OBJECT is neither a symbol nor a list except for
+nil (which is a symbol and a list), t (which is a symbol),
+keywords (which are symbols), and lambda expressions (which
+are lists)."
+  (if (symbolp object)
+      (or (eq object nil)
+	  (eq object t)
+	  (keywordp object))
+    (or (atom object)
+	(eq (car object) 'lambda))))
+
 ;; We put this here instead of in frame.el so that it's defined even on
 ;; systems where frame.el isn't loaded.
 (defun frame-configuration-p (object)
diff -u emacs-22.3/lispref/ChangeLog.orig emacs-22.3/lispref/ChangeLog
--- emacs-22.3/lispref/ChangeLog.orig	2008-09-05 18:12:32.000000000 +0200
+++ emacs-22.3/lispref/ChangeLog	2009-04-10 22:52:32.000000000 +0200
@@ -1,3 +1,7 @@
+2009-04-10  Ralph Schleicher  <rs@ralph-schleicher.de>
+
+	* eval.texi (Self-Evaluating Forms): Add self-evaluating-p.
+
 2008-09-05  Chong Yidong  <cyd@stupidchicken.com>
 
 	* Version 22.3 released.
diff -u emacs-22.3/lispref/eval.texi.orig emacs-22.3/lispref/eval.texi
--- emacs-22.3/lispref/eval.texi.orig	2008-01-07 09:49:06.000000000 +0100
+++ emacs-22.3/lispref/eval.texi	2009-04-10 22:43:34.000000000 +0200
@@ -178,6 +178,36 @@
 @end group
 @end example
 
+@defun self-evaluating-p object
+This function returns @code{t} if @var{object} is a self-evaluating
+form.  That means, @var{object} is neither a symbol nor a list except
+for @code{nil} (which is a symbol and a list), @code{t} (which is a
+symbol), keywords (which are symbols), and lambda expressions (which
+are lists).  @xref{Constant Variables}, and @ref{Lambda Expressions},
+for more information.
+@end defun
+
+  Please note that @code{self-evaluating-p} only flags those symbols
+as self-evaluating forms where the result does not depend on scope.
+
+@example
+@group
+(setq foo 1)
+     @result{} 1
+(self-evaluating-p 'foo)
+     @result{} nil
+(let ((foo 'foo))
+  (self-evaluating-p 'foo))
+     @result{} nil
+;; @r{Likewise with @code{eq}.}
+(eq 'foo foo)
+     @result{} nil
+(let ((foo 'foo))
+  (eq 'foo foo))
+     @result{} t
+@end group
+@end example
+
 @node Symbol Forms
 @subsection Symbol Forms
 @cindex symbol evaluation

-- 
Ralph







^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2009-04-14 16:53 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-04-10 21:31 bug#2951: Suggestion: self-evaluating-p function Ralph Schleicher
2009-04-11 12:53 ` Stefan Monnier
2009-04-11 21:35   ` Ralph Schleicher
2009-04-13 17:49     ` Stefan Monnier
2009-04-13 21:04       ` Ralph Schleicher
2009-04-14  2:06         ` Stefan Monnier
2009-04-14 16:53           ` Ralph Schleicher

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.