From: Glenn Morris Date: Thu, 30 May 2013 23:20:05 +0000 (-0400) Subject: cc-bytecomp tweaks for sake of byte-compiler X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~2026^2~123 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=2a8bed1c0266166b759578fad0fc408067f6441c;p=emacs.git cc-bytecomp tweaks for sake of byte-compiler * lisp/progmodes/cc-bytecomp.el (cc-bytecomp-noruntime-functions): New. (cc-require): Suppress spurious "noruntime" warnings. (cc-require-when-compile): Use fboundp, for sake of compiler. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 1803eb0f0f4..33f0f787d74 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,9 @@ 2013-05-30 Glenn Morris + * progmodes/cc-bytecomp.el (cc-bytecomp-noruntime-functions): New. + (cc-require): Suppress spurious "noruntime" warnings. + (cc-require-when-compile): Use fboundp, for sake of compiler. + * progmodes/cc-mode.el: Move load of cc-vars before that of cc-langs (which in turn loads cc-vars), to quieten compiler. diff --git a/lisp/progmodes/cc-bytecomp.el b/lisp/progmodes/cc-bytecomp.el index e41455f7883..337a5292417 100644 --- a/lisp/progmodes/cc-bytecomp.el +++ b/lisp/progmodes/cc-bytecomp.el @@ -232,6 +232,9 @@ perhaps a `cc-bytecomp-restore-environment' is forgotten somewhere")) (cc-bytecomp-setup-environment) t)))) +(defvar cc-bytecomp-noruntime-functions nil + "Saved value of `byte-compile-noruntime-functions'.") + (defmacro cc-require (cc-part) "Force loading of the corresponding .el file in the current directory during compilation, but compile in a `require'. Don't use within @@ -240,7 +243,16 @@ during compilation, but compile in a `require'. Don't use within Having cyclic cc-require's will result in infinite recursion. That's somewhat intentional." `(progn - (eval-when-compile (cc-bytecomp-load (symbol-name ,cc-part))) + (eval-when-compile + (setq cc-bytecomp-noruntime-functions byte-compile-noruntime-functions) + (cc-bytecomp-load (symbol-name ,cc-part))) + ;; Hack to suppress spurious "might not be defined at runtime" warnings. + ;; The basic issue is that + ;; (eval-when-compile (require 'foo)) + ;; (require 'foo) + ;; produces bogus noruntime warnings about functions from foo. + (eval-when-compile + (setq byte-compile-noruntime-functions cc-bytecomp-noruntime-functions)) (require ,cc-part))) (defmacro cc-provide (feature) @@ -266,7 +278,7 @@ somewhat intentional." during compilation, but do a compile time `require' otherwise. Don't use within `eval-when-compile'." `(eval-when-compile - (if (and (featurep 'cc-bytecomp) + (if (and (fboundp 'cc-bytecomp-is-compiling) (cc-bytecomp-is-compiling)) (if (or (not load-in-progress) (not (featurep ,cc-part)))