update.
[elisp/apel.git] / broken.el
index 7486b7e..81d1ec6 100644 (file)
--- a/broken.el
+++ b/broken.el
@@ -1,6 +1,6 @@
-;;; broken.el --- Emacs broken facility infomation registry.
+;;; broken.el --- Emacs broken facility information registry.
 
-;; Copyright (C) 1998 Tanaka Akira <akr@jaist.ac.jp>
+;; Copyright (C) 1998, 1999 Tanaka Akira <akr@jaist.ac.jp>
 
 ;; Author: Tanaka Akira <akr@jaist.ac.jp>
 ;; Keywords: emulation, compatibility, incompatibility, Mule
 
 ;; 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.
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Code:
 
+(require 'static)
+(require 'poe)
+
 (eval-and-compile
 
   (defvar notice-non-obvious-broken-facility t
@@ -53,34 +56,38 @@ ASSERTION is evaluated statically.
 
 FACILITY must be symbol.
 
-If ASSERTION is not ommited and evaluated to nil and NO-NOTICE is nil, it is noticed."
-  (let ((assertion-value (eval assertion)))
-    (eval (` (broken-facility-internal
-             '(, facility) (, docstring) '(, assertion-value))))
-    (when (and assertion (not assertion-value) (not no-notice)
-              notice-non-obvious-broken-facility)
-      (message "BROKEN FACILITY DETECTED: %s" docstring))
-    (` (broken-facility-internal
-       '(, facility) (, docstring) '(, assertion-value)))))
+If ASSERTION is not omitted and evaluated to nil and NO-NOTICE is nil,
+it is noticed."
+  (` (static-if (, assertion)
+        (eval-and-compile
+          (broken-facility-internal '(, facility) (, docstring) t))
+       (eval-when-compile
+        (when (and '(, assertion) (not '(, no-notice))
+                   notice-non-obvious-broken-facility)
+          (message "BROKEN FACILITY DETECTED: %s" (, docstring)))
+        nil)
+       (eval-and-compile
+        (broken-facility-internal '(, facility) (, docstring) nil)))))
 
 (put 'if-broken 'lisp-indent-function 2)
 (defmacro if-broken (facility then &rest else)
   "If FACILITY is broken, expand to THEN, otherwise (progn . ELSE)."
-  (if (broken-p facility)
-      then
-    (` (progn . (, else)))))
+  (` (static-if (broken-p '(, facility))
+        (, then)
+       (,@ else))))
+
 
 (put 'when-broken 'lisp-indent-function 1)
 (defmacro when-broken (facility &rest body)
   "If FACILITY is broken, expand to (progn . BODY), otherwise nil."
-  (when (broken-p facility)
-    (` (progn . (, body)))))
+  (` (static-when (broken-p '(, facility))
+       (,@ body))))
 
 (put 'unless-broken 'lisp-indent-function 1)
 (defmacro unless-broken (facility &rest body)
   "If FACILITY is not broken, expand to (progn . BODY), otherwise nil."
-  (unless (broken-p facility)
-    (` (progn . (, body)))))
+  (` (static-unless (broken-p '(, facility))
+       (,@ body))))
 
 (defmacro check-broken-facility (facility)
   "Check FACILITY is broken or not. If the status is different on
@@ -101,6 +108,7 @@ compile(macro expansion) time and run time, warn it."
 ;;; @ end
 ;;;
 
-(provide 'broken)
+(require 'product)
+(product-provide (provide 'broken) (require 'apel-ver))
 
 ;;; broken.el ends here