diff lisp/prim/featurep.el @ 140:585fb297b004 r20-2b4

Import from CVS: tag r20-2b4
author cvs
date Mon, 13 Aug 2007 09:32:43 +0200
parents
children 1856695b1fa9
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/prim/featurep.el	Mon Aug 13 09:32:43 2007 +0200
@@ -0,0 +1,65 @@
+;;; featurep.el --- Support functions for reader conditionals
+
+;; Copyright 1997 Naggum Software
+
+;; Author: Erik Naggum <erik@naggum.no>
+;; Keywords: internal
+
+;; This file is not (yet) part of GNU Emacs, but distributed under the
+;; same conditions as GNU Emacs, and is useless without GNU Emacs.
+
+;; GNU Emacs is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 2, or (at your option)
+;; any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs; see the file COPYING.  If not, write to
+;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+;; Boston, MA 02111-1307, USA.
+
+;;; Commentary:
+
+;; The #+ and #- reader macros require support code to work properly until
+;; `featurep' is enhanced in the C code.  This support code is written in
+;; Lisp to make it easier to experiment with the code.
+
+;;; Code:
+
+(eval-when-compile (require 'cl))
+
+(provide (if (string-match "XEmacs" emacs-version) 'xemacs 'emacs))
+
+(defvar featurep-emacs-version nil
+  "The version number of this Emacs, as a floating-point number.")
+
+(defun featurep (fexp)
+  "Return non-nil if feature expression FEXP is true."
+  (typecase fexp
+    (symbol (memq fexp features))       ;original definition
+    (number (>= (or featurep-emacs-version
+                    (setq featurep-emacs-version
+                      (+ emacs-major-version
+                         (/ emacs-minor-version 100.0))))
+                fexp))
+    (list (case (pop fexp)
+            (not (let ((negate (pop fexp)))
+                   (if fexp
+                     (signal 'invalid-read-syntax (list fexp))
+                     (not (featurep negate)))))
+            (and (while (and fexp (featurep (car fexp)))
+                   (pop fexp))
+                 (null fexp))
+            (or (while (and fexp (not (featurep (car fexp))))
+                  (pop fexp))
+                fexp)
+            (t (signal 'invalid-read-syntax (list fexp)))))
+    (t (signal 'invalid-read-syntax (list fexp)))))
+
+;;; featurep.el ends here
+