;;
;; If old (v18) compiler is used, top-level macros are expanded at
;; *load-time*, not compile-time. So, you cannot use macros defined
-;; in this file using `defmacro-maybe'. Especially, you cannot use
-;; `eval-when-compile' and `eval-and-compile' in this file.
+;; in this file using `defmacro-maybe'. In addition, due to this
+;; limitation, `eval-when-compile' and `eval-and-compile' provided by
+;; this file do not do compile-time evaluation at all.
;;; Code:
;;; @ Compilation Features
;;;
-(put 'eval-when-compile 'lisp-indent-hook 0)
-(defmacro-maybe eval-when-compile (&rest body)
- "Like progn, but evaluates the body at compile-time.
-
-This emulating macro does not work if used at top-level.
-Top-level macros are expanded at load-time.
-\[poe-18.el; EMACS 19 emulating macro]"
- (list 'quote (eval (cons 'progn body))))
-
-(put 'eval-and-compile 'lisp-indent-hook 0)
-(defmacro-maybe eval-and-compile (&rest body)
- "Like progn, but evaluates the body at compile-time as well as at load-time.
+;;; emulate all functions and macros of emacs-20.3/lisp/byte-run.el.
+;;; (note: jwz's original compiler and XEmacs compiler have some more
+;;; macros; they are "nuked" by rms in FSF version.)
-This emulating macro does not work if used at top-level.
-Top-level macros are expanded at load-time.
-\[poe-18.el; EMACS 19 emulating macro]"
- ;; `form' is a parameter of `byte-compile-form'. kludge! kludge! kludge!
- ;; this kludge prevents from evaluating `body' twice when this macro is
- ;; expanded at load-time.
- (if (and (boundp 'form)
- (eq (car-safe form) 'eval-and-compile))
- (eval (cons 'progn body)))
- (cons 'progn body))
+(put 'inline 'lisp-indent-hook 0)
+(defalias-maybe 'inline 'progn)
(put 'defsubst 'lisp-indent-hook 'defun)
(put 'defsubst 'edebug-form-spec 'defun)
(defmacro-maybe defsubst (name arglist &rest body)
"Define an inline function. The syntax is just like that of `defun'.
-This emulating macro does not support function inlining because old (v18)
+This emulating macro does not support function inlining because old \(v18\)
compiler does not support inlining feature.
\[poe-18.el; EMACS 19 emulating macro]"
(cons 'defun (cons name (cons arglist body))))
The warning will say that NEW should be used instead.
If NEW is a string, that is the `use instead' message.
-This emulating function does nothing because old (v18) compiler does not
+This emulating function does nothing because old \(v18\) compiler does not
support this feature.
\[poe-18.el; EMACS 19 emulating function]"
(interactive "aMake function obsolete: \nxObsoletion replacement: ")
fn)
+(defun-maybe make-obsolete-variable (var new)
+ "Make the byte-compiler warn that VARIABLE is obsolete,
+and NEW should be used instead. If NEW is a string, then that is the
+`use instead' message.
+
+This emulating function does nothing because old \(v18\) compiler does not
+support this feature.
+\[poe-18.el; EMACS 19 emulating function]"
+ (interactive "vMake variable obsolete: \nxObsoletion replacement: ")
+ var)
+
+(put 'dont-compile 'lisp-indent-hook 0)
+(defmacro-maybe dont-compile (&rest body)
+ "Like `progn', but the body always runs interpreted \(not compiled\).
+If you think you need this, you're probably making a mistake somewhere.
+\[poe-18.el; EMACS 19 emulating macro]"
+ (list 'eval (list 'quote (if (cdr body) (cons 'progn body) (car body)))))
+
+(put 'eval-when-compile 'lisp-indent-hook 0)
+(defmacro-maybe eval-when-compile (&rest body)
+ "Like progn, but evaluates the body at compile-time.
+
+This emulating macro does not do compile-time evaluation at all because
+of the limitation of old \(v18\) compiler.
+\[poe-18.el; EMACS 19 emulating macro]"
+ (cons 'progn body))
+
+(put 'eval-and-compile 'lisp-indent-hook 0)
+(defmacro-maybe eval-and-compile (&rest body)
+ "Like progn, but evaluates the body at compile-time as well as at load-time.
+
+This emulating macro does not do compile-time evaluation at all because
+of the limitation of old \(v18\) compiler.
+\[poe-18.el; EMACS 19 emulating macro]"
+ (cons 'progn body))
+
;;; @ text property
;;;