all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* lost argument and doc string
@ 2002-02-10  6:59 Tak Ota
  2002-02-10 17:08 ` Eli Zaretskii
  0 siblings, 1 reply; 28+ messages in thread
From: Tak Ota @ 2002-02-10  6:59 UTC (permalink / raw)


In 21.2.50 some functions in simple.el have lost their arguments.

For example, C-h f line-number-mode shows

    line-number-mode is an interactive compiled Lisp function in `simple'.
    It is bound to <menu-bar> <options> <showhide> <line-number-mode>.
    (line-number-mode)

    Toggle whether to show the current line number in the mode-line.

where ARG and the doc string are gone.

It is the same for `column-number-mode'.  In the vicinity of these
functions in simple.el `overwrite-mode' and `binary-overwrite-mode' do
retain the ARG however lost the doc string.

The functions missing the argument is really compiled that way.  For
example, evaluating (line-number-mode 1) causes an error as

Debugger entered--Lisp error: (wrong-number-of-arguments #[nil "..." [line-number-mode message "Line number mode %s" "enabled" "disabled"] 3 "Toggle whether to show the current line number in the mode-line." nil] 1)
  line-number-mode(1)
  eval((line-number-mode 1))
  eval-expression((line-number-mode 1) nil)
* call-interactively(eval-expression)

Above tested under -q --no-site-file.

-Tak

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-10  6:59 lost argument and doc string Tak Ota
@ 2002-02-10 17:08 ` Eli Zaretskii
  2002-02-10 17:32   ` Pavel Janík
  0 siblings, 1 reply; 28+ messages in thread
From: Eli Zaretskii @ 2002-02-10 17:08 UTC (permalink / raw)
  Cc: emacs-devel

> From: Tak Ota <Takaaki.Ota@am.sony.com>
> Date: Sat, 09 Feb 2002 22:59:05 -0800 (PST)
> 
> In 21.2.50 some functions in simple.el have lost their arguments.
> 
> For example, C-h f line-number-mode shows
> 
>     line-number-mode is an interactive compiled Lisp function in `simple'.
>     It is bound to <menu-bar> <options> <showhide> <line-number-mode>.
>     (line-number-mode)
> 
>     Toggle whether to show the current line number in the mode-line.
> 
> where ARG and the doc string are gone.

I cannot reproduce this.  Are you sure your etc/DOC file is up to
date withe the rest of Emacs?

> The functions missing the argument is really compiled that way.  For
> example, evaluating (line-number-mode 1) causes an error

Can't reproduce this, either.  It works for me as good as ever.

If you can't solve this by rebuilding Emacs from scratch (i.e., delete
all the object files and then rebuild), I'd say this is Windows-specific.

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-10 17:08 ` Eli Zaretskii
@ 2002-02-10 17:32   ` Pavel Janík
  2002-02-10 23:28     ` Tak Ota
  0 siblings, 1 reply; 28+ messages in thread
From: Pavel Janík @ 2002-02-10 17:32 UTC (permalink / raw)
  Cc: Takaaki.Ota, emacs-devel

   From: "Eli Zaretskii" <eliz@is.elta.co.il>
   Date: Sun, 10 Feb 2002 19:08:26 +0200

   > > In 21.2.50 some functions in simple.el have lost their arguments.
   > > 
   > > For example, C-h f line-number-mode shows
   > > 
   > >     line-number-mode is an interactive compiled Lisp function in `simple'.
   > >     It is bound to <menu-bar> <options> <showhide> <line-number-mode>.
   > >     (line-number-mode)
   > > 
   > >     Toggle whether to show the current line number in the mode-line.
   > > 
   > > where ARG and the doc string are gone.
   > 
   > I cannot reproduce this.  Are you sure your etc/DOC file is up to
   > date withe the rest of Emacs?

I have just fixed that in menu-bar.el where I defined toggling functions
line-number-mode and column-number-mode.
-- 
Pavel Janík

It is not a raid board ... it is a raid lie
                  -- Andre Hedrick in linux-kernel about Promise RAID

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-10 17:32   ` Pavel Janík
@ 2002-02-10 23:28     ` Tak Ota
  2002-02-11  5:48       ` Pavel Janík
                         ` (2 more replies)
  0 siblings, 3 replies; 28+ messages in thread
From: Tak Ota @ 2002-02-10 23:28 UTC (permalink / raw)
  Cc: eliz, emacs-devel

Sun, 10 Feb 2002 18:32:39 +0100: Pavel@Janik.cz (Pavel Janík) wrote:

>    From: "Eli Zaretskii" <eliz@is.elta.co.il>
>    Date: Sun, 10 Feb 2002 19:08:26 +0200
> 
>    > > In 21.2.50 some functions in simple.el have lost their arguments.
>    > > 
>    > > For example, C-h f line-number-mode shows
>    > > 
>    > >     line-number-mode is an interactive compiled Lisp function in `simple'.
>    > >     It is bound to <menu-bar> <options> <showhide> <line-number-mode>.
>    > >     (line-number-mode)
>    > > 
>    > >     Toggle whether to show the current line number in the mode-line.
>    > > 
>    > > where ARG and the doc string are gone.
>    > 
>    > I cannot reproduce this.  Are you sure your etc/DOC file is up to
>    > date withe the rest of Emacs?
> 
> I have just fixed that in menu-bar.el where I defined toggling functions
> line-number-mode and column-number-mode.

Thanks, it did fix the missing ARG problem.  I wonder why Eli didn't
see the same one.  Is menu-bar.el specific to windoze?  BTW, 21.2.50
is still suffering from the missing doc problem.  Now the C-h f
line-number-mode looks like this.

  line-number-mode is an interactive compiled Lisp function in `simple'.
  (line-number-mode ARG)

Recently, to be conservative I've been building the new CVS source
from the scratch with "nmake bootstrap" every time.  The latest build
looked like it did its job for building the DOC file.  However, I
find no entry for line-number-mode in the actually created DOC file.
Does anyone have an idea?

-Tak

        rm DOC
rm: cannot remove `DOC': No such file or directory
        "D:\pub\emacs\emacs-21.2.50\lib-src/obj-spd/i386/make-docfile" -d ../src
 abbrev.c alloc.c alloca.c buffer.c bytecode.c callint.c callproc.c casefiddle.c
 cm.c cmds.c charset.c coding.c category.c ccl.c data.c dired.c dispnew.c doc.c
 doprnt.c editfns.c emacs.c eval.c fileio.c filelock.c filemode.c fns.c fontset.
c indent.c insdel.c keyboard.c keymap.c lastfile.c lread.c macros.c marker.c min
ibuf.c xfaces.c print.c process.c regex.c scroll.c search.c syntax.c sysdep.c te
rm.c termcap.c tparam.c undo.c unexw32.c window.c xdisp.c casetab.c floatfns.c f
rame.c gmalloc.c intervals.c ralloc.c textprop.c vm-limit.c region-cache.c strft
ime.c w32.c w32console.c xfaces.c w32fns.c w32heap.c w32inevt.c w32proc.c w32reg
.c w32menu.c w32select.c w32term.c w32xfns.c > DOC
        "D:\pub\emacs\emacs-21.2.50\lib-src/obj-spd/i386/make-docfile" -d ../src
 ../lisp/abbrev.el  ../lisp/buff-menu.el  ../lisp/byte-run.el  ../lisp/cus-start
.el  ../lisp/custom.el  ../lisp/disp-table.el  ../lisp/faces.el  ../lisp/files.e
l  ../lisp/textmodes/fill.el  ../lisp/format.el  ../lisp/facemenu.el  ../lisp/se
lect.el ../lisp/scroll-bar.el ../lisp/mouse.el  ../lisp/float-sup.el  ../lisp/fr
ame.el   ../lisp/help.el  ../lisp/indent.el  ../lisp/isearch.el  ../lisp/emacs-l
isp/lisp-mode.el  ../lisp/emacs-lisp/lisp.el  ../lisp/loadup.el  ../lisp/loaddef
s.el  ../lisp/bindings.el  ../lisp/map-ynp.el  ../lisp/menu-bar.el  ../lisp/inte
rnational/mule.el  ../lisp/international/mule-conf.el  ../lisp/international/mul
e-cmds.el  ../lisp/international/characters.el  ../lisp/international/ccl.el  ..
/lisp/international/codepage.el  ../lisp/international/utf-8.el  ../lisp/case-ta
ble.el  ../lisp/language/chinese.el  ../lisp/language/cyrillic.el  ../lisp/langu
age/devanagari.el  ../lisp/language/english.el  ../lisp/language/ethiopic.el  ..
/lisp/language/european.el  ../lisp/language/czech.el  ../lisp/language/slovak.e
l  ../lisp/language/romanian.el  ../lisp/language/greek.el  ../lisp/language/heb
rew.el  ../lisp/language/indian.el  ../lisp/language/japanese.el  ../lisp/langua
ge/korean.el  ../lisp/language/lao.el  ../lisp/language/thai.el  ../lisp/languag
e/tibetan.el  ../lisp/language/vietnamese.el  ../lisp/language/misc-lang.el  ../
lisp/textmodes/page.el  ../lisp/textmodes/paragraphs.el  ../lisp/paths.el  ../li
sp/register.el  ../lisp/replace.el  ../lisp/simple.el  ../lisp/startup.el  ../li
sp/subr.el  ../lisp/term/tty-colors.el  ../lisp/textmodes/text-mode.el  ../lisp/
vc-hooks.el  ../lisp/ediff-hook.el      ../lisp/ls-lisp.el ../lisp/w32-fns.el ..
/lisp/dos-w32.el  ../lisp/widget.el  ../lisp/window.el  ../lisp/version.el >> DO
C
        cp -f DOC ../etc/DOC-X
        mkdir "../src/obj-spd"
        mkdir "../src/obj-spd/etc"
        cp -f DOC ../src/obj-spd/etc/DOC-X
        cd ..\src
        NMAKE  bootstrap

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-10 23:28     ` Tak Ota
@ 2002-02-11  5:48       ` Pavel Janík
  2002-02-11  5:48       ` Eli Zaretskii
  2002-02-11 18:48       ` Richard Stallman
  2 siblings, 0 replies; 28+ messages in thread
From: Pavel Janík @ 2002-02-11  5:48 UTC (permalink / raw)
  Cc: eliz, emacs-devel

   From: Tak Ota <Takaaki.Ota@am.sony.com>
   Date: Sun, 10 Feb 2002 15:28:12 -0800 (PST)

   > Recently, to be conservative I've been building the new CVS source
   > from the scratch with "nmake bootstrap" every time.  The latest build
   > looked like it did its job for building the DOC file.  However, I
   > find no entry for line-number-mode in the actually created DOC file.
   > Does anyone have an idea?

Hmm, this is strange. On my system:

line-number-mode is an interactive compiled Lisp function in `simple'.
(line-number-mode ARG)

Toggle Line Number mode.
... and the doc-string continues...
-- 
Pavel Janík

Technology is meaningless. What matters is how people think of it.
                  -- Linus Torvalds in linux-kernel

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-10 23:28     ` Tak Ota
  2002-02-11  5:48       ` Pavel Janík
@ 2002-02-11  5:48       ` Eli Zaretskii
  2002-02-11 16:34         ` Juanma Barranquero
  2002-02-11 18:48       ` Richard Stallman
  2 siblings, 1 reply; 28+ messages in thread
From: Eli Zaretskii @ 2002-02-11  5:48 UTC (permalink / raw)
  Cc: Pavel, emacs-devel


On Sun, 10 Feb 2002, Tak Ota wrote:

> > I have just fixed that in menu-bar.el where I defined toggling functions
> > line-number-mode and column-number-mode.
> 
> Thanks, it did fix the missing ARG problem.  I wonder why Eli didn't
> see the same one.

Probably because I tried after "cvs up", which caught Pavel's latest
changes that fixed the problem.

> Is menu-bar.el specific to windoze?

No, it's used by all versions.

>  BTW, 21.2.50
> is still suffering from the missing doc problem.  Now the C-h f
> line-number-mode looks like this.
> 
>   line-number-mode is an interactive compiled Lisp function in `simple'.
>   (line-number-mode ARG)
> 
> Recently, to be conservative I've been building the new CVS source
> from the scratch with "nmake bootstrap" every time.  The latest build
> looked like it did its job for building the DOC file.  However, I
> find no entry for line-number-mode in the actually created DOC file.
> Does anyone have an idea?

This _does_ seem Windows-specific, because I cannot reproduce it, and 
also because another user of the Windows version reported a similar 
problem with what looked like a perfectly valid DOC file.

Is it possible that the change in the way doc strings are put in C files 
confuses the Windows port, either the make-docfile program or Emacs 
itself?

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-11  5:48       ` Eli Zaretskii
@ 2002-02-11 16:34         ` Juanma Barranquero
  2002-02-11 19:37           ` Eli Zaretskii
  0 siblings, 1 reply; 28+ messages in thread
From: Juanma Barranquero @ 2002-02-11 16:34 UTC (permalink / raw)



On Mon, 11 Feb 2002 07:48:57 +0200 (IST), Eli Zaretskii <eliz@is.elta.co.il> wrote:

> This _does_ seem Windows-specific, because I cannot reproduce it, and 
> also because another user of the Windows version reported a similar 
> problem with what looked like a perfectly valid DOC file.

I'm certainly seeing the same problem, even after nmake bootstrap (on a
Windows XP, with a MSVC-compiled Emacs 21.2.50).

> Is it possible that the change in the way doc strings are put in C files 
> confuses the Windows port, either the make-docfile program or Emacs 
> itself?

Maybe, but then why some docstrings can be seen just fine?


                                                           /L/e/k/t/u


_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-10 23:28     ` Tak Ota
  2002-02-11  5:48       ` Pavel Janík
  2002-02-11  5:48       ` Eli Zaretskii
@ 2002-02-11 18:48       ` Richard Stallman
  2 siblings, 0 replies; 28+ messages in thread
From: Richard Stallman @ 2002-02-11 18:48 UTC (permalink / raw)
  Cc: Pavel, eliz, emacs-devel

I remember when I lost an argument.  Boy did that hurt!  ;-).

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-11 16:34         ` Juanma Barranquero
@ 2002-02-11 19:37           ` Eli Zaretskii
  2002-02-12  2:32             ` Tak Ota
  0 siblings, 1 reply; 28+ messages in thread
From: Eli Zaretskii @ 2002-02-11 19:37 UTC (permalink / raw)
  Cc: emacs-devel

> From: Juanma Barranquero <lektu@terra.es>
> Date: Mon, 11 Feb 2002 17:34:14 +0100
> 
> > Is it possible that the change in the way doc strings are put in C files 
> > confuses the Windows port, either the make-docfile program or Emacs 
> > itself?
> 
> Maybe, but then why some docstrings can be seen just fine?

Because some doc strings come from Lisp files?

But that's a stab in the dark; it would be nice if someone could step
with a debugger through the offending code and see what's going on
there.

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-11 19:37           ` Eli Zaretskii
@ 2002-02-12  2:32             ` Tak Ota
  2002-02-12  8:35               ` Eli Zaretskii
  0 siblings, 1 reply; 28+ messages in thread
From: Tak Ota @ 2002-02-12  2:32 UTC (permalink / raw)
  Cc: lektu, emacs-devel, andrewi

Mon, 11 Feb 2002 21:37:40 +0200: "Eli Zaretskii" <eliz@is.elta.co.il> wrote:

> > From: Juanma Barranquero <lektu@terra.es>
> > Date: Mon, 11 Feb 2002 17:34:14 +0100
> > 
> > > Is it possible that the change in the way doc strings are put in C files 
> > > confuses the Windows port, either the make-docfile program or Emacs 
> > > itself?
> > 
> > Maybe, but then why some docstrings can be seen just fine?
> 
> Because some doc strings come from Lisp files?
> 
> But that's a stab in the dark; it would be nice if someone could step
> with a debugger through the offending code and see what's going on
> there.

A debugger was found to be helpless in this particular case.  I think
I found the real cause of the problem.  The first suspected culprit
make-docfile turned out to be innocent by borrowing the make-docfile
from 21.1.90 produced the same result.  The real problem is in
makefile.w32-in.  I don't know much about how make-docfile operates
but it obviously expects some .elc files instead of .el files.  By
comparing the makefile with the one in 21.1.90 and restoring those elc
definitions in lisp= macro the lost doc strings are recovered.

I suppose the following change in lib-src/ChangeLog is responsible
for this.

-Tak


2001-11-30  Andrew Innes  <andrewi@gnu.org>

	* makefile.w32-in (FACE_SUPPORT):
	(MOUSE_SUPPORT):
	(FLOAT_SUPPORT):
	(WINNT_SUPPORT):
	(lisp): Reference .el files instead of .elc files, to simplify
	bootstrapping.
	($(DOC)): Change dependency to just `make-docfile'.

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-12  2:32             ` Tak Ota
@ 2002-02-12  8:35               ` Eli Zaretskii
  2002-02-12 14:23                 ` Tak Ota
  2002-02-13 15:37                 ` Richard Stallman
  0 siblings, 2 replies; 28+ messages in thread
From: Eli Zaretskii @ 2002-02-12  8:35 UTC (permalink / raw)
  Cc: lektu, emacs-devel, andrewi


On Mon, 11 Feb 2002, Tak Ota wrote:

> I don't know much about how make-docfile operates
> but it obviously expects some .elc files instead of .el files.

Could you please see why is this so?  Is it perhaps an issue with
binary vs text reads?

> I suppose the following change in lib-src/ChangeLog is responsible
> for this.

Yes, but Andrew did that change for a reason, as the log says...

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-12  8:35               ` Eli Zaretskii
@ 2002-02-12 14:23                 ` Tak Ota
  2002-02-12 18:57                   ` Jason Rumney
  2002-02-13 15:37                 ` Richard Stallman
  1 sibling, 1 reply; 28+ messages in thread
From: Tak Ota @ 2002-02-12 14:23 UTC (permalink / raw)
  Cc: lektu, emacs-devel, andrewi

Tue, 12 Feb 2002 10:35:24 +0200 (IST): Eli Zaretskii <eliz@is.elta.co.il> wrote:

> > I don't know much about how make-docfile operates
> > but it obviously expects some .elc files instead of .el files.
> 
> Could you please see why is this so?  Is it perhaps an issue with
> binary vs text reads?

I'll try to read make-docfile.c, however, someone on this list
probably can provide quick answer to this puzzle before I solve it.
What's really strange is out of all those elc files following files
are seemingly and deliberately left as el files.

cus-start.el, loadup.el, loaddefs.el, bindings.el,
international/mule-conf.el, paths.el, version.el


> > I suppose the following change in lib-src/ChangeLog is responsible
> > for this.
> 
> Yes, but Andrew did that change for a reason, as the log says...

I agree, and the new way looks cleaner if it works.

I'll continue to work on this topic.

-Tak

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-12 14:23                 ` Tak Ota
@ 2002-02-12 18:57                   ` Jason Rumney
  2002-02-12 19:48                     ` Tak Ota
  2002-02-14  3:11                     ` Richard Stallman
  0 siblings, 2 replies; 28+ messages in thread
From: Jason Rumney @ 2002-02-12 18:57 UTC (permalink / raw)
  Cc: eliz, lektu, emacs-devel, andrewi

Tak Ota <Takaaki.Ota@am.sony.com> writes:

> I'll try to read make-docfile.c, however, someone on this list
> probably can provide quick answer to this puzzle before I solve it.
> What's really strange is out of all those elc files following files
> are seemingly and deliberately left as el files.
> 
> cus-start.el, loadup.el, loaddefs.el, bindings.el,
> international/mule-conf.el, paths.el, version.el

There is a comment in make-docfile.c that says that docstrings in .el
files must start with a backslash and newline immediately after the
opening double quote.  The files listed above (should) have docstrings
that comply with that requirement.

I tried running make-docfile on just simple.el, and only one docstring
was produced (for previous-complete-history-element), which is
consistent with that comment.



-- 
Jason Rumney


_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-12 18:57                   ` Jason Rumney
@ 2002-02-12 19:48                     ` Tak Ota
  2002-02-13  5:43                       ` Eli Zaretskii
  2002-02-13 19:50                       ` Jason Rumney
  2002-02-14  3:11                     ` Richard Stallman
  1 sibling, 2 replies; 28+ messages in thread
From: Tak Ota @ 2002-02-12 19:48 UTC (permalink / raw)
  Cc: eliz, lektu, emacs-devel, andrewi

12 Feb 2002 18:57:58 +0000: Jason Rumney <jasonr@gnu.org> wrote:

> There is a comment in make-docfile.c that says that docstrings in .el
> files must start with a backslash and newline immediately after the
> opening double quote.  The files listed above (should) have docstrings
> that comply with that requirement.
> 
> I tried running make-docfile on just simple.el, and only one docstring
> was produced (for previous-complete-history-element), which is
> consistent with that comment.

I've just finished reading make-docfile.c.  You are absolutely right.
I did the same experiment, running make-docfile manually on simple.el,
and got surprised.  And the source file is requesting the sequence
`dquote bslash newline' as the beginning of the valid doc string in
case of el files.  I don't think this is right.  Starting doc string
that way is only optional I believe.

Since read_c_string_or_comment takes care of line continuation
(bslash at the end of line) there is really no need of handling the
very first continuation in a special manner in the individual cases.

I propose the following patch.  It corrects the problem and the code
becomes cleaner too.

-Tak

*** lib-src/make-docfile.c.orig	Sat Jan  5 15:37:58 2002
--- lib-src/make-docfile.c	Tue Feb 12 11:28:01 2002
***************
*** 911,925 ****
  	  else
  	    while (c != ')')
  	      c = getc (infile);
- 	  skip_white (infile);
  
! 	  /* If the next three characters aren't `dquote bslash newline'
! 	     then we're not reading a docstring.
! 	   */
! 	  if ((c = getc (infile)) != '"'
! 	      || (c = getc (infile)) != '\\'
! 	      || ((c = getc (infile)) != '\n' && c != '\r'))
! 	    {
  #ifdef DEBUG
  	      fprintf (stderr, "## non-docstring in %s (%s)\n",
  		       buffer, filename);
--- 911,920 ----
  	  else
  	    while (c != ')')
  	      c = getc (infile);
  
! 	  skip_white (infile);
! 	  if ((c = getc (infile)) != '\"')
!             {
  #ifdef DEBUG
  	      fprintf (stderr, "## non-docstring in %s (%s)\n",
  		       buffer, filename);
***************
*** 931,954 ****
        else if (! strcmp (buffer, "defvar")
  	       || ! strcmp (buffer, "defconst"))
  	{
- 	  char c1 = 0, c2 = 0;
  	  type = 'V';
  	  read_lisp_symbol (infile, buffer);
  
  	  if (saved_string == 0)
  	    {
! 
! 	      /* Skip until the end of line; remember two previous chars.  */
! 	      while (c != '\n' && c != '\r' && c >= 0)
! 		{
! 		  c2 = c1;
! 		  c1 = c;
! 		  c = getc (infile);
! 		}
! 
! 	      /* If two previous characters were " and \,
! 		 this is a doc string.  Otherwise, there is none.  */
! 	      if (c2 != '"' || c1 != '\\')
  		{
  #ifdef DEBUG
  		  fprintf (stderr, "## non-docstring in %s (%s)\n",
--- 926,938 ----
        else if (! strcmp (buffer, "defvar")
  	       || ! strcmp (buffer, "defconst"))
  	{
  	  type = 'V';
  	  read_lisp_symbol (infile, buffer);
  
  	  if (saved_string == 0)
  	    {
!               skip_white (infile);
!               if ((c = getc (infile)) != '\"')
  		{
  #ifdef DEBUG
  		  fprintf (stderr, "## non-docstring in %s (%s)\n",
***************
*** 961,967 ****
  
        else if (! strcmp (buffer, "custom-declare-variable"))
  	{
- 	  char c1 = 0, c2 = 0;
  	  type = 'V';
  
  	  c = getc (infile);
--- 945,950 ----
***************
*** 997,1013 ****
  
  	  if (saved_string == 0)
  	    {
! 	      /* Skip to end of line; remember the two previous chars.  */
! 	      while (c != '\n' && c != '\r' && c >= 0)
! 		{
! 		  c2 = c1;
! 		  c1 = c;
! 		  c = getc (infile);
! 		}
! 
! 	      /* If two previous characters were " and \,
! 		 this is a doc string.  Otherwise, there is none.  */
! 	      if (c2 != '"' || c1 != '\\')
  		{
  #ifdef DEBUG
  		  fprintf (stderr, "## non-docstring in %s (%s)\n",
--- 980,987 ----
  
  	  if (saved_string == 0)
  	    {
!               skip_white (infile);
!               if ((c = getc (infile)) != '\"')
  		{
  #ifdef DEBUG
  		  fprintf (stderr, "## non-docstring in %s (%s)\n",
***************
*** 1020,1026 ****
  
        else if (! strcmp (buffer, "fset") || ! strcmp (buffer, "defalias"))
  	{
- 	  char c1 = 0, c2 = 0;
  	  type = 'F';
  
  	  c = getc (infile);
--- 994,999 ----
***************
*** 1054,1070 ****
  
  	  if (saved_string == 0)
  	    {
! 	      /* Skip to end of line; remember the two previous chars.  */
! 	      while (c != '\n' && c != '\r' && c >= 0)
! 		{
! 		  c2 = c1;
! 		  c1 = c;
! 		  c = getc (infile);
! 		}
! 
! 	      /* If two previous characters were " and \,
! 		 this is a doc string.  Otherwise, there is none.  */
! 	      if (c2 != '"' || c1 != '\\')
  		{
  #ifdef DEBUG
  		  fprintf (stderr, "## non-docstring in %s (%s)\n",
--- 1027,1034 ----
  
  	  if (saved_string == 0)
  	    {
!               skip_white (infile);
!               if ((c = getc (infile)) != '\"')
  		{
  #ifdef DEBUG
  		  fprintf (stderr, "## non-docstring in %s (%s)\n",
***************
*** 1117,1129 ****
  	  skip_white (infile);
  
  	  if (saved_string == 0)
! 	    {
! 	      /* If the next three characters aren't `dquote bslash newline'
! 		 then we're not reading a docstring.  */
! 	      if ((c = getc (infile)) != '"'
! 		  || (c = getc (infile)) != '\\'
! 		  || ((c = getc (infile)) != '\n' && c != '\r'))
! 		{
  #ifdef DEBUG
  		  fprintf (stderr, "## non-docstring in %s (%s)\n",
  			   buffer, filename);
--- 1081,1090 ----
  	  skip_white (infile);
  
  	  if (saved_string == 0)
!             {
!               skip_white (infile);
!               if ((c = getc (infile)) != '\"')
!                 {
  #ifdef DEBUG
  		  fprintf (stderr, "## non-docstring in %s (%s)\n",
  			   buffer, filename);
***************
*** 1152,1159 ****
  	 dynamic doc string in saved_string
  	 or gobble a doc string from the input file.
  
! 	 In the latter case, the opening quote (and leading
! 	 backslash-newline) have already been read.  */
  
        putc (037, outfile);
        putc (type, outfile);
--- 1113,1120 ----
  	 dynamic doc string in saved_string
  	 or gobble a doc string from the input file.
  
! 	 In the latter case, the opening quote has already been
! 	 read.  */
  
        putc (037, outfile);
        putc (type, outfile);

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-12 19:48                     ` Tak Ota
@ 2002-02-13  5:43                       ` Eli Zaretskii
  2002-02-13  6:01                         ` Tak Ota
  2002-02-13 13:40                         ` Andreas Schwab
  2002-02-13 19:50                       ` Jason Rumney
  1 sibling, 2 replies; 28+ messages in thread
From: Eli Zaretskii @ 2002-02-13  5:43 UTC (permalink / raw)
  Cc: jasonr, lektu, emacs-devel, andrewi


On Tue, 12 Feb 2002, Tak Ota wrote:

> I did the same experiment, running make-docfile manually on simple.el,
> and got surprised.  And the source file is requesting the sequence
> `dquote bslash newline' as the beginning of the valid doc string in
> case of el files.  I don't think this is right.  Starting doc string
> that way is only optional I believe.

Please make sure that any changes you make in this don't break 
loaddefs.el.  I believe loaddefs is the reason for that requirement of 
how the doc string should begin (since loaddefs is generated by a 
program, there's no problem satisfying that requirement in that case).  I 
imagine that there was some reason to require such a format, in which 
case we should avoid breaking that.

Richard, do you recall why this format was required?

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-13  5:43                       ` Eli Zaretskii
@ 2002-02-13  6:01                         ` Tak Ota
  2002-02-13 13:40                         ` Andreas Schwab
  1 sibling, 0 replies; 28+ messages in thread
From: Tak Ota @ 2002-02-13  6:01 UTC (permalink / raw)
  Cc: jasonr, lektu, emacs-devel, andrewi

Wed, 13 Feb 2002 07:43:56 +0200 (IST): Eli Zaretskii <eliz@is.elta.co.il> wrote:

> On Tue, 12 Feb 2002, Tak Ota wrote:
> 
> > I did the same experiment, running make-docfile manually on simple.el,
> > and got surprised.  And the source file is requesting the sequence
> > `dquote bslash newline' as the beginning of the valid doc string in
> > case of el files.  I don't think this is right.  Starting doc string
> > that way is only optional I believe.
> 
> Please make sure that any changes you make in this don't break 
> loaddefs.el.  I believe loaddefs is the reason for that requirement of 
> how the doc string should begin (since loaddefs is generated by a 
> program, there's no problem satisfying that requirement in that case).  I 
> imagine that there was some reason to require such a format, in which 
> case we should avoid breaking that.

Sure, the change I submitted for make-docfile.c does not change any
doc strings, thus I believe does not affect loaddefs.el either.  It
only changes how to find the doc strings, including from loaddefs.el.

And yes, it must be made clear why those constraints I removed from
make-docfile.c were there before.

-Tak

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-13  5:43                       ` Eli Zaretskii
  2002-02-13  6:01                         ` Tak Ota
@ 2002-02-13 13:40                         ` Andreas Schwab
  2002-02-13 14:23                           ` Eli Zaretskii
  1 sibling, 1 reply; 28+ messages in thread
From: Andreas Schwab @ 2002-02-13 13:40 UTC (permalink / raw)
  Cc: Tak Ota, jasonr, lektu, emacs-devel, andrewi

Eli Zaretskii <eliz@is.elta.co.il> writes:

|> On Tue, 12 Feb 2002, Tak Ota wrote:
|> 
|> > I did the same experiment, running make-docfile manually on simple.el,
|> > and got surprised.  And the source file is requesting the sequence
|> > `dquote bslash newline' as the beginning of the valid doc string in
|> > case of el files.  I don't think this is right.  Starting doc string
|> > that way is only optional I believe.
|> 
|> Please make sure that any changes you make in this don't break 
|> loaddefs.el.  I believe loaddefs is the reason for that requirement of 
|> how the doc string should begin (since loaddefs is generated by a 
|> program, there's no problem satisfying that requirement in that case).  I 
|> imagine that there was some reason to require such a format, in which 
|> case we should avoid breaking that.
|> 
|> Richard, do you recall why this format was required?

I'd guess it's just so that you don't need a full Lisp parser in
make-docfile.  Especially for defvar there can be an arbitrary lisp
expression before the doc string, which you would have to skip
carefully.  With the current format you can just skip to end of line and
identify the doc string immediately.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@suse.de
SuSE GmbH, Deutschherrnstr. 15-19, D-90429 Nürnberg
Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-13 13:40                         ` Andreas Schwab
@ 2002-02-13 14:23                           ` Eli Zaretskii
  0 siblings, 0 replies; 28+ messages in thread
From: Eli Zaretskii @ 2002-02-13 14:23 UTC (permalink / raw)
  Cc: Tak Ota, jasonr, lektu, emacs-devel, andrewi


On Wed, 13 Feb 2002, Andreas Schwab wrote:

> I'd guess it's just so that you don't need a full Lisp parser in
> make-docfile.

Yes, it could be.  If that's the reason, we should make sure we don't 
break that with the suggested changes.

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-12  8:35               ` Eli Zaretskii
  2002-02-12 14:23                 ` Tak Ota
@ 2002-02-13 15:37                 ` Richard Stallman
  1 sibling, 0 replies; 28+ messages in thread
From: Richard Stallman @ 2002-02-13 15:37 UTC (permalink / raw)
  Cc: Takaaki.Ota, lektu, emacs-devel, andrewi

    > I don't know much about how make-docfile operates
    > but it obviously expects some .elc files instead of .el files.

    Could you please see why is this so?  Is it perhaps an issue with
    binary vs text reads?

As I recall, the args to make-docfile are names of .elc files
but make-docfile actually reads the source files instead.

I think the reason for this was that src/Makefile needs to have
a list of those .elc files for some other reason.
This avoids the need to have two parallel lists,
one of .el files and one of .elc files.
GNU Make could transform one of those lists into the other
but we don't want to require use of GNU Make.

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-12 19:48                     ` Tak Ota
  2002-02-13  5:43                       ` Eli Zaretskii
@ 2002-02-13 19:50                       ` Jason Rumney
  2002-02-13 20:22                         ` Tak Ota
  2002-02-13 21:00                         ` Tak Ota
  1 sibling, 2 replies; 28+ messages in thread
From: Jason Rumney @ 2002-02-13 19:50 UTC (permalink / raw)
  Cc: eliz, lektu, emacs-devel, andrewi

Tak Ota <Takaaki.Ota@am.sony.com> writes:

> --- lib-src/make-docfile.c	Tue Feb 12 11:28:01 2002
> ***************
> *** 911,925 ****
>   	  else
>   	    while (c != ')')
>   	      c = getc (infile);
> - 	  skip_white (infile);
>   
> ! 	  /* If the next three characters aren't `dquote bslash newline'
> ! 	     then we're not reading a docstring.
> ! 	   */
> ! 	  if ((c = getc (infile)) != '"'
> ! 	      || (c = getc (infile)) != '\\'
> ! 	      || ((c = getc (infile)) != '\n' && c != '\r'))
> ! 	    {
>   #ifdef DEBUG
>   	      fprintf (stderr, "## non-docstring in %s (%s)\n",
>   		       buffer, filename);
> --- 911,920 ----
>   	  else
>   	    while (c != ')')
>   	      c = getc (infile);
>   
> ! 	  skip_white (infile);
> ! 	  if ((c = getc (infile)) != '\"')
> !             {
>   #ifdef DEBUG
>   	      fprintf (stderr, "## non-docstring in %s (%s)\n",
>   		       buffer, filename);


Be careful that the following does the right thing:

    (defvar string-variable "String value" "\
    This is the documentation for a string variable.")


That seems like the only logical reason for the current convention.


-- 
Jason Rumney


_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-13 19:50                       ` Jason Rumney
@ 2002-02-13 20:22                         ` Tak Ota
  2002-02-13 21:02                           ` Jason Rumney
  2002-02-13 21:00                         ` Tak Ota
  1 sibling, 1 reply; 28+ messages in thread
From: Tak Ota @ 2002-02-13 20:22 UTC (permalink / raw)
  Cc: eliz, lektu, emacs-devel, andrewi

13 Feb 2002 19:50:17 +0000: Jason Rumney <jasonr@gnu.org> wrote:

> Tak Ota <Takaaki.Ota@am.sony.com> writes:
> 
> > --- lib-src/make-docfile.c	Tue Feb 12 11:28:01 2002
> > ***************
> > *** 911,925 ****
> >   	  else
> >   	    while (c != ')')
> >   	      c = getc (infile);
> > - 	  skip_white (infile);
> >   
> > ! 	  /* If the next three characters aren't `dquote bslash newline'
> > ! 	     then we're not reading a docstring.
> > ! 	   */
> > ! 	  if ((c = getc (infile)) != '"'
> > ! 	      || (c = getc (infile)) != '\\'
> > ! 	      || ((c = getc (infile)) != '\n' && c != '\r'))
> > ! 	    {
> >   #ifdef DEBUG
> >   	      fprintf (stderr, "## non-docstring in %s (%s)\n",
> >   		       buffer, filename);
> > --- 911,920 ----
> >   	  else
> >   	    while (c != ')')
> >   	      c = getc (infile);
> >   
> > ! 	  skip_white (infile);
> > ! 	  if ((c = getc (infile)) != '\"')
> > !             {
> >   #ifdef DEBUG
> >   	      fprintf (stderr, "## non-docstring in %s (%s)\n",
> >   		       buffer, filename);
> 
> 
> Be careful that the following does the right thing:
> 
>     (defvar string-variable "String value" "\
>     This is the documentation for a string variable.")
> 
> 
> That seems like the only logical reason for the current convention.

But my point is that they are all eventually processed by
`read_c_string_or_comment' later, which takes care of backslash
continuation no matter it is the very first thing in the string or in
the middle of it.

The old code is simply enforcing doc string to begin with the line
continuation.  Anything else is rejected.

-Tak

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-13 19:50                       ` Jason Rumney
  2002-02-13 20:22                         ` Tak Ota
@ 2002-02-13 21:00                         ` Tak Ota
  1 sibling, 0 replies; 28+ messages in thread
From: Tak Ota @ 2002-02-13 21:00 UTC (permalink / raw)
  Cc: eliz, lektu, emacs-devel, andrewi

I now see the point of your advice though you should have quoted the
following part instead of the one you picked.

-Tak

> *** 931,954 ****
>         else if (! strcmp (buffer, "defvar")
>   	       || ! strcmp (buffer, "defconst"))
>   	{
> - 	  char c1 = 0, c2 = 0;
>   	  type = 'V';
>   	  read_lisp_symbol (infile, buffer);
>   
>   	  if (saved_string == 0)
>   	    {
> ! 
> ! 	      /* Skip until the end of line; remember two previous chars.  */
> ! 	      while (c != '\n' && c != '\r' && c >= 0)
> ! 		{
> ! 		  c2 = c1;
> ! 		  c1 = c;
> ! 		  c = getc (infile);
> ! 		}
> ! 
> ! 	      /* If two previous characters were " and \,
> ! 		 this is a doc string.  Otherwise, there is none.  */
> ! 	      if (c2 != '"' || c1 != '\\')
>   		{
>   #ifdef DEBUG
>   		  fprintf (stderr, "## non-docstring in %s (%s)\n",
> --- 926,938 ----
>         else if (! strcmp (buffer, "defvar")
>   	       || ! strcmp (buffer, "defconst"))
>   	{
>   	  type = 'V';
>   	  read_lisp_symbol (infile, buffer);
>   
>   	  if (saved_string == 0)
>   	    {
> !               skip_white (infile);
> !               if ((c = getc (infile)) != '\"')
>   		{
>   #ifdef DEBUG
>   		  fprintf (stderr, "## non-docstring in %s (%s)\n",






13 Feb 2002 19:50:17 +0000: Jason Rumney <jasonr@gnu.org> wrote:

> Tak Ota <Takaaki.Ota@am.sony.com> writes:
> 
> > --- lib-src/make-docfile.c	Tue Feb 12 11:28:01 2002
> > ***************
> > *** 911,925 ****
> >   	  else
> >   	    while (c != ')')
> >   	      c = getc (infile);
> > - 	  skip_white (infile);
> >   
> > ! 	  /* If the next three characters aren't `dquote bslash newline'
> > ! 	     then we're not reading a docstring.
> > ! 	   */
> > ! 	  if ((c = getc (infile)) != '"'
> > ! 	      || (c = getc (infile)) != '\\'
> > ! 	      || ((c = getc (infile)) != '\n' && c != '\r'))
> > ! 	    {
> >   #ifdef DEBUG
> >   	      fprintf (stderr, "## non-docstring in %s (%s)\n",
> >   		       buffer, filename);
> > --- 911,920 ----
> >   	  else
> >   	    while (c != ')')
> >   	      c = getc (infile);
> >   
> > ! 	  skip_white (infile);
> > ! 	  if ((c = getc (infile)) != '\"')
> > !             {
> >   #ifdef DEBUG
> >   	      fprintf (stderr, "## non-docstring in %s (%s)\n",
> >   		       buffer, filename);
> 
> 
> Be careful that the following does the right thing:
> 
>     (defvar string-variable "String value" "\
>     This is the documentation for a string variable.")
> 
> 
> That seems like the only logical reason for the current convention.
> 
> 
> -- 
> Jason Rumney

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-13 20:22                         ` Tak Ota
@ 2002-02-13 21:02                           ` Jason Rumney
  2002-02-14  7:36                             ` Tak Ota
  0 siblings, 1 reply; 28+ messages in thread
From: Jason Rumney @ 2002-02-13 21:02 UTC (permalink / raw)
  Cc: eliz, lektu, emacs-devel, andrewi

Tak Ota <Takaaki.Ota@am.sony.com> writes:


> > Be careful that the following does the right thing:
> > 
> >     (defvar string-variable "String value" "\
> >     This is the documentation for a string variable.")
> > 
> > 
> > That seems like the only logical reason for the current convention.
> 
> But my point is that they are all eventually processed by
> `read_c_string_or_comment' later, which takes care of backslash

The backslash wasn't what I was concerned about. We need to make sure
that "String value" is not picked up as a documentation string in the
above case.  That is the only reason I can think of where the current
convention might be useful.


-- 
Jason Rumney


_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-12 18:57                   ` Jason Rumney
  2002-02-12 19:48                     ` Tak Ota
@ 2002-02-14  3:11                     ` Richard Stallman
  2002-02-14 15:13                       ` Tak Ota
  1 sibling, 1 reply; 28+ messages in thread
From: Richard Stallman @ 2002-02-14  3:11 UTC (permalink / raw)
  Cc: Takaaki.Ota, eliz, lektu, emacs-devel, andrewi

I see my recollection was mistaken: make-docfile reads the binary
files directly.  Sorry if I caused any confusion.

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-13 21:02                           ` Jason Rumney
@ 2002-02-14  7:36                             ` Tak Ota
  2002-02-15 10:36                               ` Richard Stallman
  0 siblings, 1 reply; 28+ messages in thread
From: Tak Ota @ 2002-02-14  7:36 UTC (permalink / raw)
  Cc: eliz, lektu, emacs-devel, andrewi

13 Feb 2002 21:02:42 +0000: Jason Rumney <jasonr@gnu.org> wrote:

> > > Be careful that the following does the right thing:
> > > 
> > >     (defvar string-variable "String value" "\
> > >     This is the documentation for a string variable.")
> > > 
> > > 
> > > That seems like the only logical reason for the current convention.
> > 
> > But my point is that they are all eventually processed by
> > `read_c_string_or_comment' later, which takes care of backslash
> 
> The backslash wasn't what I was concerned about. We need to make sure
> that "String value" is not picked up as a documentation string in the
> above case.  That is the only reason I can think of where the current
> convention might be useful.

Thanks for the advice.  How about the change below?  It does more
elaborate lisp object parsing.  Also it consolidates some redundant
code repetitions.

-Tak


Index: make-docfile.c
===================================================================
RCS file: /cvsroot/emacs/emacs/lib-src/make-docfile.c,v
retrieving revision 1.50
diff -u -r1.50 make-docfile.c
--- make-docfile.c	5 Jan 2002 23:37:58 -0000	1.50
+++ make-docfile.c	14 Feb 2002 07:33:43 -0000
@@ -323,7 +323,7 @@
    at the beginning of a line will be removed, and *SAW_USAGE set to
    true if any were encountered.  */
 
-int
+static int
 read_c_string_or_comment (infile, printflag, comment, saw_usage)
      FILE *infile;
      int printflag;
@@ -414,7 +414,7 @@
 /* Write to file OUT the argument names of function FUNC, whose text is in BUF.
    MINARGS and MAXARGS are the minimum and maximum number of arguments.  */
 
-void
+static void
 write_c_args (out, func, buf, minargs, maxargs)
      FILE *out;
      char *func, *buf;
@@ -501,7 +501,7 @@
    Looks for DEFUN constructs such as are defined in ../src/lisp.h.
    Accepts any word starting DEF... so it finds DEFSIMPLE and DEFPRED.  */
 
-int
+static int
 scan_c_file (filename, mode)
      char *filename, *mode;
 {
@@ -765,7 +765,7 @@
  An entry is output only if DOCSTRING has \ newline just after the opening "
  */
 
-void
+static void
 skip_white (infile)
      FILE *infile;
 {
@@ -775,10 +775,10 @@
   ungetc (c, infile);
 }
 
-void
-read_lisp_symbol (infile, buffer)
+static void
+read_lisp_symbol (infile, buffer, filename)
      FILE *infile;
-     char *buffer;
+     char *buffer, *filename;
 {
   char c;
   char *fillp = buffer;
@@ -789,7 +789,7 @@
       c = getc (infile);
       if (c == '\\')
 	*(++fillp) = getc (infile);
-      else if (c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '(' || c == ')')
+      else if (c == ' ' || c == '\t' || c == '\n' || c == '\r' || c == '(' || c == ')' || c == '[' || c == ']')
 	{
 	  ungetc (c, infile);
 	  *fillp = 0;
@@ -800,11 +800,138 @@
     }
 
   if (! buffer[0])
-    fprintf (stderr, "## expected a symbol, got '%c'\n", c);
+    fprintf (stderr, "## expected a symbol, got '%c' in %s\n", c, filename);
 
   skip_white (infile);
 }
 
+static int
+read_quoted_lisp_symbol (infile, buffer, filename, form)
+     FILE *infile;
+     char *buffer, *filename, *form;
+{
+  register int c;
+
+  c = getc (infile);
+  if (c == '\'')
+    read_lisp_symbol (infile, buffer, filename);
+  else
+    {
+      if (c != '(')
+        {
+          fprintf (stderr,
+                   "## unparsable name in %s in %s\n",
+                   form, filename);
+          return 1;
+        }
+      read_lisp_symbol (infile, buffer, filename);
+      if (strcmp (buffer, "quote"))
+        {
+          fprintf (stderr,
+                   "## unparsable name in %s in %s\n",
+                   form, filename);
+          return 1;
+        }
+      read_lisp_symbol (infile, buffer, filename);
+      c = getc (infile);
+      if (c != ')')
+        {
+          fprintf (stderr,
+                   "## unparsable quoted name in %s in %s\n",
+                   form, filename);
+          return 1;
+        }
+    }
+  return 0;
+}
+
+static int
+read_lisp_char (infile)
+     FILE *infile;
+{
+  int c;
+
+ continuation:
+  if ((c = getc (infile)) != '\\')
+    return c;
+
+  switch (c = getc (infile))
+    {
+    case '\n': case '\r':
+      goto continuation;
+    case 'a': return 7;
+    case 'b': return 8;
+    case 't': return 9;
+    case 'n': return 10;
+    case 'v': return 11;
+    case 'f': return 12;
+    case 'r': return 13;
+    case 'e': return 27;
+    case '\\': return 92;
+    case 'd': return 127;
+    case 'C':
+      if ((c = getc (infile)) != '-')
+        return c; /* ignore the syntax error */
+      /* follow through */
+    case '^':
+      c = getc (infile);
+      return ((c < 'a' ? c : c - 32) - '@') & 127;
+    }
+  return c;
+}
+
+static int
+skip_lisp_object (infile, filename)
+     FILE *infile;
+     char *filename;
+{
+  int c;
+
+  skip_white (infile);
+  c = getc (infile);
+  switch (c)
+    {
+    case EOF:
+      return 0;
+    case '?':
+      read_lisp_char (infile);
+      return 1;
+    case '\'':
+      return skip_lisp_object (infile, filename);
+    case '\"':
+      do
+        {
+          c = read_lisp_char (infile);
+        }
+      while (c != '\"' && c != EOF);
+      return 1;
+    case '(': case '[':
+      {
+        int term = c == '(' ? ')' : ']';
+        while (1)
+          {
+            skip_white (infile);
+            c = getc (infile);
+            if (c == term)
+              return 1;
+            if (c == EOF)
+              return 0;
+            ungetc (c, infile);
+            skip_lisp_object (infile, filename);
+          }
+      }
+    case ')': case ']':
+      return 0;
+    default:
+      ungetc (c, infile);
+      {
+        char buffer[BUFSIZ];
+        read_lisp_symbol (infile, buffer, filename);
+      }
+      return 1;
+    }
+}
+
 int
 scan_lisp_file (filename, mode)
      char *filename, *mode;
@@ -880,46 +1007,21 @@
       if (c != '(')
 	continue;
 
-      read_lisp_symbol (infile, buffer);
+      read_lisp_symbol (infile, buffer, filename);
 
       if (! strcmp (buffer, "defun")
 	  || ! strcmp (buffer, "defmacro")
 	  || ! strcmp (buffer, "defsubst"))
 	{
 	  type = 'F';
-	  read_lisp_symbol (infile, buffer);
+	  read_lisp_symbol (infile, buffer, filename);
 
-	  /* Skip the arguments: either "nil" or a list in parens */
+	  /* Skip the arguments */
+          skip_lisp_object (infile, filename);
 
-	  c = getc (infile);
-	  if (c == 'n') /* nil */
-	    {
-	      if ((c = getc (infile)) != 'i'
-		  || (c = getc (infile)) != 'l')
-		{
-		  fprintf (stderr, "## unparsable arglist in %s (%s)\n",
-			   buffer, filename);
-		  continue;
-		}
-	    }
-	  else if (c != '(')
-	    {
-	      fprintf (stderr, "## unparsable arglist in %s (%s)\n",
-		       buffer, filename);
-	      continue;
-	    }
-	  else
-	    while (c != ')')
-	      c = getc (infile);
 	  skip_white (infile);
-
-	  /* If the next three characters aren't `dquote bslash newline'
-	     then we're not reading a docstring.
-	   */
-	  if ((c = getc (infile)) != '"'
-	      || (c = getc (infile)) != '\\'
-	      || ((c = getc (infile)) != '\n' && c != '\r'))
-	    {
+	  if ((c = getc (infile)) != '\"')
+            {
 #ifdef DEBUG
 	      fprintf (stderr, "## non-docstring in %s (%s)\n",
 		       buffer, filename);
@@ -931,24 +1033,16 @@
       else if (! strcmp (buffer, "defvar")
 	       || ! strcmp (buffer, "defconst"))
 	{
-	  char c1 = 0, c2 = 0;
 	  type = 'V';
-	  read_lisp_symbol (infile, buffer);
+	  read_lisp_symbol (infile, buffer, filename);
 
 	  if (saved_string == 0)
 	    {
+              /* Skip the value */
+              skip_lisp_object (infile, filename);
 
-	      /* Skip until the end of line; remember two previous chars.  */
-	      while (c != '\n' && c != '\r' && c >= 0)
-		{
-		  c2 = c1;
-		  c1 = c;
-		  c = getc (infile);
-		}
-
-	      /* If two previous characters were " and \,
-		 this is a doc string.  Otherwise, there is none.  */
-	      if (c2 != '"' || c1 != '\\')
+              skip_white (infile);
+              if ((c = getc (infile)) != '\"')
 		{
 #ifdef DEBUG
 		  fprintf (stderr, "## non-docstring in %s (%s)\n",
@@ -961,53 +1055,15 @@
 
       else if (! strcmp (buffer, "custom-declare-variable"))
 	{
-	  char c1 = 0, c2 = 0;
 	  type = 'V';
 
-	  c = getc (infile);
-	  if (c == '\'')
-	    read_lisp_symbol (infile, buffer);
-	  else
-	    {
-	      if (c != '(')
-		{
-		  fprintf (stderr,
-			   "## unparsable name in custom-declare-variable in %s\n",
-			   filename);
-		  continue;
-		}
-	      read_lisp_symbol (infile, buffer);
-	      if (strcmp (buffer, "quote"))
-		{
-		  fprintf (stderr,
-			   "## unparsable name in custom-declare-variable in %s\n",
-			   filename);
-		  continue;
-		}
-	      read_lisp_symbol (infile, buffer);
-	      c = getc (infile);
-	      if (c != ')')
-		{
-		  fprintf (stderr,
-			   "## unparsable quoted name in custom-declare-variable in %s\n",
-			   filename);
-		  continue;
-		}
-	    }
+          if (read_quoted_lisp_symbol (infile, buffer, filename, "custom-declare-variable"))
+            continue;
 
 	  if (saved_string == 0)
 	    {
-	      /* Skip to end of line; remember the two previous chars.  */
-	      while (c != '\n' && c != '\r' && c >= 0)
-		{
-		  c2 = c1;
-		  c1 = c;
-		  c = getc (infile);
-		}
-
-	      /* If two previous characters were " and \,
-		 this is a doc string.  Otherwise, there is none.  */
-	      if (c2 != '"' || c1 != '\\')
+              skip_white (infile);
+              if ((c = getc (infile)) != '\"')
 		{
 #ifdef DEBUG
 		  fprintf (stderr, "## non-docstring in %s (%s)\n",
@@ -1020,51 +1076,15 @@
 
       else if (! strcmp (buffer, "fset") || ! strcmp (buffer, "defalias"))
 	{
-	  char c1 = 0, c2 = 0;
 	  type = 'F';
 
-	  c = getc (infile);
-	  if (c == '\'')
-	    read_lisp_symbol (infile, buffer);
-	  else
-	    {
-	      if (c != '(')
-		{
-		  fprintf (stderr, "## unparsable name in fset in %s\n",
-			   filename);
-		  continue;
-		}
-	      read_lisp_symbol (infile, buffer);
-	      if (strcmp (buffer, "quote"))
-		{
-		  fprintf (stderr, "## unparsable name in fset in %s\n",
-			   filename);
-		  continue;
-		}
-	      read_lisp_symbol (infile, buffer);
-	      c = getc (infile);
-	      if (c != ')')
-		{
-		  fprintf (stderr,
-			   "## unparsable quoted name in fset in %s\n",
-			   filename);
-		  continue;
-		}
-	    }
+          if (read_quoted_lisp_symbol (infile, buffer, filename, "fset"))
+            continue;
 
 	  if (saved_string == 0)
 	    {
-	      /* Skip to end of line; remember the two previous chars.  */
-	      while (c != '\n' && c != '\r' && c >= 0)
-		{
-		  c2 = c1;
-		  c1 = c;
-		  c = getc (infile);
-		}
-
-	      /* If two previous characters were " and \,
-		 this is a doc string.  Otherwise, there is none.  */
-	      if (c2 != '"' || c1 != '\\')
+              skip_white (infile);
+              if ((c = getc (infile)) != '\"')
 		{
 #ifdef DEBUG
 		  fprintf (stderr, "## non-docstring in %s (%s)\n",
@@ -1078,34 +1098,10 @@
       else if (! strcmp (buffer, "autoload"))
 	{
 	  type = 'F';
-	  c = getc (infile);
-	  if (c == '\'')
-	    read_lisp_symbol (infile, buffer);
-	  else
-	    {
-	      if (c != '(')
-		{
-		  fprintf (stderr, "## unparsable name in autoload in %s\n",
-			   filename);
-		  continue;
-		}
-	      read_lisp_symbol (infile, buffer);
-	      if (strcmp (buffer, "quote"))
-		{
-		  fprintf (stderr, "## unparsable name in autoload in %s\n",
-			   filename);
-		  continue;
-		}
-	      read_lisp_symbol (infile, buffer);
-	      c = getc (infile);
-	      if (c != ')')
-		{
-		  fprintf (stderr,
-			   "## unparsable quoted name in autoload in %s\n",
-			   filename);
-		  continue;
-		}
-	    }
+
+          if (read_quoted_lisp_symbol (infile, buffer, filename, "autoload"))
+            continue;
+
 	  skip_white (infile);
 	  if ((c = getc (infile)) != '\"')
 	    {
@@ -1117,13 +1113,10 @@
 	  skip_white (infile);
 
 	  if (saved_string == 0)
-	    {
-	      /* If the next three characters aren't `dquote bslash newline'
-		 then we're not reading a docstring.  */
-	      if ((c = getc (infile)) != '"'
-		  || (c = getc (infile)) != '\\'
-		  || ((c = getc (infile)) != '\n' && c != '\r'))
-		{
+            {
+              skip_white (infile);
+              if ((c = getc (infile)) != '\"')
+                {
 #ifdef DEBUG
 		  fprintf (stderr, "## non-docstring in %s (%s)\n",
 			   buffer, filename);
@@ -1152,8 +1145,8 @@
 	 dynamic doc string in saved_string
 	 or gobble a doc string from the input file.
 
-	 In the latter case, the opening quote (and leading
-	 backslash-newline) have already been read.  */
+	 In the latter case, the opening quote has already been
+	 read.  */
 
       putc (037, outfile);
       putc (type, outfile);

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-14  3:11                     ` Richard Stallman
@ 2002-02-14 15:13                       ` Tak Ota
  0 siblings, 0 replies; 28+ messages in thread
From: Tak Ota @ 2002-02-14 15:13 UTC (permalink / raw)
  Cc: jasonr, eliz, lektu, emacs-devel, andrewi

Wed, 13 Feb 2002 20:11:53 -0700 (MST): Richard Stallman <rms@gnu.org> wrote:

> I see my recollection was mistaken: make-docfile reads the binary
> files directly.  Sorry if I caused any confusion.

I want to withdraw the previous several attempts of make-docfile.c
modification.  I now prostrate myself before the old wisdom.  We
should leave those elc files for make-docfile as elc.  The effort to
make make-docfile.c a true lisp interpreter does not seem to pay
off.  It is redundant as well as unnecessary.

I think the (lisp) variable definition below should be reverted.

2001-11-30  Andrew Innes  <andrewi@gnu.org>

	* makefile.w32-in (FACE_SUPPORT):
	(MOUSE_SUPPORT):
	(FLOAT_SUPPORT):
	(WINNT_SUPPORT):
	(lisp): Reference .el files instead of .elc files, to simplify
	bootstrapping.
	($(DOC)): Change dependency to just `make-docfile'.

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-14  7:36                             ` Tak Ota
@ 2002-02-15 10:36                               ` Richard Stallman
  2002-02-15 20:36                                 ` Tak Ota
  0 siblings, 1 reply; 28+ messages in thread
From: Richard Stallman @ 2002-02-15 10:36 UTC (permalink / raw)
  Cc: jasonr, eliz, lektu, emacs-devel, andrewi

What is the reason for proposing these changes?
What problem are you trying to solve?
Is there no simpler solution?

A major change in make-docfile has substantial costs, but it won't
benefit users.  So if it isn't necessary, we shouldn't do it.


_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

* Re: lost argument and doc string
  2002-02-15 10:36                               ` Richard Stallman
@ 2002-02-15 20:36                                 ` Tak Ota
  0 siblings, 0 replies; 28+ messages in thread
From: Tak Ota @ 2002-02-15 20:36 UTC (permalink / raw)
  Cc: jasonr, eliz, lektu, emacs-devel, andrewi

Fri, 15 Feb 2002 03:36:33 -0700 (MST): Richard Stallman <rms@gnu.org> wrote:

> What is the reason for proposing these changes?
> What problem are you trying to solve?
> Is there no simpler solution?

The reason was to recover the lost arguments and doc string on NT
platform.  However I have withdrawn the proposal.  I now think the
Makefile should be corrected instead of make-docfile.c.

> A major change in make-docfile has substantial costs, but it won't
> benefit users.  So if it isn't necessary, we shouldn't do it.

I completely agree with you that we shouldn't do it.  Sorry for the
confusion.

-Tak

_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/emacs-devel


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

end of thread, other threads:[~2002-02-15 20:36 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-02-10  6:59 lost argument and doc string Tak Ota
2002-02-10 17:08 ` Eli Zaretskii
2002-02-10 17:32   ` Pavel Janík
2002-02-10 23:28     ` Tak Ota
2002-02-11  5:48       ` Pavel Janík
2002-02-11  5:48       ` Eli Zaretskii
2002-02-11 16:34         ` Juanma Barranquero
2002-02-11 19:37           ` Eli Zaretskii
2002-02-12  2:32             ` Tak Ota
2002-02-12  8:35               ` Eli Zaretskii
2002-02-12 14:23                 ` Tak Ota
2002-02-12 18:57                   ` Jason Rumney
2002-02-12 19:48                     ` Tak Ota
2002-02-13  5:43                       ` Eli Zaretskii
2002-02-13  6:01                         ` Tak Ota
2002-02-13 13:40                         ` Andreas Schwab
2002-02-13 14:23                           ` Eli Zaretskii
2002-02-13 19:50                       ` Jason Rumney
2002-02-13 20:22                         ` Tak Ota
2002-02-13 21:02                           ` Jason Rumney
2002-02-14  7:36                             ` Tak Ota
2002-02-15 10:36                               ` Richard Stallman
2002-02-15 20:36                                 ` Tak Ota
2002-02-13 21:00                         ` Tak Ota
2002-02-14  3:11                     ` Richard Stallman
2002-02-14 15:13                       ` Tak Ota
2002-02-13 15:37                 ` Richard Stallman
2002-02-11 18:48       ` Richard Stallman

Code repositories for project(s) associated with this external index

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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.