unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Old-style backquotes in cc-vars.el
@ 2007-08-23 20:51 Stefan Monnier
  2007-09-01 10:18 ` Alan Mackenzie
  2007-10-06 16:31 ` Alan Mackenzie
  0 siblings, 2 replies; 23+ messages in thread
From: Stefan Monnier @ 2007-08-23 20:51 UTC (permalink / raw)
  To: bug-cc-mode; +Cc: emacs-devel


cc-vars uses a mix of old-style a new-style backquotes.
I've fixed other uses of old-style backquotes in Emacs-22 but feel like
there may be something fishy going on here, so I'd rather someone else does
the conversion here.


        Stefan

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

* Re: Old-style backquotes in cc-vars.el
  2007-08-23 20:51 Old-style backquotes in cc-vars.el Stefan Monnier
@ 2007-09-01 10:18 ` Alan Mackenzie
  2007-09-03 20:46   ` Stefan Monnier
  2007-10-06 16:31 ` Alan Mackenzie
  1 sibling, 1 reply; 23+ messages in thread
From: Alan Mackenzie @ 2007-09-01 10:18 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: bug-cc-mode, emacs-devel

Hi, Stefan!

On Thu, Aug 23, 2007 at 04:51:08PM -0400, Stefan Monnier wrote:

> cc-vars uses a mix of old-style and new-style backquotes.

I think you're talking about a single instance of "old-style", namely at
~L193 in defcustom-c-stylevar:

      ,@(plist-put
         args ':type
         `(` (radio             <================================
              (const :tag "Use style settings"

> I've fixed other uses of old-style backquotes in Emacs-22 but feel like
> there may be something fishy going on here, so I'd rather someone else does
> the conversion here.

;-)

OK, I'll look at it.

Incidentally, I'm working on a Unix system which has Emacs 19.27
installed as default.  This could be helpful!

>         Stefan

-- 
Alan.

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

* Re: Old-style backquotes in cc-vars.el
  2007-09-01 10:18 ` Alan Mackenzie
@ 2007-09-03 20:46   ` Stefan Monnier
  2007-09-04  3:14     ` T. V. Raman
  0 siblings, 1 reply; 23+ messages in thread
From: Stefan Monnier @ 2007-09-03 20:46 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: bug-cc-mode, emacs-devel

> Incidentally, I'm working on a Unix system which has Emacs 19.27
> installed as default.  This could be helpful!

In my view any system that's using something older than 22.1 is unhelpful.


        Stefan "whose office machine is still on 21.4 admittedly"

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

* Re: Old-style backquotes in cc-vars.el
  2007-09-03 20:46   ` Stefan Monnier
@ 2007-09-04  3:14     ` T. V. Raman
  2007-09-04 22:57       ` Richard Stallman
  0 siblings, 1 reply; 23+ messages in thread
From: T. V. Raman @ 2007-09-04  3:14 UTC (permalink / raw)
  To: monnier; +Cc: bug-cc-mode, acm, emacs-devel


It would be nice to have a couple of utility edit functions that
turns old-style backquotes to new-style backquotes. I did the
conversion by hand for some of my files, and the process is
error-prone for hand-editting.

>>>>> "Stefan" == Stefan Monnier <monnier@iro.umontreal.ca> writes:
    >> Incidentally, I'm working on a Unix system which has Emacs
    >> 19.27 installed as default.  This could be helpful!
    Stefan> 
    Stefan> In my view any system that's using something older
    Stefan> than 22.1 is unhelpful.
    Stefan> 
    Stefan> 
    Stefan>         Stefan "whose office machine is still on 21.4
    Stefan> admittedly"
    Stefan> 
    Stefan> 
    Stefan> _______________________________________________
    Stefan> Emacs-devel mailing list Emacs-devel@gnu.org
    Stefan> http://lists.gnu.org/mailman/listinfo/emacs-devel

-- 
Best Regards,
--raman

      
Email:  raman@users.sf.net
WWW:    http://emacspeak.sf.net/raman/
AIM:    emacspeak       GTalk: tv.raman.tv@gmail.com
PGP:    http://emacspeak.sf.net/raman/raman-almaden.asc
Google: tv+raman 
IRC:    irc://irc.freenode.net/#emacs

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

* Re: Old-style backquotes in cc-vars.el
  2007-09-04  3:14     ` T. V. Raman
@ 2007-09-04 22:57       ` Richard Stallman
  2007-09-05  2:21         ` T. V. Raman
  0 siblings, 1 reply; 23+ messages in thread
From: Richard Stallman @ 2007-09-04 22:57 UTC (permalink / raw)
  To: raman; +Cc: bug-cc-mode, acm, monnier, emacs-devel

    It would be nice to have a couple of utility edit functions that
    turns old-style backquotes to new-style backquotes.

Would you like to write them?

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/


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

* Re: Old-style backquotes in cc-vars.el
  2007-09-04 22:57       ` Richard Stallman
@ 2007-09-05  2:21         ` T. V. Raman
  2007-09-05  2:44           ` dhruva
  0 siblings, 1 reply; 23+ messages in thread
From: T. V. Raman @ 2007-09-05  2:21 UTC (permalink / raw)
  To: rms; +Cc: bug-cc-mode, acm, raman, monnier, emacs-devel


If I do write them, I'll be sure to contribute them. On the
selfish end, I've already fixed my code that needed the fixing,
so the motivation to write the code is not high at present.

>>>>> "Richard" == Richard Stallman <rms@gnu.org> writes:
    Richard>     It would be nice to have a couple of utility
    Richard> edit functions that turns old-style backquotes to
    Richard> new-style backquotes.
    Richard> 
    Richard> Would you like to write them?

-- 
Best Regards,
--raman

      
Email:  raman@users.sf.net
WWW:    http://emacspeak.sf.net/raman/
AIM:    emacspeak       GTalk: tv.raman.tv@gmail.com
PGP:    http://emacspeak.sf.net/raman/raman-almaden.asc
Google: tv+raman 
IRC:    irc://irc.freenode.net/#emacs

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/


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

* Re: Old-style backquotes in cc-vars.el
  2007-09-05  2:21         ` T. V. Raman
@ 2007-09-05  2:44           ` dhruva
  2007-09-05  3:26             ` Stefan Monnier
  2007-09-05 13:29             ` T. V. Raman
  0 siblings, 2 replies; 23+ messages in thread
From: dhruva @ 2007-09-05  2:44 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

Hi,

On 9/5/07, T. V. Raman <raman@users.sf.net> wrote:
>
> If I do write them, I'll be sure to contribute them. On the
> selfish end, I've already fixed my code that needed the fixing,
> so the motivation to write the code is not high at present.
>
> >>>>> "Richard" == Richard Stallman <rms@gnu.org> writes:
>     Richard>     It would be nice to have a couple of utility
>     Richard> edit functions that turns old-style backquotes to
>     Richard> new-style backquotes.
>     Richard>
>     Richard> Would you like to write them?

 If someone can point me to the complete definition of old and new
style (and variants if any), I will try to develop a tool to do the
conversion automatically. I have done a bit of parsing related work
and feel I can do it.

-dky

-- 
Dhruva Krishnamurthy
Contents reflect my personal views only!

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

* Re: Old-style backquotes in cc-vars.el
  2007-09-05  2:44           ` dhruva
@ 2007-09-05  3:26             ` Stefan Monnier
  2007-09-05 20:02               ` Richard Stallman
  2007-09-05 13:29             ` T. V. Raman
  1 sibling, 1 reply; 23+ messages in thread
From: Stefan Monnier @ 2007-09-05  3:26 UTC (permalink / raw)
  To: dhruva; +Cc: rms, emacs-devel

>> If I do write them, I'll be sure to contribute them. On the
>> selfish end, I've already fixed my code that needed the fixing,
>> so the motivation to write the code is not high at present.
>> 
>> >>>>> "Richard" == Richard Stallman <rms@gnu.org> writes:
Richard> It would be nice to have a couple of utility
Richard> edit functions that turns old-style backquotes to
Richard> new-style backquotes.
Richard> 
Richard> Would you like to write them?

>  If someone can point me to the complete definition of old and new
> style (and variants if any), I will try to develop a tool to do the
> conversion automatically. I have done a bit of parsing related work
> and feel I can do it.

I did it with a macro that did something like:

   C-u C-s ([`,]@? C-SPC M-x up-list RET DEL C-u C-SPC C-d C-SPC C-M-u C-d
   C-u C-SPC


-- Stefan

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

* Re: Old-style backquotes in cc-vars.el
  2007-09-05  2:44           ` dhruva
  2007-09-05  3:26             ` Stefan Monnier
@ 2007-09-05 13:29             ` T. V. Raman
  1 sibling, 0 replies; 23+ messages in thread
From: T. V. Raman @ 2007-09-05 13:29 UTC (permalink / raw)
  To: dhruvakm; +Cc: rms, emacs-devel


Here is what is needed:

A) Convert (` ...) to `...
Thus:
(` (progn ...))
becomes `(progn ...)

(, ...)
becomes ,...


>>>>> "dhruva" == dhruva  <dhruvakm@gmail.com> writes:
    dhruva> Hi, On 9/5/07, T. V. Raman <raman@users.sf.net>
    dhruva> wrote:
    >> 
    >> If I do write them, I'll be sure to contribute them. On
    >> the selfish end, I've already fixed my code that needed
    >> the fixing, so the motivation to write the code is not
    >> high at present.
    >> 
    >> >>>>> "Richard" == Richard Stallman <rms@gnu.org> writes:
    Richard> It would be nice to have a couple of utility edit
    Richard> functions that turns old-style backquotes to
    Richard> new-style backquotes.
    Richard> 
    Richard> Would you like to write them?
    dhruva> 
    dhruva>  If someone can point me to the complete definition
    dhruva> of old and new style (and variants if any), I will
    dhruva> try to develop a tool to do the conversion
    dhruva> automatically. I have done a bit of parsing related
    dhruva> work and feel I can do it.
    dhruva> 
    dhruva> -dky
    dhruva> 
    dhruva> -- Dhruva Krishnamurthy Contents reflect my personal
    dhruva> views only!
    dhruva> 
    dhruva> 
    dhruva> _______________________________________________
    dhruva> Emacs-devel mailing list Emacs-devel@gnu.org
    dhruva> http://lists.gnu.org/mailman/listinfo/emacs-devel

-- 
Best Regards,
--raman

      
Email:  raman@users.sf.net
WWW:    http://emacspeak.sf.net/raman/
AIM:    emacspeak       GTalk: tv.raman.tv@gmail.com
PGP:    http://emacspeak.sf.net/raman/raman-almaden.asc
Google: tv+raman 
IRC:    irc://irc.freenode.net/#emacs

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

* Re: Old-style backquotes in cc-vars.el
  2007-09-05  3:26             ` Stefan Monnier
@ 2007-09-05 20:02               ` Richard Stallman
  2007-09-06 14:27                 ` Juri Linkov
  0 siblings, 1 reply; 23+ messages in thread
From: Richard Stallman @ 2007-09-05 20:02 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

    I did it with a macro that did something like:

       C-u C-s ([`,]@? C-SPC M-x up-list RET DEL C-u C-SPC C-d C-SPC C-M-u C-d
       C-u C-SPC

Could you work out the details again, and put it in NEWS as a
suggestion?  Or code it in Lisp?

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

* Re: Old-style backquotes in cc-vars.el
  2007-09-05 20:02               ` Richard Stallman
@ 2007-09-06 14:27                 ` Juri Linkov
  2007-09-07  6:32                   ` Richard Stallman
  0 siblings, 1 reply; 23+ messages in thread
From: Juri Linkov @ 2007-09-06 14:27 UTC (permalink / raw)
  To: rms; +Cc: monnier, emacs-devel

>     I did it with a macro that did something like:
>
>        C-u C-s ([`,]@? C-SPC M-x up-list RET DEL C-u C-SPC C-d C-SPC C-M-u C-d
>        C-u C-SPC
>
> Could you work out the details again, and put it in NEWS as a
> suggestion?  Or code it in Lisp?

BTW, since TODO contains the following task:

    ** Add a way to convert a keyboard macro to equivalent Lisp code.

I've implemented a feature that converts a macro like:

    C-u C-s ([`,]@? C-SPC M-x up-list RET DEL C-u C-SPC C-d C-SPC C-M-u C-d
    C-u C-SPC

to the equivalent Lisp function:

(defun last-macro-commands ()
  (interactive)
  (re-search-forward "([`,]@?")
  (set-mark-command nil)
  (up-list 1)
  (backward-delete-char-untabify 1)
  (pop-to-mark-command)
  (delete-char 1)
  (set-mark-command nil)
  (backward-up-list)
  (delete-char 1)
  (pop-to-mark-command))

I need to polish details and will post a patch asap.

-- 
Juri Linkov
http://www.jurta.org/emacs/

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

* Re: Old-style backquotes in cc-vars.el
  2007-09-06 14:27                 ` Juri Linkov
@ 2007-09-07  6:32                   ` Richard Stallman
  0 siblings, 0 replies; 23+ messages in thread
From: Richard Stallman @ 2007-09-07  6:32 UTC (permalink / raw)
  To: Juri Linkov; +Cc: monnier, emacs-devel

    I've implemented a feature that converts a macro like:

	C-u C-s ([`,]@? C-SPC M-x up-list RET DEL C-u C-SPC C-d C-SPC C-M-u C-d
	C-u C-SPC

    to the equivalent Lisp function:

Thank you!  We have been waiting years for that feature.

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

* Re: Old-style backquotes in cc-vars.el
  2007-08-23 20:51 Old-style backquotes in cc-vars.el Stefan Monnier
  2007-09-01 10:18 ` Alan Mackenzie
@ 2007-10-06 16:31 ` Alan Mackenzie
  2007-10-06 18:31   ` Thien-Thi Nguyen
                     ` (2 more replies)
  1 sibling, 3 replies; 23+ messages in thread
From: Alan Mackenzie @ 2007-10-06 16:31 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: bug-cc-mode, Peter Dyballa, Martin Stjernholm, emacs-devel

Hi, Stefan!

On Thu, Aug 23, 2007 at 04:51:08PM -0400, Stefan Monnier wrote:

> cc-vars uses a mix of old-style a new-style backquotes.

I don't think it does.  The patch to cc-vars.el which created this form
was made by Martin S. on 2001-09-23.  He wouldn't knowingly have put in
old-style BQs as late as 2001.  But he might well have just tried one
thing after another until he got something to work.  I've CC'd him, just
in case he'd like to comment.  The exact patch can be seen at

<http://cc-mode.cvs.sourceforge.net/cc-mode/cc-mode/cc-vars.el?r1=5.112&r2=5.113>.

> I've fixed other uses of old-style backquotes in Emacs-22 but feel like
> there may be something fishy going on here, ....

Indeed.  At the risk of offending against public decency regulations, here
is the form lread.c is complaining about:  ;-)

,@(plist-put
   args ':type
   `(` (radio                                <==========================
	(const :tag "Use style settings"
	       set-from-style)
	,(, (let ((type (eval (plist-get args ':type))))
	      (unless (consp type)
		(setq type (list type)))
	      (unless (c-safe (plist-get (cdr type) ':value))
		(setcdr type (append '(:value (, -value-))
				     (cdr type))))
	      (unless (c-safe (plist-get (cdr type) ':tag))
		(setcdr type (append '(:tag "Override style settings")
				     (cdr type))))
	      (bq-process type))))))

I think (but I'm not entirely sure) the associativity of the backticks
and braces is:

    `( `(radio            , not            ` (` (radio

, i.e. I think it is actually nested new-style backquotes.  I've given
up trying to figure out when the inner commas get evaluated.

I'm not sure whether the rules for nested backquotes are clearly laid
out anywhere.  I think they're formally ambiguous (i.e., RTFS).  I tried
replacing "`(` (radio" with both

    "`( (` (radio"        (explicitly putting in an "old-style" BQ)

, and

    "`` (radio"           (replacing the alleged "old-style" BQ with a
                           "new-style" one)

, but each of these generated results different from the original
(checked with macroexpand).


> ...., so I'd rather someone else does the conversion here.

So would I.  ;-(

Who is the bytecomp expert, again?  Could we possibly ask him about the
semantics of  `(` (radio ?

Possibly, the analysis in lread.c needs to be done more rigorously.

>         Stefan

-- 
Alan.

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

* Re: Old-style backquotes in cc-vars.el
  2007-10-06 16:31 ` Alan Mackenzie
@ 2007-10-06 18:31   ` Thien-Thi Nguyen
  2007-10-06 20:51     ` Alan Mackenzie
  2007-10-11 17:41     ` Davis Herring
  2007-10-06 22:27   ` Stefan Monnier
  2007-10-07 13:10   ` Richard Stallman
  2 siblings, 2 replies; 23+ messages in thread
From: Thien-Thi Nguyen @ 2007-10-06 18:31 UTC (permalink / raw)
  To: Alan Mackenzie
  Cc: bug-cc-mode, Peter Dyballa, Martin Stjernholm, Stefan Monnier,
	emacs-devel

() Alan Mackenzie <acm@muc.de>
() Sat, 6 Oct 2007 16:31:01 +0000

   ,@(plist-put
      args ':type
      `(` (radio                                <==========================
           (const :tag "Use style settings"
                  set-from-style)
           ,(, (let ((type (eval (plist-get args ':type))))
                 (unless (consp type)
                   (setq type (list type)))
                 (unless (c-safe (plist-get (cdr type) ':value))
                   (setcdr type (append '(:value (, -value-))
                                        (cdr type))))
                 (unless (c-safe (plist-get (cdr type) ':tag))
                   (setcdr type (append '(:tag "Override style settings")
                                        (cdr type))))
                 (bq-process type))))))

wow, funky!  how about this replacement?

(defmacro defcustom-c-stylevar (name val doc &rest args)
  "Defines a style variable."
  (let* ((val (eval val))
         (type (eval (list 'identity (plist-get args :type))))
         (head (car type))
         (tail (cdr type))
         (newt (append (unless (plist-get tail :tag)
                         '(:tag "Override style settings"))
                       (unless (plist-get tail :value)
                         `(:value ,val))
                       tail)))
    `(progn
       (c-set-stylevar-fallback ',name ,val)
       (custom-declare-variable
        ',name ''set-from-style
        ,(concat doc "\n\nZZZ")
        ,@(plist-put 
           args :type `(radio
                        (const :tag "Use style settings" set-from-style)
                        ,(cons head newt)))))))

the ZZZ stands for the original blurb, reinstatable after discussion.
calls to `c-safe' were removed since plist-get never errs.

thi

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

* Re: Old-style backquotes in cc-vars.el
  2007-10-06 18:31   ` Thien-Thi Nguyen
@ 2007-10-06 20:51     ` Alan Mackenzie
  2007-10-06 21:46       ` Thien-Thi Nguyen
  2007-10-11 17:41     ` Davis Herring
  1 sibling, 1 reply; 23+ messages in thread
From: Alan Mackenzie @ 2007-10-06 20:51 UTC (permalink / raw)
  To: Thien-Thi Nguyen
  Cc: bug-cc-mode, Peter Dyballa, Martin Stjernholm, Stefan Monnier,
	emacs-devel

Hi, Thi!

On Sat, Oct 06, 2007 at 08:31:57PM +0200, Thien-Thi Nguyen wrote:
> () Alan Mackenzie <acm@muc.de>
> () Sat, 6 Oct 2007 16:31:01 +0000
> 
>    ,@(plist-put
>       args ':type
>       `(` (radio                                <==========================
>            (const :tag "Use style settings"
>                   set-from-style)
>            ,(, (let ((type (eval (plist-get args ':type))))
>                  (unless (consp type)
>                    (setq type (list type)))
>                  (unless (c-safe (plist-get (cdr type) ':value))
>                    (setcdr type (append '(:value (, -value-))
>                                         (cdr type))))
>                  (unless (c-safe (plist-get (cdr type) ':tag))
>                    (setcdr type (append '(:tag "Override style settings")
>                                         (cdr type))))
>                  (bq-process type))))))

> wow, funky!

Can you explain to me what it is doing?  If so, please do!  :-)

> how about this replacement?

> (defmacro defcustom-c-stylevar (name val doc &rest args)
>   "Defines a style variable."
>   (let* ((val (eval val))
>          (type (eval (list 'identity (plist-get args :type))))
>          (head (car type))
>          (tail (cdr type))
>          (newt (append (unless (plist-get tail :tag)
>                          '(:tag "Override style settings"))
>                        (unless (plist-get tail :value)
>                          `(:value ,val))
>                        tail)))
>     `(progn
>        (c-set-stylevar-fallback ',name ,val)
>        (custom-declare-variable
>         ',name ''set-from-style
>         ,(concat doc "\n\nZZZ")
>         ,@(plist-put 
>            args :type `(radio
>                         (const :tag "Use style settings" set-from-style)
>                         ,(cons head newt)))))))

It doesn't quite work - (car type) bombs, because type is 'integer, not
a list.  I'll figure out, though.
 
> thi

-- 
Alan.

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

* Re: Old-style backquotes in cc-vars.el
  2007-10-06 20:51     ` Alan Mackenzie
@ 2007-10-06 21:46       ` Thien-Thi Nguyen
  0 siblings, 0 replies; 23+ messages in thread
From: Thien-Thi Nguyen @ 2007-10-06 21:46 UTC (permalink / raw)
  To: Alan Mackenzie
  Cc: bug-cc-mode, Peter Dyballa, Martin Stjernholm, Stefan Monnier,
	emacs-devel

() Alan Mackenzie <acm@muc.de>
() Sat, 6 Oct 2007 20:51:18 +0000

   Can you explain to me what it is doing?  If so, please do!  :-)

it (or rather, the funky fragment in question) is converting the
given `:type FOO', mined out of the rest `args', to an aggregate
`:type (radio STYLE (PREAMBLE FOO))'.  `radio' means choose one of
the following exclusively.

STYLE stands for the choice where the value is taken from some style
setting (you probably know more about this than i do).

PREAMBLE is optionally prepended to FOO; that is, if FOO contains
:tag or :value, the respective 2-list component is ignored.

finally, the recomposed :type 2-list is spliced back into `args', the
value of which should be valid spec for `custom-declare-variable'.

   > (type (eval (list 'identity (plist-get args :type))))

   It doesn't quite work - (car type) bombs, because type is
   'integer, not   a list.  I'll figure out, though.

drat, i knew i forgot something.  please try this, instead:

   > (typ (eval (list 'identity (plist-get args :type))))
   > (type (if (consp typ) typ (list typ)))

here we ensure `type' is consp rather than trying to handle
non-consp `type'.

thi

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

* Re: Old-style backquotes in cc-vars.el
  2007-10-06 16:31 ` Alan Mackenzie
  2007-10-06 18:31   ` Thien-Thi Nguyen
@ 2007-10-06 22:27   ` Stefan Monnier
  2007-10-07  9:40     ` Alan Mackenzie
  2007-10-07 13:10   ` Richard Stallman
  2 siblings, 1 reply; 23+ messages in thread
From: Stefan Monnier @ 2007-10-06 22:27 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: bug-cc-mode, Peter Dyballa, Martin Stjernholm, emacs-devel

>> cc-vars uses a mix of old-style a new-style backquotes.
> I don't think it does.

The warning indicates that Emacs sees old-style backquotes, aqnd I'm pretty
sure there are new style backquotes as well, so I'm pretty sure you're wrong.

> He wouldn't knowingly have put in old-style BQs as late as 2001.

Maybe he did it knowingly: he's using nested backquotes and IIRC they didn't
always work correctly in older versions of Emacs when used with new-style
backquotes.  Actually IIRC the problem was with nested new-style commas
(where the second would not be recognized as new-style) which indeed do
appear in that code.

> I'm not sure whether the rules for nested backquotes are clearly laid
> out anywhere.

The problem is not about nesting but about new-style vs old-style: the
detailed rule about which is which is indeed only specified implicitly in
the source code.

> I think they're formally ambiguous (i.e., RTFS).  I tried
> replacing "`(` (radio" with both

>     "`( (` (radio"        (explicitly putting in an "old-style" BQ)

> , and

>     "`` (radio"           (replacing the alleged "old-style" BQ with a
>                            "new-style" one)

> , but each of these generated results different from the original
> (checked with macroexpand).

You need to fix the ,(, part accordingly.

> So would I.  ;-(

Thien-Thi might be a good start.

> Who is the bytecomp expert, again?  Could we possibly ask him about the
> semantics of  `(` (radio ?

It's (\` (\` (radio

> Possibly, the analysis in lread.c needs to be done more rigorously.

I have no idea what that means.


        Stefan

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

* Re: Old-style backquotes in cc-vars.el
  2007-10-06 22:27   ` Stefan Monnier
@ 2007-10-07  9:40     ` Alan Mackenzie
  2007-10-07  9:41       ` Thien-Thi Nguyen
  2007-10-07 19:40       ` Eli Zaretskii
  0 siblings, 2 replies; 23+ messages in thread
From: Alan Mackenzie @ 2007-10-07  9:40 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: bug-cc-mode, Peter Dyballa, Martin Stjernholm, emacs-devel

Hi, Stefan,

On Sat, Oct 06, 2007 at 06:27:00PM -0400, Stefan Monnier wrote:
> >> cc-vars uses a mix of old-style a new-style backquotes.
> > I don't think it does.

> The warning indicates that Emacs sees old-style backquotes, aqnd I'm
> pretty sure there are new style backquotes as well, so I'm pretty sure
> you're wrong.

OK.  I've played around with things a bit since yesterday.  In
particular, I've discovered the useful functions `read' and
`backquote-process'.  I'm begining to think you're right and I'm wrong.
:-)

> > He wouldn't knowingly have put in old-style BQs as late as 2001.

> Maybe he did it knowingly: he's using nested backquotes and IIRC they
> didn't always work correctly in older versions of Emacs when used with
> new-style backquotes.  Actually IIRC the problem was with nested
> new-style commas (where the second would not be recognized as
> new-style) which indeed do appear in that code.

Ah.  OK.  That's sounds like a sound reason for not upgrading that code
in cc-vars.el, if it's the case.  (Or, for introducing yet another
difference between the cc-vars.el in Emacs and the standalone CC Mode,
which retains compatibility with older (X)Emacsen.  :-(  )

Probably I'll just scrap the old code and put in Thi's new version of the
function instead (after testing it thoroughly).  It looks a lot cleaner
and easier to understand.

> > I'm not sure whether the rules for nested backquotes are clearly laid
> > out anywhere.

> The problem is not about nesting but about new-style vs old-style: the
> detailed rule about which is which is indeed only specified implicitly in
> the source code.

OK.

> > I think they're formally ambiguous (i.e., RTFS).  I tried
> > replacing "`(` (radio" with both

> >     "`( (` (radio"        (explicitly putting in an "old-style" BQ)

> > , and

> >     "`` (radio"           (replacing the alleged "old-style" BQ with a
> >                            "new-style" one)

> > , but each of these generated results different from the original
> > (checked with macroexpand).

> You need to fix the ,(, part accordingly.

Ah!  I'm still figuring out what ,(, actually means.

> Thien-Thi might be a good start.

Yes.  He's already been very helpful.

> > Who is the bytecomp expert, again?  Could we possibly ask him about the
> > semantics of  `(` (radio ?

> It's (\` (\` (radio

I managed to get that late last night with   (read "`(` (a b c))").  :-)

Thanks for all the help!

>         Stefan

-- 
Alan.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/


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

* Re: Old-style backquotes in cc-vars.el
  2007-10-07  9:40     ` Alan Mackenzie
@ 2007-10-07  9:41       ` Thien-Thi Nguyen
  2007-10-07 19:40       ` Eli Zaretskii
  1 sibling, 0 replies; 23+ messages in thread
From: Thien-Thi Nguyen @ 2007-10-07  9:41 UTC (permalink / raw)
  To: Alan Mackenzie
  Cc: bug-cc-mode, Peter Dyballa, Martin Stjernholm, Stefan Monnier,
	emacs-devel

() Alan Mackenzie <acm@muc.de>
() Sun, 7 Oct 2007 09:40:25 +0000

   Yes.  He's already been very helpful.

i was motivated by the opportunity to omit
`c-safe' and `backquote-process' entirely.
blech!

thi

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

* Re: Old-style backquotes in cc-vars.el
  2007-10-06 16:31 ` Alan Mackenzie
  2007-10-06 18:31   ` Thien-Thi Nguyen
  2007-10-06 22:27   ` Stefan Monnier
@ 2007-10-07 13:10   ` Richard Stallman
  2 siblings, 0 replies; 23+ messages in thread
From: Richard Stallman @ 2007-10-07 13:10 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: bug-cc-mode, Peter_Dyballa, mast, monnier, emacs-devel

    I'm not sure whether the rules for nested backquotes are clearly laid
    out anywhere.

I think it follows logically from the syntax of one level of backquotes.
The inner backquote expands, producing a call to `cons' or `list'
which contants comma-expressions; then the outer backquote expands them.

I too found it hard to understand, and perhaps the code should be
rewritten to avoid nested backquotes, for simplicity.  But it is
valid.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/


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

* Re: Old-style backquotes in cc-vars.el
  2007-10-07  9:40     ` Alan Mackenzie
  2007-10-07  9:41       ` Thien-Thi Nguyen
@ 2007-10-07 19:40       ` Eli Zaretskii
  1 sibling, 0 replies; 23+ messages in thread
From: Eli Zaretskii @ 2007-10-07 19:40 UTC (permalink / raw)
  To: Alan Mackenzie; +Cc: bug-cc-mode, Peter_Dyballa, mast, emacs-devel

> Date: Sun, 7 Oct 2007 09:40:25 +0000
> From: Alan Mackenzie <acm@muc.de>
> Cc: bug-cc-mode@gnu.org, Peter Dyballa <Peter_Dyballa@Web.DE>,
> 	Martin Stjernholm <mast@lysator.liu.se>, emacs-devel@gnu.org
> 
> Ah!  I'm still figuring out what ,(, actually means.

If you ever figure that out (as well as other not-so-trivial aspects
of the macro syntax), please consider documenting that in the ELisp
manual.  This part of ELisp is notoriously under-documented.

TIA

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

* Re: Old-style backquotes in cc-vars.el
  2007-10-06 18:31   ` Thien-Thi Nguyen
  2007-10-06 20:51     ` Alan Mackenzie
@ 2007-10-11 17:41     ` Davis Herring
  2007-10-19  7:29       ` Thien-Thi Nguyen
  1 sibling, 1 reply; 23+ messages in thread
From: Davis Herring @ 2007-10-11 17:41 UTC (permalink / raw)
  To: Thien-Thi Nguyen
  Cc: Martin Stjernholm, Peter Dyballa, emacs-devel, bug-cc-mode,
	Stefan Monnier, Alan Mackenzie

> (defmacro defcustom-c-stylevar (name val doc &rest args)
>   "Defines a style variable."
>   (let* ((val (eval val))
>          (type (eval (list 'identity (plist-get args :type))))
>          (head (car type))
>          (tail (cdr type))
>          (newt (append (unless (plist-get tail :tag)
>                          '(:tag "Override style settings"))
>                        (unless (plist-get tail :value)
>                          `(:value ,val))
>                        tail)))

Are we sure that it's okay to do all these evaluations at macro expansion
time -- that is, do any of them depend on runtime things?  And what is
(eval (list 'identity foo))) supposed to do differently than (eval foo)?

Davis

-- 
This product is sold by volume, not by mass.  If it appears too dense or
too sparse, it is because mass-energy conversion has occurred during
shipping.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/


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

* Re: Old-style backquotes in cc-vars.el
  2007-10-11 17:41     ` Davis Herring
@ 2007-10-19  7:29       ` Thien-Thi Nguyen
  0 siblings, 0 replies; 23+ messages in thread
From: Thien-Thi Nguyen @ 2007-10-19  7:29 UTC (permalink / raw)
  To: bug-cc-mode, emacs-devel

() "Davis Herring" <herring@lanl.gov>
() Thu, 11 Oct 2007 10:41:11 -0700 (PDT)

   Are we sure that it's okay to do all these evaluations at macro
   expansion time -- that is, do any of them depend on runtime
   things?

the original defcustom-c-stylevar evals so i thought continuing
the practice (regardless of the wisdom of the approach) would not
be harmful.  in fact, in the most recent revision (tested a bit,
this time -- bonus!), VAL is no longer evalled.

   And what is (eval (list 'identity foo))) supposed to
   do differently than (eval foo)?

nothing, thanks for pointing this out -- i learn a lot from
nothing these days!  i use the latter form now.  the former was
fuzzy thinking and baby-in-the-background-crying induced.

please find below the revised defcustom-c-stylevar usurper.
substantial changes from the previous revision:
 - docstring, reflecting best how i understand things
 - new form `(declare (debug ...))'
 - form `(radio ...)' is quoted

i consider all these changes bugfixes (and, thus, potentially
bug-harboring).  please scrutinize them equally.

as mentioned before, this was (lightly) tested.  i even went so
far as to invoke customize (shudder) and mouse around a bit.  now
if you'll excuse me, i have to go wash my hands... :-/

[cc trimmed to ml]

thi


_____________________________________________________________
(defmacro defcustom-c-stylevar (name val doc &rest args)
  "Define a style variable NAME with VAL and DOC.
More precisely, convert the given `:type FOO', mined out of ARGS,
to an aggregate `:type (radio STYLE (PREAMBLE FOO))', append some
some boilerplate documentation to DOC, arrange for the fallback
value of NAME to be VAL, and call `custom-declare-variable' to
do the rest of the work.

STYLE stands for the choice where the value is taken from some
style setting.  PREAMBLE is optionally prepended to FOO; that is,
if FOO contains :tag or :value, the respective two-element list
component is ignored."
  (declare (debug (symbolp form stringp &rest)))
  (let* ((expanded-doc (concat doc "

This is a style variable.  Apart from the valid values described
above, it can be set to the symbol `set-from-style'.  In that case,
it takes its value from the style system (see `c-default-style' and
`c-style-alist') when a CC Mode buffer is initialized.  Otherwise,
the value set here overrides the style system (there is a variable
`c-old-style-variable-behavior' that changes this, though)."))
         (typ (eval (plist-get args :type)))
         (type (if (consp typ) typ (list typ)))
         (head (car type))
         (tail (cdr type))
         (newt (append (unless (plist-get tail :tag)
                         '(:tag "Override style settings"))
                       (unless (plist-get tail :value)
                         `(:value ,val))
                       tail))
         (aggregate `'(radio
                       (const :tag "Use style settings" set-from-style)
                       ,(cons head newt))))
    `(progn
       (c-set-stylevar-fallback ',name ,val)
       (custom-declare-variable
        ',name ''set-from-style
        ,expanded-doc
        ,@(plist-put args :type aggregate)))))

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/


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

end of thread, other threads:[~2007-10-19  7:29 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-08-23 20:51 Old-style backquotes in cc-vars.el Stefan Monnier
2007-09-01 10:18 ` Alan Mackenzie
2007-09-03 20:46   ` Stefan Monnier
2007-09-04  3:14     ` T. V. Raman
2007-09-04 22:57       ` Richard Stallman
2007-09-05  2:21         ` T. V. Raman
2007-09-05  2:44           ` dhruva
2007-09-05  3:26             ` Stefan Monnier
2007-09-05 20:02               ` Richard Stallman
2007-09-06 14:27                 ` Juri Linkov
2007-09-07  6:32                   ` Richard Stallman
2007-09-05 13:29             ` T. V. Raman
2007-10-06 16:31 ` Alan Mackenzie
2007-10-06 18:31   ` Thien-Thi Nguyen
2007-10-06 20:51     ` Alan Mackenzie
2007-10-06 21:46       ` Thien-Thi Nguyen
2007-10-11 17:41     ` Davis Herring
2007-10-19  7:29       ` Thien-Thi Nguyen
2007-10-06 22:27   ` Stefan Monnier
2007-10-07  9:40     ` Alan Mackenzie
2007-10-07  9:41       ` Thien-Thi Nguyen
2007-10-07 19:40       ` Eli Zaretskii
2007-10-07 13:10   ` Richard Stallman

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).