unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Re: [Emacs-diffs] master e4de91d: Introduce new macros to cover Emacs's new names in cl-lib.el.
       [not found] ` <E1ZPdcz-0000Aw-Eb@vcs.savannah.gnu.org>
@ 2015-08-13  2:48   ` Stefan Monnier
  2015-08-13 10:55     ` Alan Mackenzie
  0 siblings, 1 reply; 5+ messages in thread
From: Stefan Monnier @ 2015-08-13  2:48 UTC (permalink / raw)
  To: emacs-devel; +Cc: Alan Mackenzie

>     Change this back to cc-external-require from an eval-when-compile
>     require.

I haven't been able to figure out what is the difference.  Can you
enlighten us with, ideally, a testcase?


        Stefan



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Emacs-diffs] master e4de91d: Introduce new macros to cover Emacs's new names in cl-lib.el.
  2015-08-13  2:48   ` [Emacs-diffs] master e4de91d: Introduce new macros to cover Emacs's new names in cl-lib.el Stefan Monnier
@ 2015-08-13 10:55     ` Alan Mackenzie
  2015-08-13 16:02       ` Stefan Monnier
  0 siblings, 1 reply; 5+ messages in thread
From: Alan Mackenzie @ 2015-08-13 10:55 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

Hello, Stefan.

On Wed, Aug 12, 2015 at 10:48:42PM -0400, Stefan Monnier wrote:
> >     Change this back to cc-external-require from an eval-when-compile
> >     require.

> I haven't been able to figure out what is the difference.  Can you
> enlighten us with, ideally, a testcase?

The (eval-when-compile (require 'cl)) was inadequate, because
cl.el (now cl-lib.el) is now required at run-time, too.  Without the
change, the error "cl-mapcan not known" gets thrown when attempting to
visit the first file.c in an Emacs session.

>         Stefan

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Emacs-diffs] master e4de91d: Introduce new macros to cover Emacs's new names in cl-lib.el.
  2015-08-13 10:55     ` Alan Mackenzie
@ 2015-08-13 16:02       ` Stefan Monnier
  2015-08-15 12:34         ` Alan Mackenzie
  0 siblings, 1 reply; 5+ messages in thread
From: Stefan Monnier @ 2015-08-13 16:02 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: emacs-devel

> The (eval-when-compile (require 'cl)) was inadequate, because
> cl.el (now cl-lib.el) is now required at run-time, too.  Without the
> change, the error "cl-mapcan not known" gets thrown when attempting to
> visit the first file.c in an Emacs session.

Oh, right, sorry, so the question becomes: what is the difference
between `require' and `cc-external-require' here?


        Stefan



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Emacs-diffs] master e4de91d: Introduce new macros to cover Emacs's new names in cl-lib.el.
  2015-08-13 16:02       ` Stefan Monnier
@ 2015-08-15 12:34         ` Alan Mackenzie
  2015-08-18 16:05           ` Stefan Monnier
  0 siblings, 1 reply; 5+ messages in thread
From: Alan Mackenzie @ 2015-08-15 12:34 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

Hello, Stefan.

On Thu, Aug 13, 2015 at 12:02:20PM -0400, Stefan Monnier wrote:
> > The (eval-when-compile (require 'cl)) was inadequate, because
> > cl.el (now cl-lib.el) is now required at run-time, too.  Without the
> > change, the error "cl-mapcan not known" gets thrown when attempting to
> > visit the first file.c in an Emacs session.

> Oh, right, sorry, so the question becomes: what is the difference
> between `require' and `cc-external-require' here?

Not a great deal, to be honest.  The main difference is that symbols
whose function cell has been given a placeholder value to inhibit
compiler warnings have these function cells restored to their correct
values in `cc-external-require' around the actual `require'.

An example of an XEmacs function which gets this treatment is
`buffer-syntactic-context'.  An example of an Emacs function is
`string-to-syntax'.

>         Stefan

-- 
Alan Mackenzie (Nuremberg, Germany).



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [Emacs-diffs] master e4de91d: Introduce new macros to cover Emacs's new names in cl-lib.el.
  2015-08-15 12:34         ` Alan Mackenzie
@ 2015-08-18 16:05           ` Stefan Monnier
  0 siblings, 0 replies; 5+ messages in thread
From: Stefan Monnier @ 2015-08-18 16:05 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: emacs-devel

>> > The (eval-when-compile (require 'cl)) was inadequate, because
>> > cl.el (now cl-lib.el) is now required at run-time, too.  Without the
>> > change, the error "cl-mapcan not known" gets thrown when attempting to
>> > visit the first file.c in an Emacs session.
>> Oh, right, sorry, so the question becomes: what is the difference
>> between `require' and `cc-external-require' here?
> Not a great deal, to be honest.  The main difference is that symbols
> whose function cell has been given a placeholder value to inhibit
> compiler warnings have these function cells restored to their correct
> values in `cc-external-require' around the actual `require'.

Ah, so it tries to restore temporary sanity while loading the file.
That makes sense, thank you.

> An example of an XEmacs function which gets this treatment is
> `buffer-syntactic-context'.  An example of an Emacs function is
> `string-to-syntax'.

BTW, how 'bout using something like the patch below, to try and avoid
messing with function cells when we can?


        Stefan


diff --git a/lisp/progmodes/cc-bytecomp.el b/lisp/progmodes/cc-bytecomp.el
index b63eeb4..fe7cac7 100644
--- a/lisp/progmodes/cc-bytecomp.el
+++ b/lisp/progmodes/cc-bytecomp.el
@@ -377,6 +377,8 @@
 about incorrect number of arguments.  It's dangerous to try to replace
 existing functions since the byte compiler might need the definition
 at compile time, e.g. for macros and inline functions."
+  (if (fboundp 'declare-function)
+      `(declare-function ,fun nil)
   `(eval-when-compile
      (if (fboundp ',fun)
 	 (cc-bytecomp-debug-msg
@@ -393,7 +395,7 @@
 	     (fset ',fun (intern (concat "cc-bytecomp-ignore-fun:"
 					 (symbol-name ',fun))))
 	     (cc-bytecomp-debug-msg
-	      "cc-bytecomp-defun: Covered function %s" ',fun))))))
+		"cc-bytecomp-defun: Covered function %s" ',fun)))))))
 
 (defmacro cc-bytecomp-put (symbol propname value)
   "Set a property on a symbol during compilation (and evaluation) of
@@ -428,13 +428,15 @@
 the compilation.  This is the same as using `fboundp' but additionally
 exclude any functions that have been bound during compilation with
 `cc-bytecomp-defun'."
+  (if (fboundp 'declare-function)
+      `(fboundp ,symbol)
   (let (fun-elem)
     (if (and (cc-bytecomp-is-compiling)
 	     (setq fun-elem (assq (car (cdr symbol))
 				  cc-bytecomp-original-functions))
 	     (eq (elt fun-elem 2) 'unbound))
 	nil
-      `(fboundp ,symbol))))
+	`(fboundp ,symbol)))))
 
 \f
 (provide 'cc-bytecomp)



^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-08-18 16:05 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20150812213205.640.84865@vcs.savannah.gnu.org>
     [not found] ` <E1ZPdcz-0000Aw-Eb@vcs.savannah.gnu.org>
2015-08-13  2:48   ` [Emacs-diffs] master e4de91d: Introduce new macros to cover Emacs's new names in cl-lib.el Stefan Monnier
2015-08-13 10:55     ` Alan Mackenzie
2015-08-13 16:02       ` Stefan Monnier
2015-08-15 12:34         ` Alan Mackenzie
2015-08-18 16:05           ` Stefan Monnier

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).