;;; broken.el --- Emacs broken facility infomation 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
;;; Code:
+(require 'static)
(require 'poe)
(eval-and-compile
)
(put 'broken-facility 'lisp-indent-function 1)
+
(defmacro broken-facility (facility &optional docstring assertion no-notice)
"Declare that FACILITY emulation is broken if ASSERTION is nil.
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 ommited 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